@mochabug/adapt-sdk 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/api.ts", "../../src/genproto/mochabugapis/adapt/graph/signal_data_pb.ts", "../../src/genproto/buf/validate/validate_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/signal_format_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/jtd_schema_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/vertex_metadata_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/exchange_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/transceiver_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/signal_descriptor_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/receiver_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/signal_binding_pb.ts", "../../src/genproto/mochabugapis/adapt/graph/transmitter_pb.ts", "../../src/genproto/mochabugapis/adapt/runtime/v1/runtime_pb.ts", "../../src/genproto/mochabugapis/adapt/automations/v1/automations_pb.ts", "../../src/genproto/google/api/annotations_pb.ts", "../../src/genproto/google/api/http_pb.ts", "../../src/genproto/google/api/client_pb.ts", "../../src/genproto/google/api/launch_stage_pb.ts", "../../src/genproto/mochabugapis/adapt/runtime/v1/store_pb.ts", "../../src/grpcweb.ts", "../../src/genproto/mochabugapis/adapt/runtime/v1/incoming_pb.ts"],
4
- "sourcesContent": ["// Copyright (c) 2023 mochabug AB. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n// this file except in compliance with the License. You may obtain a copy of the\n// License at http://www.apache.org/licenses/LICENSE-2.0\n// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n// MERCHANTABLITY OR NON-INFRINGEMENT.\n// See the Apache Version 2.0 License for specific language governing permissions\n// and limitations under the License.\n\nimport {\n create,\n enumFromJson,\n fromJson,\n JsonValue,\n toJson\n} from '@bufbuild/protobuf';\nimport {\n FieldMaskSchema,\n timestampDate,\n timestampFromDate,\n ValueJson,\n ValueSchema\n} from '@bufbuild/protobuf/wkt';\nimport { Client, Code, ConnectError, createClient } from '@connectrpc/connect';\nimport {\n SignalData,\n SignalDataSchema\n} from './genproto/mochabugapis/adapt/graph/signal_data_pb';\nimport {\n SignalFormatJson,\n SignalFormatSchema\n} from './genproto/mochabugapis/adapt/graph/signal_format_pb';\nimport {\n VertexMetadataJson,\n VertexMetadataSchema\n} from './genproto/mochabugapis/adapt/graph/vertex_metadata_pb';\nimport {\n ConfiguratorService,\n ExchangeOperation,\n ExecutorService,\n ListIncomingSignalsResponseJson,\n ListIncomingSignalsResponseSchema,\n Namespace,\n NamespaceJson,\n NamespaceSchema,\n PluginService,\n Token\n} from './genproto/mochabugapis/adapt/runtime/v1/runtime_pb';\nimport {\n ConditionalDeleteOp_Precondition,\n ConditionalDeleteOp_PreconditionSchema,\n ConditionalInsertOp_Precondition,\n ConditionalInsertOp_PreconditionSchema,\n GetValue,\n SelectOpJson,\n TimestampRangeSchema,\n WriteOperation,\n WriteOperationSchema\n} from './genproto/mochabugapis/adapt/runtime/v1/store_pb';\nimport { createGrpcWebTransport } from './grpcweb';\nimport {\n ConfiguratorEnvironment,\n Environment,\n ExecutorEnvironment\n} from './types';\n\nexport * from './genproto/mochabugapis/adapt/automations/v1/automations_pb';\nexport * from './genproto/mochabugapis/adapt/graph/exchange_pb';\nexport * from './genproto/mochabugapis/adapt/graph/jtd_schema_pb';\nexport * from './genproto/mochabugapis/adapt/graph/receiver_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_binding_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_data_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_descriptor_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_format_pb';\nexport * from './genproto/mochabugapis/adapt/graph/transceiver_pb';\nexport * from './genproto/mochabugapis/adapt/graph/transmitter_pb';\nexport * from './genproto/mochabugapis/adapt/graph/vertex_metadata_pb';\nexport * from './genproto/mochabugapis/adapt/runtime/v1/incoming_pb';\nexport * from './genproto/mochabugapis/adapt/runtime/v1/runtime_pb';\nexport * from './genproto/mochabugapis/adapt/runtime/v1/store_pb';\nexport * from './types';\nexport { Code, ConnectError };\nexport type { ValueJson };\n\n/**\n * Convert camelCase field names to snake_case for protocol buffer field masks\n */\nconst CAMEL_TO_SNAKE_MAP: Record<string, string> = {\n config: 'config',\n metadata: 'metadata',\n configuredServices: 'configured_services'\n};\n\nfunction toSnakeCase(camelCase: string): string {\n return CAMEL_TO_SNAKE_MAP[camelCase] ?? camelCase;\n}\n\n/**\n * Array representing asset directories.\n */\nexport type AssetDirectory = {\n /**\n * Name of the asset directory.\n */\n name: string;\n\n /**\n * Type of the asset (file or directory).\n */\n type: 'file' | 'directory';\n}[];\n\n/**\n * Represents the content of an asset file.\n */\nexport type AssetFile = {\n /**\n * Content of the asset file as a readable stream.\n */\n content: ReadableStream;\n\n /**\n * MIME type of the asset file.\n */\n mime: string;\n};\n\n/**\n * Base class for API interactions. Extended by specific API implementations.\n * Not intended for direct use.\n */\nexport class ApiBase {\n protected env: Environment;\n protected pluginService: Client<typeof PluginService>;\n protected pluginToken: string;\n\n /**\n * Initializes the ApiBase instance with environment settings and a plugin token.\n *\n * @param env - Environment configuration for API communication.\n * @param pluginToken - Token for plugin authentication.\n */\n constructor(env: Environment, pluginToken: string) {\n this.env = env;\n this.pluginToken = pluginToken;\n this.pluginService = createClient(\n PluginService,\n createGrpcWebTransport({\n fetcher: this.env.plugin,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', `Bearer ${this.pluginToken}`);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Retrieves a single plugin-scoped variable by its name.\n * Supports dot notation for nested variable names (e.g., 'api.credentials.key').\n *\n * @param name - The name of the variable (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the variable value (undefined if not found).\n *\n * @example\n * ```typescript\n * const apiUrl = await api.getSystemVariable<string>('api.url');\n * const nested = await api.getSystemVariable<string>('config.database.host');\n * ```\n */\n async getSystemVariable<T = ValueJson>(name: string): Promise<T> {\n const response = await this.pluginService.batchGetSystemVariables({\n names: [name]\n });\n const vares = response.items[name];\n return (vares ? toJson(ValueSchema, vares) : undefined) as T;\n }\n\n /**\n * Retrieves multiple plugin-scoped variables by their names with full type safety.\n * Supports dot notation for nested variable names.\n *\n * @template T - Record type mapping variable names to their expected types.\n * @param keys - Names of the variables to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping variable names to their typed values.\n * @throws {ConnectError} Code.InvalidArgument if keys array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const vars = await api.getSystemVariables<{\n * 'api.url': string;\n * 'api.timeout': number;\n * 'api.enabled': boolean;\n * }>('api.url', 'api.timeout', 'api.enabled');\n *\n * // Fully typed!\n * vars['api.url']; // string\n * vars['api.timeout']; // number\n * vars['api.enabled']; // boolean\n * ```\n */\n async getSystemVariables<T extends Record<string, any>>(\n ...keys: Array<keyof T & string>\n ): Promise<T> {\n const response = await this.pluginService.batchGetSystemVariables({\n names: keys\n });\n const res: Record<string, ValueJson> = {};\n for (const [key, value] of Object.entries(response.items)) {\n res[key] = toJson(ValueSchema, value);\n }\n return res as T;\n }\n\n /**\n * Retrieves a single user-scoped variable by its name.\n * Supports dot notation for nested variable names (e.g., 'user.preferences.theme').\n *\n * @param name - The name of the variable (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the user variable value (undefined if not found).\n *\n * @example\n * ```typescript\n * const theme = await api.getUserVariable<string>('user.preferences.theme');\n * const email = await api.getUserVariable<string>('user.email');\n * ```\n */\n async getUserVariable<T = ValueJson>(name: string): Promise<T> {\n const response = await this.pluginService.batchGetUserVariables({\n names: [name]\n });\n const vares = response.items[name];\n return (vares ? toJson(ValueSchema, vares) : undefined) as T;\n }\n\n /**\n * Retrieves multiple user-scoped variables by their names with full type safety.\n * Supports dot notation for nested variable names.\n *\n * @template T - Record type mapping variable names to their expected types.\n * @param keys - Names of the user variables to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping variable names to their typed values.\n * @throws {ConnectError} Code.InvalidArgument if keys array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const vars = await api.getUserVariables<{\n * 'user.email': string;\n * 'user.age': number;\n * 'user.verified': boolean;\n * }>('user.email', 'user.age', 'user.verified');\n *\n * // Fully typed!\n * vars['user.email']; // string\n * vars['user.age']; // number\n * vars['user.verified']; // boolean\n * ```\n */\n async getUserVariables<T extends Record<string, any>>(\n ...keys: Array<keyof T & string>\n ): Promise<T> {\n const response = await this.pluginService.batchGetUserVariables({\n names: keys\n });\n const res: Record<string, ValueJson> = {};\n for (const [key, value] of Object.entries(response.items)) {\n res[key] = toJson(ValueSchema, value);\n }\n return res as T;\n }\n\n /**\n * Retrieves a single user OAuth2 bearer token by its name.\n * Returns a Token object containing the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param name - The name of the user token (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the Token object (undefined if not found).\n * Token contains: { name, token, type, expires }\n *\n * @example\n * ```typescript\n * const githubToken = await api.getUserToken('github');\n * if (githubToken) {\n * console.log(githubToken.token, githubToken.type, githubToken.expires);\n * }\n * ```\n */\n async getUserToken(name: string): Promise<Token> {\n const response = await this.pluginService.batchGetUserTokens({\n names: [name]\n });\n return response.items[name];\n }\n\n /**\n * Retrieves multiple user OAuth2 bearer tokens by their names.\n * Each Token contains the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param names - Names of the user tokens to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping token names to their Token objects.\n * Each Token contains: { name, token, type, expires }\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const tokens = await api.getUserTokens('github', 'google');\n *\n * tokens['github']; // Token | undefined\n * tokens['google']; // Token | undefined\n * ```\n */\n async getUserTokens(...names: string[]): Promise<Record<string, Token>> {\n const response = await this.pluginService.batchGetUserTokens({\n names\n });\n return response.items;\n }\n\n /**\n * Retrieves a single plugin OAuth2 bearer token from a service account by its name.\n * Returns a Token object containing the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param name - The name of the plugin token (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the Token object (undefined if not found).\n * Token contains: { name, token, type, expires }\n *\n * @example\n * ```typescript\n * const serviceToken = await api.getSystemToken('service_account');\n * if (serviceToken) {\n * console.log(serviceToken.token, serviceToken.expires);\n * }\n * ```\n */\n async getSystemToken(name: string): Promise<Token> {\n const response = await this.pluginService.batchGetSystemTokens({\n names: [name]\n });\n return response.items[name];\n }\n\n /**\n * Retrieves multiple plugin OAuth2 bearer tokens from service accounts by their names.\n * Each Token contains the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param names - Names of the plugin tokens to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping token names to their Token objects.\n * Each Token contains: { name, token, type, expires }\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const tokens = await api.getSystemTokens('service_account', 'backup_service');\n *\n * tokens['service_account']; // Token | undefined\n * tokens['backup_service']; // Token | undefined\n * ```\n */\n async getSystemTokens(...names: string[]): Promise<Record<string, Token>> {\n const response = await this.pluginService.batchGetSystemTokens({\n names\n });\n return response.items;\n }\n\n /**\n * Creates a fetch function for user-level HTTP proxy requests.\n *\n * User services are vertex-level configurations where each user can provide\n * their own certificates, API keys, and credentials.\n *\n * @param name - The service name defined in vertex user_services\n * @returns A fetch function configured with HTTP proxy headers\n *\n * @example\n * ```typescript\n * const fetch = api.userHttpProxy(\"stripe_api\");\n * const res = await fetch(\"https://api.stripe.com/v1/charges\");\n * ```\n */\n userHttpProxy(name: string): typeof fetch {\n return (input: string | Request | URL, init?: RequestInit) => {\n const req = new Request(input, init);\n req.headers.set(\n 'X-Mochabug-Adapt-Plugin-HttpProxy-Token',\n `Bearer ${this.pluginToken}`\n );\n req.headers.set('X-Mochabug-Adapt-Plugin-HttpProxy-Path', `user:${name}`);\n req.headers.set('Host', new URL(req.url).host);\n\n return this.env.httpproxy.fetch(req);\n };\n }\n\n /**\n * Creates a fetch function for system-level HTTP proxy requests.\n *\n * System services are plugin-wide configurations shared across all vertices.\n * Configured once by plugin administrators.\n *\n * @param name - The service name defined in manifest system_services\n * @returns A fetch function configured with HTTP proxy headers\n *\n * @example\n * ```typescript\n * const fetch = api.systemHttpProxy(\"internal_api\");\n * const res = await fetch(\"https://internal.example.com/data\");\n * ```\n */\n systemHttpProxy(name: string): typeof fetch {\n return (input: string | Request | URL, init?: RequestInit) => {\n const req = new Request(input, init);\n req.headers.set(\n 'X-Mochabug-Adapt-Plugin-HttpProxy-Token',\n `Bearer ${this.pluginToken}`\n );\n req.headers.set(\n 'X-Mochabug-Adapt-Plugin-HttpProxy-Path',\n `system:${name}`\n );\n req.headers.set('Host', new URL(req.url).host);\n return this.env.httpproxy.fetch(req);\n };\n }\n\n /**\n * Validates an access token to ensure it's authorized for the current plugin and execution context.\n * The authorization check verifies the token has the required scopes for plugin operations.\n *\n * @param token - The access token to validate (max 10000 chars).\n * @returns A promise that resolves when the token is successfully validated.\n * @throws {ConnectError} Code.Unauthenticated if the token is invalid or Code.PermissionDenied if unauthorized.\n *\n * @example\n * ```typescript\n * try {\n * await api.authorize(userProvidedToken);\n * // Token is valid, proceed with operations\n * } catch (error) {\n * // Token is invalid or lacks permissions\n * }\n * ```\n */\n async authorize(token: string): Promise<void> {\n await this.pluginService.authorize({ accessToken: token });\n }\n\n /**\n * Get information about configured system services.\n * System services are plugin-wide configurations shared across all vertices.\n *\n * @returns A promise that resolves with a map of configured services where keys are service paths\n * (using dot notation for nested services) and values indicate if the service is configured.\n *\n * @example\n * ```typescript\n * const services = await api.getSystemServices();\n * // Returns { \"http_service\": true, \"oneof_service.option_a\": true, \"grouped.nested\": true }\n * ```\n */\n async getSystemServices(): Promise<{ [key: string]: boolean }> {\n const response = await this.pluginService.getSystemServices({});\n return response.configuredServices;\n }\n\n /**\n * Reads a file from the plugin's assets directory.\n *\n * @param path - The file path relative to the assets directory.\n * @returns A promise that resolves with the file content and MIME type.\n * @throws {ConnectError} If the file is not found or is actually a directory.\n */\n async readFile(path: string): Promise<AssetFile> {\n let url = new URL('https://runtimeapi');\n url.pathname = path;\n const res = await this.env.assets.fetch(url, { method: 'GET' });\n if (!res.ok) {\n throw mapHttpError(res.status);\n }\n\n const contentType = res.headers.get('content-type');\n if (\n !contentType ||\n !contentType.toLowerCase().includes('application/octet-stream')\n ) {\n throw new ConnectError(\n 'Invalid file. Are you reading a directory?',\n Code.InvalidArgument\n );\n }\n\n return { content: res.body as ReadableStream, mime: contentType };\n }\n\n /**\n * Reads a directory listing from the plugin's assets directory.\n *\n * @param path - The directory path relative to the assets directory.\n * @returns A promise that resolves with the directory content as an array of assets.\n * @throws {ConnectError} If the directory is not found or is actually a file.\n */\n async readDirectory(path: string): Promise<AssetDirectory> {\n let url = new URL('https://runtimeapi');\n url.pathname = path;\n const res = await this.env.assets.fetch(url, { method: 'GET' });\n if (!res.ok) {\n throw mapHttpError(res.status);\n }\n\n const contentType = res.headers.get('content-type');\n if (\n !contentType ||\n !contentType.toLowerCase().includes('application/json')\n ) {\n throw new ConnectError(\n 'Invalid directory. Are you reading a file?',\n Code.InvalidArgument\n );\n }\n return (await res.json()) as AssetDirectory;\n }\n}\n\n/**\n * Represents the result of a batch read operation from the store.\n * Keys that were not found in the store are not present in the result.\n */\nexport class BatchReadResult {\n readonly result: Record<string, GetValue>;\n\n /**\n * Constructs a BatchReadResult from the store's batch read response.\n * @param result - Map of keys to their retrieved values (keys not found are excluded).\n * @internal\n */\n constructor(result: Record<string, GetValue>) {\n this.result = result;\n }\n\n /**\n * Retrieves the result of a specific read operation by its key as JSON.\n *\n * @param key - The key to retrieve from the batch result.\n * @returns The value and metadata, or undefined if the key was not found in the store.\n * - value: The parsed JSON value\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - lastModified: When the value was last modified\n * - etag: Entity tag for concurrency control\n *\n * @example\n * ```typescript\n * const result = await store.readBatch(['user:1', 'user:2', 'user:3']);\n * const user1 = result.get<User>('user:1');\n * if (user1) {\n * console.log(user1.value.name, 'TTL:', user1.ttl);\n * }\n * ```\n */\n get<T = any>(\n key: string\n ):\n | {\n value: T;\n ttl: number;\n lastModified: Date;\n etag: string;\n }\n | undefined {\n const res = this.result[key];\n if (!res) {\n return undefined;\n }\n return {\n value: JSON.parse(new TextDecoder().decode(res.value)) as T,\n ttl: res.metadata!.ttl,\n lastModified: timestampDate(res.metadata!.lastModified!),\n etag: res.metadata!.etag\n };\n }\n\n /**\n * Retrieves the result of a specific read operation by its key as raw binary.\n *\n * @param key - The key to retrieve from the batch result.\n * @returns The raw binary value and metadata, or undefined if the key was not found in the store.\n * - value: The raw binary data as Uint8Array\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - lastModified: When the value was last modified\n * - etag: Entity tag for concurrency control\n *\n * @example\n * ```typescript\n * const result = await store.readBatch(['asset:1', 'asset:2']);\n * const asset1 = result.getBinary('asset:1');\n * if (asset1) {\n * console.log('Size:', asset1.value.length, 'bytes');\n * }\n * ```\n */\n getBinary(key: string):\n | {\n ttl: number;\n value: Uint8Array;\n lastModified: Date;\n etag: string;\n }\n | undefined {\n const res = this.result[key];\n if (!res) {\n return undefined;\n }\n\n return {\n ttl: res.metadata!.ttl,\n value: res.value,\n lastModified: timestampDate(res.metadata!.lastModified!),\n etag: res.metadata!.etag\n };\n }\n}\n\n/**\n * Utility class for constructing batch write operations for the KV store.\n * Provides a fluent interface for building write batches.\n *\n * Note: Batch operations do not support preconditions. Use Store.insert() and Store.delete()\n * methods directly for conditional writes.\n */\nexport class WriteBatchBuilder {\n private ops: WriteOperation[] = [];\n\n /**\n * Adds an insert operation to the batch for JSON data or raw binary data.\n *\n * @param key - The key to insert (max 4096 characters).\n * @param value - The value to store (will be JSON-serialized unless it's Uint8Array).\n * @param ttl - Optional time-to-live in seconds (0 = no expiration).\n * @returns The current instance of the builder for chaining.\n *\n * @example\n * ```typescript\n * const batch = new WriteBatchBuilder()\n * .insert('user:1', { name: 'Alice' }, 3600)\n * .insert('user:2', { name: 'Bob' })\n * .build();\n * ```\n */\n insert<T = any>(key: string, value: T, ttl?: number): this {\n this.ops.push(\n create(WriteOperationSchema, {\n operation: {\n case: 'insert',\n value: {\n key,\n value: {\n value:\n value instanceof Uint8Array\n ? value\n : new TextEncoder().encode(JSON.stringify(value)),\n ttl\n }\n }\n }\n })\n );\n return this;\n }\n\n /**\n * Adds a delete operation to the batch.\n *\n * @param key - The key to delete (max 4096 characters).\n * @returns The current instance of the builder for chaining.\n *\n * @example\n * ```typescript\n * const batch = new WriteBatchBuilder()\n * .delete('temp:cache:1')\n * .delete('temp:cache:2')\n * .build();\n * ```\n */\n delete(key: string): this {\n this.ops.push(\n create(WriteOperationSchema, {\n operation: {\n case: 'delete',\n value: { key }\n }\n })\n );\n return this;\n }\n\n /**\n * Adds a range delete operation to the batch (lexicographic comparison).\n *\n * Range delete works like SelectOp for defining the range. Not setting any start or end will\n * delete the entire store when this batch is executed.\n *\n * @param start - The start key of the range. If omitted, deletes from the empty key.\n * @param end - The end key of the range. If omitted, deletes to the end.\n * @param startInclusive - Include start (>= vs >). Defaults to `false`.\n * @param endInclusive - Include end (<= vs <). Defaults to `false`.\n * @returns The current instance for method chaining.\n *\n * @example\n * ```typescript\n * // Delete all keys with prefix \"user/\"\n * builder.rangeDelete('user/', 'user/~');\n *\n * // Delete logs for a specific month\n * builder.rangeDelete('logs/2024-01/', 'logs/2024-02/');\n * ```\n */\n rangeDelete(\n start?: string,\n end?: string,\n startInclusive?: boolean,\n endInclusive?: boolean\n ): this {\n this.ops.push(\n create(WriteOperationSchema, {\n operation: {\n case: 'rangeDelete',\n value: {\n start,\n end,\n startInclusive,\n endInclusive\n }\n }\n })\n );\n return this;\n }\n\n /**\n * Finalizes the batch and returns the array of write operations.\n *\n * @returns The array of WriteOperation objects ready to be executed.\n */\n build(): WriteOperation[] {\n return this.ops;\n }\n}\n\n/**\n * Options for lock operations.\n */\nexport interface LockOptions {\n /**\n * Maximum number of retries if the lock is not acquired immediately. Defaults to 5.\n */\n maxRetries?: number;\n\n /**\n * Initial delay before retrying in milliseconds. Defaults to 50ms.\n */\n initialDelay?: number;\n\n /**\n * Maximum delay between retries in milliseconds. Defaults to 2000ms.\n */\n maxDelay?: number;\n}\n\n/**\n * Preconditions for conditional insert operations.\n * Used for implementing locks and optimistic concurrency control.\n *\n * IMPORTANT CONSTRAINTS (from proto validation):\n * - failIfExists CANNOT be combined with etagEquals, timestampEquals, or timestampRange\n * - When failIfExists is true, all other fields must be undefined\n * - etagEquals and timestamp conditions can be used together\n */\nexport interface InsertCondition {\n /**\n * Fail the insert if the key already exists.\n * When true, this cannot be combined with any other conditions.\n * Useful for acquiring locks atomically.\n */\n failIfExists?: boolean;\n\n /**\n * Only insert if the current etag matches this value.\n * Cannot be used with failIfExists.\n */\n etagEquals?: string;\n\n /**\n * Only insert if last_modified exactly matches this timestamp.\n * Cannot be used with failIfExists or timestampRange.\n */\n timestampEquals?: Date;\n\n /**\n * Only insert if last_modified falls within this time range.\n * Cannot be used with failIfExists or timestampEquals.\n */\n timestampRange: {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: Date;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: Date;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive: boolean;\n };\n}\n\n/**\n * Preconditions for conditional delete operations.\n * Used for safe deletion with verification.\n *\n * IMPORTANT CONSTRAINTS (from proto validation):\n * - mustExists CANNOT be combined with etagEquals, timestampEquals, or timestampRange\n * - When mustExists is true, all other fields must be undefined\n * - etagEquals and timestamp conditions can be used together\n */\nexport interface DeleteCondition {\n /**\n * Fail the delete if the key doesn't exist.\n * When true, this cannot be combined with any other conditions.\n */\n mustExists?: boolean;\n\n /**\n * Only delete if the current etag matches this value.\n * Cannot be used with mustExists.\n */\n etagEquals?: string;\n\n /**\n * Only delete if last_modified exactly matches this timestamp.\n * Cannot be used with mustExists or timestampRange.\n */\n timestampEquals?: Date;\n\n /**\n * Only delete if last_modified falls within this time range.\n * Cannot be used with mustExists or timestampEquals.\n */\n timestampRange: {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: Date;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: Date;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive: boolean;\n };\n}\n\n/**\n * Metadata returned from store write operations.\n */\nexport interface StoreMetadata {\n /**\n * Remaining time-to-live in seconds.\n * 0 means no expiration (the value will not expire).\n */\n ttl: number;\n\n /**\n * Timestamp when the value was last modified.\n * All operations in a write batch share the same timestamp.\n */\n lastModified: Date;\n\n /**\n * Entity tag for optimistic concurrency control.\n * Changes with each modification of the value.\n */\n etag: string;\n}\n\n/**\n * Internal type for store service clients\n * @internal\n */\ntype StoreServiceClient =\n | Client<typeof ExecutorService>\n | Client<typeof ConfiguratorService>;\n\n/**\n * Represents a store in a specific namespace, providing key-value storage operations.\n * Stores can be scoped to different namespaces with different lifetimes:\n * - NAMESPACE_VERTEX: Lives as long as the plugin in the project (vertex scope)\n * - NAMESPACE_PLUGIN: Lives as long as the plugin in the project (plugin-wide scope)\n * - NAMESPACE_VERTEX_INSTANCE: Lives as long as the instance (vertex scope, session storage)\n * - NAMESPACE_PLUGIN_INSTANCE: Lives as long as the instance (plugin-wide scope, session storage)\n */\nexport class Store {\n private service: StoreServiceClient;\n private namespace: Namespace;\n\n /**\n * Constructs a Store instance for a specific namespace.\n * @param service - The gRPC service client (ExecutorService or ConfiguratorService).\n * @param namespace - The namespace determining the store's scope and lifetime.\n * @internal\n */\n constructor(service: StoreServiceClient, namespace: NamespaceJson) {\n this.service = service;\n this.namespace = enumFromJson(NamespaceSchema, namespace);\n }\n\n /**\n * Inserts or updates a key-value pair in the store with JSON data.\n * Supports conditional writes for implementing locks and optimistic concurrency control.\n *\n * @param key - The key to insert (max 4096 characters).\n * @param value - The JSON value to store (will be JSON-serialized).\n * @param ttl - Optional time-to-live in seconds (0 = no expiration).\n * @param condition - Optional preconditions for the write:\n * - failIfExists: Fail if key already exists (cannot be combined with other conditions)\n * - etagEquals: Only write if current etag matches\n * - timestampEquals: Only write if last_modified exactly matches\n * - timestampRange: Only write if last_modified falls within range\n * @returns A promise that resolves with metadata (ttl, lastModified, etag) when the operation completes.\n * @throws {ConnectError} Code.FailedPrecondition if precondition fails, Code.InvalidArgument for invalid inputs.\n *\n * @example\n * ```typescript\n * // Simple insert\n * await store.insert('user:123', { name: 'Alice' }, 3600);\n *\n * // Conditional insert - fail if exists (for locks)\n * await store.insert('lock:resource', { owner: 'process-1' }, 30, { failIfExists: true });\n *\n * // Optimistic concurrency with etag\n * const data = await store.get('counter');\n * await store.insert('counter', data.data + 1, undefined, { etagEquals: data.etag });\n * ```\n */\n async insert<T = any>(\n key: string,\n value: T,\n ttl?: number,\n condition?: InsertCondition\n ): Promise<StoreMetadata> {\n let precondition: ConditionalInsertOp_Precondition | undefined;\n if (condition) {\n precondition = create(ConditionalInsertOp_PreconditionSchema, {});\n if (condition.failIfExists) {\n precondition.failIfExists = true;\n } else {\n if (condition.etagEquals) {\n precondition.etag = condition.etagEquals;\n }\n if (condition.timestampEquals) {\n precondition.timestampCondition = {\n case: 'lastModifiedEquals',\n value: timestampFromDate(condition.timestampEquals)\n };\n } else if (condition.timestampRange) {\n precondition.timestampCondition = {\n case: 'lastModifiedRange',\n value: create(TimestampRangeSchema, {\n start: condition.timestampRange.start\n ? timestampFromDate(condition.timestampRange.start)\n : undefined,\n end: condition.timestampRange.end\n ? timestampFromDate(condition.timestampRange.end)\n : undefined,\n startInclusive: condition.timestampRange.startInclusive,\n endInclusive: condition.timestampRange.endInclusive\n })\n };\n }\n }\n }\n\n const res = await this.service.writeStore({\n operation: {\n operation: {\n case: 'insert',\n value: {\n key,\n value: {\n value:\n value instanceof Uint8Array\n ? value\n : new TextEncoder().encode(JSON.stringify(value)),\n ttl\n },\n precondition\n }\n }\n },\n namespace: this.namespace\n });\n\n return {\n ttl: res.metadata!.ttl,\n lastModified: timestampDate(res.metadata!.lastModified!),\n etag: res.metadata!.etag\n };\n }\n\n /**\n * Deletes a key-value pair from the store.\n * Supports conditional deletes for safe removal operations.\n *\n * @param key - The key to delete (max 4096 characters).\n * @param condition - Optional preconditions for the delete:\n * - mustExists: Fail if key doesn't exist (cannot be combined with other conditions)\n * - etagEquals: Only delete if current etag matches\n * - timestampEquals: Only delete if last_modified exactly matches\n * - timestampRange: Only delete if last_modified falls within range\n * @returns A promise that resolves when the operation completes.\n * @throws {ConnectError} Code.FailedPrecondition if precondition fails.\n *\n * @example\n * ```typescript\n * // Simple delete\n * await store.delete('temp:data');\n *\n * // Conditional delete - only if exists\n * await store.delete('lock:resource', { mustExists: true });\n *\n * // Delete with etag verification\n * const data = await store.get('config');\n * await store.delete('config', { etagEquals: data.etag });\n * ```\n */\n async delete(key: string, condition?: DeleteCondition): Promise<void> {\n let precondition: ConditionalDeleteOp_Precondition | undefined;\n if (condition) {\n precondition = create(ConditionalDeleteOp_PreconditionSchema, {});\n if (condition.mustExists) {\n precondition.mustExists = true;\n } else {\n if (condition.etagEquals) {\n precondition.etag = condition.etagEquals;\n }\n if (condition.timestampEquals) {\n precondition.timestampCondition = {\n case: 'lastModifiedEquals',\n value: timestampFromDate(condition.timestampEquals)\n };\n } else if (condition.timestampRange) {\n precondition.timestampCondition = {\n case: 'lastModifiedRange',\n value: create(TimestampRangeSchema, {\n start: condition.timestampRange.start\n ? timestampFromDate(condition.timestampRange.start)\n : undefined,\n end: condition.timestampRange.end\n ? timestampFromDate(condition.timestampRange.end)\n : undefined,\n startInclusive: condition.timestampRange.startInclusive,\n endInclusive: condition.timestampRange.endInclusive\n })\n };\n }\n }\n }\n\n await this.service.writeStore({\n operation: {\n operation: {\n case: 'delete',\n value: {\n key,\n precondition\n }\n }\n },\n namespace: this.namespace\n });\n }\n\n /**\n * Deletes all items within a specified key range from the store (lexicographic comparison).\n *\n * Range delete works like SelectOp for defining the range. Not setting any start or end will\n * delete the entire store.\n *\n * Note: Range delete operations do not support preconditions. For conditional deletes,\n * use the {@link delete} method.\n *\n * @param start - The start key of the range. If omitted, deletes from the empty key.\n * @param end - The end key of the range. If omitted, deletes to the end.\n * @param startInclusive - Include start (>= vs >). Defaults to `false`.\n * @param endInclusive - Include end (<= vs <). Defaults to `false`.\n * @returns A promise that resolves when the range delete operation completes.\n *\n * @example\n * ```typescript\n * // Delete all keys with prefix \"user/\"\n * await store.rangeDelete('user/', 'user/~');\n *\n * // Delete logs for a specific month\n * await store.rangeDelete('logs/2024-01/', 'logs/2024-02/');\n *\n * // Delete all items in the store\n * await store.rangeDelete();\n * ```\n */\n async rangeDelete(\n start?: string,\n end?: string,\n startInclusive?: boolean,\n endInclusive?: boolean\n ): Promise<void> {\n await this.service.batchWriteStore({\n namespace: this.namespace,\n operations: [\n {\n operation: {\n case: 'rangeDelete',\n value: {\n start,\n end,\n startInclusive,\n endInclusive\n }\n }\n }\n ]\n });\n }\n\n /**\n * Retrieves a value by its key from the store as JSON.\n *\n * @param key - The key to retrieve (max 4096 characters).\n * @returns A promise that resolves with the retrieved JSON value and metadata, or undefined if key not found.\n * - data: The parsed JSON value\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - etag: The ETag for optimistic concurrency control\n * - lastModified: Timestamp of last modification\n *\n * @example\n * ```typescript\n * const user = await store.get<User>('user:123');\n * if (user) {\n * console.log(user.data.name, 'expires in', user.ttl, 'seconds');\n * }\n * ```\n */\n async get<T = any>(\n key: string\n ): Promise<\n | {\n data: T;\n ttl: number;\n etag: string;\n lastModified: Date;\n }\n | undefined\n > {\n const res = await this.service.batchReadStore({\n keys: [key],\n namespace: this.namespace\n });\n\n const resGet = res.items[key];\n if (resGet) {\n return {\n data: JSON.parse(new TextDecoder().decode(resGet.value)) as T,\n ttl: resGet.metadata!.ttl,\n etag: resGet.metadata!.etag,\n lastModified: timestampDate(resGet.metadata!.lastModified!)\n };\n }\n }\n\n /**\n * Retrieves a value by its key from the store as raw binary.\n *\n * @param key - The key to retrieve (max 4096 characters).\n * @returns A promise that resolves with the retrieved binary value and metadata, or undefined if key not found.\n * - data: The raw binary value as Uint8Array\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - etag: The ETag for optimistic concurrency control\n * - lastModified: Timestamp of last modification\n *\n * @example\n * ```typescript\n * const asset = await store.getBinary('asset:image.png');\n * if (asset) {\n * console.log('Image size:', asset.data.length, 'bytes');\n * }\n * ```\n */\n async getBinary(key: string): Promise<\n | {\n data: Uint8Array<ArrayBufferLike>;\n ttl: number;\n etag: string;\n lastModified: Date;\n }\n | undefined\n > {\n const res = await this.service.batchReadStore({\n keys: [key],\n namespace: this.namespace\n });\n\n const resGet = res.items[key];\n if (resGet) {\n return {\n data: resGet.value,\n ttl: resGet.metadata!.ttl,\n etag: resGet.metadata!.etag,\n lastModified: timestampDate(resGet.metadata!.lastModified!)\n };\n }\n }\n\n /**\n * Performs a range query on keys using lexicographic comparison, returning parsed JSON data.\n *\n * Range queries allow scanning keys within a specific range. For example:\n * - \"user/\" to \"user/~\" - all keys starting with \"user/\"\n * - \"logs/2024-01/\" to \"logs/2024-02/\" - all logs from January 2024\n *\n * Not setting start or end will scan the entire store.\n * Results are always returned in ascending order by key.\n *\n * @param select - The select operation specifying:\n * - start: Optional start key (max 4096 chars). Omit to start from empty key\n * - end: Optional end key (max 4096 chars)\n * - startInclusive: Whether to include start key (>= vs >)\n * - endInclusive: Whether to include end key (<= vs <)\n * - limit: Max results (1-1000)\n * - pageToken: Optional token to continue from previous query\n * @returns A promise that resolves to an object containing:\n * - items: Array of values with metadata (value as JSON type T, TTL, etag, lastModified)\n * - nextToken: Optional pagination token to continue the query\n *\n * @example\n * ```typescript\n * // Get all user keys\n * const result = await store.selectRange<User>({\n * start: 'user/',\n * end: 'user/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 100\n * });\n *\n * // Continue pagination\n * if (result.nextToken) {\n * const next = await store.selectRange({\n * start: 'user/',\n * end: 'user/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 100,\n * pageToken: result.nextToken\n * });\n * }\n * ```\n */\n async selectRange<T = JsonValue>(\n select: SelectOpJson\n ): Promise<{\n nextToken?: string;\n items: {\n key: string;\n value: T;\n ttl: number;\n etag: string;\n lastModified: Date;\n }[];\n }> {\n const res = await this.service.selectStore({\n namespace: this.namespace,\n operation: select\n });\n\n return {\n nextToken: res.nextToken,\n items: Object.entries(res.items)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, val]) => ({\n key,\n value: JSON.parse(new TextDecoder().decode(val.value)) as T,\n ttl: val.metadata!.ttl,\n etag: val.metadata!.etag,\n lastModified: timestampDate(val.metadata!.lastModified!)\n }))\n };\n }\n\n /**\n * Performs a range query on keys using lexicographic comparison, returning raw binary data.\n *\n * Range queries allow scanning keys within a specific range. For example:\n * - \"user/\" to \"user/~\" - all keys starting with \"user/\"\n * - \"logs/2024-01/\" to \"logs/2024-02/\" - all logs from January 2024\n *\n * Not setting start or end will scan the entire store.\n * Results are always returned in ascending order by key.\n *\n * @param select - The select operation specifying:\n * - start: Optional start key (max 4096 chars). Omit to start from empty key\n * - end: Optional end key (max 4096 chars)\n * - startInclusive: Whether to include start key (>= vs >)\n * - endInclusive: Whether to include end key (<= vs <)\n * - limit: Max results (1-1000)\n * - pageToken: Optional token to continue from previous query\n * @returns A promise that resolves to an object containing:\n * - items: Array of values with metadata (value as Uint8Array, TTL, etag, lastModified)\n * - nextToken: Optional pagination token to continue the query\n *\n * @example\n * ```typescript\n * // Get all binary assets\n * const result = await store.selectRangeBinary({\n * start: 'assets/',\n * end: 'assets/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 50\n * });\n *\n * // Continue pagination\n * if (result.nextToken) {\n * const next = await store.selectRangeBinary({\n * start: 'assets/',\n * end: 'assets/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 50,\n * pageToken: result.nextToken\n * });\n * }\n * ```\n */\n async selectRangeBinary(select: SelectOpJson): Promise<{\n nextToken?: string;\n items: {\n value: Uint8Array<ArrayBufferLike>;\n ttl: number;\n etag: string;\n lastModified: Date;\n }[];\n }> {\n const res = await this.service.selectStore({\n namespace: this.namespace,\n operation: select\n });\n\n return {\n nextToken: res.nextToken,\n items: Object.values(res.items).map((val) => ({\n value: val.value,\n ttl: val.metadata!.ttl,\n etag: val.metadata!.etag,\n lastModified: timestampDate(val.metadata!.lastModified!)\n }))\n };\n }\n\n /**\n * Executes a batch of write operations on the store.\n * All operations are atomic - either all succeed or all fail.\n * All operations in a batch share the same timestamp.\n * Interfering operations on the same key have undefined order.\n *\n * Note: Batch operations do not support preconditions. Use the single insert/delete\n * methods for conditional writes.\n *\n * @param ops - The write operations to execute (1-500 operations). Use WriteBatchBuilder to construct.\n * @returns A promise that resolves with metadata for each inserted key (deletes don't return metadata).\n * @throws {ConnectError} Code.InvalidArgument if invalid operations or limits exceeded.\n *\n * @example\n * ```typescript\n * const ops = new WriteBatchBuilder()\n * .insert('user:1', { name: 'Alice' }, 3600)\n * .insert('user:2', { name: 'Bob' }, 3600)\n * .delete('temp:old')\n * .build();\n *\n * const metadata = await store.writeBatch(ops);\n * console.log('Insert metadata:', metadata);\n * ```\n */\n async writeBatch(ops: WriteOperation[]): Promise<{\n [key: string]: StoreMetadata;\n }> {\n const response = await this.service.batchWriteStore({\n namespace: this.namespace,\n operations: ops\n });\n\n let result: { [key: string]: StoreMetadata } = {};\n for (const [key, metadata] of Object.entries(response.metadata)) {\n result[key] = {\n ttl: metadata.ttl,\n lastModified: timestampDate(metadata.lastModified!),\n etag: metadata.etag\n };\n }\n return result;\n }\n\n /**\n * Executes a batch of read operations on the store.\n * Keys not found are ignored (not present in the result).\n *\n * @param keys - The keys to read (1-10000 keys, each max 4096 characters).\n * @returns A promise that resolves with a BatchReadResult containing found items.\n *\n * @example\n * ```typescript\n * const result = await store.readBatch(['user:1', 'user:2', 'user:3']);\n * const user1 = result.get<User>('user:1');\n * if (user1) {\n * console.log(user1.value.name);\n * }\n * ```\n */\n async readBatch(keys: string[]): Promise<BatchReadResult> {\n const response = await this.service.batchReadStore({\n namespace: this.namespace,\n keys\n });\n return new BatchReadResult(response.items);\n }\n\n /**\n * Attempts to acquire a lock for a specified duration.\n * Uses an atomic insert operation with failIfExists precondition that fails if the key already exists.\n *\n * @param locker - The unique identifier for the lock (max 4096 chars).\n * @param ttl - Time-to-live in seconds (defaults to 5 seconds if not specified).\n * @returns A promise that resolves with true if the lock was acquired, false if already held.\n *\n * @example\n * ```typescript\n * // Try to acquire lock with default 5 second TTL\n * const acquired = await store.acquire('resource_lock');\n * if (acquired) {\n * // Lock acquired, perform work\n * }\n *\n * // Acquire lock with custom TTL\n * const acquired2 = await store.acquire('long_operation', 30);\n * ```\n */\n async acquire(locker: string, ttl?: number): Promise<boolean> {\n try {\n await this.service.writeStore({\n namespace: this.namespace,\n operation: {\n operation: {\n case: 'insert',\n value: {\n key: locker,\n value: {\n value: new Uint8Array([1]),\n ttl: ttl ?? 5 // Default TTL of 5 seconds\n },\n precondition: create(ConditionalInsertOp_PreconditionSchema, {\n failIfExists: true\n })\n }\n }\n }\n });\n } catch (e) {\n if (e instanceof ConnectError && e.code === Code.FailedPrecondition) {\n return false;\n }\n throw e;\n }\n\n return true;\n }\n\n /**\n * Releases a previously acquired lock by deleting the lock key.\n *\n * @param locker - The unique identifier for the lock (max 4096 chars).\n * @returns A promise that resolves when the lock is released.\n *\n * @example\n * ```typescript\n * await store.release('resource_lock');\n * ```\n */\n async release(locker: string): Promise<void> {\n await this.writeBatch(new WriteBatchBuilder().delete(locker).build());\n }\n\n /**\n * Acquires a lock and executes a critical section of code with exponential backoff retry logic.\n * Automatically releases the lock after the section completes or fails.\n *\n * The retry mechanism uses exponential backoff:\n * - Delay = min(initialDelay * 2^attempt, maxDelay)\n * - Default: 50ms, 100ms, 200ms, 400ms, 800ms (capped at maxDelay)\n *\n * @template T - The return type of the critical section function.\n * @param key - The unique identifier for the lock (max 4096 chars).\n * @param section - The critical section to execute once the lock is acquired.\n * @param options - Optional lock options:\n * - maxRetries: Maximum retry attempts (default: 5)\n * - initialDelay: Initial delay in ms before first retry (default: 50ms)\n * - maxDelay: Maximum delay in ms between retries (default: 2000ms)\n * @returns A promise that resolves with the result of the critical section.\n * @throws {Error} If the lock cannot be acquired after maxRetries attempts.\n *\n * @example\n * ```typescript\n * const result = await store.lock('counter_lock', async () => {\n * const counter = await store.get<number>('counter');\n * await store.insert('counter', (counter?.data ?? 0) + 1);\n * return counter?.data ?? 0;\n * });\n *\n * // With custom options\n * const result2 = await store.lock('resource', async () => {\n * // critical work\n * }, { maxRetries: 10, initialDelay: 100, maxDelay: 5000 });\n * ```\n */\n async lock<T>(\n key: string,\n section: () => Promise<T>,\n options?: LockOptions\n ): Promise<T> {\n const maxRetries = options?.maxRetries ?? 5;\n const initialDelay = options?.initialDelay ?? 50;\n const maxDelay = options?.maxDelay ?? 2000;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n const acquired = await this.acquire(key);\n if (acquired) {\n try {\n return await section();\n } finally {\n await this.release(key);\n }\n } else if (attempt < maxRetries - 1) {\n const delay = Math.min(initialDelay * 2 ** attempt, maxDelay);\n console.log(\n `Acquisition failed for key: ${key}. Delaying for ${delay}ms`\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n throw new Error(`Failed to acquire lock after maximum retries`);\n }\n}\n\n/**\n * Provides access to the least privileged Executor API, without session capabilities.\n * This API allows plugins to interact with vertex configuration and local storage.\n */\nexport class ExecutorApi extends ApiBase {\n protected executor: Client<typeof ExecutorService>;\n\n /**\n * Initializes an instance of ExecutorApi.\n *\n * @param env - The executor environment configuration.\n * @param pluginToken - The plugin token for authorization.\n */\n constructor(env: ExecutorEnvironment, pluginToken: string) {\n super(env, pluginToken);\n this.executor = createClient(\n ExecutorService,\n createGrpcWebTransport({\n fetcher: env.executor,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', `Bearer ${pluginToken}`);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Get vertex configuration with JSON-parsed config field.\n * Optionally specify which fields to include in the response.\n *\n * @template T - Type of the config object (defaults to any)\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as parsed JSON (type T).\n *\n * @example\n * ```typescript\n * // Get all fields (all fields are guaranteed to be present)\n * const {config, metadata, services} = await api.getConfig<Settings>();\n *\n * // Get only config with type - result type is { config: Settings }\n * const {config} = await api.getConfig<Settings>('config');\n *\n * // Get config and metadata - result type is { config: Settings; metadata: VertexMetadataJson }\n * const {config, metadata} = await api.getConfig<Settings>('config', 'metadata');\n * ```\n */\n // No fields specified - returns all fields (non-optional)\n async getConfig<T = any>(): Promise<{\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfig<\n T = any,\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfig<T = any>(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.executor.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n if (response.config && response.config.length > 0) {\n try {\n result.config = JSON.parse(\n new TextDecoder().decode(response.config)\n ) as T;\n } catch {\n result.config = undefined;\n }\n } else {\n result.config = undefined;\n }\n }\n\n return result;\n }\n\n /**\n * Get vertex configuration with binary config field (Uint8Array).\n * Optionally specify which fields to include in the response.\n *\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as raw Uint8Array.\n *\n * @example\n * ```typescript\n * // Get all fields with binary config (all guaranteed present)\n * const {config, metadata, services} = await api.getConfigBinary();\n *\n * // Get only binary config - result type is { config: Uint8Array }\n * const {config} = await api.getConfigBinary('config');\n * ```\n */\n // No fields specified - returns all fields (non-optional)\n async getConfigBinary(): Promise<{\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfigBinary<\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfigBinary(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.executor.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n result.config = response.config;\n }\n\n return result;\n }\n\n /**\n * Provides access to a local store instance, scoped by namespace.\n *\n * Namespace lifetimes:\n * - 'vertex' (NAMESPACE_VERTEX): Vertex-scoped, lives as long as the plugin in the project\n * - 'plugin' (NAMESPACE_PLUGIN): Plugin-wide scope, lives as long as the plugin in the project\n *\n * Access scopes:\n * - NAMESPACE_VERTEX: runtimeapi/executor.store.vertex.app, runtimeapi/executor.store.vertex.app:read\n * - NAMESPACE_PLUGIN: runtimeapi/executor.store.plugin.app, runtimeapi/executor.store.plugin.app:read\n *\n * @param namespace - The namespace for the store, either 'vertex' or 'plugin'.\n * @returns An instance of Store configured for the specified namespace.\n */\n getLocalStore(namespace: 'vertex' | 'plugin'): Store {\n return new Store(\n this.executor,\n namespace === 'vertex' ? 'NAMESPACE_VERTEX' : 'NAMESPACE_PLUGIN'\n );\n }\n\n /**\n * Retrieves a session-scoped API with the provided authorization header.\n * Session APIs have additional capabilities like sending signals and managing exchanges.\n *\n * @param authHeader - The authorization header to use for the session API (e.g., 'Bearer <access-token>').\n * @returns An instance of SessionExecutorApi configured with the provided auth header.\n */\n getSessionApi(authHeader: string): SessionExecutorApi {\n return new SessionExecutorApi(\n this.env as ExecutorEnvironment,\n this.pluginToken,\n authHeader\n );\n }\n}\n\n/**\n * Provides an API with session storage capabilities, specifically for use when a session is stopping.\n * This API allows access to session-scoped stores that persist for the lifetime of the instance.\n */\nexport class StopExecutorApi extends ExecutorApi {\n /**\n * The session authorization header for session-based operations.\n */\n protected sessionAuthHeader: string;\n\n /**\n * Initializes an instance of StopExecutorApi.\n *\n * @param env - The executor environment configuration.\n * @param pluginToken - The plugin token for authorization.\n * @param sessionAuthHeader - The authorization header for session-based operations.\n */\n constructor(\n env: ExecutorEnvironment,\n pluginToken: string,\n sessionAuthHeader: string\n ) {\n super(env, pluginToken);\n this.sessionAuthHeader = sessionAuthHeader;\n\n // Replace the executor client with one that uses the session authorization header.\n this.executor = createClient(\n ExecutorService,\n createGrpcWebTransport({\n fetcher: env.executor,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', sessionAuthHeader);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Retrieves the session authorization header used for this API instance.\n * This header contains the session access token and can be used to create\n * additional session-scoped API instances or for custom authorization needs.\n *\n * @returns The session authorization header (format: 'Bearer <token>').\n *\n * @example\n * ```typescript\n * const authHeader = api.getAuthHeader();\n * // Use for creating another session API or custom requests\n * ```\n */\n getAuthHeader(): string {\n return this.sessionAuthHeader;\n }\n\n /**\n * Retrieves a session-specific store instance based on the provided namespace.\n * Session stores persist for the lifetime of the instance (the running session).\n *\n * Namespace lifetimes:\n * - 'vertex' (NAMESPACE_VERTEX_INSTANCE): Vertex-scoped, lives as long as the instance\n * - 'plugin' (NAMESPACE_PLUGIN_INSTANCE): Plugin-wide scope, lives as long as the instance\n *\n * Access scopes:\n * - NAMESPACE_VERTEX_INSTANCE: runtimeapi/executor.store.vertex.instance, runtimeapi/executor.store.vertex.instance:read\n * - NAMESPACE_PLUGIN_INSTANCE: runtimeapi/executor.store.plugin.instance, runtimeapi/executor.store.plugin.instance:read\n *\n * @param namespace - The namespace for the store, either 'vertex' or 'plugin'.\n * @returns An instance of Store configured for the session's namespace.\n */\n getSessionStore(namespace: 'vertex' | 'plugin'): Store {\n return new Store(\n this.executor,\n namespace === 'vertex'\n ? 'NAMESPACE_VERTEX_INSTANCE'\n : 'NAMESPACE_PLUGIN_INSTANCE'\n );\n }\n}\n\n/**\n * Options for listing bound receiver signals.\n */\nexport interface ListSignalsOptions {\n /**\n * Number of signals per page (max 500, defaults to 50 if not specified).\n */\n pageSize?: number;\n\n /**\n * Whether to order signals in descending order.\n */\n orderDescending?: boolean;\n\n /**\n * Cursor for pagination (max 500 chars).\n * Used internally by continueListSignals - typically you don't set this directly.\n * @internal\n */\n cursor?: string;\n}\n\n/**\n * Provides access to the Privileged Executor API, allowing session-based operations.\n * This API enables sending signals, managing exchanges, and accessing receiver signals.\n */\nexport class SessionExecutorApi extends StopExecutorApi {\n /**\n * Initializes an instance of SessionExecutorApi.\n *\n * @param env - The executor environment configuration.\n * @param pluginToken - The plugin token for authorization.\n * @param sessionAuthHeader - The authorization header for session access.\n */\n constructor(\n env: ExecutorEnvironment,\n pluginToken: string,\n sessionAuthHeader: string\n ) {\n super(env, pluginToken, sessionAuthHeader);\n }\n\n /**\n * Lists signals bound to the receiver that activated this vertex, returning parsed JSON data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @param options - Optional listing options:\n * - pageSize: Number of signals per page (max 500, defaults to 50)\n * - orderDescending: Whether to order signals in descending order\n * @returns A promise that resolves to the list of signals, receiver name, and a cursor for pagination.\n *\n * @example\n * ```typescript\n * const result = await api.listSignals({ pageSize: 10 });\n * result.signals // Record<string, ValueJson>\n * ```\n */\n async listSignals(options?: ListSignalsOptions): Promise<{\n signals: Record<string, ValueJson>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n pageSize: options?.pageSize,\n orderDescending: options?.orderDescending\n });\n\n return {\n signals: Object.fromEntries(\n Object.entries(response.signals).map(([key, value]) => [\n key,\n JSON.parse(new TextDecoder().decode(value.data))\n ])\n ),\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Lists signals bound to the receiver that activated this vertex, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @param options - Optional listing options:\n * - pageSize: Number of signals per page (max 500, defaults to 50)\n * - orderDescending: Whether to order signals in descending order\n * @returns A promise that resolves to the list of binary signals, receiver name, and a cursor for pagination.\n *\n * @example\n * ```typescript\n * const result = await api.listSignalsBinary({ pageSize: 10 });\n * result.signals // Record<string, SignalData>\n * ```\n */\n async listSignalsBinary(options?: ListSignalsOptions): Promise<{\n signals: Record<string, SignalData>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n pageSize: options?.pageSize,\n orderDescending: options?.orderDescending\n });\n return {\n signals: response.signals,\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Continues listing signals bound to the receiver that activated this vertex from a given cursor, returning parsed JSON data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param cursor - The cursor to continue from.\n * @returns A promise that resolves to the next set of signals, receiver name, and a new cursor for further pagination.\n *\n * @example\n * ```typescript\n * const result = await api.continueListSignals(cursor);\n * result.signals // Record<string, ValueJson>\n * ```\n */\n async continueListSignals(cursor: string): Promise<{\n signals: Record<string, ValueJson>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n cursor\n });\n\n return {\n signals: Object.fromEntries(\n Object.entries(response.signals).map(([key, value]) => [\n key,\n JSON.parse(new TextDecoder().decode(value.data))\n ])\n ),\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Continues listing signals bound to the receiver that activated this vertex from a given cursor, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param cursor - The cursor to continue from.\n * @returns A promise that resolves to the next set of binary signals, receiver name, and a new cursor for further pagination.\n *\n * @example\n * ```typescript\n * const result = await api.continueListSignalsBinary(cursor);\n * result.signals // Record<string, Uint8Array<ArrayBufferLike>>\n * ```\n */\n async continueListSignalsBinary(cursor: string): Promise<{\n signals: Record<string, SignalData>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n cursor\n });\n return {\n signals: response.signals,\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Retrieves a signal bound to the receiver that activated this vertex, returning parsed JSON data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param name - The name of the signal (1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves to the signal data, or undefined if not set.\n *\n * @example\n * ```typescript\n * const user = await api.getSignal<{name: string}>('user'); // {name: string} | undefined\n * ```\n */\n async getSignal<T = ValueJson | undefined>(name: string): Promise<T> {\n const response = await this.executor.batchGetActiveSignals({\n names: [name]\n });\n const data = response.items[name];\n return (\n data ? JSON.parse(new TextDecoder().decode(data.data)) : undefined\n ) as T;\n }\n\n /**\n * Retrieves a signal bound to the receiver that activated this vertex, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param name - The name of the signal (1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves to the signal data as Uint8Array, or undefined if not set.\n *\n * @example\n * ```typescript\n * const binary = await api.getSignalBinary('avatar'); // SignalData | undefined\n * ```\n */\n async getSignalBinary(name: string): Promise<SignalData | undefined> {\n const response = await this.executor.batchGetActiveSignals({\n names: [name]\n });\n return response.items[name];\n }\n\n /**\n * Retrieves multiple signals bound to the receiver that activated this vertex in a single batch operation with full type safety.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @template T - Record type mapping signal names to their expected types.\n * @param names - Names of the signals to retrieve (1-500 unique names, each 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves with an object mapping signal names to their typed values.\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 500 items.\n *\n * @example\n * ```typescript\n * const signals = await api.getSignals<{\n * 'user': { name: string; email: string };\n * 'settings': { theme: string; notifications: boolean };\n * 'count': number;\n * }>('user', 'settings', 'count');\n *\n * // Fully typed!\n * signals['user']; // { name: string; email: string }\n * signals['settings']; // { theme: string; notifications: boolean }\n * signals['count']; // number\n * ```\n */\n async getSignals<T extends Record<string, any>>(\n ...names: Array<keyof T & string>\n ): Promise<T> {\n if (names.length === 0) {\n return {} as T;\n }\n\n const response = await this.executor.batchGetActiveSignals({\n names: names as string[]\n });\n\n if (Object.keys(response.items).length === 0) {\n return {} as T;\n }\n\n const res: Record<string, ValueJson> = {};\n for (const [key, value] of Object.entries(response.items)) {\n res[key] = JSON.parse(new TextDecoder().decode(value.data));\n }\n return res as T;\n }\n\n /**\n * Retrieves multiple signals bound to the receiver that activated this vertex in a single batch operation, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param names - The names of the signals to retrieve (1-500 unique names, each 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves to a record mapping signal names to their binary data.\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 500 items.\n *\n * @example\n * ```typescript\n * const binaries = await api.getSignalsBinary('avatar', 'thumbnail', 'document');\n * binaries['avatar']; // SignalData\n * binaries['thumbnail']; // SignalData\n * ```\n */\n async getSignalsBinary(\n ...names: string[]\n ): Promise<Record<string, SignalData>> {\n if (names.length === 0) {\n return {};\n }\n\n const response = await this.executor.batchGetActiveSignals({\n names: names as string[]\n });\n\n return response.items;\n }\n\n /**\n * Sends data on the specified transmitter with the given signals.\n * For stream transmitters, this sends data but does not advance the cursor position in the graph.\n *\n * Signal values can be either JSON data or raw binary data (Uint8Array). The method\n * automatically detects the type and encodes accordingly.\n *\n * @param transmitter - The identifier of the transmitter (max 100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$, optional).\n * @param signals - Signals to transmit (0-50 signals, each signal name 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * Values can be JSON or Uint8Array.\n * @returns A promise that resolves when the send operation is completed.\n * @throws {ConnectError} Code.InvalidArgument if transmitter or signal constraints are violated.\n *\n * @example\n * ```typescript\n * // Send JSON signals\n * await api.send('output', {\n * user: { name: 'John', age: 30 },\n * status: 'success'\n * });\n *\n * // Send binary signals\n * await api.send('output', {\n * avatar: new Uint8Array([...]),\n * document: new Uint8Array([...])\n * });\n *\n * // Mix JSON and binary\n * await api.send('output', {\n * user: { name: 'John' },\n * avatar: new Uint8Array([...])\n * });\n * ```\n */\n async send(\n transmitter?: string,\n signals?: {\n [name: string]:\n | any\n | {\n data: Uint8Array<ArrayBufferLike>;\n mimeType: string;\n filename?: string;\n };\n }\n ): Promise<void> {\n await this.executor.send({\n transmitter,\n signals: signals\n ? Object.fromEntries(\n Object.entries(signals).map(([key, value]) => {\n // Check if it's a SignalData-like object (must have BOTH data as Uint8Array AND mimeType)\n if (\n value?.data instanceof Uint8Array &&\n typeof value?.mimeType === 'string' &&\n value.mimeType\n ) {\n return [\n key,\n create(SignalDataSchema, {\n data: value.data,\n mimeType: value.mimeType,\n filename: value.filename\n })\n ];\n }\n\n // Otherwise, treat as JSON\n return [\n key,\n create(SignalDataSchema, {\n data: new TextEncoder().encode(JSON.stringify(value)),\n mimeType: 'application/json'\n })\n ];\n })\n )\n : {}\n });\n }\n /**\n * Dispatches an exchange operation with a specific receiver and set of signals.\n * Exchanges are asynchronous operations that can return results through transmitters.\n *\n * Signal values can be either JSON data or raw binary data (Uint8Array). The method\n * automatically detects the type and encodes accordingly.\n *\n * @param name - The name of the exchange to dispatch (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @param receiver - The receiver to dispatch the exchange to (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @param signals - Signals to send with the exchange (0-50 signals, each signal name 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * Values can be JSON or Uint8Array.\n * @returns A promise that resolves to the exchange operation details.\n * @throws {ConnectError} Code.InvalidArgument if name, receiver, or signal constraints are violated.\n *\n * @example\n * ```typescript\n * // Dispatch exchange with JSON signals\n * const op = await api.dispatchExchange('process_user', 'user_handler', {\n * user: { name: 'John', age: 30 },\n * action: 'create'\n * });\n *\n * // Dispatch exchange with binary signals\n * const op = await api.dispatchExchange('process_image', 'image_handler', {\n * image: new Uint8Array([...]),\n * metadata: { width: 800, height: 600 }\n * });\n * ```\n */\n async dispatchExchange(\n name: string,\n receiver: string,\n signals?: {\n [name: string]:\n | any\n | {\n data: Uint8Array<ArrayBufferLike>;\n mimeType: string;\n filename?: string;\n };\n }\n ): Promise<ExchangeOperation> {\n const response = await this.executor.dispatchExchange({\n name,\n receiver: receiver,\n signals: signals\n ? Object.fromEntries(\n Object.entries(signals).map(([key, value]) => {\n // Check if it's a SignalData-like object (must have BOTH data as Uint8Array AND mimeType)\n if (\n value?.data instanceof Uint8Array &&\n typeof value?.mimeType === 'string' &&\n value.mimeType\n ) {\n return [\n key,\n create(SignalDataSchema, {\n data: value.data,\n mimeType: value.mimeType,\n filename: value.filename\n })\n ];\n }\n\n // Otherwise, treat as JSON\n return [\n key,\n create(SignalDataSchema, {\n data: new TextEncoder().encode(JSON.stringify(value)),\n mimeType: 'application/json'\n })\n ];\n })\n )\n : {}\n });\n return response.operation!;\n }\n\n /**\n * Retrieves an exchange operation by its ID to check its status and results.\n *\n * @param id - The UUID of the exchange operation (must be a valid UUID).\n * @returns A promise that resolves to the exchange operation details.\n * @throws {ConnectError} Code.NotFound if the exchange operation doesn't exist.\n *\n * @example\n * ```typescript\n * const op = await api.getExchange('550e8400-e29b-41d4-a716-446655440000');\n * console.log('Status:', op.status);\n * ```\n */\n async getExchange(id: string): Promise<ExchangeOperation> {\n const response = await this.executor.getExchangeOperation({\n id\n });\n if (!response.item) {\n throw new ConnectError('Exchange operation not found', Code.NotFound);\n }\n return response.item;\n }\n\n /**\n * Cancels an ongoing exchange operation by its ID.\n * If the exchange is already completed or cancelled, this operation is idempotent.\n *\n * @param id - The UUID of the exchange operation to cancel (must be a valid UUID).\n * @returns A promise that resolves when the exchange is successfully canceled.\n *\n * @example\n * ```typescript\n * await api.cancelExchange('550e8400-e29b-41d4-a716-446655440000');\n * ```\n */\n async cancelExchange(id: string): Promise<void> {\n await this.executor.cancelExchangeOperation({ id });\n }\n}\n\n/**\n * Options for posting vertex configuration.\n *\n * Config semantics:\n * - Set config to a value (object or Uint8Array) to update it\n * - Set config to empty Uint8Array (new Uint8Array()) to clear it\n * - Omit config (undefined) to keep existing config unchanged\n *\n * Metadata semantics:\n * - Set metadata to update it\n * - Omit metadata (undefined) to keep existing metadata unchanged\n * - Metadata cannot be cleared\n *\n * At least one of config or metadata MUST be provided.\n */\nexport interface PostConfigOptions<Config = any> {\n /**\n * Set this to true if you would like to override any bindings that already exist.\n * This should be used if the plugin is handling signal bindings itself.\n * When true, the plugin takes full control of receiver/transmitter bindings.\n */\n overrideBindings?: boolean;\n\n /**\n * The configuration to set. Can be either a typed object (which will be JSON-serialized)\n * or raw Uint8Array.\n * - Set to value: Updates the config\n * - Set to empty Uint8Array: Clears the config\n * - Omit (undefined): Keeps existing config unchanged\n */\n config?: Config | Uint8Array;\n\n /**\n * Metadata to update with the configuration.\n * - Set to value: Updates the metadata\n * - Omit (undefined): Keeps existing metadata unchanged\n * - Cannot be cleared (must always have a value if present)\n */\n metadata?: VertexMetadataJson;\n}\n\n/**\n * API for interacting with the Configurator service.\n * This API allows plugins to manage vertex configuration and access persistent storage.\n */\nexport class ConfiguratorApi extends ApiBase {\n private configurator: Client<typeof ConfiguratorService>;\n\n /**\n * Initializes an instance of ConfiguratorApi.\n *\n * @param env - The environment configuration for the Configurator.\n * @param pluginToken - The plugin token for authorization.\n */\n constructor(env: ConfiguratorEnvironment, pluginToken: string) {\n super(env, pluginToken);\n this.configurator = createClient(\n ConfiguratorService,\n createGrpcWebTransport({\n fetcher: env.configurator,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', `Bearer ${pluginToken}`);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Get vertex configuration with JSON-parsed config field.\n * Optionally specify which fields to include in the response.\n *\n * @template T - Type of the config object (defaults to any)\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as parsed JSON (type T).\n */\n // No fields specified - returns all fields (non-optional)\n async getConfig<T = any>(): Promise<{\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfig<\n T = any,\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfig<T = any>(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.configurator.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n if (response.config && response.config.length > 0) {\n try {\n result.config = JSON.parse(\n new TextDecoder().decode(response.config)\n ) as T;\n } catch {\n result.config = undefined;\n }\n } else {\n result.config = undefined;\n }\n }\n\n return result;\n }\n\n /**\n * Get vertex configuration with binary config field (Uint8Array).\n * Optionally specify which fields to include in the response.\n *\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as raw Uint8Array.\n */\n // No fields specified - returns all fields (non-optional)\n async getConfigBinary(): Promise<{\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfigBinary<\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfigBinary(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.configurator.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n result.config = response.config;\n }\n\n return result;\n }\n\n /**\n * Updates the vertex configuration and/or metadata.\n * At least one of config or metadata must be provided.\n *\n * Config handling:\n * - Set to a value (object or Uint8Array) to update the config\n * - Set to empty bytes to clear the config\n * - Omit (undefined) to keep existing config unchanged\n *\n * Metadata handling:\n * - Set to update the metadata\n * - Omit (undefined) to keep existing metadata unchanged\n * - Cannot be cleared\n *\n * @param opts - Configuration options:\n * - config: The configuration to set (will be JSON-serialized unless Uint8Array)\n * - metadata: Optional metadata to update\n * - overrideBindings: Set to true to override existing signal bindings (use when plugin handles bindings)\n * @returns A promise that resolves to the updated vertex metadata (useful for checking error codes after setting bindings).\n * @throws {ConnectError} Code.InvalidArgument if neither config nor metadata is provided.\n *\n * @example\n * ```typescript\n * // Update config only\n * await api.postConfig({ config: { apiKey: 'new-key' } });\n *\n * // Update metadata only\n * await api.postConfig({ metadata: { label: 'New Label' } });\n *\n * // Update both with binding override\n * await api.postConfig({\n * config: { enabled: true },\n * metadata: { description: 'Updated' },\n * overrideBindings: true\n * });\n * ```\n */\n async postConfig<T = any>(\n opts: PostConfigOptions<T>\n ): Promise<VertexMetadataJson> {\n if (!opts.config && !opts.metadata) {\n throw new ConnectError(\n 'Either config or metadata must be provided',\n Code.InvalidArgument\n );\n }\n\n let configBytes: Uint8Array | undefined;\n if (opts.config !== undefined) {\n configBytes =\n opts.config instanceof Uint8Array\n ? opts.config\n : new TextEncoder().encode(JSON.stringify(opts.config));\n }\n\n const response = await this.configurator.postVertexConfig({\n config: configBytes,\n metadata: opts.metadata\n ? fromJson(VertexMetadataSchema, opts.metadata)\n : undefined,\n overrideBindings: opts?.overrideBindings\n });\n return toJson(\n VertexMetadataSchema,\n response.metadata!\n ) as VertexMetadataJson;\n }\n\n /**\n * Lists all available incoming signals on a specific receiver.\n * This endpoint enables the configurator to get information about incoming signals\n * from vertices that transmit to this vertex's receivers.\n *\n * If you have multiple receivers, call this endpoint multiple times (once per receiver).\n *\n * @param receiver - The receiver to check for signals (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * If not set, the first connected receiver is used.\n * @param formats - Optional signal formats to filter by. Only returns signals that match at least one schema in the array.\n * This allows filtering incoming signals to only those that conform to specific JTD schemas.\n * @param fieldMask - Optional field mask to apply to the returned schema.\n * Example: Set to \"vertices\" to omit vertex logos and reduce response size.\n * @returns A promise that resolves to information about incoming vertices, their transmitters, and available signals.\n * - vertices: Array of incoming vertices with their transmitters and signal definitions\n * - vertexLogos: Map of vertex logo IDs to logo data (base64 or data URI)\n * - receiver: The receiver name the signals are fetched on\n *\n * @example\n * ```typescript\n * // Get all incoming signals on default receiver\n * const signals = await api.listIncomingSignals();\n *\n * // Get signals from specific receiver, filtered by format\n * const filtered = await api.listIncomingSignals('data_receiver', [mySignalFormat]);\n *\n * // Get signals without logos (smaller response)\n * const minimal = await api.listIncomingSignals('input', undefined, 'vertices');\n * ```\n */\n async listIncomingSignals(\n receiver?: string,\n formats?: SignalFormatJson[],\n fieldMask?: string\n ): Promise<ListIncomingSignalsResponseJson> {\n const response = await this.configurator.listIncomingSignals({\n receiver,\n formats: formats?.map((f) => fromJson(SignalFormatSchema, f)) ?? [],\n fieldMask: fieldMask ? fromJson(FieldMaskSchema, fieldMask) : undefined\n });\n return toJson(\n ListIncomingSignalsResponseSchema,\n response\n ) as ListIncomingSignalsResponseJson;\n }\n\n /**\n * Provides access to a local store scoped by the specified namespace.\n * Local stores persist for the lifetime of the plugin in the project.\n *\n * @param namespace - The namespace for the store, either 'vertex' or 'plugin'.\n * @returns An instance of Store configured for the specified namespace.\n */\n getLocalStore(namespace: 'vertex' | 'plugin'): Store {\n return new Store(\n this.configurator,\n namespace === 'vertex' ? 'NAMESPACE_VERTEX' : 'NAMESPACE_PLUGIN'\n );\n }\n}\n\n/**\n * Maps HTTP status codes to ConnectError instances.\n *\n * @param status - The HTTP status code.\n * @returns A ConnectError instance with the appropriate code and message.\n */\nexport function mapHttpError(status: number): ConnectError {\n switch (status) {\n case 400:\n return new ConnectError('Bad Request', Code.InvalidArgument);\n case 401:\n return new ConnectError('Unauthorized', Code.Unauthenticated);\n case 403:\n return new ConnectError('Forbidden', Code.PermissionDenied);\n case 404:\n return new ConnectError('Not Found', Code.NotFound);\n case 409:\n return new ConnectError('Conflict', Code.AlreadyExists);\n case 429:\n return new ConnectError('Too Many Requests', Code.ResourceExhausted);\n case 499:\n return new ConnectError('Client Closed Request', Code.Canceled);\n case 500:\n return new ConnectError('Internal Server Error', Code.Internal);\n case 501:\n return new ConnectError('Not Implemented', Code.Unimplemented);\n case 503:\n return new ConnectError('Service Unavailable', Code.Unavailable);\n case 504:\n return new ConnectError('Gateway Timeout', Code.DeadlineExceeded);\n default:\n return new ConnectError(`Unknown HTTP error: ${status}`, Code.Unknown);\n }\n}\n\n/**\n * Maps a ConnectError to the corresponding HTTP status code.\n *\n * @param error - The ConnectError instance.\n * @returns The corresponding HTTP status code.\n */\nexport function mapConnectErrorToHttpStatus(error: ConnectError): number {\n switch (error.code) {\n case Code.Canceled:\n return 499; // Client Closed Request\n case Code.Unknown:\n return 500; // Internal Server Error (catch-all)\n case Code.InvalidArgument:\n return 400; // Bad Request\n case Code.DeadlineExceeded:\n return 504; // Gateway Timeout\n case Code.NotFound:\n return 404; // Not Found\n case Code.AlreadyExists:\n return 409; // Conflict\n case Code.PermissionDenied:\n return 403; // Forbidden\n case Code.ResourceExhausted:\n return 429; // Too Many Requests\n case Code.FailedPrecondition:\n return 400; // Bad Request\n case Code.Aborted:\n return 409; // Conflict\n case Code.OutOfRange:\n return 400; // Bad Request\n case Code.Unimplemented:\n return 501; // Not Implemented\n case Code.Internal:\n return 500; // Internal Server Error\n case Code.Unavailable:\n return 503; // Service Unavailable\n case Code.DataLoss:\n return 500; // Internal Server Error\n case Code.Unauthenticated:\n return 401; // Unauthorized\n default:\n // Any other or unknown ConnectError code\n return 500;\n }\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_data.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_data.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_data: GenFile = /*@__PURE__*/\n fileDesc(\"Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2RhdGEucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKmCgoKU2lnbmFsRGF0YRL3BQoIZmlsZW5hbWUYASABKAlC3wW6SNsFugGvAQobZmlsZW5hbWUubm9fcGF0aF9zZXBhcmF0b3JzEmNGaWxlbmFtZSBjYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKCcvJyBvciAnXCcpLiBVc2Ugb25seSB0aGUgZmlsZW5hbWUgd2l0aG91dCBkaXJlY3RvcnkgcGF0aC4aKyF0aGlzLmNvbnRhaW5zKCcvJykgJiYgIXRoaXMuY29udGFpbnMoJ1xcJym6AbsBCh5maWxlbmFtZS5ub19jb250cm9sX2NoYXJhY3RlcnMSOUZpbGVuYW1lIGNhbm5vdCBjb250YWluIGNvbnRyb2wgY2hhcmFjdGVycyBvciBudWxsIGJ5dGVzLhpeIXRoaXMuY29udGFpbnMoJ1x4MDAnKSAmJiAhdGhpcy5jb250YWlucygnXG4nKSAmJiAhdGhpcy5jb250YWlucygnXHInKSAmJiAhdGhpcy5jb250YWlucygnXHQnKboBbQonZmlsZW5hbWUubm9fbGVhZGluZ190cmFpbGluZ193aGl0ZXNwYWNlEi1GaWxlbmFtZSBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZS4aE3RoaXMgPT0gdGhpcy50cmltKCm6AdMBChxmaWxlbmFtZS5ub193aW5kb3dzX3Jlc2VydmVkEmpGaWxlbmFtZSBjYW5ub3QgYmUgYSBXaW5kb3dzIHJlc2VydmVkIG5hbWUgKENPTiwgUFJOLCBBVVgsIE5VTCwgQ09NMS05LCBMUFQxLTkpIHdpdGggb3Igd2l0aG91dCBleHRlbnNpb24uGkchdGhpcy5tYXRjaGVzKCdeKD9pKShDT058UFJOfEFVWHxOVUx8Q09NWzEtOV18TFBUWzEtOV0pKD86XFwuW14uXSopPyQnKXIgEAEY/wEyGV5bXi88PjoifD8qXHgwMC1ceDFGXFxdKyRIAIgBARKCBAoJbWltZV90eXBlGAIgASgJQu4DukjqA7oByQEKFm1pbWVfdHlwZS5ub193aWxkY2FyZHMSmQFNSU1FIHR5cGUgd2lsZGNhcmRzIGFyZSBub3QgYWxsb3dlZCBpbiBTaWduYWxEYXRhLiBVc2UgYSBjb25jcmV0ZSBNSU1FIHR5cGUgbGlrZSAnaW1hZ2UvcG5nJyBvciAnYXBwbGljYXRpb24vcGRmJywgbm90IHdpbGRjYXJkcyBsaWtlICdpbWFnZS8qJyBvciAnKi8qJy4aEyF0aGlzLmNvbnRhaW5zKCcqJym6Ab8BChdtaW1lX3R5cGUubm9fcGFyYW1ldGVycxKOAU1JTUUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBub3QgYWxsb3dlZC4gVXNlICd0ZXh0L3BsYWluJyBpbnN0ZWFkIG9mICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jy4gVVRGLTggZW5jb2RpbmcgaXMgYXNzdW1lZCBmb3IgYWxsIHRleHQgZm9ybWF0cy4aEyF0aGlzLmNvbnRhaW5zKCc7JylyWBADGP8BMlFeW2EtekEtWjAtOV1bYS16QS1aMC05ISMkJlwtXl8uK117MCwxMjZ9L1thLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fSQSDAoEZGF0YRgDIAEoDEILCglfZmlsZW5hbWViBnByb3RvMw\", [file_buf_validate_validate]);\n\n/**\n * This represents the actual data in the system\n *\n * @generated from message mochabugapis.adapt.graph.SignalData\n */\nexport type SignalData = Message<\"mochabugapis.adapt.graph.SignalData\"> & {\n /**\n * An optional filename associated with the signal.\n * Supports international filenames with Unicode characters.\n * Can include extension (e.g., \"document.pdf\") or be extension-less (e.g., \"README\").\n *\n * Supported characters:\n * - All Unicode characters (international support)\n * - All printable ASCII including special characters\n * - Spaces, dots, hyphens, underscores anywhere in the filename\n *\n * Blocked characters (filesystem-illegal):\n * - Path separators: / \\\n * - Windows-illegal: < > : \" | ? *\n * - Control characters: null bytes, newlines, tabs, etc. (0x00-0x1F)\n *\n * Additional restrictions:\n * - Cannot start or end with whitespace (enforced by CEL)\n * - Maximum length: 255 characters (filesystem compatibility)\n *\n * Examples:\n * \u2705 \"document.pdf\"\n * \u2705 \"my-file_v2.txt\"\n * \u2705 \"Report (Final).docx\"\n * \u2705 \"r\u00E9sum\u00E9.pdf\" (French accents)\n * \u2705 \"\u6587\u6863.pdf\" (Chinese)\n * \u2705 \"\u0444\u0430\u0439\u043B.txt\" (Cyrillic)\n * \u2705 \"Project #2.xlsx\"\n * \u2705 \".gitignore\" (hidden files allowed)\n * \u274C \" file.txt\" (starts with space)\n * \u274C \"file.txt \" (ends with space)\n * \u274C \"path/to/file.txt\" (contains path separator)\n * \u274C \"file\\0.txt\" (contains null byte)\n * \u274C \"file<name>.txt\" (contains Windows-illegal char)\n *\n * @generated from field: optional string filename = 1;\n */\n filename?: string;\n\n /**\n * The MIME type of the signal data.\n * Must be a **concrete** MIME type conforming to RFC 6838 (NO wildcards allowed).\n *\n * This field specifies the actual format of the binary data in the `data` field.\n * Unlike SignalFormat which can use wildcards for format families, SignalData\n * represents actual concrete data and must have a specific MIME type.\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"application/pdf\")\n * - Type must be concrete alphanumeric (no wildcards)\n * - Subtype must be concrete alphanumeric (no wildcards)\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * **No wildcards**: Unlike SignalFormat, wildcards are FORBIDDEN here because\n * this represents actual data which must have a concrete format.\n * \u274C \"*\\/*\" - Forbidden (data must have specific format)\n * \u274C \"image/*\" - Forbidden (data must be specific image format)\n * \u274C \"*\\/png\" - Forbidden (semantically invalid anyway)\n * \u2705 \"image/png\" - Valid (concrete format)\n * \u2705 \"application/pdf\" - Valid (concrete format)\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. Charset parameters are forbidden.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (parameters not allowed)\n * \u274C \"image/*\" (wildcards not allowed)\n * \u274C \"*\\/*\" (wildcards not allowed)\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\", \"text/plain\"\n * - Data: \"application/json\", \"application/xml\", \"text/csv\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n *\n * @generated from field: string mime_type = 2;\n */\n mimeType: string;\n\n /**\n * The actual raw binary data\n *\n * @generated from field: bytes data = 3;\n */\n data: Uint8Array;\n};\n\n/**\n * This represents the actual data in the system\n *\n * @generated from message mochabugapis.adapt.graph.SignalData\n */\nexport type SignalDataJson = {\n /**\n * An optional filename associated with the signal.\n * Supports international filenames with Unicode characters.\n * Can include extension (e.g., \"document.pdf\") or be extension-less (e.g., \"README\").\n *\n * Supported characters:\n * - All Unicode characters (international support)\n * - All printable ASCII including special characters\n * - Spaces, dots, hyphens, underscores anywhere in the filename\n *\n * Blocked characters (filesystem-illegal):\n * - Path separators: / \\\n * - Windows-illegal: < > : \" | ? *\n * - Control characters: null bytes, newlines, tabs, etc. (0x00-0x1F)\n *\n * Additional restrictions:\n * - Cannot start or end with whitespace (enforced by CEL)\n * - Maximum length: 255 characters (filesystem compatibility)\n *\n * Examples:\n * \u2705 \"document.pdf\"\n * \u2705 \"my-file_v2.txt\"\n * \u2705 \"Report (Final).docx\"\n * \u2705 \"r\u00E9sum\u00E9.pdf\" (French accents)\n * \u2705 \"\u6587\u6863.pdf\" (Chinese)\n * \u2705 \"\u0444\u0430\u0439\u043B.txt\" (Cyrillic)\n * \u2705 \"Project #2.xlsx\"\n * \u2705 \".gitignore\" (hidden files allowed)\n * \u274C \" file.txt\" (starts with space)\n * \u274C \"file.txt \" (ends with space)\n * \u274C \"path/to/file.txt\" (contains path separator)\n * \u274C \"file\\0.txt\" (contains null byte)\n * \u274C \"file<name>.txt\" (contains Windows-illegal char)\n *\n * @generated from field: optional string filename = 1;\n */\n filename?: string;\n\n /**\n * The MIME type of the signal data.\n * Must be a **concrete** MIME type conforming to RFC 6838 (NO wildcards allowed).\n *\n * This field specifies the actual format of the binary data in the `data` field.\n * Unlike SignalFormat which can use wildcards for format families, SignalData\n * represents actual concrete data and must have a specific MIME type.\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"application/pdf\")\n * - Type must be concrete alphanumeric (no wildcards)\n * - Subtype must be concrete alphanumeric (no wildcards)\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * **No wildcards**: Unlike SignalFormat, wildcards are FORBIDDEN here because\n * this represents actual data which must have a concrete format.\n * \u274C \"*\\/*\" - Forbidden (data must have specific format)\n * \u274C \"image/*\" - Forbidden (data must be specific image format)\n * \u274C \"*\\/png\" - Forbidden (semantically invalid anyway)\n * \u2705 \"image/png\" - Valid (concrete format)\n * \u2705 \"application/pdf\" - Valid (concrete format)\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. Charset parameters are forbidden.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (parameters not allowed)\n * \u274C \"image/*\" (wildcards not allowed)\n * \u274C \"*\\/*\" (wildcards not allowed)\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\", \"text/plain\"\n * - Data: \"application/json\", \"application/xml\", \"text/csv\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n *\n * @generated from field: string mime_type = 2;\n */\n mimeType?: string;\n\n /**\n * The actual raw binary data\n *\n * @generated from field: bytes data = 3;\n */\n data?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalData.\n * Use `create(SignalDataSchema)` to create a new message.\n */\nexport const SignalDataSchema: GenMessage<SignalData, {jsonType: SignalDataJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_data, 0);\n\n", "// Copyright 2023-2025 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Duration, DurationJson, FieldDescriptorProto_Type, FieldDescriptorProto_TypeJson, FieldOptions, MessageOptions, OneofOptions, Timestamp, TimestampJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file buf/validate/validate.proto.\n */\nexport const file_buf_validate_validate: GenFile = /*@__PURE__*/\n fileDesc(\"ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJuCgxNZXNzYWdlUnVsZXMSHwoDY2VsGAMgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSLQoFb25lb2YYBCADKAsyHi5idWYudmFsaWRhdGUuTWVzc2FnZU9uZW9mUnVsZUoECAEQAlIIZGlzYWJsZWQiNAoQTWVzc2FnZU9uZW9mUnVsZRIOCgZmaWVsZHMYASADKAkSEAoIcmVxdWlyZWQYAiABKAgiHgoKT25lb2ZSdWxlcxIQCghyZXF1aXJlZBgBIAEoCCK/CAoKRmllbGRSdWxlcxIfCgNjZWwYFyADKAsyEi5idWYudmFsaWRhdGUuUnVsZRIQCghyZXF1aXJlZBgZIAEoCBIkCgZpZ25vcmUYGyABKA4yFC5idWYudmFsaWRhdGUuSWdub3JlEikKBWZsb2F0GAEgASgLMhguYnVmLnZhbGlkYXRlLkZsb2F0UnVsZXNIABIrCgZkb3VibGUYAiABKAsyGS5idWYudmFsaWRhdGUuRG91YmxlUnVsZXNIABIpCgVpbnQzMhgDIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQzMlJ1bGVzSAASKQoFaW50NjQYBCABKAsyGC5idWYudmFsaWRhdGUuSW50NjRSdWxlc0gAEisKBnVpbnQzMhgFIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50MzJSdWxlc0gAEisKBnVpbnQ2NBgGIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50NjRSdWxlc0gAEisKBnNpbnQzMhgHIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50MzJSdWxlc0gAEisKBnNpbnQ2NBgIIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50NjRSdWxlc0gAEi0KB2ZpeGVkMzIYCSABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQzMlJ1bGVzSAASLQoHZml4ZWQ2NBgKIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIABIvCghzZml4ZWQzMhgLIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQzMlJ1bGVzSAASLwoIc2ZpeGVkNjQYDCABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkNjRSdWxlc0gAEicKBGJvb2wYDSABKAsyFy5idWYudmFsaWRhdGUuQm9vbFJ1bGVzSAASKwoGc3RyaW5nGA4gASgLMhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzSAASKQoFYnl0ZXMYDyABKAsyGC5idWYudmFsaWRhdGUuQnl0ZXNSdWxlc0gAEicKBGVudW0YECABKAsyFy5idWYudmFsaWRhdGUuRW51bVJ1bGVzSAASLwoIcmVwZWF0ZWQYEiABKAsyGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlc0gAEiUKA21hcBgTIAEoCzIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlc0gAEiUKA2FueRgUIAEoCzIWLmJ1Zi52YWxpZGF0ZS5BbnlSdWxlc0gAEi8KCGR1cmF0aW9uGBUgASgLMhsuYnVmLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIABIxCgl0aW1lc3RhbXAYFiABKAsyHC5idWYudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAEIGCgR0eXBlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHkiVQoPUHJlZGVmaW5lZFJ1bGVzEh8KA2NlbBgBIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHki2hcKCkZsb2F0UnVsZXMSgwEKBWNvbnN0GAEgASgCQnTCSHEKbwoLZmxvYXQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKfAQoCbHQYAiABKAJCkAHCSIwBCokBCghmbG9hdC5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKvAQoDbHRlGAMgASgCQp8BwkibAQqYAQoJZmxvYXQubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS7wcKAmd0GAQgASgCQuAHwkjcBwqNAQoIZmxvYXQuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrDAQoLZmxvYXQuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrNAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK0wEKDGZsb2F0Lmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt0BChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK6CAoDZ3RlGAUgASgCQqoIwkimCAqbAQoJZmxvYXQuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtIBCgxmbG9hdC5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtwBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwriAQoNZmxvYXQuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7AEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygCQnPCSHAKbgoIZmxvYXQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoAkJmwkhjCmEKDGZsb2F0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnUKBmZpbml0ZRgIIAEoCEJlwkhiCmAKDGZsb2F0LmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIu0XCgtEb3VibGVSdWxlcxKEAQoFY29uc3QYASABKAFCdcJIcgpwCgxkb3VibGUuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKgAQoCbHQYAiABKAFCkQHCSI0BCooBCglkb3VibGUubHQafSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASsAEKA2x0ZRgDIAEoAUKgAcJInAEKmQEKCmRvdWJsZS5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL0BwoCZ3QYBCABKAFC5QfCSOEHCo4BCglkb3VibGUuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrEAQoMZG91YmxlLmd0X2x0GrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKFmRvdWJsZS5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrUAQoNZG91YmxlLmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt4BChdkb3VibGUuZ3RfbHRlX2V4Y2x1c2l2ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESvwgKA2d0ZRgFIAEoAUKvCMJIqwgKnAEKCmRvdWJsZS5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0wEKDWRvdWJsZS5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BChdkb3VibGUuZ3RlX2x0X2V4Y2x1c2l2ZRrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK4wEKDmRvdWJsZS5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrtAQoYZG91YmxlLmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoAUJ0wkhxCm8KCWRvdWJsZS5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygBQmfCSGQKYgoNZG91YmxlLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnYKBmZpbml0ZRgIIAEoCEJmwkhjCmEKDWRvdWJsZS5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDMyUnVsZXMSgwEKBWNvbnN0GAEgASgFQnTCSHEKbwoLaW50MzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKAVCfMJIeQp3CghpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgFQowBwkiIAQqFAQoJaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKAVCiAfCSIQHCnoKCGludDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50MzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoBULTB8JIzwcKiAEKCWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoBUJzwkhwCm4KCGludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKAVCZsJIYwphCgxpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAggAygFQhrCSBcKFQoNaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDY0UnVsZXMSgwEKBWNvbnN0GAEgASgDQnTCSHEKbwoLaW50NjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKANCfMJIeQp3CghpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgDQowBwkiIAQqFAQoJaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKANCiAfCSIQHCnoKCGludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoA0LTB8JIzwcKiAEKCWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoA0JzwkhwCm4KCGludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoDUJ1wkhyCnAKDHVpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoDUJ0wkhxCm8KCXVpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygNQmfCSGQKYgoNdWludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoBEJ1wkhyCnAKDHVpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoBEJ9wkh6CngKCXVpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgEQo0BwkiJAQqGAQoKdWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgEQo0HwkiJBwp7Cgl1aW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoBELYB8JI1AcKiQEKCnVpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoBEJ0wkhxCm8KCXVpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygEQmfCSGQKYgoNdWludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKARCG8JIGAoWCg51aW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoEUJ1wkhyCnAKDHNpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEUJ9wkh6CngKCXNpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgRQo0BwkiJAQqGAQoKc2ludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgRQo0HwkiJBwp7CglzaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEULYB8JI1AcKiQEKCnNpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEUJ0wkhxCm8KCXNpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoEkJ1wkhyCnAKDHNpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEkJ0wkhxCm8KCXNpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygSQmfCSGQKYgoNc2ludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4irxUKDEZpeGVkMzJSdWxlcxKFAQoFY29uc3QYASABKAdCdsJIcwpxCg1maXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjAEKAmx0GAIgASgHQn7CSHsKeQoKZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKeAQoDbHRlGAMgASgHQo4BwkiKAQqHAQoLZml4ZWQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqEHCgJndBgEIAEoB0KSB8JIjgcKfAoKZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtQEKDWZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BChdmaXhlZDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsUBCg5maXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzQEKGGZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES7QcKA2d0ZRgFIAEoB0LdB8JI2QcKigEKC2ZpeGVkMzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxAEKDmZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCswBChhmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtQBCg9maXhlZDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3AEKGWZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgQEKAmluGAYgAygHQnXCSHIKcAoKZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeAoGbm90X2luGAcgAygHQmjCSGUKYwoOZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxItCgdleGFtcGxlGAggAygHQhzCSBkKFwoPZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQ2NFJ1bGVzEoUBCgVjb25zdBgBIAEoBkJ2wkhzCnEKDWZpeGVkNjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAZCfsJIewp5CgpmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAZCjgHCSIoBCocBCgtmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgGQpIHwkiOBwp8CgpmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgGQt0HwkjZBwqKAQoLZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAZCdcJIcgpwCgpmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQzMlJ1bGVzEoYBCgVjb25zdBgBIAEoD0J3wkh0CnIKDnNmaXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygPQnbCSHMKcQoLc2ZpeGVkMzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoD0JpwkhmCmQKD3NmaXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKA9CHcJIGgoYChBzZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLAFQoNU0ZpeGVkNjRSdWxlcxKGAQoFY29uc3QYASABKBBCd8JIdApyCg5zZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEo0BCgJsdBgCIAEoEEJ/wkh8CnoKC3NmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp8BCgNsdGUYAyABKBBCjwHCSIsBCogBCgxzZml4ZWQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqYHCgJndBgEIAEoEEKXB8JIkwcKfQoLc2ZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrYBCg5zZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKGHNmaXhlZDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsYBCg9zZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs4BChlzZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLyBwoDZ3RlGAUgASgQQuIHwkjeBwqLAQoMc2ZpeGVkNjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxQEKD3NmaXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoZc2ZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1QEKEHNmaXhlZDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3QEKGnNmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoIBCgJpbhgGIAMoEEJ2wkhzCnEKC3NmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ5CgZub3RfaW4YByADKBBCacJIZgpkCg9zZml4ZWQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ixwEKCUJvb2xSdWxlcxKCAQoFY29uc3QYASABKAhCc8JIcApuCgpib29sLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSKgoHZXhhbXBsZRgCIAMoCEIZwkgWChQKDGJvb2wuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIpA3CgtTdHJpbmdSdWxlcxKGAQoFY29uc3QYASABKAlCd8JIdApyCgxzdHJpbmcuY29uc3QaYnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEn4KA2xlbhgTIAEoBEJxwkhuCmwKCnN0cmluZy5sZW4aXnVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSmQEKB21pbl9sZW4YAiABKARChwHCSIMBCoABCg5zdHJpbmcubWluX2xlbhpudWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSlwEKB21heF9sZW4YAyABKARChQHCSIEBCn8KDnN0cmluZy5tYXhfbGVuGm11aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpsBCglsZW5fYnl0ZXMYFCABKARChwHCSIMBCoABChBzdHJpbmcubGVuX2J5dGVzGmx1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl9ieXRlc10pIDogJycSowEKCW1pbl9ieXRlcxgEIAEoBEKPAcJIiwEKiAEKEHN0cmluZy5taW5fYnl0ZXMadHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fYnl0ZXNdKSA6ICcnEqIBCgltYXhfYnl0ZXMYBSABKARCjgHCSIoBCocBChBzdHJpbmcubWF4X2J5dGVzGnN1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgPiBydWxlcy5tYXhfYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfYnl0ZXNdKSA6ICcnEo0BCgdwYXR0ZXJuGAYgASgJQnzCSHkKdwoOc3RyaW5nLnBhdHRlcm4aZSF0aGlzLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgZG9lcyBub3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoQBCgZwcmVmaXgYByABKAlCdMJIcQpvCg1zdHJpbmcucHJlZml4Gl4hdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEoIBCgZzdWZmaXgYCCABKAlCcsJIbwptCg1zdHJpbmcuc3VmZml4GlwhdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4IGAlc2AnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKQAQoIY29udGFpbnMYCSABKAlCfsJIewp5Cg9zdHJpbmcuY29udGFpbnMaZiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKYAQoMbm90X2NvbnRhaW5zGBcgASgJQoEBwkh+CnwKE3N0cmluZy5ub3RfY29udGFpbnMaZXRoaXMuY29udGFpbnMocnVsZXMubm90X2NvbnRhaW5zKSA/ICd2YWx1ZSBjb250YWlucyBzdWJzdHJpbmcgYCVzYCcuZm9ybWF0KFtydWxlcy5ub3RfY29udGFpbnNdKSA6ICcnEoABCgJpbhgKIAMoCUJ0wkhxCm8KCXN0cmluZy5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEnAKB3VyaV9yZWYYEiABKAhCXcJIWgpYCg5zdHJpbmcudXJpX3JlZhIjdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEpACCgdhZGRyZXNzGBUgASgIQvwBwkj4AQqBAQoOc3RyaW5nLmFkZHJlc3MSLXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0bmFtZSwgb3IgaXAgYWRkcmVzcxpAIXJ1bGVzLmFkZHJlc3MgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKSB8fCB0aGlzLmlzSXAoKQpyChRzdHJpbmcuYWRkcmVzc19lbXB0eRI8dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGhwhcnVsZXMuYWRkcmVzcyB8fCB0aGlzICE9ICcnSAASmAIKBHV1aWQYFiABKAhChwLCSIMCCqUBCgtzdHJpbmcudXVpZBIadmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVVSUQaeiFydWxlcy51dWlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpClkKEXN0cmluZy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBoZIXJ1bGVzLnV1aWQgfHwgdGhpcyAhPSAnJ0gAEvABCgV0dXVpZBghIAEoCELeAcJI2gEKcwoMc3RyaW5nLnR1dWlkEiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgdHJpbW1lZCBVVUlEGj8hcnVsZXMudHV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXszMn0kJykKYwoSc3RyaW5nLnR1dWlkX2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdHJpbW1lZCBVVUlEGhohcnVsZXMudHV1aWQgfHwgdGhpcyAhPSAnJ0gAEpYCChFpcF93aXRoX3ByZWZpeGxlbhgaIAEoCEL4AcJI9AEKeAoYc3RyaW5nLmlwX3dpdGhfcHJlZml4bGVuEh92YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgcHJlZml4GjshcnVsZXMuaXBfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoKQp4Ch5zdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW5fZW1wdHkSLnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUCBwcmVmaXgaJiFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAASzwIKE2lwdjRfd2l0aF9wcmVmaXhsZW4YGyABKAhCrwLCSKsCCpMBChpzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbhI1dmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaPiFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQpCpIBCiBzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbl9lbXB0eRJEdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaKCFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2Nl93aXRoX3ByZWZpeGxlbhgcIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNikKkgEKIHN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEvIBCglpcF9wcmVmaXgYHSABKAhC3AHCSNgBCmwKEHN0cmluZy5pcF9wcmVmaXgSH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaNyFydWxlcy5pcF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgodHJ1ZSkKaAoWc3RyaW5nLmlwX3ByZWZpeF9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBoeIXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjRfcHJlZml4GB4gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2NF9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IHByZWZpeBo8IXJ1bGVzLmlwdjRfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQsIHRydWUpCm4KGHN0cmluZy5pcHY0X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgcHJlZml4GiAhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEoMCCgtpcHY2X3ByZWZpeBgfIAEoCELrAcJI5wEKdQoSc3RyaW5nLmlwdjZfcHJlZml4EiF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBwcmVmaXgaPCFydWxlcy5pcHY2X3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2LCB0cnVlKQpuChhzdHJpbmcuaXB2Nl9wcmVmaXhfZW1wdHkSMHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IHByZWZpeBogIXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgIT0gJydIABK1AgoNaG9zdF9hbmRfcG9ydBggIAEoCEKbAsJIlwIKmQEKFHN0cmluZy5ob3N0X2FuZF9wb3J0EkF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdCAoaG9zdG5hbWUgb3IgSVAgYWRkcmVzcykgYW5kIHBvcnQgcGFpcho+IXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdEFuZFBvcnQodHJ1ZSkKeQoac3RyaW5nLmhvc3RfYW5kX3BvcnRfZW1wdHkSN3ZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0IGFuZCBwb3J0IHBhaXIaIiFydWxlcy5ob3N0X2FuZF9wb3J0IHx8IHRoaXMgIT0gJydIABKoBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QvEEwkjtBArwAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSJnZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrnAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEid2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIuoQCgpCeXRlc1J1bGVzEoABCgVjb25zdBgBIAEoDEJxwkhuCmwKC2J5dGVzLmNvbnN0Gl10aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSeAoDbGVuGA0gASgEQmvCSGgKZgoJYnl0ZXMubGVuGll1aW50KHRoaXMuc2l6ZSgpKSAhPSBydWxlcy5sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKQAQoHbWluX2xlbhgCIAEoBEJ/wkh8CnoKDWJ5dGVzLm1pbl9sZW4aaXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKIAQoHbWF4X2xlbhgDIAEoBEJ3wkh0CnIKDWJ5dGVzLm1heF9sZW4aYXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSkAEKB3BhdHRlcm4YBCABKAlCf8JIfAp6Cg1ieXRlcy5wYXR0ZXJuGmkhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSgQEKBnByZWZpeBgFIAEoDEJxwkhuCmwKDGJ5dGVzLnByZWZpeBpcIXRoaXMuc3RhcnRzV2l0aChydWxlcy5wcmVmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgcHJlZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSfwoGc3VmZml4GAYgASgMQm/CSGwKagoMYnl0ZXMuc3VmZml4GlohdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnN1ZmZpeF0pIDogJycSgwEKCGNvbnRhaW5zGAcgASgMQnHCSG4KbAoOYnl0ZXMuY29udGFpbnMaWiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKnAQoCaW4YCCADKAxCmgHCSJYBCpMBCghieXRlcy5pbhqGAWdldEZpZWxkKHJ1bGVzLCAnaW4nKS5zaXplKCkgPiAwICYmICEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgJIAMoDEJmwkhjCmEKDGJ5dGVzLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEusBCgJpcBgKIAEoCELcAcJI2AEKdAoIYnl0ZXMuaXASIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBhZGRyZXNzGkYhcnVsZXMuaXAgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0IHx8IHRoaXMuc2l6ZSgpID09IDE2CmAKDmJ5dGVzLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxodIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpICE9IDBIABLkAQoEaXB2NBgLIAEoCELTAcJIzwEKZQoKYnl0ZXMuaXB2NBIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcxozIXJ1bGVzLmlwdjQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0CmYKEGJ5dGVzLmlwdjRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MaHyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpICE9IDBIABLlAQoEaXB2NhgMIAEoCELUAcJI0AEKZgoKYnl0ZXMuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxo0IXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpmChBieXRlcy5pcHY2X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzGh8hcnVsZXMuaXB2NiB8fCB0aGlzLnNpemUoKSAhPSAwSAASKwoHZXhhbXBsZRgOIAMoDEIawkgXChUKDWJ5dGVzLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duItQDCglFbnVtUnVsZXMSggEKBWNvbnN0GAEgASgFQnPCSHAKbgoKZW51bS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ+CgJpbhgDIAMoBUJywkhvCm0KB2VudW0uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIvsDCg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSJwoFaXRlbXMYBCABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlcyoJCOgHEICAgIACIooDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxImCgRrZXlzGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMSKAoGdmFsdWVzGAUgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAkimRcKDUR1cmF0aW9uUnVsZXMSoQEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnfCSHQKcgoOZHVyYXRpb24uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKoAQoCbHQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25Cf8JIfAp6CgtkdXJhdGlvbi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK6AQoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQo8BwkiLAQqIAQoMZHVyYXRpb24ubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLBBwoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ClwfCSJMHCn0KC2R1cmF0aW9uLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOZHVyYXRpb24uZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhkdXJhdGlvbi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPZHVyYXRpb24uZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZZHVyYXRpb24uZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESjQgKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkLiB8JI3gcKiwEKDGR1cmF0aW9uLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9kdXJhdGlvbi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGWR1cmF0aW9uLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBkdXJhdGlvbi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpkdXJhdGlvbi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKdAQoCaW4YByADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CdsJIcwpxCgtkdXJhdGlvbi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKSGAoOVGltZXN0YW1wUnVsZXMSowEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJ4wkh1CnMKD3RpbWVzdGFtcC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqsBCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCgAHCSH0KewoMdGltZXN0YW1wLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErwBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpABwkiMAQqJAQoNdGltZXN0YW1wLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASbAoGbHRfbm93GAcgASgIQlrCSFcKVQoQdGltZXN0YW1wLmx0X25vdxpBKHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABLHBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpwHwkiYBwp+Cgx0aW1lc3RhbXAuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrcBCg90aW1lc3RhbXAuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr8BChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxwEKEHRpbWVzdGFtcC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs8BChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESkwgKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBC5wfCSOMHCowBCg10aW1lc3RhbXAuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxgEKEHRpbWVzdGFtcC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrWAQoRdGltZXN0YW1wLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3gEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJvCgZndF9ub3cYCCABKAhCXcJIWgpYChB0aW1lc3RhbXAuZ3Rfbm93GkQocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErgBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CjAHCSIgBCoUBChB0aW1lc3RhbXAud2l0aGluGnF0aGlzIDwgbm93LXJ1bGVzLndpdGhpbiB8fCB0aGlzID4gbm93K3J1bGVzLndpdGhpbiA/ICd2YWx1ZSBtdXN0IGJlIHdpdGhpbiAlcyBvZiBub3cnLmZvcm1hdChbcnVsZXMud2l0aGluXSkgOiAnJxJLCgdleGFtcGxlGAogAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIewkgbChkKEXRpbWVzdGFtcC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiI5CgpWaW9sYXRpb25zEisKCnZpb2xhdGlvbnMYASADKAsyFy5idWYudmFsaWRhdGUuVmlvbGF0aW9uIp8BCglWaW9sYXRpb24SJgoFZmllbGQYBSABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEiUKBHJ1bGUYBiABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEg8KB3J1bGVfaWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIPCgdmb3Jfa2V5GAQgASgISgQIARACUgpmaWVsZF9wYXRoIj0KCUZpZWxkUGF0aBIwCghlbGVtZW50cxgBIAMoCzIeLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGhFbGVtZW50IukCChBGaWVsZFBhdGhFbGVtZW50EhQKDGZpZWxkX251bWJlchgBIAEoBRISCgpmaWVsZF9uYW1lGAIgASgJEj4KCmZpZWxkX3R5cGUYAyABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI8CghrZXlfdHlwZRgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEj4KCnZhbHVlX3R5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRIPCgVpbmRleBgGIAEoBEgAEhIKCGJvb2xfa2V5GAcgASgISAASEQoHaW50X2tleRgIIAEoA0gAEhIKCHVpbnRfa2V5GAkgASgESAASFAoKc3RyaW5nX2tleRgKIAEoCUgAQgsKCXN1YnNjcmlwdCqhAQoGSWdub3JlEhYKEklHTk9SRV9VTlNQRUNJRklFRBAAEhgKFElHTk9SRV9JRl9aRVJPX1ZBTFVFEAESEQoNSUdOT1JFX0FMV0FZUxADIgQIAhACKgxJR05PUkVfRU1QVFkqDklHTk9SRV9ERUZBVUxUKhdJR05PUkVfSUZfREVGQVVMVF9WQUxVRSoVSUdOT1JFX0lGX1VOUE9QVUxBVEVEKm4KCktub3duUmVnZXgSGwoXS05PV05fUkVHRVhfVU5TUEVDSUZJRUQQABIgChxLTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9OQU1FEAESIQodS05PV05fUkVHRVhfSFRUUF9IRUFERVJfVkFMVUUQAjpWCgdtZXNzYWdlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIcJIAEoCzIaLmJ1Zi52YWxpZGF0ZS5NZXNzYWdlUnVsZXNSB21lc3NhZ2U6TgoFb25lb2YSHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5PbmVvZlJ1bGVzUgVvbmVvZjpOCgVmaWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXNSBWZpZWxkOl0KCnByZWRlZmluZWQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIgJIAEoCzIdLmJ1Zi52YWxpZGF0ZS5QcmVkZWZpbmVkUnVsZXNSCnByZWRlZmluZWRCbgoSYnVpbGQuYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRl\", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp]);\n\n/**\n * `Rule` represents a validation rule written in the Common Expression\n * Language (CEL) syntax. Each Rule includes a unique identifier, an\n * optional error message, and the CEL expression to evaluate. For more\n * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message Foo {\n * option (buf.validate.message).cel = {\n * id: \"foo.bar\"\n * message: \"bar must be greater than 0\"\n * expression: \"this.bar > 0\"\n * };\n * int32 bar = 1;\n * }\n * ```\n *\n * @generated from message buf.validate.Rule\n */\nexport type Rule = Message<\"buf.validate.Rule\"> & {\n /**\n * `id` is a string that serves as a machine-readable name for this Rule.\n * It should be unique within its scope, which could be either a message or a field.\n *\n * @generated from field: optional string id = 1;\n */\n id: string;\n\n /**\n * `message` is an optional field that provides a human-readable error message\n * for this Rule when the CEL expression evaluates to false. If a\n * non-empty message is provided, any strings resulting from the CEL\n * expression evaluation are ignored.\n *\n * @generated from field: optional string message = 2;\n */\n message: string;\n\n /**\n * `expression` is the actual CEL expression that will be evaluated for\n * validation. This string must resolve to either a boolean or a string\n * value. If the expression evaluates to false or a non-empty string, the\n * validation is considered failed, and the message is rejected.\n *\n * @generated from field: optional string expression = 3;\n */\n expression: string;\n};\n\n/**\n * `Rule` represents a validation rule written in the Common Expression\n * Language (CEL) syntax. Each Rule includes a unique identifier, an\n * optional error message, and the CEL expression to evaluate. For more\n * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message Foo {\n * option (buf.validate.message).cel = {\n * id: \"foo.bar\"\n * message: \"bar must be greater than 0\"\n * expression: \"this.bar > 0\"\n * };\n * int32 bar = 1;\n * }\n * ```\n *\n * @generated from message buf.validate.Rule\n */\nexport type RuleJson = {\n /**\n * `id` is a string that serves as a machine-readable name for this Rule.\n * It should be unique within its scope, which could be either a message or a field.\n *\n * @generated from field: optional string id = 1;\n */\n id?: string;\n\n /**\n * `message` is an optional field that provides a human-readable error message\n * for this Rule when the CEL expression evaluates to false. If a\n * non-empty message is provided, any strings resulting from the CEL\n * expression evaluation are ignored.\n *\n * @generated from field: optional string message = 2;\n */\n message?: string;\n\n /**\n * `expression` is the actual CEL expression that will be evaluated for\n * validation. This string must resolve to either a boolean or a string\n * value. If the expression evaluates to false or a non-empty string, the\n * validation is considered failed, and the message is rejected.\n *\n * @generated from field: optional string expression = 3;\n */\n expression?: string;\n};\n\n/**\n * Describes the message buf.validate.Rule.\n * Use `create(RuleSchema)` to create a new message.\n */\nexport const RuleSchema: GenMessage<Rule, {jsonType: RuleJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 0);\n\n/**\n * MessageRules represents validation rules that are applied to the entire message.\n * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.\n *\n * @generated from message buf.validate.MessageRules\n */\nexport type MessageRules = Message<\"buf.validate.MessageRules\"> & {\n /**\n * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.\n * These rules are written in Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this.foo > 42\",\n * };\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 3;\n */\n cel: Rule[];\n\n /**\n * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields\n * of which at most one can be present. If `required` is also specified, then exactly one\n * of the specified fields _must_ be present.\n *\n * This will enforce oneof-like constraints with a few features not provided by\n * actual Protobuf oneof declarations:\n * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,\n * only scalar fields are allowed.\n * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member\n * fields have explicit presence. This means that, for the purpose of determining\n * how many fields are set, explicitly setting such a field to its zero value is\n * effectively the same as not setting it at all.\n * 3. This will always generate validation errors for a message unmarshalled from\n * serialized data that sets more than one field. With a Protobuf oneof, when\n * multiple fields are present in the serialized form, earlier values are usually\n * silently ignored when unmarshalling, with only the last field being set when\n * unmarshalling completes.\n *\n * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means\n * only the field that is set will be validated and the unset fields are not validated according to the field rules.\n * This behavior can be overridden by setting `ignore` against a field.\n *\n * ```proto\n * message MyMessage {\n * // Only one of `field1` or `field2` _can_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field1\", \"field2\"] };\n * // Exactly one of `field3` or `field4` _must_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field3\", \"field4\"], required: true };\n * string field1 = 1;\n * bytes field2 = 2;\n * bool field3 = 3;\n * int32 field4 = 4;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;\n */\n oneof: MessageOneofRule[];\n};\n\n/**\n * MessageRules represents validation rules that are applied to the entire message.\n * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.\n *\n * @generated from message buf.validate.MessageRules\n */\nexport type MessageRulesJson = {\n /**\n * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.\n * These rules are written in Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this.foo > 42\",\n * };\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 3;\n */\n cel?: RuleJson[];\n\n /**\n * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields\n * of which at most one can be present. If `required` is also specified, then exactly one\n * of the specified fields _must_ be present.\n *\n * This will enforce oneof-like constraints with a few features not provided by\n * actual Protobuf oneof declarations:\n * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,\n * only scalar fields are allowed.\n * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member\n * fields have explicit presence. This means that, for the purpose of determining\n * how many fields are set, explicitly setting such a field to its zero value is\n * effectively the same as not setting it at all.\n * 3. This will always generate validation errors for a message unmarshalled from\n * serialized data that sets more than one field. With a Protobuf oneof, when\n * multiple fields are present in the serialized form, earlier values are usually\n * silently ignored when unmarshalling, with only the last field being set when\n * unmarshalling completes.\n *\n * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means\n * only the field that is set will be validated and the unset fields are not validated according to the field rules.\n * This behavior can be overridden by setting `ignore` against a field.\n *\n * ```proto\n * message MyMessage {\n * // Only one of `field1` or `field2` _can_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field1\", \"field2\"] };\n * // Exactly one of `field3` or `field4` _must_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field3\", \"field4\"], required: true };\n * string field1 = 1;\n * bytes field2 = 2;\n * bool field3 = 3;\n * int32 field4 = 4;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;\n */\n oneof?: MessageOneofRuleJson[];\n};\n\n/**\n * Describes the message buf.validate.MessageRules.\n * Use `create(MessageRulesSchema)` to create a new message.\n */\nexport const MessageRulesSchema: GenMessage<MessageRules, {jsonType: MessageRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 1);\n\n/**\n * @generated from message buf.validate.MessageOneofRule\n */\nexport type MessageOneofRule = Message<\"buf.validate.MessageOneofRule\"> & {\n /**\n * A list of field names to include in the oneof. All field names must be\n * defined in the message. At least one field must be specified, and\n * duplicates are not permitted.\n *\n * @generated from field: repeated string fields = 1;\n */\n fields: string[];\n\n /**\n * If true, one of the fields specified _must_ be set.\n *\n * @generated from field: optional bool required = 2;\n */\n required: boolean;\n};\n\n/**\n * @generated from message buf.validate.MessageOneofRule\n */\nexport type MessageOneofRuleJson = {\n /**\n * A list of field names to include in the oneof. All field names must be\n * defined in the message. At least one field must be specified, and\n * duplicates are not permitted.\n *\n * @generated from field: repeated string fields = 1;\n */\n fields?: string[];\n\n /**\n * If true, one of the fields specified _must_ be set.\n *\n * @generated from field: optional bool required = 2;\n */\n required?: boolean;\n};\n\n/**\n * Describes the message buf.validate.MessageOneofRule.\n * Use `create(MessageOneofRuleSchema)` to create a new message.\n */\nexport const MessageOneofRuleSchema: GenMessage<MessageOneofRule, {jsonType: MessageOneofRuleJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 2);\n\n/**\n * The `OneofRules` message type enables you to manage rules for\n * oneof fields in your protobuf messages.\n *\n * @generated from message buf.validate.OneofRules\n */\nexport type OneofRules = Message<\"buf.validate.OneofRules\"> & {\n /**\n * If `required` is true, exactly one field of the oneof must be set. A\n * validation error is returned if no fields in the oneof are set. Further rules\n * should be placed on the fields themselves to ensure they are valid values,\n * such as `min_len` or `gt`.\n *\n * ```proto\n * message MyMessage {\n * oneof value {\n * // Either `a` or `b` must be set. If `a` is set, it must also be\n * // non-empty; whereas if `b` is set, it can still be an empty string.\n * option (buf.validate.oneof).required = true;\n * string a = 1 [(buf.validate.field).string.min_len = 1];\n * string b = 2;\n * }\n * }\n * ```\n *\n * @generated from field: optional bool required = 1;\n */\n required: boolean;\n};\n\n/**\n * The `OneofRules` message type enables you to manage rules for\n * oneof fields in your protobuf messages.\n *\n * @generated from message buf.validate.OneofRules\n */\nexport type OneofRulesJson = {\n /**\n * If `required` is true, exactly one field of the oneof must be set. A\n * validation error is returned if no fields in the oneof are set. Further rules\n * should be placed on the fields themselves to ensure they are valid values,\n * such as `min_len` or `gt`.\n *\n * ```proto\n * message MyMessage {\n * oneof value {\n * // Either `a` or `b` must be set. If `a` is set, it must also be\n * // non-empty; whereas if `b` is set, it can still be an empty string.\n * option (buf.validate.oneof).required = true;\n * string a = 1 [(buf.validate.field).string.min_len = 1];\n * string b = 2;\n * }\n * }\n * ```\n *\n * @generated from field: optional bool required = 1;\n */\n required?: boolean;\n};\n\n/**\n * Describes the message buf.validate.OneofRules.\n * Use `create(OneofRulesSchema)` to create a new message.\n */\nexport const OneofRulesSchema: GenMessage<OneofRules, {jsonType: OneofRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 3);\n\n/**\n * FieldRules encapsulates the rules for each type of field. Depending on\n * the field, the correct set should be used to ensure proper validations.\n *\n * @generated from message buf.validate.FieldRules\n */\nexport type FieldRules = Message<\"buf.validate.FieldRules\"> & {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 23;\n */\n cel: Rule[];\n\n /**\n * If `required` is true, the field must be set. A validation error is returned\n * if the field is not set.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithPresence {\n * // Requires any string to be set, including the empty string.\n * optional string link = 1 [\n * (buf.validate.field).required = true\n * ];\n * // Requires true or false to be set.\n * optional bool disabled = 2 [\n * (buf.validate.field).required = true\n * ];\n * // Requires a message to be set, including the empty message.\n * SomeMessage msg = 4 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * All fields in the example above track presence. By default, Protovalidate\n * ignores rules on those fields if no value is set. `required` ensures that\n * the fields are set and valid.\n *\n * Fields that don't track presence are always validated by Protovalidate,\n * whether they are set or not. It is not necessary to add `required`. It\n * can be added to indicate that the field cannot be the zero value.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithoutPresence {\n * // `string.email` always applies, even to an empty string.\n * string link = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * // `repeated.min_items` always applies, even to an empty list.\n * repeated string labels = 2 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * // `required`, for fields that don't track presence, indicates\n * // the value of the field can't be the zero value.\n * int32 zero_value_not_allowed = 3 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * Note: While field rules can be applied to repeated items, map keys, and map\n * values, the elements are always considered to be set. Consequently,\n * specifying `repeated.items.required` is redundant.\n *\n * @generated from field: optional bool required = 25;\n */\n required: boolean;\n\n /**\n * Ignore validation rules on the field if its value matches the specified\n * criteria. See the `Ignore` enum for details.\n *\n * ```proto\n * message UpdateRequest {\n * // The uri rule only applies if the field is not an empty string.\n * string url = 1 [\n * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,\n * (buf.validate.field).string.uri = true\n * ];\n * }\n * ```\n *\n * @generated from field: optional buf.validate.Ignore ignore = 27;\n */\n ignore: Ignore;\n\n /**\n * @generated from oneof buf.validate.FieldRules.type\n */\n type: {\n /**\n * Scalar Field Types\n *\n * @generated from field: buf.validate.FloatRules float = 1;\n */\n value: FloatRules;\n case: \"float\";\n } | {\n /**\n * @generated from field: buf.validate.DoubleRules double = 2;\n */\n value: DoubleRules;\n case: \"double\";\n } | {\n /**\n * @generated from field: buf.validate.Int32Rules int32 = 3;\n */\n value: Int32Rules;\n case: \"int32\";\n } | {\n /**\n * @generated from field: buf.validate.Int64Rules int64 = 4;\n */\n value: Int64Rules;\n case: \"int64\";\n } | {\n /**\n * @generated from field: buf.validate.UInt32Rules uint32 = 5;\n */\n value: UInt32Rules;\n case: \"uint32\";\n } | {\n /**\n * @generated from field: buf.validate.UInt64Rules uint64 = 6;\n */\n value: UInt64Rules;\n case: \"uint64\";\n } | {\n /**\n * @generated from field: buf.validate.SInt32Rules sint32 = 7;\n */\n value: SInt32Rules;\n case: \"sint32\";\n } | {\n /**\n * @generated from field: buf.validate.SInt64Rules sint64 = 8;\n */\n value: SInt64Rules;\n case: \"sint64\";\n } | {\n /**\n * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;\n */\n value: Fixed32Rules;\n case: \"fixed32\";\n } | {\n /**\n * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;\n */\n value: Fixed64Rules;\n case: \"fixed64\";\n } | {\n /**\n * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;\n */\n value: SFixed32Rules;\n case: \"sfixed32\";\n } | {\n /**\n * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;\n */\n value: SFixed64Rules;\n case: \"sfixed64\";\n } | {\n /**\n * @generated from field: buf.validate.BoolRules bool = 13;\n */\n value: BoolRules;\n case: \"bool\";\n } | {\n /**\n * @generated from field: buf.validate.StringRules string = 14;\n */\n value: StringRules;\n case: \"string\";\n } | {\n /**\n * @generated from field: buf.validate.BytesRules bytes = 15;\n */\n value: BytesRules;\n case: \"bytes\";\n } | {\n /**\n * Complex Field Types\n *\n * @generated from field: buf.validate.EnumRules enum = 16;\n */\n value: EnumRules;\n case: \"enum\";\n } | {\n /**\n * @generated from field: buf.validate.RepeatedRules repeated = 18;\n */\n value: RepeatedRules;\n case: \"repeated\";\n } | {\n /**\n * @generated from field: buf.validate.MapRules map = 19;\n */\n value: MapRules;\n case: \"map\";\n } | {\n /**\n * Well-Known Field Types\n *\n * @generated from field: buf.validate.AnyRules any = 20;\n */\n value: AnyRules;\n case: \"any\";\n } | {\n /**\n * @generated from field: buf.validate.DurationRules duration = 21;\n */\n value: DurationRules;\n case: \"duration\";\n } | {\n /**\n * @generated from field: buf.validate.TimestampRules timestamp = 22;\n */\n value: TimestampRules;\n case: \"timestamp\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * FieldRules encapsulates the rules for each type of field. Depending on\n * the field, the correct set should be used to ensure proper validations.\n *\n * @generated from message buf.validate.FieldRules\n */\nexport type FieldRulesJson = {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 23;\n */\n cel?: RuleJson[];\n\n /**\n * If `required` is true, the field must be set. A validation error is returned\n * if the field is not set.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithPresence {\n * // Requires any string to be set, including the empty string.\n * optional string link = 1 [\n * (buf.validate.field).required = true\n * ];\n * // Requires true or false to be set.\n * optional bool disabled = 2 [\n * (buf.validate.field).required = true\n * ];\n * // Requires a message to be set, including the empty message.\n * SomeMessage msg = 4 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * All fields in the example above track presence. By default, Protovalidate\n * ignores rules on those fields if no value is set. `required` ensures that\n * the fields are set and valid.\n *\n * Fields that don't track presence are always validated by Protovalidate,\n * whether they are set or not. It is not necessary to add `required`. It\n * can be added to indicate that the field cannot be the zero value.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithoutPresence {\n * // `string.email` always applies, even to an empty string.\n * string link = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * // `repeated.min_items` always applies, even to an empty list.\n * repeated string labels = 2 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * // `required`, for fields that don't track presence, indicates\n * // the value of the field can't be the zero value.\n * int32 zero_value_not_allowed = 3 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * Note: While field rules can be applied to repeated items, map keys, and map\n * values, the elements are always considered to be set. Consequently,\n * specifying `repeated.items.required` is redundant.\n *\n * @generated from field: optional bool required = 25;\n */\n required?: boolean;\n\n /**\n * Ignore validation rules on the field if its value matches the specified\n * criteria. See the `Ignore` enum for details.\n *\n * ```proto\n * message UpdateRequest {\n * // The uri rule only applies if the field is not an empty string.\n * string url = 1 [\n * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,\n * (buf.validate.field).string.uri = true\n * ];\n * }\n * ```\n *\n * @generated from field: optional buf.validate.Ignore ignore = 27;\n */\n ignore?: IgnoreJson;\n\n /**\n * Scalar Field Types\n *\n * @generated from field: buf.validate.FloatRules float = 1;\n */\n float?: FloatRulesJson;\n\n /**\n * @generated from field: buf.validate.DoubleRules double = 2;\n */\n double?: DoubleRulesJson;\n\n /**\n * @generated from field: buf.validate.Int32Rules int32 = 3;\n */\n int32?: Int32RulesJson;\n\n /**\n * @generated from field: buf.validate.Int64Rules int64 = 4;\n */\n int64?: Int64RulesJson;\n\n /**\n * @generated from field: buf.validate.UInt32Rules uint32 = 5;\n */\n uint32?: UInt32RulesJson;\n\n /**\n * @generated from field: buf.validate.UInt64Rules uint64 = 6;\n */\n uint64?: UInt64RulesJson;\n\n /**\n * @generated from field: buf.validate.SInt32Rules sint32 = 7;\n */\n sint32?: SInt32RulesJson;\n\n /**\n * @generated from field: buf.validate.SInt64Rules sint64 = 8;\n */\n sint64?: SInt64RulesJson;\n\n /**\n * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;\n */\n fixed32?: Fixed32RulesJson;\n\n /**\n * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;\n */\n fixed64?: Fixed64RulesJson;\n\n /**\n * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;\n */\n sfixed32?: SFixed32RulesJson;\n\n /**\n * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;\n */\n sfixed64?: SFixed64RulesJson;\n\n /**\n * @generated from field: buf.validate.BoolRules bool = 13;\n */\n bool?: BoolRulesJson;\n\n /**\n * @generated from field: buf.validate.StringRules string = 14;\n */\n string?: StringRulesJson;\n\n /**\n * @generated from field: buf.validate.BytesRules bytes = 15;\n */\n bytes?: BytesRulesJson;\n\n /**\n * Complex Field Types\n *\n * @generated from field: buf.validate.EnumRules enum = 16;\n */\n enum?: EnumRulesJson;\n\n /**\n * @generated from field: buf.validate.RepeatedRules repeated = 18;\n */\n repeated?: RepeatedRulesJson;\n\n /**\n * @generated from field: buf.validate.MapRules map = 19;\n */\n map?: MapRulesJson;\n\n /**\n * Well-Known Field Types\n *\n * @generated from field: buf.validate.AnyRules any = 20;\n */\n any?: AnyRulesJson;\n\n /**\n * @generated from field: buf.validate.DurationRules duration = 21;\n */\n duration?: DurationRulesJson;\n\n /**\n * @generated from field: buf.validate.TimestampRules timestamp = 22;\n */\n timestamp?: TimestampRulesJson;\n};\n\n/**\n * Describes the message buf.validate.FieldRules.\n * Use `create(FieldRulesSchema)` to create a new message.\n */\nexport const FieldRulesSchema: GenMessage<FieldRules, {jsonType: FieldRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 4);\n\n/**\n * PredefinedRules are custom rules that can be re-used with\n * multiple fields.\n *\n * @generated from message buf.validate.PredefinedRules\n */\nexport type PredefinedRules = Message<\"buf.validate.PredefinedRules\"> & {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.predefined).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 1;\n */\n cel: Rule[];\n};\n\n/**\n * PredefinedRules are custom rules that can be re-used with\n * multiple fields.\n *\n * @generated from message buf.validate.PredefinedRules\n */\nexport type PredefinedRulesJson = {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.predefined).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 1;\n */\n cel?: RuleJson[];\n};\n\n/**\n * Describes the message buf.validate.PredefinedRules.\n * Use `create(PredefinedRulesSchema)` to create a new message.\n */\nexport const PredefinedRulesSchema: GenMessage<PredefinedRules, {jsonType: PredefinedRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 5);\n\n/**\n * FloatRules describes the rules applied to `float` values. These\n * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.\n *\n * @generated from message buf.validate.FloatRules\n */\nexport type FloatRules = Message<\"buf.validate.FloatRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must equal 42.0\n * float value = 1 [(buf.validate.field).float.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional float const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.FloatRules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than 10.0\n * float value = 1 [(buf.validate.field).float.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: float lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than or equal to 10.0\n * float value = 1 [(buf.validate.field).float.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: float lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.FloatRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than 5.0 [float.gt]\n * float value = 1 [(buf.validate.field).float.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [float.gt_lt]\n * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than or equal to 5.0 [float.gte]\n * float value = 1 [(buf.validate.field).float.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]\n * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float in = 6;\n */\n in: number[];\n\n /**\n * `in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must not be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float not_in = 7;\n */\n notIn: number[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFloat {\n * float value = 1 [\n * (buf.validate.field).float.example = 1.0,\n * (buf.validate.field).float.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated float example = 9;\n */\n example: number[];\n};\n\n/**\n * FloatRules describes the rules applied to `float` values. These\n * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.\n *\n * @generated from message buf.validate.FloatRules\n */\nexport type FloatRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must equal 42.0\n * float value = 1 [(buf.validate.field).float.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional float const = 1;\n */\n const?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than 10.0\n * float value = 1 [(buf.validate.field).float.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: float lt = 2;\n */\n lt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than or equal to 10.0\n * float value = 1 [(buf.validate.field).float.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: float lte = 3;\n */\n lte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than 5.0 [float.gt]\n * float value = 1 [(buf.validate.field).float.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [float.gt_lt]\n * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gt = 4;\n */\n gt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than or equal to 5.0 [float.gte]\n * float value = 1 [(buf.validate.field).float.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]\n * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gte = 5;\n */\n gte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float in = 6;\n */\n in?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must not be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float not_in = 7;\n */\n notIn?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFloat {\n * float value = 1 [\n * (buf.validate.field).float.example = 1.0,\n * (buf.validate.field).float.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated float example = 9;\n */\n example?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n};\n\n/**\n * Describes the message buf.validate.FloatRules.\n * Use `create(FloatRulesSchema)` to create a new message.\n */\nexport const FloatRulesSchema: GenMessage<FloatRules, {jsonType: FloatRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 6);\n\n/**\n * DoubleRules describes the rules applied to `double` values. These\n * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.\n *\n * @generated from message buf.validate.DoubleRules\n */\nexport type DoubleRules = Message<\"buf.validate.DoubleRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must equal 42.0\n * double value = 1 [(buf.validate.field).double.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional double const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.DoubleRules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than 10.0\n * double value = 1 [(buf.validate.field).double.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: double lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified value\n * (field <= value). If the field value is greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than or equal to 10.0\n * double value = 1 [(buf.validate.field).double.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: double lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.DoubleRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,\n * the range is reversed, and the field value must be outside the specified\n * range. If the field value doesn't meet the required conditions, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than 5.0 [double.gt]\n * double value = 1 [(buf.validate.field).double.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [double.gt_lt]\n * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than or equal to 5.0 [double.gte]\n * double value = 1 [(buf.validate.field).double.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]\n * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must not be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double not_in = 7;\n */\n notIn: number[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDouble {\n * double value = 1 [\n * (buf.validate.field).double.example = 1.0,\n * (buf.validate.field).double.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated double example = 9;\n */\n example: number[];\n};\n\n/**\n * DoubleRules describes the rules applied to `double` values. These\n * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.\n *\n * @generated from message buf.validate.DoubleRules\n */\nexport type DoubleRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must equal 42.0\n * double value = 1 [(buf.validate.field).double.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional double const = 1;\n */\n const?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than 10.0\n * double value = 1 [(buf.validate.field).double.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: double lt = 2;\n */\n lt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lte` requires the field value to be less than or equal to the specified value\n * (field <= value). If the field value is greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than or equal to 10.0\n * double value = 1 [(buf.validate.field).double.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: double lte = 3;\n */\n lte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,\n * the range is reversed, and the field value must be outside the specified\n * range. If the field value doesn't meet the required conditions, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than 5.0 [double.gt]\n * double value = 1 [(buf.validate.field).double.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [double.gt_lt]\n * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gt = 4;\n */\n gt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than or equal to 5.0 [double.gte]\n * double value = 1 [(buf.validate.field).double.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]\n * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gte = 5;\n */\n gte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double in = 6;\n */\n in?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must not be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double not_in = 7;\n */\n notIn?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDouble {\n * double value = 1 [\n * (buf.validate.field).double.example = 1.0,\n * (buf.validate.field).double.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated double example = 9;\n */\n example?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n};\n\n/**\n * Describes the message buf.validate.DoubleRules.\n * Use `create(DoubleRulesSchema)` to create a new message.\n */\nexport const DoubleRulesSchema: GenMessage<DoubleRules, {jsonType: DoubleRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 7);\n\n/**\n * Int32Rules describes the rules applied to `int32` values. These\n * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int32Rules\n */\nexport type Int32Rules = Message<\"buf.validate.Int32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must equal 42\n * int32 value = 1 [(buf.validate.field).int32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.Int32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than 10\n * int32 value = 1 [(buf.validate.field).int32.lt = 10];\n * }\n * ```\n *\n * @generated from field: int32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than or equal to 10\n * int32 value = 1 [(buf.validate.field).int32.lte = 10];\n * }\n * ```\n *\n * @generated from field: int32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Int32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than 5 [int32.gt]\n * int32 value = 1 [(buf.validate.field).int32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int32.gt_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified value\n * (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than or equal to 5 [int32.gte]\n * int32 value = 1 [(buf.validate.field).int32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must not be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt32 {\n * int32 value = 1 [\n * (buf.validate.field).int32.example = 1,\n * (buf.validate.field).int32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Int32Rules describes the rules applied to `int32` values. These\n * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int32Rules\n */\nexport type Int32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must equal 42\n * int32 value = 1 [(buf.validate.field).int32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than 10\n * int32 value = 1 [(buf.validate.field).int32.lt = 10];\n * }\n * ```\n *\n * @generated from field: int32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than or equal to 10\n * int32 value = 1 [(buf.validate.field).int32.lte = 10];\n * }\n * ```\n *\n * @generated from field: int32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than 5 [int32.gt]\n * int32 value = 1 [(buf.validate.field).int32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int32.gt_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified value\n * (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than or equal to 5 [int32.gte]\n * int32 value = 1 [(buf.validate.field).int32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must not be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt32 {\n * int32 value = 1 [\n * (buf.validate.field).int32.example = 1,\n * (buf.validate.field).int32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.Int32Rules.\n * Use `create(Int32RulesSchema)` to create a new message.\n */\nexport const Int32RulesSchema: GenMessage<Int32Rules, {jsonType: Int32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 8);\n\n/**\n * Int64Rules describes the rules applied to `int64` values. These\n * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int64Rules\n */\nexport type Int64Rules = Message<\"buf.validate.Int64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must equal 42\n * int64 value = 1 [(buf.validate.field).int64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.Int64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than 10\n * int64 value = 1 [(buf.validate.field).int64.lt = 10];\n * }\n * ```\n *\n * @generated from field: int64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than or equal to 10\n * int64 value = 1 [(buf.validate.field).int64.lte = 10];\n * }\n * ```\n *\n * @generated from field: int64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Int64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than 5 [int64.gt]\n * int64 value = 1 [(buf.validate.field).int64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int64.gt_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than or equal to 5 [int64.gte]\n * int64 value = 1 [(buf.validate.field).int64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must not be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt64 {\n * int64 value = 1 [\n * (buf.validate.field).int64.example = 1,\n * (buf.validate.field).int64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int64 example = 9;\n */\n example: bigint[];\n};\n\n/**\n * Int64Rules describes the rules applied to `int64` values. These\n * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int64Rules\n */\nexport type Int64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must equal 42\n * int64 value = 1 [(buf.validate.field).int64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than 10\n * int64 value = 1 [(buf.validate.field).int64.lt = 10];\n * }\n * ```\n *\n * @generated from field: int64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than or equal to 10\n * int64 value = 1 [(buf.validate.field).int64.lte = 10];\n * }\n * ```\n *\n * @generated from field: int64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than 5 [int64.gt]\n * int64 value = 1 [(buf.validate.field).int64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int64.gt_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than or equal to 5 [int64.gte]\n * int64 value = 1 [(buf.validate.field).int64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must not be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt64 {\n * int64 value = 1 [\n * (buf.validate.field).int64.example = 1,\n * (buf.validate.field).int64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int64 example = 9;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.Int64Rules.\n * Use `create(Int64RulesSchema)` to create a new message.\n */\nexport const Int64RulesSchema: GenMessage<Int64Rules, {jsonType: Int64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 9);\n\n/**\n * UInt32Rules describes the rules applied to `uint32` values. These\n * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt32Rules\n */\nexport type UInt32Rules = Message<\"buf.validate.UInt32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must equal 42\n * uint32 value = 1 [(buf.validate.field).uint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.UInt32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than 10\n * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than or equal to 10\n * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.UInt32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than 5 [uint32.gt]\n * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint32.gt_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than or equal to 5 [uint32.gte]\n * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must not be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt32 {\n * uint32 value = 1 [\n * (buf.validate.field).uint32.example = 1,\n * (buf.validate.field).uint32.example = 10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint32 example = 8;\n */\n example: number[];\n};\n\n/**\n * UInt32Rules describes the rules applied to `uint32` values. These\n * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt32Rules\n */\nexport type UInt32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must equal 42\n * uint32 value = 1 [(buf.validate.field).uint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than 10\n * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than or equal to 10\n * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than 5 [uint32.gt]\n * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint32.gt_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than or equal to 5 [uint32.gte]\n * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must not be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt32 {\n * uint32 value = 1 [\n * (buf.validate.field).uint32.example = 1,\n * (buf.validate.field).uint32.example = 10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.UInt32Rules.\n * Use `create(UInt32RulesSchema)` to create a new message.\n */\nexport const UInt32RulesSchema: GenMessage<UInt32Rules, {jsonType: UInt32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 10);\n\n/**\n * UInt64Rules describes the rules applied to `uint64` values. These\n * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt64Rules\n */\nexport type UInt64Rules = Message<\"buf.validate.UInt64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must equal 42\n * uint64 value = 1 [(buf.validate.field).uint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.UInt64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than 10\n * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than or equal to 10\n * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.UInt64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than 5 [uint64.gt]\n * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint64.gt_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than or equal to 5 [uint64.gte]\n * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must not be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt64 {\n * uint64 value = 1 [\n * (buf.validate.field).uint64.example = 1,\n * (buf.validate.field).uint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * UInt64Rules describes the rules applied to `uint64` values. These\n * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt64Rules\n */\nexport type UInt64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must equal 42\n * uint64 value = 1 [(buf.validate.field).uint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than 10\n * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than or equal to 10\n * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than 5 [uint64.gt]\n * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint64.gt_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than or equal to 5 [uint64.gte]\n * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must not be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt64 {\n * uint64 value = 1 [\n * (buf.validate.field).uint64.example = 1,\n * (buf.validate.field).uint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.UInt64Rules.\n * Use `create(UInt64RulesSchema)` to create a new message.\n */\nexport const UInt64RulesSchema: GenMessage<UInt64Rules, {jsonType: UInt64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 11);\n\n/**\n * SInt32Rules describes the rules applied to `sint32` values.\n *\n * @generated from message buf.validate.SInt32Rules\n */\nexport type SInt32Rules = Message<\"buf.validate.SInt32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must equal 42\n * sint32 value = 1 [(buf.validate.field).sint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.SInt32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than 10\n * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than or equal to 10\n * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SInt32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than 5 [sint32.gt]\n * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint32.gt_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than or equal to 5 [sint32.gte]\n * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must not be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt32 {\n * sint32 value = 1 [\n * (buf.validate.field).sint32.example = 1,\n * (buf.validate.field).sint32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint32 example = 8;\n */\n example: number[];\n};\n\n/**\n * SInt32Rules describes the rules applied to `sint32` values.\n *\n * @generated from message buf.validate.SInt32Rules\n */\nexport type SInt32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must equal 42\n * sint32 value = 1 [(buf.validate.field).sint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than 10\n * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than or equal to 10\n * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than 5 [sint32.gt]\n * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint32.gt_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than or equal to 5 [sint32.gte]\n * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must not be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt32 {\n * sint32 value = 1 [\n * (buf.validate.field).sint32.example = 1,\n * (buf.validate.field).sint32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.SInt32Rules.\n * Use `create(SInt32RulesSchema)` to create a new message.\n */\nexport const SInt32RulesSchema: GenMessage<SInt32Rules, {jsonType: SInt32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 12);\n\n/**\n * SInt64Rules describes the rules applied to `sint64` values.\n *\n * @generated from message buf.validate.SInt64Rules\n */\nexport type SInt64Rules = Message<\"buf.validate.SInt64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must equal 42\n * sint64 value = 1 [(buf.validate.field).sint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.SInt64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than 10\n * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than or equal to 10\n * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SInt64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than 5 [sint64.gt]\n * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint64.gt_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than or equal to 5 [sint64.gte]\n * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must not be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt64 {\n * sint64 value = 1 [\n * (buf.validate.field).sint64.example = 1,\n * (buf.validate.field).sint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * SInt64Rules describes the rules applied to `sint64` values.\n *\n * @generated from message buf.validate.SInt64Rules\n */\nexport type SInt64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must equal 42\n * sint64 value = 1 [(buf.validate.field).sint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than 10\n * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than or equal to 10\n * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than 5 [sint64.gt]\n * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint64.gt_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than or equal to 5 [sint64.gte]\n * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must not be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt64 {\n * sint64 value = 1 [\n * (buf.validate.field).sint64.example = 1,\n * (buf.validate.field).sint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.SInt64Rules.\n * Use `create(SInt64RulesSchema)` to create a new message.\n */\nexport const SInt64RulesSchema: GenMessage<SInt64Rules, {jsonType: SInt64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 13);\n\n/**\n * Fixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.Fixed32Rules\n */\nexport type Fixed32Rules = Message<\"buf.validate.Fixed32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must equal 42\n * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.Fixed32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than or equal to 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Fixed32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than 5 [fixed32.gt]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed32.gt_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than or equal to 5 [fixed32.gte]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must not be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed32 {\n * fixed32 value = 1 [\n * (buf.validate.field).fixed32.example = 1,\n * (buf.validate.field).fixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Fixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.Fixed32Rules\n */\nexport type Fixed32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must equal 42\n * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than or equal to 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than 5 [fixed32.gt]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed32.gt_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than or equal to 5 [fixed32.gte]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must not be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed32 {\n * fixed32 value = 1 [\n * (buf.validate.field).fixed32.example = 1,\n * (buf.validate.field).fixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.Fixed32Rules.\n * Use `create(Fixed32RulesSchema)` to create a new message.\n */\nexport const Fixed32RulesSchema: GenMessage<Fixed32Rules, {jsonType: Fixed32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 14);\n\n/**\n * Fixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.Fixed64Rules\n */\nexport type Fixed64Rules = Message<\"buf.validate.Fixed64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must equal 42\n * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.Fixed64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than or equal to 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Fixed64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than 5 [fixed64.gt]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed64.gt_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than or equal to 5 [fixed64.gte]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must not be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed64 {\n * fixed64 value = 1 [\n * (buf.validate.field).fixed64.example = 1,\n * (buf.validate.field).fixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * Fixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.Fixed64Rules\n */\nexport type Fixed64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must equal 42\n * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than or equal to 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than 5 [fixed64.gt]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed64.gt_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than or equal to 5 [fixed64.gte]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must not be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed64 {\n * fixed64 value = 1 [\n * (buf.validate.field).fixed64.example = 1,\n * (buf.validate.field).fixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.Fixed64Rules.\n * Use `create(Fixed64RulesSchema)` to create a new message.\n */\nexport const Fixed64RulesSchema: GenMessage<Fixed64Rules, {jsonType: Fixed64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 15);\n\n/**\n * SFixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.SFixed32Rules\n */\nexport type SFixed32Rules = Message<\"buf.validate.SFixed32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must equal 42\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.SFixed32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than or equal to 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SFixed32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than 5 [sfixed32.gt]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than or equal to 5 [sfixed32.gte]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must not be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed32 {\n * sfixed32 value = 1 [\n * (buf.validate.field).sfixed32.example = 1,\n * (buf.validate.field).sfixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 example = 8;\n */\n example: number[];\n};\n\n/**\n * SFixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.SFixed32Rules\n */\nexport type SFixed32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must equal 42\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than or equal to 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than 5 [sfixed32.gt]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than or equal to 5 [sfixed32.gte]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must not be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed32 {\n * sfixed32 value = 1 [\n * (buf.validate.field).sfixed32.example = 1,\n * (buf.validate.field).sfixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.SFixed32Rules.\n * Use `create(SFixed32RulesSchema)` to create a new message.\n */\nexport const SFixed32RulesSchema: GenMessage<SFixed32Rules, {jsonType: SFixed32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 16);\n\n/**\n * SFixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.SFixed64Rules\n */\nexport type SFixed64Rules = Message<\"buf.validate.SFixed64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must equal 42\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.SFixed64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than or equal to 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SFixed64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than 5 [sfixed64.gt]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than or equal to 5 [sfixed64.gte]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must not be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed64 {\n * sfixed64 value = 1 [\n * (buf.validate.field).sfixed64.example = 1,\n * (buf.validate.field).sfixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * SFixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.SFixed64Rules\n */\nexport type SFixed64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must equal 42\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than or equal to 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than 5 [sfixed64.gt]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than or equal to 5 [sfixed64.gte]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must not be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed64 {\n * sfixed64 value = 1 [\n * (buf.validate.field).sfixed64.example = 1,\n * (buf.validate.field).sfixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.SFixed64Rules.\n * Use `create(SFixed64RulesSchema)` to create a new message.\n */\nexport const SFixed64RulesSchema: GenMessage<SFixed64Rules, {jsonType: SFixed64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 17);\n\n/**\n * BoolRules describes the rules applied to `bool` values. These rules\n * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BoolRules\n */\nexport type BoolRules = Message<\"buf.validate.BoolRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified boolean value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBool {\n * // value must equal true\n * bool value = 1 [(buf.validate.field).bool.const = true];\n * }\n * ```\n *\n * @generated from field: optional bool const = 1;\n */\n const: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBool {\n * bool value = 1 [\n * (buf.validate.field).bool.example = 1,\n * (buf.validate.field).bool.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bool example = 2;\n */\n example: boolean[];\n};\n\n/**\n * BoolRules describes the rules applied to `bool` values. These rules\n * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BoolRules\n */\nexport type BoolRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified boolean value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBool {\n * // value must equal true\n * bool value = 1 [(buf.validate.field).bool.const = true];\n * }\n * ```\n *\n * @generated from field: optional bool const = 1;\n */\n const?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBool {\n * bool value = 1 [\n * (buf.validate.field).bool.example = 1,\n * (buf.validate.field).bool.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bool example = 2;\n */\n example?: boolean[];\n};\n\n/**\n * Describes the message buf.validate.BoolRules.\n * Use `create(BoolRulesSchema)` to create a new message.\n */\nexport const BoolRulesSchema: GenMessage<BoolRules, {jsonType: BoolRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 18);\n\n/**\n * StringRules describes the rules applied to `string` values These\n * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.\n *\n * @generated from message buf.validate.StringRules\n */\nexport type StringRules = Message<\"buf.validate.StringRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyString {\n * // value must equal `hello`\n * string value = 1 [(buf.validate.field).string.const = \"hello\"];\n * }\n * ```\n *\n * @generated from field: optional string const = 1;\n */\n const: string;\n\n /**\n * `len` dictates that the field value must have the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value does not meet the specified\n * length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 5 characters\n * string value = 1 [(buf.validate.field).string.len = 5];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 19;\n */\n len: bigint;\n\n /**\n * `min_len` specifies that the field value must have at least the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value contains fewer characters, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 3 characters\n * string value = 1 [(buf.validate.field).string.min_len = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen: bigint;\n\n /**\n * `max_len` specifies that the field value must have no more than the specified\n * number of characters (Unicode code points), which may differ from the\n * number of bytes in the string. If the field value contains more characters,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 10 characters\n * string value = 1 [(buf.validate.field).string.max_len = 10];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen: bigint;\n\n /**\n * `len_bytes` dictates that the field value must have the specified number of\n * bytes. If the field value does not match the specified length in bytes,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 6 bytes\n * string value = 1 [(buf.validate.field).string.len_bytes = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 len_bytes = 20;\n */\n lenBytes: bigint;\n\n /**\n * `min_bytes` specifies that the field value must have at least the specified\n * number of bytes. If the field value contains fewer bytes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 4 bytes\n * string value = 1 [(buf.validate.field).string.min_bytes = 4];\n * }\n *\n * ```\n *\n * @generated from field: optional uint64 min_bytes = 4;\n */\n minBytes: bigint;\n\n /**\n * `max_bytes` specifies that the field value must have no more than the\n * specified number of bytes. If the field value contains more bytes, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 8 bytes\n * string value = 1 [(buf.validate.field).string.max_bytes = 8];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_bytes = 5;\n */\n maxBytes: bigint;\n\n /**\n * `pattern` specifies that the field value must match the specified\n * regular expression (RE2 syntax), with the expression provided without any\n * delimiters. If the field value doesn't match the regular expression, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not match regex pattern `^[a-zA-Z]//$`\n * string value = 1 [(buf.validate.field).string.pattern = \"^[a-zA-Z]//$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 6;\n */\n pattern: string;\n\n /**\n * `prefix` specifies that the field value must have the\n * specified substring at the beginning of the string. If the field value\n * doesn't start with the specified prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value does not have prefix `pre`\n * string value = 1 [(buf.validate.field).string.prefix = \"pre\"];\n * }\n * ```\n *\n * @generated from field: optional string prefix = 7;\n */\n prefix: string;\n\n /**\n * `suffix` specifies that the field value must have the\n * specified substring at the end of the string. If the field value doesn't\n * end with the specified suffix, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not have suffix `post`\n * string value = 1 [(buf.validate.field).string.suffix = \"post\"];\n * }\n * ```\n *\n * @generated from field: optional string suffix = 8;\n */\n suffix: string;\n\n /**\n * `contains` specifies that the field value must have the\n * specified substring anywhere in the string. If the field value doesn't\n * contain the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not contain substring `inside`.\n * string value = 1 [(buf.validate.field).string.contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string contains = 9;\n */\n contains: string;\n\n /**\n * `not_contains` specifies that the field value must not have the\n * specified substring anywhere in the string. If the field value contains\n * the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value contains substring `inside`.\n * string value = 1 [(buf.validate.field).string.not_contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string not_contains = 23;\n */\n notContains: string;\n\n /**\n * `in` specifies that the field value must be equal to one of the specified\n * values. If the field value isn't one of the specified values, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be in list [\"apple\", \"banana\"]\n * string value = 1 [(buf.validate.field).string.in = \"apple\", (buf.validate.field).string.in = \"banana\"];\n * }\n * ```\n *\n * @generated from field: repeated string in = 10;\n */\n in: string[];\n\n /**\n * `not_in` specifies that the field value cannot be equal to any\n * of the specified values. If the field value is one of the specified values,\n * an error message will be generated.\n * ```proto\n * message MyString {\n * // value must not be in list [\"orange\", \"grape\"]\n * string value = 1 [(buf.validate.field).string.not_in = \"orange\", (buf.validate.field).string.not_in = \"grape\"];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 11;\n */\n notIn: string[];\n\n /**\n * `WellKnown` rules provide advanced rules against common string\n * patterns.\n *\n * @generated from oneof buf.validate.StringRules.well_known\n */\n wellKnown: {\n /**\n * `email` specifies that the field value must be a valid email address, for\n * example \"foo@example.com\".\n *\n * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).\n * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),\n * which allows many unexpected forms of email addresses and will easily match\n * a typographical error.\n *\n * If the field value isn't a valid email address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid email address\n * string value = 1 [(buf.validate.field).string.email = true];\n * }\n * ```\n *\n * @generated from field: bool email = 12;\n */\n value: boolean;\n case: \"email\";\n } | {\n /**\n * `hostname` specifies that the field value must be a valid hostname, for\n * example \"foo.example.com\".\n *\n * A valid hostname follows the rules below:\n * - The name consists of one or more labels, separated by a dot (\".\").\n * - Each label can be 1 to 63 alphanumeric characters.\n * - A label can contain hyphens (\"-\"), but must not start or end with a hyphen.\n * - The right-most label must not be digits only.\n * - The name can have a trailing dot\u2014for example, \"foo.example.com.\".\n * - The name can be 253 characters at most, excluding the optional trailing dot.\n *\n * If the field value isn't a valid hostname, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname\n * string value = 1 [(buf.validate.field).string.hostname = true];\n * }\n * ```\n *\n * @generated from field: bool hostname = 13;\n */\n value: boolean;\n case: \"hostname\";\n } | {\n /**\n * `ip` specifies that the field value must be a valid IP (v4 or v6) address.\n *\n * IPv4 addresses are expected in the dotted decimal format\u2014for example, \"192.168.5.21\".\n * IPv6 addresses are expected in their text representation\u2014for example, \"::1\",\n * or \"2001:0DB8:ABCD:0012::0\".\n *\n * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone identifiers for IPv6 addresses (for example, \"fe80::a%en1\") are supported.\n *\n * If the field value isn't a valid IP address, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP address\n * string value = 1 [(buf.validate.field).string.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 14;\n */\n value: boolean;\n case: \"ip\";\n } | {\n /**\n * `ipv4` specifies that the field value must be a valid IPv4 address\u2014for\n * example \"192.168.5.21\". If the field value isn't a valid IPv4 address, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address\n * string value = 1 [(buf.validate.field).string.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 15;\n */\n value: boolean;\n case: \"ipv4\";\n } | {\n /**\n * `ipv6` specifies that the field value must be a valid IPv6 address\u2014for\n * example \"::1\", or \"d7a:115c:a1e0:ab12:4843:cd96:626b:430b\". If the field\n * value is not a valid IPv6 address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address\n * string value = 1 [(buf.validate.field).string.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 16;\n */\n value: boolean;\n case: \"ipv6\";\n } | {\n /**\n * `uri` specifies that the field value must be a valid URI, for example\n * \"https://example.com/foo/bar?baz=quux#frag\".\n *\n * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI\n * string value = 1 [(buf.validate.field).string.uri = true];\n * }\n * ```\n *\n * @generated from field: bool uri = 17;\n */\n value: boolean;\n case: \"uri\";\n } | {\n /**\n * `uri_ref` specifies that the field value must be a valid URI Reference\u2014either\n * a URI such as \"https://example.com/foo/bar?baz=quux#frag\", or a Relative\n * Reference such as \"./foo/bar?query\".\n *\n * URI, URI Reference, and Relative Reference are defined in the internet\n * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone\n * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI Reference, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI Reference\n * string value = 1 [(buf.validate.field).string.uri_ref = true];\n * }\n * ```\n *\n * @generated from field: bool uri_ref = 18;\n */\n value: boolean;\n case: \"uriRef\";\n } | {\n /**\n * `address` specifies that the field value must be either a valid hostname\n * (for example, \"example.com\"), or a valid IP (v4 or v6) address (for example,\n * \"192.168.0.1\", or \"::1\"). If the field value isn't a valid hostname or IP,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname, or ip address\n * string value = 1 [(buf.validate.field).string.address = true];\n * }\n * ```\n *\n * @generated from field: bool address = 21;\n */\n value: boolean;\n case: \"address\";\n } | {\n /**\n * `uuid` specifies that the field value must be a valid UUID as defined by\n * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the\n * field value isn't a valid UUID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid UUID\n * string value = 1 [(buf.validate.field).string.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 22;\n */\n value: boolean;\n case: \"uuid\";\n } | {\n /**\n * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes\n * omitted. If the field value isn't a valid UUID without dashes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid trimmed UUID\n * string value = 1 [(buf.validate.field).string.tuuid = true];\n * }\n * ```\n *\n * @generated from field: bool tuuid = 33;\n */\n value: boolean;\n case: \"tuuid\";\n } | {\n /**\n * `ip_with_prefixlen` specifies that the field value must be a valid IP\n * (v4 or v6) address with prefix length\u2014for example, \"192.168.5.21/16\" or\n * \"2001:0DB8:ABCD:0012::F1/64\". If the field value isn't a valid IP with\n * prefix length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP with prefix length\n * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ip_with_prefixlen = 26;\n */\n value: boolean;\n case: \"ipWithPrefixlen\";\n } | {\n /**\n * `ipv4_with_prefixlen` specifies that the field value must be a valid\n * IPv4 address with prefix length\u2014for example, \"192.168.5.21/16\". If the\n * field value isn't a valid IPv4 address with prefix length, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address with prefix length\n * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_with_prefixlen = 27;\n */\n value: boolean;\n case: \"ipv4WithPrefixlen\";\n } | {\n /**\n * `ipv6_with_prefixlen` specifies that the field value must be a valid\n * IPv6 address with prefix length\u2014for example, \"2001:0DB8:ABCD:0012::F1/64\".\n * If the field value is not a valid IPv6 address with prefix length,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address prefix length\n * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_with_prefixlen = 28;\n */\n value: boolean;\n case: \"ipv6WithPrefixlen\";\n } | {\n /**\n * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)\n * prefix\u2014for example, \"192.168.0.0/16\" or \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value isn't a valid IP prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP prefix\n * string value = 1 [(buf.validate.field).string.ip_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ip_prefix = 29;\n */\n value: boolean;\n case: \"ipPrefix\";\n } | {\n /**\n * `ipv4_prefix` specifies that the field value must be a valid IPv4\n * prefix, for example \"192.168.0.0/16\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"192.168.0.0/16\" designates the left-most 16 bits for the prefix,\n * and the remaining 16 bits must be zero.\n *\n * If the field value isn't a valid IPv4 prefix, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 prefix\n * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_prefix = 30;\n */\n value: boolean;\n case: \"ipv4Prefix\";\n } | {\n /**\n * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix\u2014for\n * example, \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value is not a valid IPv6 prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 prefix\n * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_prefix = 31;\n */\n value: boolean;\n case: \"ipv6Prefix\";\n } | {\n /**\n * `host_and_port` specifies that the field value must be valid host/port\n * pair\u2014for example, \"example.com:8080\".\n *\n * The host can be one of:\n * - An IPv4 address in dotted decimal format\u2014for example, \"192.168.5.21\".\n * - An IPv6 address enclosed in square brackets\u2014for example, \"[2001:0DB8:ABCD:0012::F1]\".\n * - A hostname\u2014for example, \"example.com\".\n *\n * The port is separated by a colon. It must be non-empty, with a decimal number\n * in the range of 0-65535, inclusive.\n *\n * @generated from field: bool host_and_port = 32;\n */\n value: boolean;\n case: \"hostAndPort\";\n } | {\n /**\n * `well_known_regex` specifies a common well-known pattern\n * defined as a regex. If the field value doesn't match the well-known\n * regex, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid HTTP header value\n * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];\n * }\n * ```\n *\n * #### KnownRegex\n *\n * `well_known_regex` contains some well-known patterns.\n *\n * | Name | Number | Description |\n * |-------------------------------|--------|-------------------------------------------|\n * | KNOWN_REGEX_UNSPECIFIED | 0 | |\n * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |\n * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |\n *\n * @generated from field: buf.validate.KnownRegex well_known_regex = 24;\n */\n value: KnownRegex;\n case: \"wellKnownRegex\";\n } | { case: undefined; value?: undefined };\n\n /**\n * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to\n * enable strict header validation. By default, this is true, and HTTP header\n * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser\n * validations that only disallow `\\r\\n\\0` characters, which can be used to\n * bypass header matching rules.\n *\n * ```proto\n * message MyString {\n * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.\n * string value = 1 [(buf.validate.field).string.strict = false];\n * }\n * ```\n *\n * @generated from field: optional bool strict = 25;\n */\n strict: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyString {\n * string value = 1 [\n * (buf.validate.field).string.example = \"hello\",\n * (buf.validate.field).string.example = \"world\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated string example = 34;\n */\n example: string[];\n};\n\n/**\n * StringRules describes the rules applied to `string` values These\n * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.\n *\n * @generated from message buf.validate.StringRules\n */\nexport type StringRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyString {\n * // value must equal `hello`\n * string value = 1 [(buf.validate.field).string.const = \"hello\"];\n * }\n * ```\n *\n * @generated from field: optional string const = 1;\n */\n const?: string;\n\n /**\n * `len` dictates that the field value must have the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value does not meet the specified\n * length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 5 characters\n * string value = 1 [(buf.validate.field).string.len = 5];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 19;\n */\n len?: string;\n\n /**\n * `min_len` specifies that the field value must have at least the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value contains fewer characters, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 3 characters\n * string value = 1 [(buf.validate.field).string.min_len = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen?: string;\n\n /**\n * `max_len` specifies that the field value must have no more than the specified\n * number of characters (Unicode code points), which may differ from the\n * number of bytes in the string. If the field value contains more characters,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 10 characters\n * string value = 1 [(buf.validate.field).string.max_len = 10];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen?: string;\n\n /**\n * `len_bytes` dictates that the field value must have the specified number of\n * bytes. If the field value does not match the specified length in bytes,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 6 bytes\n * string value = 1 [(buf.validate.field).string.len_bytes = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 len_bytes = 20;\n */\n lenBytes?: string;\n\n /**\n * `min_bytes` specifies that the field value must have at least the specified\n * number of bytes. If the field value contains fewer bytes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 4 bytes\n * string value = 1 [(buf.validate.field).string.min_bytes = 4];\n * }\n *\n * ```\n *\n * @generated from field: optional uint64 min_bytes = 4;\n */\n minBytes?: string;\n\n /**\n * `max_bytes` specifies that the field value must have no more than the\n * specified number of bytes. If the field value contains more bytes, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 8 bytes\n * string value = 1 [(buf.validate.field).string.max_bytes = 8];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_bytes = 5;\n */\n maxBytes?: string;\n\n /**\n * `pattern` specifies that the field value must match the specified\n * regular expression (RE2 syntax), with the expression provided without any\n * delimiters. If the field value doesn't match the regular expression, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not match regex pattern `^[a-zA-Z]//$`\n * string value = 1 [(buf.validate.field).string.pattern = \"^[a-zA-Z]//$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 6;\n */\n pattern?: string;\n\n /**\n * `prefix` specifies that the field value must have the\n * specified substring at the beginning of the string. If the field value\n * doesn't start with the specified prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value does not have prefix `pre`\n * string value = 1 [(buf.validate.field).string.prefix = \"pre\"];\n * }\n * ```\n *\n * @generated from field: optional string prefix = 7;\n */\n prefix?: string;\n\n /**\n * `suffix` specifies that the field value must have the\n * specified substring at the end of the string. If the field value doesn't\n * end with the specified suffix, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not have suffix `post`\n * string value = 1 [(buf.validate.field).string.suffix = \"post\"];\n * }\n * ```\n *\n * @generated from field: optional string suffix = 8;\n */\n suffix?: string;\n\n /**\n * `contains` specifies that the field value must have the\n * specified substring anywhere in the string. If the field value doesn't\n * contain the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not contain substring `inside`.\n * string value = 1 [(buf.validate.field).string.contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string contains = 9;\n */\n contains?: string;\n\n /**\n * `not_contains` specifies that the field value must not have the\n * specified substring anywhere in the string. If the field value contains\n * the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value contains substring `inside`.\n * string value = 1 [(buf.validate.field).string.not_contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string not_contains = 23;\n */\n notContains?: string;\n\n /**\n * `in` specifies that the field value must be equal to one of the specified\n * values. If the field value isn't one of the specified values, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be in list [\"apple\", \"banana\"]\n * string value = 1 [(buf.validate.field).string.in = \"apple\", (buf.validate.field).string.in = \"banana\"];\n * }\n * ```\n *\n * @generated from field: repeated string in = 10;\n */\n in?: string[];\n\n /**\n * `not_in` specifies that the field value cannot be equal to any\n * of the specified values. If the field value is one of the specified values,\n * an error message will be generated.\n * ```proto\n * message MyString {\n * // value must not be in list [\"orange\", \"grape\"]\n * string value = 1 [(buf.validate.field).string.not_in = \"orange\", (buf.validate.field).string.not_in = \"grape\"];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 11;\n */\n notIn?: string[];\n\n /**\n * `email` specifies that the field value must be a valid email address, for\n * example \"foo@example.com\".\n *\n * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).\n * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),\n * which allows many unexpected forms of email addresses and will easily match\n * a typographical error.\n *\n * If the field value isn't a valid email address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid email address\n * string value = 1 [(buf.validate.field).string.email = true];\n * }\n * ```\n *\n * @generated from field: bool email = 12;\n */\n email?: boolean;\n\n /**\n * `hostname` specifies that the field value must be a valid hostname, for\n * example \"foo.example.com\".\n *\n * A valid hostname follows the rules below:\n * - The name consists of one or more labels, separated by a dot (\".\").\n * - Each label can be 1 to 63 alphanumeric characters.\n * - A label can contain hyphens (\"-\"), but must not start or end with a hyphen.\n * - The right-most label must not be digits only.\n * - The name can have a trailing dot\u2014for example, \"foo.example.com.\".\n * - The name can be 253 characters at most, excluding the optional trailing dot.\n *\n * If the field value isn't a valid hostname, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname\n * string value = 1 [(buf.validate.field).string.hostname = true];\n * }\n * ```\n *\n * @generated from field: bool hostname = 13;\n */\n hostname?: boolean;\n\n /**\n * `ip` specifies that the field value must be a valid IP (v4 or v6) address.\n *\n * IPv4 addresses are expected in the dotted decimal format\u2014for example, \"192.168.5.21\".\n * IPv6 addresses are expected in their text representation\u2014for example, \"::1\",\n * or \"2001:0DB8:ABCD:0012::0\".\n *\n * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone identifiers for IPv6 addresses (for example, \"fe80::a%en1\") are supported.\n *\n * If the field value isn't a valid IP address, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP address\n * string value = 1 [(buf.validate.field).string.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 14;\n */\n ip?: boolean;\n\n /**\n * `ipv4` specifies that the field value must be a valid IPv4 address\u2014for\n * example \"192.168.5.21\". If the field value isn't a valid IPv4 address, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address\n * string value = 1 [(buf.validate.field).string.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 15;\n */\n ipv4?: boolean;\n\n /**\n * `ipv6` specifies that the field value must be a valid IPv6 address\u2014for\n * example \"::1\", or \"d7a:115c:a1e0:ab12:4843:cd96:626b:430b\". If the field\n * value is not a valid IPv6 address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address\n * string value = 1 [(buf.validate.field).string.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 16;\n */\n ipv6?: boolean;\n\n /**\n * `uri` specifies that the field value must be a valid URI, for example\n * \"https://example.com/foo/bar?baz=quux#frag\".\n *\n * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI\n * string value = 1 [(buf.validate.field).string.uri = true];\n * }\n * ```\n *\n * @generated from field: bool uri = 17;\n */\n uri?: boolean;\n\n /**\n * `uri_ref` specifies that the field value must be a valid URI Reference\u2014either\n * a URI such as \"https://example.com/foo/bar?baz=quux#frag\", or a Relative\n * Reference such as \"./foo/bar?query\".\n *\n * URI, URI Reference, and Relative Reference are defined in the internet\n * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone\n * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI Reference, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI Reference\n * string value = 1 [(buf.validate.field).string.uri_ref = true];\n * }\n * ```\n *\n * @generated from field: bool uri_ref = 18;\n */\n uriRef?: boolean;\n\n /**\n * `address` specifies that the field value must be either a valid hostname\n * (for example, \"example.com\"), or a valid IP (v4 or v6) address (for example,\n * \"192.168.0.1\", or \"::1\"). If the field value isn't a valid hostname or IP,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname, or ip address\n * string value = 1 [(buf.validate.field).string.address = true];\n * }\n * ```\n *\n * @generated from field: bool address = 21;\n */\n address?: boolean;\n\n /**\n * `uuid` specifies that the field value must be a valid UUID as defined by\n * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the\n * field value isn't a valid UUID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid UUID\n * string value = 1 [(buf.validate.field).string.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 22;\n */\n uuid?: boolean;\n\n /**\n * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes\n * omitted. If the field value isn't a valid UUID without dashes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid trimmed UUID\n * string value = 1 [(buf.validate.field).string.tuuid = true];\n * }\n * ```\n *\n * @generated from field: bool tuuid = 33;\n */\n tuuid?: boolean;\n\n /**\n * `ip_with_prefixlen` specifies that the field value must be a valid IP\n * (v4 or v6) address with prefix length\u2014for example, \"192.168.5.21/16\" or\n * \"2001:0DB8:ABCD:0012::F1/64\". If the field value isn't a valid IP with\n * prefix length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP with prefix length\n * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ip_with_prefixlen = 26;\n */\n ipWithPrefixlen?: boolean;\n\n /**\n * `ipv4_with_prefixlen` specifies that the field value must be a valid\n * IPv4 address with prefix length\u2014for example, \"192.168.5.21/16\". If the\n * field value isn't a valid IPv4 address with prefix length, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address with prefix length\n * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_with_prefixlen = 27;\n */\n ipv4WithPrefixlen?: boolean;\n\n /**\n * `ipv6_with_prefixlen` specifies that the field value must be a valid\n * IPv6 address with prefix length\u2014for example, \"2001:0DB8:ABCD:0012::F1/64\".\n * If the field value is not a valid IPv6 address with prefix length,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address prefix length\n * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_with_prefixlen = 28;\n */\n ipv6WithPrefixlen?: boolean;\n\n /**\n * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)\n * prefix\u2014for example, \"192.168.0.0/16\" or \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value isn't a valid IP prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP prefix\n * string value = 1 [(buf.validate.field).string.ip_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ip_prefix = 29;\n */\n ipPrefix?: boolean;\n\n /**\n * `ipv4_prefix` specifies that the field value must be a valid IPv4\n * prefix, for example \"192.168.0.0/16\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"192.168.0.0/16\" designates the left-most 16 bits for the prefix,\n * and the remaining 16 bits must be zero.\n *\n * If the field value isn't a valid IPv4 prefix, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 prefix\n * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_prefix = 30;\n */\n ipv4Prefix?: boolean;\n\n /**\n * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix\u2014for\n * example, \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value is not a valid IPv6 prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 prefix\n * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_prefix = 31;\n */\n ipv6Prefix?: boolean;\n\n /**\n * `host_and_port` specifies that the field value must be valid host/port\n * pair\u2014for example, \"example.com:8080\".\n *\n * The host can be one of:\n * - An IPv4 address in dotted decimal format\u2014for example, \"192.168.5.21\".\n * - An IPv6 address enclosed in square brackets\u2014for example, \"[2001:0DB8:ABCD:0012::F1]\".\n * - A hostname\u2014for example, \"example.com\".\n *\n * The port is separated by a colon. It must be non-empty, with a decimal number\n * in the range of 0-65535, inclusive.\n *\n * @generated from field: bool host_and_port = 32;\n */\n hostAndPort?: boolean;\n\n /**\n * `well_known_regex` specifies a common well-known pattern\n * defined as a regex. If the field value doesn't match the well-known\n * regex, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid HTTP header value\n * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];\n * }\n * ```\n *\n * #### KnownRegex\n *\n * `well_known_regex` contains some well-known patterns.\n *\n * | Name | Number | Description |\n * |-------------------------------|--------|-------------------------------------------|\n * | KNOWN_REGEX_UNSPECIFIED | 0 | |\n * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |\n * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |\n *\n * @generated from field: buf.validate.KnownRegex well_known_regex = 24;\n */\n wellKnownRegex?: KnownRegexJson;\n\n /**\n * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to\n * enable strict header validation. By default, this is true, and HTTP header\n * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser\n * validations that only disallow `\\r\\n\\0` characters, which can be used to\n * bypass header matching rules.\n *\n * ```proto\n * message MyString {\n * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.\n * string value = 1 [(buf.validate.field).string.strict = false];\n * }\n * ```\n *\n * @generated from field: optional bool strict = 25;\n */\n strict?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyString {\n * string value = 1 [\n * (buf.validate.field).string.example = \"hello\",\n * (buf.validate.field).string.example = \"world\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated string example = 34;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.StringRules.\n * Use `create(StringRulesSchema)` to create a new message.\n */\nexport const StringRulesSchema: GenMessage<StringRules, {jsonType: StringRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 19);\n\n/**\n * BytesRules describe the rules applied to `bytes` values. These rules\n * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BytesRules\n */\nexport type BytesRules = Message<\"buf.validate.BytesRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified bytes\n * value. If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be \"\\x01\\x02\\x03\\x04\"\n * bytes value = 1 [(buf.validate.field).bytes.const = \"\\x01\\x02\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes const = 1;\n */\n const: Uint8Array;\n\n /**\n * `len` requires the field value to have the specified length in bytes.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be 4 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 13;\n */\n len: bigint;\n\n /**\n * `min_len` requires the field value to have at least the specified minimum\n * length in bytes.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be at least 2 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen: bigint;\n\n /**\n * `max_len` requires the field value to have at most the specified maximum\n * length in bytes.\n * If the field value exceeds the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be at most 6 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen: bigint;\n\n /**\n * `pattern` requires the field value to match the specified regular\n * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).\n * The value of the field must be valid UTF-8 or validation will fail with a\n * runtime error.\n * If the field value doesn't match the pattern, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must match regex pattern \"^[a-zA-Z0-9]+$\".\n * optional bytes value = 1 [(buf.validate.field).bytes.pattern = \"^[a-zA-Z0-9]+$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 4;\n */\n pattern: string;\n\n /**\n * `prefix` requires the field value to have the specified bytes at the\n * beginning of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have prefix \\x01\\x02\n * optional bytes value = 1 [(buf.validate.field).bytes.prefix = \"\\x01\\x02\"];\n * }\n * ```\n *\n * @generated from field: optional bytes prefix = 5;\n */\n prefix: Uint8Array;\n\n /**\n * `suffix` requires the field value to have the specified bytes at the end\n * of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have suffix \\x03\\x04\n * optional bytes value = 1 [(buf.validate.field).bytes.suffix = \"\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes suffix = 6;\n */\n suffix: Uint8Array;\n\n /**\n * `contains` requires the field value to have the specified bytes anywhere in\n * the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```protobuf\n * message MyBytes {\n * // value does not contain \\x02\\x03\n * optional bytes value = 1 [(buf.validate.field).bytes.contains = \"\\x02\\x03\"];\n * }\n * ```\n *\n * @generated from field: optional bytes contains = 7;\n */\n contains: Uint8Array;\n\n /**\n * `in` requires the field value to be equal to one of the specified\n * values. If the field value doesn't match any of the specified values, an\n * error message is generated.\n *\n * ```protobuf\n * message MyBytes {\n * // value must in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes in = 8;\n */\n in: Uint8Array[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the specified\n * values.\n * If the field value matches any of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyBytes {\n * // value must not in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes not_in = 9;\n */\n notIn: Uint8Array[];\n\n /**\n * WellKnown rules provide advanced rules against common byte\n * patterns\n *\n * @generated from oneof buf.validate.BytesRules.well_known\n */\n wellKnown: {\n /**\n * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IP address\n * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 10;\n */\n value: boolean;\n case: \"ip\";\n } | {\n /**\n * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv4 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 11;\n */\n value: boolean;\n case: \"ipv4\";\n } | {\n /**\n * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv6 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 12;\n */\n value: boolean;\n case: \"ipv6\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBytes {\n * bytes value = 1 [\n * (buf.validate.field).bytes.example = \"\\x01\\x02\",\n * (buf.validate.field).bytes.example = \"\\x02\\x03\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bytes example = 14;\n */\n example: Uint8Array[];\n};\n\n/**\n * BytesRules describe the rules applied to `bytes` values. These rules\n * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BytesRules\n */\nexport type BytesRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified bytes\n * value. If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be \"\\x01\\x02\\x03\\x04\"\n * bytes value = 1 [(buf.validate.field).bytes.const = \"\\x01\\x02\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes const = 1;\n */\n const?: string;\n\n /**\n * `len` requires the field value to have the specified length in bytes.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be 4 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 13;\n */\n len?: string;\n\n /**\n * `min_len` requires the field value to have at least the specified minimum\n * length in bytes.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be at least 2 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen?: string;\n\n /**\n * `max_len` requires the field value to have at most the specified maximum\n * length in bytes.\n * If the field value exceeds the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be at most 6 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen?: string;\n\n /**\n * `pattern` requires the field value to match the specified regular\n * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).\n * The value of the field must be valid UTF-8 or validation will fail with a\n * runtime error.\n * If the field value doesn't match the pattern, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must match regex pattern \"^[a-zA-Z0-9]+$\".\n * optional bytes value = 1 [(buf.validate.field).bytes.pattern = \"^[a-zA-Z0-9]+$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 4;\n */\n pattern?: string;\n\n /**\n * `prefix` requires the field value to have the specified bytes at the\n * beginning of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have prefix \\x01\\x02\n * optional bytes value = 1 [(buf.validate.field).bytes.prefix = \"\\x01\\x02\"];\n * }\n * ```\n *\n * @generated from field: optional bytes prefix = 5;\n */\n prefix?: string;\n\n /**\n * `suffix` requires the field value to have the specified bytes at the end\n * of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have suffix \\x03\\x04\n * optional bytes value = 1 [(buf.validate.field).bytes.suffix = \"\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes suffix = 6;\n */\n suffix?: string;\n\n /**\n * `contains` requires the field value to have the specified bytes anywhere in\n * the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```protobuf\n * message MyBytes {\n * // value does not contain \\x02\\x03\n * optional bytes value = 1 [(buf.validate.field).bytes.contains = \"\\x02\\x03\"];\n * }\n * ```\n *\n * @generated from field: optional bytes contains = 7;\n */\n contains?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified\n * values. If the field value doesn't match any of the specified values, an\n * error message is generated.\n *\n * ```protobuf\n * message MyBytes {\n * // value must in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes in = 8;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the specified\n * values.\n * If the field value matches any of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyBytes {\n * // value must not in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes not_in = 9;\n */\n notIn?: string[];\n\n /**\n * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IP address\n * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 10;\n */\n ip?: boolean;\n\n /**\n * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv4 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 11;\n */\n ipv4?: boolean;\n\n /**\n * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv6 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 12;\n */\n ipv6?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBytes {\n * bytes value = 1 [\n * (buf.validate.field).bytes.example = \"\\x01\\x02\",\n * (buf.validate.field).bytes.example = \"\\x02\\x03\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bytes example = 14;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.BytesRules.\n * Use `create(BytesRulesSchema)` to create a new message.\n */\nexport const BytesRulesSchema: GenMessage<BytesRules, {jsonType: BytesRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 20);\n\n/**\n * EnumRules describe the rules applied to `enum` values.\n *\n * @generated from message buf.validate.EnumRules\n */\nexport type EnumRules = Message<\"buf.validate.EnumRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified enum value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be exactly MY_ENUM_VALUE1.\n * MyEnum value = 1 [(buf.validate.field).enum.const = 1];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const: number;\n\n /**\n * `defined_only` requires the field value to be one of the defined values for\n * this enum, failing on any undefined value.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be a defined value of MyEnum.\n * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];\n * }\n * ```\n *\n * @generated from field: optional bool defined_only = 2;\n */\n definedOnly: boolean;\n\n /**\n * `in` requires the field value to be equal to one of the\n * specified enum values. If the field value doesn't match any of the\n * specified values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be equal to one of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 3;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the\n * specified enum values. If the field value matches one of the specified\n * values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must not be equal to any of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 4;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * (buf.validate.field).enum.example = 1,\n * (buf.validate.field).enum.example = 2\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 5;\n */\n example: number[];\n};\n\n/**\n * EnumRules describe the rules applied to `enum` values.\n *\n * @generated from message buf.validate.EnumRules\n */\nexport type EnumRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified enum value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be exactly MY_ENUM_VALUE1.\n * MyEnum value = 1 [(buf.validate.field).enum.const = 1];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const?: number;\n\n /**\n * `defined_only` requires the field value to be one of the defined values for\n * this enum, failing on any undefined value.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be a defined value of MyEnum.\n * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];\n * }\n * ```\n *\n * @generated from field: optional bool defined_only = 2;\n */\n definedOnly?: boolean;\n\n /**\n * `in` requires the field value to be equal to one of the\n * specified enum values. If the field value doesn't match any of the\n * specified values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be equal to one of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 3;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the\n * specified enum values. If the field value matches one of the specified\n * values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must not be equal to any of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 4;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * (buf.validate.field).enum.example = 1,\n * (buf.validate.field).enum.example = 2\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 5;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.EnumRules.\n * Use `create(EnumRulesSchema)` to create a new message.\n */\nexport const EnumRulesSchema: GenMessage<EnumRules, {jsonType: EnumRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 21);\n\n/**\n * RepeatedRules describe the rules applied to `repeated` values.\n *\n * @generated from message buf.validate.RepeatedRules\n */\nexport type RepeatedRules = Message<\"buf.validate.RepeatedRules\"> & {\n /**\n * `min_items` requires that this field must contain at least the specified\n * minimum number of items.\n *\n * Note that `min_items = 1` is equivalent to setting a field as `required`.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain at least 2 items\n * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_items = 1;\n */\n minItems: bigint;\n\n /**\n * `max_items` denotes that this field must not exceed a\n * certain number of items as the upper limit. If the field contains more\n * items than specified, an error message will be generated, requiring the\n * field to maintain no more than the specified number of items.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain no more than 3 item(s)\n * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_items = 2;\n */\n maxItems: bigint;\n\n /**\n * `unique` indicates that all elements in this field must\n * be unique. This rule is strictly applicable to scalar and enum\n * types, with message types not being supported.\n *\n * ```proto\n * message MyRepeated {\n * // repeated value must contain unique items\n * repeated string value = 1 [(buf.validate.field).repeated.unique = true];\n * }\n * ```\n *\n * @generated from field: optional bool unique = 3;\n */\n unique: boolean;\n\n /**\n * `items` details the rules to be applied to each item\n * in the field. Even for repeated message fields, validation is executed\n * against each item unless `ignore` is specified.\n *\n * ```proto\n * message MyRepeated {\n * // The items in the field `value` must follow the specified rules.\n * repeated string value = 1 [(buf.validate.field).repeated.items = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Repeated items\n * cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules items = 4;\n */\n items?: FieldRules;\n};\n\n/**\n * RepeatedRules describe the rules applied to `repeated` values.\n *\n * @generated from message buf.validate.RepeatedRules\n */\nexport type RepeatedRulesJson = {\n /**\n * `min_items` requires that this field must contain at least the specified\n * minimum number of items.\n *\n * Note that `min_items = 1` is equivalent to setting a field as `required`.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain at least 2 items\n * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_items = 1;\n */\n minItems?: string;\n\n /**\n * `max_items` denotes that this field must not exceed a\n * certain number of items as the upper limit. If the field contains more\n * items than specified, an error message will be generated, requiring the\n * field to maintain no more than the specified number of items.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain no more than 3 item(s)\n * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_items = 2;\n */\n maxItems?: string;\n\n /**\n * `unique` indicates that all elements in this field must\n * be unique. This rule is strictly applicable to scalar and enum\n * types, with message types not being supported.\n *\n * ```proto\n * message MyRepeated {\n * // repeated value must contain unique items\n * repeated string value = 1 [(buf.validate.field).repeated.unique = true];\n * }\n * ```\n *\n * @generated from field: optional bool unique = 3;\n */\n unique?: boolean;\n\n /**\n * `items` details the rules to be applied to each item\n * in the field. Even for repeated message fields, validation is executed\n * against each item unless `ignore` is specified.\n *\n * ```proto\n * message MyRepeated {\n * // The items in the field `value` must follow the specified rules.\n * repeated string value = 1 [(buf.validate.field).repeated.items = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Repeated items\n * cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules items = 4;\n */\n items?: FieldRulesJson;\n};\n\n/**\n * Describes the message buf.validate.RepeatedRules.\n * Use `create(RepeatedRulesSchema)` to create a new message.\n */\nexport const RepeatedRulesSchema: GenMessage<RepeatedRules, {jsonType: RepeatedRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 22);\n\n/**\n * MapRules describe the rules applied to `map` values.\n *\n * @generated from message buf.validate.MapRules\n */\nexport type MapRules = Message<\"buf.validate.MapRules\"> & {\n /**\n * Specifies the minimum number of key-value pairs allowed. If the field has\n * fewer key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at least 2 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_pairs = 1;\n */\n minPairs: bigint;\n\n /**\n * Specifies the maximum number of key-value pairs allowed. If the field has\n * more key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at most 3 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_pairs = 2;\n */\n maxPairs: bigint;\n\n /**\n * Specifies the rules to be applied to each key in the field.\n *\n * ```proto\n * message MyMap {\n * // The keys in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.keys = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Map keys cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules keys = 4;\n */\n keys?: FieldRules;\n\n /**\n * Specifies the rules to be applied to the value of each key in the\n * field. Message values will still have their validations evaluated unless\n * `ignore` is specified.\n *\n * ```proto\n * message MyMap {\n * // The values in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.values = {\n * string: {\n * min_len: 5\n * max_len: 20\n * }\n * }];\n * }\n * ```\n * Note that the `required` rule does not apply. Map values cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules values = 5;\n */\n values?: FieldRules;\n};\n\n/**\n * MapRules describe the rules applied to `map` values.\n *\n * @generated from message buf.validate.MapRules\n */\nexport type MapRulesJson = {\n /**\n * Specifies the minimum number of key-value pairs allowed. If the field has\n * fewer key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at least 2 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_pairs = 1;\n */\n minPairs?: string;\n\n /**\n * Specifies the maximum number of key-value pairs allowed. If the field has\n * more key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at most 3 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_pairs = 2;\n */\n maxPairs?: string;\n\n /**\n * Specifies the rules to be applied to each key in the field.\n *\n * ```proto\n * message MyMap {\n * // The keys in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.keys = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Map keys cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules keys = 4;\n */\n keys?: FieldRulesJson;\n\n /**\n * Specifies the rules to be applied to the value of each key in the\n * field. Message values will still have their validations evaluated unless\n * `ignore` is specified.\n *\n * ```proto\n * message MyMap {\n * // The values in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.values = {\n * string: {\n * min_len: 5\n * max_len: 20\n * }\n * }];\n * }\n * ```\n * Note that the `required` rule does not apply. Map values cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules values = 5;\n */\n values?: FieldRulesJson;\n};\n\n/**\n * Describes the message buf.validate.MapRules.\n * Use `create(MapRulesSchema)` to create a new message.\n */\nexport const MapRulesSchema: GenMessage<MapRules, {jsonType: MapRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 23);\n\n/**\n * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.\n *\n * @generated from message buf.validate.AnyRules\n */\nexport type AnyRules = Message<\"buf.validate.AnyRules\"> & {\n /**\n * `in` requires the field's `type_url` to be equal to one of the\n * specified values. If it doesn't match any of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must have a `type_url` equal to one of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * in: [\"type.googleapis.com/MyType1\", \"type.googleapis.com/MyType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in: string[];\n\n /**\n * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must not have a `type_url` equal to any of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * not_in: [\"type.googleapis.com/ForbiddenType1\", \"type.googleapis.com/ForbiddenType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn: string[];\n};\n\n/**\n * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.\n *\n * @generated from message buf.validate.AnyRules\n */\nexport type AnyRulesJson = {\n /**\n * `in` requires the field's `type_url` to be equal to one of the\n * specified values. If it doesn't match any of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must have a `type_url` equal to one of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * in: [\"type.googleapis.com/MyType1\", \"type.googleapis.com/MyType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in?: string[];\n\n /**\n * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must not have a `type_url` equal to any of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * not_in: [\"type.googleapis.com/ForbiddenType1\", \"type.googleapis.com/ForbiddenType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn?: string[];\n};\n\n/**\n * Describes the message buf.validate.AnyRules.\n * Use `create(AnyRulesSchema)` to create a new message.\n */\nexport const AnyRulesSchema: GenMessage<AnyRules, {jsonType: AnyRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 24);\n\n/**\n * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.\n *\n * @generated from message buf.validate.DurationRules\n */\nexport type DurationRules = Message<\"buf.validate.DurationRules\"> & {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must equal 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = \"5s\"];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration const = 2;\n */\n const?: Duration;\n\n /**\n * @generated from oneof buf.validate.DurationRules.less_than\n */\n lessThan: {\n /**\n * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,\n * exclusive. If the field's value is greater than or equal to the specified\n * value, an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = \"5s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lt = 3;\n */\n value: Duration;\n case: \"lt\";\n } | {\n /**\n * `lte` indicates that the field must be less than or equal to the specified\n * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than or equal to 10s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = \"10s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lte = 4;\n */\n value: Duration;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.DurationRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the duration field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than 5s [duration.gt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];\n *\n * // duration must be greater than 5s and less than 10s [duration.gt_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gt = 5;\n */\n value: Duration;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the duration field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value must\n * be outside the specified range. If the field value doesn't meet the\n * required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than or equal to 5s [duration.gte]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];\n *\n * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gte = 6;\n */\n value: Duration;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.\n * If the field's value doesn't correspond to any of the specified values,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration in = 7;\n */\n in: Duration[];\n\n /**\n * `not_in` denotes that the field must not be equal to\n * any of the specified values of the `google.protobuf.Duration` type.\n * If the field's value matches any of these values, an error message will be\n * generated.\n *\n * ```proto\n * message MyDuration {\n * // value must not be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration not_in = 8;\n */\n notIn: Duration[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDuration {\n * google.protobuf.Duration value = 1 [\n * (buf.validate.field).duration.example = { seconds: 1 },\n * (buf.validate.field).duration.example = { seconds: 2 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration example = 9;\n */\n example: Duration[];\n};\n\n/**\n * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.\n *\n * @generated from message buf.validate.DurationRules\n */\nexport type DurationRulesJson = {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must equal 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = \"5s\"];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration const = 2;\n */\n const?: DurationJson;\n\n /**\n * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,\n * exclusive. If the field's value is greater than or equal to the specified\n * value, an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = \"5s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lt = 3;\n */\n lt?: DurationJson;\n\n /**\n * `lte` indicates that the field must be less than or equal to the specified\n * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than or equal to 10s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = \"10s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lte = 4;\n */\n lte?: DurationJson;\n\n /**\n * `gt` requires the duration field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than 5s [duration.gt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];\n *\n * // duration must be greater than 5s and less than 10s [duration.gt_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gt = 5;\n */\n gt?: DurationJson;\n\n /**\n * `gte` requires the duration field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value must\n * be outside the specified range. If the field value doesn't meet the\n * required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than or equal to 5s [duration.gte]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];\n *\n * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gte = 6;\n */\n gte?: DurationJson;\n\n /**\n * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.\n * If the field's value doesn't correspond to any of the specified values,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration in = 7;\n */\n in?: DurationJson[];\n\n /**\n * `not_in` denotes that the field must not be equal to\n * any of the specified values of the `google.protobuf.Duration` type.\n * If the field's value matches any of these values, an error message will be\n * generated.\n *\n * ```proto\n * message MyDuration {\n * // value must not be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration not_in = 8;\n */\n notIn?: DurationJson[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDuration {\n * google.protobuf.Duration value = 1 [\n * (buf.validate.field).duration.example = { seconds: 1 },\n * (buf.validate.field).duration.example = { seconds: 2 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration example = 9;\n */\n example?: DurationJson[];\n};\n\n/**\n * Describes the message buf.validate.DurationRules.\n * Use `create(DurationRulesSchema)` to create a new message.\n */\nexport const DurationRulesSchema: GenMessage<DurationRules, {jsonType: DurationRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 25);\n\n/**\n * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.\n *\n * @generated from message buf.validate.TimestampRules\n */\nexport type TimestampRules = Message<\"buf.validate.TimestampRules\"> & {\n /**\n * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must equal 2023-05-03T10:00:00Z\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Timestamp const = 2;\n */\n const?: Timestamp;\n\n /**\n * @generated from oneof buf.validate.TimestampRules.less_than\n */\n lessThan: {\n /**\n * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be less than 'P3D' [duration.lt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lt = 3;\n */\n value: Timestamp;\n case: \"lt\";\n } | {\n /**\n * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lte = 4;\n */\n value: Timestamp;\n case: \"lte\";\n } | {\n /**\n * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be less than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];\n * }\n * ```\n *\n * @generated from field: bool lt_now = 7;\n */\n value: boolean;\n case: \"ltNow\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.TimestampRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the timestamp field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gt = 5;\n */\n value: Timestamp;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the timestamp field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value\n * must be outside the specified range. If the field value doesn't meet\n * the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gte = 6;\n */\n value: Timestamp;\n case: \"gte\";\n } | {\n /**\n * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be greater than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];\n * }\n * ```\n *\n * @generated from field: bool gt_now = 8;\n */\n value: boolean;\n case: \"gtNow\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be within 1 hour of now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration within = 9;\n */\n within?: Duration;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyTimestamp {\n * google.protobuf.Timestamp value = 1 [\n * (buf.validate.field).timestamp.example = { seconds: 1672444800 },\n * (buf.validate.field).timestamp.example = { seconds: 1672531200 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Timestamp example = 10;\n */\n example: Timestamp[];\n};\n\n/**\n * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.\n *\n * @generated from message buf.validate.TimestampRules\n */\nexport type TimestampRulesJson = {\n /**\n * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must equal 2023-05-03T10:00:00Z\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Timestamp const = 2;\n */\n const?: TimestampJson;\n\n /**\n * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be less than 'P3D' [duration.lt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lt = 3;\n */\n lt?: TimestampJson;\n\n /**\n * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lte = 4;\n */\n lte?: TimestampJson;\n\n /**\n * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be less than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];\n * }\n * ```\n *\n * @generated from field: bool lt_now = 7;\n */\n ltNow?: boolean;\n\n /**\n * `gt` requires the timestamp field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gt = 5;\n */\n gt?: TimestampJson;\n\n /**\n * `gte` requires the timestamp field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value\n * must be outside the specified range. If the field value doesn't meet\n * the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gte = 6;\n */\n gte?: TimestampJson;\n\n /**\n * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be greater than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];\n * }\n * ```\n *\n * @generated from field: bool gt_now = 8;\n */\n gtNow?: boolean;\n\n /**\n * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be within 1 hour of now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration within = 9;\n */\n within?: DurationJson;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyTimestamp {\n * google.protobuf.Timestamp value = 1 [\n * (buf.validate.field).timestamp.example = { seconds: 1672444800 },\n * (buf.validate.field).timestamp.example = { seconds: 1672531200 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Timestamp example = 10;\n */\n example?: TimestampJson[];\n};\n\n/**\n * Describes the message buf.validate.TimestampRules.\n * Use `create(TimestampRulesSchema)` to create a new message.\n */\nexport const TimestampRulesSchema: GenMessage<TimestampRules, {jsonType: TimestampRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 26);\n\n/**\n * `Violations` is a collection of `Violation` messages. This message type is returned by\n * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.\n * Each individual violation is represented by a `Violation` message.\n *\n * @generated from message buf.validate.Violations\n */\nexport type Violations = Message<\"buf.validate.Violations\"> & {\n /**\n * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.\n *\n * @generated from field: repeated buf.validate.Violation violations = 1;\n */\n violations: Violation[];\n};\n\n/**\n * `Violations` is a collection of `Violation` messages. This message type is returned by\n * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.\n * Each individual violation is represented by a `Violation` message.\n *\n * @generated from message buf.validate.Violations\n */\nexport type ViolationsJson = {\n /**\n * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.\n *\n * @generated from field: repeated buf.validate.Violation violations = 1;\n */\n violations?: ViolationJson[];\n};\n\n/**\n * Describes the message buf.validate.Violations.\n * Use `create(ViolationsSchema)` to create a new message.\n */\nexport const ViolationsSchema: GenMessage<Violations, {jsonType: ViolationsJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 27);\n\n/**\n * `Violation` represents a single instance where a validation rule, expressed\n * as a `Rule`, was not met. It provides information about the field that\n * caused the violation, the specific rule that wasn't fulfilled, and a\n * human-readable error message.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message User {\n * int32 age = 1 [(buf.validate.field).cel = {\n * id: \"user.age\",\n * expression: \"this < 18 ? 'User must be at least 18 years old' : ''\",\n * }];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```json\n * {\n * \"ruleId\": \"user.age\",\n * \"message\": \"User must be at least 18 years old\",\n * \"field\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 1,\n * \"fieldName\": \"age\",\n * \"fieldType\": \"TYPE_INT32\"\n * }\n * ]\n * },\n * \"rule\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 23,\n * \"fieldName\": \"cel\",\n * \"fieldType\": \"TYPE_MESSAGE\",\n * \"index\": \"0\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * @generated from message buf.validate.Violation\n */\nexport type Violation = Message<\"buf.validate.Violation\"> & {\n /**\n * `field` is a machine-readable path to the field that failed validation.\n * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```textproto\n * violation {\n * field { element { field_number: 1, field_name: \"a\", field_type: 8 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath field = 5;\n */\n field?: FieldPath;\n\n /**\n * `rule` is a machine-readable path that points to the specific rule that failed validation.\n * This will be a nested field starting from the FieldRules of the field that failed validation.\n * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * bool b = 2 [(buf.validate.field).cel = {\n * id: \"custom_rule\",\n * expression: \"!this ? 'b must be true': ''\"\n * }]\n * }\n * ```\n *\n * It could produce the following violations:\n *\n * ```textproto\n * violation {\n * rule { element { field_number: 25, field_name: \"required\", field_type: 8 } }\n * ...\n * }\n * violation {\n * rule { element { field_number: 23, field_name: \"cel\", field_type: 11, index: 0 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath rule = 6;\n */\n rule?: FieldPath;\n\n /**\n * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.\n * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.\n *\n * @generated from field: optional string rule_id = 2;\n */\n ruleId: string;\n\n /**\n * `message` is a human-readable error message that describes the nature of the violation.\n * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.\n *\n * @generated from field: optional string message = 3;\n */\n message: string;\n\n /**\n * `for_key` indicates whether the violation was caused by a map key, rather than a value.\n *\n * @generated from field: optional bool for_key = 4;\n */\n forKey: boolean;\n};\n\n/**\n * `Violation` represents a single instance where a validation rule, expressed\n * as a `Rule`, was not met. It provides information about the field that\n * caused the violation, the specific rule that wasn't fulfilled, and a\n * human-readable error message.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message User {\n * int32 age = 1 [(buf.validate.field).cel = {\n * id: \"user.age\",\n * expression: \"this < 18 ? 'User must be at least 18 years old' : ''\",\n * }];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```json\n * {\n * \"ruleId\": \"user.age\",\n * \"message\": \"User must be at least 18 years old\",\n * \"field\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 1,\n * \"fieldName\": \"age\",\n * \"fieldType\": \"TYPE_INT32\"\n * }\n * ]\n * },\n * \"rule\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 23,\n * \"fieldName\": \"cel\",\n * \"fieldType\": \"TYPE_MESSAGE\",\n * \"index\": \"0\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * @generated from message buf.validate.Violation\n */\nexport type ViolationJson = {\n /**\n * `field` is a machine-readable path to the field that failed validation.\n * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```textproto\n * violation {\n * field { element { field_number: 1, field_name: \"a\", field_type: 8 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath field = 5;\n */\n field?: FieldPathJson;\n\n /**\n * `rule` is a machine-readable path that points to the specific rule that failed validation.\n * This will be a nested field starting from the FieldRules of the field that failed validation.\n * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * bool b = 2 [(buf.validate.field).cel = {\n * id: \"custom_rule\",\n * expression: \"!this ? 'b must be true': ''\"\n * }]\n * }\n * ```\n *\n * It could produce the following violations:\n *\n * ```textproto\n * violation {\n * rule { element { field_number: 25, field_name: \"required\", field_type: 8 } }\n * ...\n * }\n * violation {\n * rule { element { field_number: 23, field_name: \"cel\", field_type: 11, index: 0 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath rule = 6;\n */\n rule?: FieldPathJson;\n\n /**\n * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.\n * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.\n *\n * @generated from field: optional string rule_id = 2;\n */\n ruleId?: string;\n\n /**\n * `message` is a human-readable error message that describes the nature of the violation.\n * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.\n *\n * @generated from field: optional string message = 3;\n */\n message?: string;\n\n /**\n * `for_key` indicates whether the violation was caused by a map key, rather than a value.\n *\n * @generated from field: optional bool for_key = 4;\n */\n forKey?: boolean;\n};\n\n/**\n * Describes the message buf.validate.Violation.\n * Use `create(ViolationSchema)` to create a new message.\n */\nexport const ViolationSchema: GenMessage<Violation, {jsonType: ViolationJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 28);\n\n/**\n * `FieldPath` provides a path to a nested protobuf field.\n *\n * This message provides enough information to render a dotted field path even without protobuf descriptors.\n * It also provides enough information to resolve a nested field through unknown wire data.\n *\n * @generated from message buf.validate.FieldPath\n */\nexport type FieldPath = Message<\"buf.validate.FieldPath\"> & {\n /**\n * `elements` contains each element of the path, starting from the root and recursing downward.\n *\n * @generated from field: repeated buf.validate.FieldPathElement elements = 1;\n */\n elements: FieldPathElement[];\n};\n\n/**\n * `FieldPath` provides a path to a nested protobuf field.\n *\n * This message provides enough information to render a dotted field path even without protobuf descriptors.\n * It also provides enough information to resolve a nested field through unknown wire data.\n *\n * @generated from message buf.validate.FieldPath\n */\nexport type FieldPathJson = {\n /**\n * `elements` contains each element of the path, starting from the root and recursing downward.\n *\n * @generated from field: repeated buf.validate.FieldPathElement elements = 1;\n */\n elements?: FieldPathElementJson[];\n};\n\n/**\n * Describes the message buf.validate.FieldPath.\n * Use `create(FieldPathSchema)` to create a new message.\n */\nexport const FieldPathSchema: GenMessage<FieldPath, {jsonType: FieldPathJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 29);\n\n/**\n * `FieldPathElement` provides enough information to nest through a single protobuf field.\n *\n * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.\n * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.\n * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.\n *\n * @generated from message buf.validate.FieldPathElement\n */\nexport type FieldPathElement = Message<\"buf.validate.FieldPathElement\"> & {\n /**\n * `field_number` is the field number this path element refers to.\n *\n * @generated from field: optional int32 field_number = 1;\n */\n fieldNumber: number;\n\n /**\n * `field_name` contains the field name this path element refers to.\n * This can be used to display a human-readable path even if the field number is unknown.\n *\n * @generated from field: optional string field_name = 2;\n */\n fieldName: string;\n\n /**\n * `field_type` specifies the type of this field. When using reflection, this value is not needed.\n *\n * This value is provided to make it possible to traverse unknown fields through wire data.\n * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.\n *\n * [1]: https://protobuf.dev/programming-guides/encoding/#packed\n * [2]: https://protobuf.dev/programming-guides/encoding/#groups\n *\n * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and\n * can be explicitly used in Protocol Buffers 2023 Edition.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;\n */\n fieldType: FieldDescriptorProto_Type;\n\n /**\n * `key_type` specifies the map key type of this field. This value is useful when traversing\n * unknown fields through wire data: specifically, it allows handling the differences between\n * different integer encodings.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;\n */\n keyType: FieldDescriptorProto_Type;\n\n /**\n * `value_type` specifies map value type of this field. This is useful if you want to display a\n * value inside unknown fields through wire data.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;\n */\n valueType: FieldDescriptorProto_Type;\n\n /**\n * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.\n *\n * @generated from oneof buf.validate.FieldPathElement.subscript\n */\n subscript: {\n /**\n * `index` specifies a 0-based index into a repeated field.\n *\n * @generated from field: uint64 index = 6;\n */\n value: bigint;\n case: \"index\";\n } | {\n /**\n * `bool_key` specifies a map key of type bool.\n *\n * @generated from field: bool bool_key = 7;\n */\n value: boolean;\n case: \"boolKey\";\n } | {\n /**\n * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.\n *\n * @generated from field: int64 int_key = 8;\n */\n value: bigint;\n case: \"intKey\";\n } | {\n /**\n * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.\n *\n * @generated from field: uint64 uint_key = 9;\n */\n value: bigint;\n case: \"uintKey\";\n } | {\n /**\n * `string_key` specifies a map key of type string.\n *\n * @generated from field: string string_key = 10;\n */\n value: string;\n case: \"stringKey\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * `FieldPathElement` provides enough information to nest through a single protobuf field.\n *\n * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.\n * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.\n * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.\n *\n * @generated from message buf.validate.FieldPathElement\n */\nexport type FieldPathElementJson = {\n /**\n * `field_number` is the field number this path element refers to.\n *\n * @generated from field: optional int32 field_number = 1;\n */\n fieldNumber?: number;\n\n /**\n * `field_name` contains the field name this path element refers to.\n * This can be used to display a human-readable path even if the field number is unknown.\n *\n * @generated from field: optional string field_name = 2;\n */\n fieldName?: string;\n\n /**\n * `field_type` specifies the type of this field. When using reflection, this value is not needed.\n *\n * This value is provided to make it possible to traverse unknown fields through wire data.\n * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.\n *\n * [1]: https://protobuf.dev/programming-guides/encoding/#packed\n * [2]: https://protobuf.dev/programming-guides/encoding/#groups\n *\n * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and\n * can be explicitly used in Protocol Buffers 2023 Edition.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;\n */\n fieldType?: FieldDescriptorProto_TypeJson;\n\n /**\n * `key_type` specifies the map key type of this field. This value is useful when traversing\n * unknown fields through wire data: specifically, it allows handling the differences between\n * different integer encodings.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;\n */\n keyType?: FieldDescriptorProto_TypeJson;\n\n /**\n * `value_type` specifies map value type of this field. This is useful if you want to display a\n * value inside unknown fields through wire data.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;\n */\n valueType?: FieldDescriptorProto_TypeJson;\n\n /**\n * `index` specifies a 0-based index into a repeated field.\n *\n * @generated from field: uint64 index = 6;\n */\n index?: string;\n\n /**\n * `bool_key` specifies a map key of type bool.\n *\n * @generated from field: bool bool_key = 7;\n */\n boolKey?: boolean;\n\n /**\n * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.\n *\n * @generated from field: int64 int_key = 8;\n */\n intKey?: string;\n\n /**\n * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.\n *\n * @generated from field: uint64 uint_key = 9;\n */\n uintKey?: string;\n\n /**\n * `string_key` specifies a map key of type string.\n *\n * @generated from field: string string_key = 10;\n */\n stringKey?: string;\n};\n\n/**\n * Describes the message buf.validate.FieldPathElement.\n * Use `create(FieldPathElementSchema)` to create a new message.\n */\nexport const FieldPathElementSchema: GenMessage<FieldPathElement, {jsonType: FieldPathElementJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 30);\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport enum Ignore {\n /**\n * Ignore rules if the field tracks presence and is unset. This is the default\n * behavior.\n *\n * In proto3, only message fields, members of a Protobuf `oneof`, and fields\n * with the `optional` label track presence. Consequently, the following fields\n * are always validated, whether a value is set or not:\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message RulesApply {\n * string email = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * int32 age = 2 [\n * (buf.validate.field).int32.gt = 0\n * ];\n * repeated string labels = 3 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * }\n * ```\n *\n * In contrast, the following fields track presence, and are only validated if\n * a value is set:\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message RulesApplyIfSet {\n * optional string email = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * oneof ref {\n * string reference = 2 [\n * (buf.validate.field).string.uuid = true\n * ];\n * string name = 3 [\n * (buf.validate.field).string.min_len = 4\n * ];\n * }\n * SomeMessage msg = 4 [\n * (buf.validate.field).cel = {/* ... *\\/}\n * ];\n * }\n * ```\n *\n * To ensure that such a field is set, add the `required` rule.\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * @generated from enum value: IGNORE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * Ignore rules if the field is unset, or set to the zero value.\n *\n * The zero value depends on the field type:\n * - For strings, the zero value is the empty string.\n * - For bytes, the zero value is empty bytes.\n * - For bool, the zero value is false.\n * - For numeric types, the zero value is zero.\n * - For enums, the zero value is the first defined enum value.\n * - For repeated fields, the zero is an empty list.\n * - For map fields, the zero is an empty map.\n * - For message fields, absence of the message (typically a null-value) is considered zero value.\n *\n * For fields that track presence (e.g. adding the `optional` label in proto3),\n * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.\n *\n * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;\n */\n IF_ZERO_VALUE = 1,\n\n /**\n * Always ignore rules, including the `required` rule.\n *\n * This is useful for ignoring the rules of a referenced message, or to\n * temporarily ignore rules during development.\n *\n * ```proto\n * message MyMessage {\n * // The field's rules will always be ignored, including any validations\n * // on value's fields.\n * MyOtherMessage value = 1 [\n * (buf.validate.field).ignore = IGNORE_ALWAYS\n * ];\n * }\n * ```\n *\n * @generated from enum value: IGNORE_ALWAYS = 3;\n */\n ALWAYS = 3,\n}\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport type IgnoreJson = \"IGNORE_UNSPECIFIED\" | \"IGNORE_IF_ZERO_VALUE\" | \"IGNORE_ALWAYS\";\n\n/**\n * Describes the enum buf.validate.Ignore.\n */\nexport const IgnoreSchema: GenEnum<Ignore, IgnoreJson> = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 0);\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport enum KnownRegex {\n /**\n * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).\n *\n * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;\n */\n HTTP_HEADER_NAME = 1,\n\n /**\n * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).\n *\n * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;\n */\n HTTP_HEADER_VALUE = 2,\n}\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport type KnownRegexJson = \"KNOWN_REGEX_UNSPECIFIED\" | \"KNOWN_REGEX_HTTP_HEADER_NAME\" | \"KNOWN_REGEX_HTTP_HEADER_VALUE\";\n\n/**\n * Describes the enum buf.validate.KnownRegex.\n */\nexport const KnownRegexSchema: GenEnum<KnownRegex, KnownRegexJson> = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this message. By default,\n * no validation is performed against a message.\n *\n * @generated from extension: optional buf.validate.MessageRules message = 1159;\n */\nexport const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 0);\n\n/**\n * Rules specify the validations to be performed on this oneof. By default,\n * no validation is performed against a oneof.\n *\n * @generated from extension: optional buf.validate.OneofRules oneof = 1159;\n */\nexport const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this field. By default,\n * no validation is performed against a field.\n *\n * @generated from extension: optional buf.validate.FieldRules field = 1159;\n */\nexport const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 2);\n\n/**\n * Specifies predefined rules. When extending a standard rule message,\n * this adds additional CEL expressions that apply when the extension is used.\n *\n * ```proto\n * extend buf.validate.Int32Rules {\n * bool is_zero [(buf.validate.predefined).cel = {\n * id: \"int32.is_zero\",\n * message: \"value must be zero\",\n * expression: \"!rule || this == 0\",\n * }];\n * }\n *\n * message Foo {\n * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];\n * }\n * ```\n *\n * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;\n */\nexport const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 3);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_format.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { JTDSchema, JTDSchemaJson } from \"./jtd_schema_pb\";\nimport { file_mochabugapis_adapt_graph_jtd_schema } from \"./jtd_schema_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_format.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_format: GenFile = /*@__PURE__*/\n fileDesc(\"Cixtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2Zvcm1hdC5wcm90bxIYbW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoIo8FCgxTaWduYWxGb3JtYXQSOQoKanRkX3NjaGVtYRgBIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFIABKyBAoJbWltZV90eXBlGAIgASgJQpwEukiYBLoBmwIKMG1pbWVfdHlwZS5ub190eXBlX3dpbGRjYXJkX3dpdGhfY29uY3JldGVfc3VidHlwZRK7AVR5cGUgd2lsZGNhcmQgd2l0aCBjb25jcmV0ZSBzdWJ0eXBlIChlLmcuLCAnKi9wbmcnLCAnKi9qc29uJykgaXMgbm90IGFsbG93ZWQuIFVzZSBjb25jcmV0ZSB0eXBlIChlLmcuLCAnaW1hZ2UvcG5nJyksIHR5cGUtZmFtaWx5IHdpbGRjYXJkIChlLmcuLCAnaW1hZ2UvKicpLCBvciB1bml2ZXJzYWwgd2lsZGNhcmQgKCcqLyonKS4aKSEodGhpcy5zdGFydHNXaXRoKCcqLycpICYmIHRoaXMgIT0gJyovKicpugGRAQodbWltZV90eXBlLm5vX2FwcGxpY2F0aW9uX2pzb24SR2dlbmVyaWMganNvbiBpcyBqdGQtc2NoZW1hIHdpdGggZW1wdHkgc2NoZW1hLCB0aGlzIHdpbGwgYWNjZXB0IGFueSBKU09OGid0aGlzLmxvd2VyQXNjaWkoKSAhPSAnYXBwbGljYXRpb24vanNvbidyYhADGP8BMlteKFthLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fXxcKikvKFthLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fXxcKikkSABCDwoGZm9ybWF0EgW6SAIIAWIGcHJvdG8z\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_jtd_schema]);\n\n/**\n * SignalFormat defines how signal data is structured and should be interpreted.\n * All signals are binary at the transport level; this message determines the interpretation.\n *\n * This message is designed to be reusable across both signal descriptors (which produce\n * one specific format or format family) and signal bindings (which may accept multiple formats).\n *\n * Format matching semantics:\n * - JTD schemas use structural subsumption (handled by existing JTD subsume algorithm)\n * - MIME types use pattern matching with optional wildcards\n * - JTD and MIME formats are incompatible - a JTD signal cannot bind to a MIME-accepting\n * binding and vice versa, even if semantically similar (e.g., application/json vs JTD)\n *\n * @generated from message mochabugapis.adapt.graph.SignalFormat\n */\nexport type SignalFormat = Message<\"mochabugapis.adapt.graph.SignalFormat\"> & {\n /**\n * The format specification is mutually exclusive - a signal format is either:\n * - jtd_schema: Structured JSON with schema validation (enables automatic validation,\n * type inference, and platform-level tooling support)\n * - mime_type: Generic binary format identification for non-JSON data\n *\n * Design note: While JSON data is technically \"application/json\" as a MIME type,\n * using jtd_schema instead provides platform-level schema validation, automatic\n * type checking, and better developer tooling support.\n *\n * @generated from oneof mochabugapis.adapt.graph.SignalFormat.format\n */\n format: {\n /**\n * Schema definition for JSON-structured signals.\n * Must follow the JSON Type Definition (JTD) specification: https://www.rfc-editor.org/rfc/rfc8927\n *\n * The empty schema {} validates any JSON value.\n *\n * Common JTD primitive types:\n * - \"string\": JSON string values\n * - \"float32\", \"float64\": JSON numbers with specific precision\n * - \"int8\", \"int16\", \"int32\": JSON numbers representing integers\n * - \"boolean\": JSON boolean values (true/false)\n * - \"timestamp\": ISO 8601 datetime strings (RFC 3339 format)\n *\n * JTD also supports complex types:\n * - elements: { elements: { type: \"string\" } } for arrays\n * - properties: { properties: { id: { type: \"int32\" } } } for objects\n * - discriminator: For tagged unions\n * - enum: For enumerated string values\n * - nullable: Wraps any type to allow null\n *\n * Compatibility checking:\n * JTD schemas are checked for structural compatibility using subsumption rules.\n * A producer schema is compatible with a consumer schema if every valid value\n * under the producer schema is also valid under the consumer schema.\n *\n * Example usage for text display binding (accepts primitive types):\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * @generated from field: mochabugapis.adapt.graph.JTDSchema jtd_schema = 1;\n */\n value: JTDSchema;\n case: \"jtdSchema\";\n } | {\n /**\n * MIME type for binary format signals.\n * Must be a concrete MIME type or a type-family wildcard, conforming to RFC 6838\n * media type specifications (without parameters).\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"image/*\")\n * - Type must be concrete (alphanumeric start + allowed characters)\n * - Subtype can be concrete OR wildcard \"*\"\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * Wildcard rules:\n * Wildcards are allowed in two forms:\n * \u2705 \"*\\/*\" - Universal wildcard (accepts/produces any format)\n * \u2705 \"image/*\" - Type-family wildcard (accepts/produces any image format)\n * \u2705 \"text/*\" - Type-family wildcard (accepts/produces any text format)\n * \u2705 \"application/*\" - Type-family wildcard (accepts/produces any application format)\n * \u2705 \"image/png\" - Concrete type (no wildcard)\n * \u274C \"*\\/png\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n * \u274C \"*\\/json\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n *\n * Why no parameters?\n * Parameters like charset, boundary, and encoding are transport-level concerns\n * in this system. All data is transmitted as binary/JSON, and character encoding\n * is handled at the serialization layer, not the graph validation layer.\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. This is a platform-wide convention that ensures\n * consistent text handling across all signal processing. When specifying text MIME\n * types, charset parameters are forbidden and UTF-8 is always assumed.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (redundant - UTF-8 is assumed)\n * \u274C \"text/plain; charset=iso-8859-1\" (non-UTF-8 encodings not supported)\n * \u274C \"application/json; format=compact\"\n * Instead use: \"text/plain\" or \"application/json\"\n *\n *\n * Semantic meaning for producers vs consumers:\n * - In SignalDescriptor (producer):\n * - \"*\\/*\" means \"this signal's format is completely dynamic\"\n * - \"image/*\" means \"this signal produces an image, format depends on runtime\"\n * - In SignalBinding (consumer):\n * - \"*\\/*\" means \"this binding accepts any format universally\"\n * - \"image/*\" means \"this binding accepts any image format\"\n *\n * MIME type compatibility checking (subsumption rules):\n * Subsumption hierarchy: Concrete \u2286 Type-family \u2286 Universal\n * Example: image/png \u2286 image/* \u2286 *\\/*\n *\n * A producer format is compatible with a consumer format if:\n * - Both are concrete and equal: \"image/png\" \u2286 \"image/png\" \u2705\n * - Producer is concrete, consumer is type-family: \"image/png\" \u2286 \"image/*\" \u2705\n * - Producer is concrete, consumer is universal: \"image/png\" \u2286 \"*\\/*\" \u2705\n * - Both are type-family of same type: \"image/*\" \u2286 \"image/*\" \u2705\n * - Producer is type-family, consumer is universal: \"image/*\" \u2286 \"*\\/*\" \u2705\n * - Both are universal: \"*\\/*\" \u2286 \"*\\/*\" \u2705\n * - Producer is type-family, consumer is concrete: \"image/*\" \u2286 \"image/png\" \u274C\n * - Producer is universal, consumer is type-family: \"*\\/*\" \u2286 \"image/*\" \u274C\n * - Producer is universal, consumer is concrete: \"*\\/*\" \u2286 \"image/png\" \u274C\n * - Different types: \"image/png\" \u2286 \"text/*\" \u274C\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n * - Text: \"text/plain\", \"text/csv\"\n *\n * Common wildcard examples:\n * - \"image/*\": Any raster or vector image format\n * - \"text/*\": Any text-based format\n * - \"application/*\": Any application-specific binary format\n * - \"audio/*\": Any audio format\n * - \"video/*\": Any video format\n *\n * @generated from field: string mime_type = 2;\n */\n value: string;\n case: \"mimeType\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * SignalFormat defines how signal data is structured and should be interpreted.\n * All signals are binary at the transport level; this message determines the interpretation.\n *\n * This message is designed to be reusable across both signal descriptors (which produce\n * one specific format or format family) and signal bindings (which may accept multiple formats).\n *\n * Format matching semantics:\n * - JTD schemas use structural subsumption (handled by existing JTD subsume algorithm)\n * - MIME types use pattern matching with optional wildcards\n * - JTD and MIME formats are incompatible - a JTD signal cannot bind to a MIME-accepting\n * binding and vice versa, even if semantically similar (e.g., application/json vs JTD)\n *\n * @generated from message mochabugapis.adapt.graph.SignalFormat\n */\nexport type SignalFormatJson = {\n /**\n * Schema definition for JSON-structured signals.\n * Must follow the JSON Type Definition (JTD) specification: https://www.rfc-editor.org/rfc/rfc8927\n *\n * The empty schema {} validates any JSON value.\n *\n * Common JTD primitive types:\n * - \"string\": JSON string values\n * - \"float32\", \"float64\": JSON numbers with specific precision\n * - \"int8\", \"int16\", \"int32\": JSON numbers representing integers\n * - \"boolean\": JSON boolean values (true/false)\n * - \"timestamp\": ISO 8601 datetime strings (RFC 3339 format)\n *\n * JTD also supports complex types:\n * - elements: { elements: { type: \"string\" } } for arrays\n * - properties: { properties: { id: { type: \"int32\" } } } for objects\n * - discriminator: For tagged unions\n * - enum: For enumerated string values\n * - nullable: Wraps any type to allow null\n *\n * Compatibility checking:\n * JTD schemas are checked for structural compatibility using subsumption rules.\n * A producer schema is compatible with a consumer schema if every valid value\n * under the producer schema is also valid under the consumer schema.\n *\n * Example usage for text display binding (accepts primitive types):\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * @generated from field: mochabugapis.adapt.graph.JTDSchema jtd_schema = 1;\n */\n jtdSchema?: JTDSchemaJson;\n\n /**\n * MIME type for binary format signals.\n * Must be a concrete MIME type or a type-family wildcard, conforming to RFC 6838\n * media type specifications (without parameters).\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"image/*\")\n * - Type must be concrete (alphanumeric start + allowed characters)\n * - Subtype can be concrete OR wildcard \"*\"\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * Wildcard rules:\n * Wildcards are allowed in two forms:\n * \u2705 \"*\\/*\" - Universal wildcard (accepts/produces any format)\n * \u2705 \"image/*\" - Type-family wildcard (accepts/produces any image format)\n * \u2705 \"text/*\" - Type-family wildcard (accepts/produces any text format)\n * \u2705 \"application/*\" - Type-family wildcard (accepts/produces any application format)\n * \u2705 \"image/png\" - Concrete type (no wildcard)\n * \u274C \"*\\/png\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n * \u274C \"*\\/json\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n *\n * Why no parameters?\n * Parameters like charset, boundary, and encoding are transport-level concerns\n * in this system. All data is transmitted as binary/JSON, and character encoding\n * is handled at the serialization layer, not the graph validation layer.\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. This is a platform-wide convention that ensures\n * consistent text handling across all signal processing. When specifying text MIME\n * types, charset parameters are forbidden and UTF-8 is always assumed.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (redundant - UTF-8 is assumed)\n * \u274C \"text/plain; charset=iso-8859-1\" (non-UTF-8 encodings not supported)\n * \u274C \"application/json; format=compact\"\n * Instead use: \"text/plain\" or \"application/json\"\n *\n *\n * Semantic meaning for producers vs consumers:\n * - In SignalDescriptor (producer):\n * - \"*\\/*\" means \"this signal's format is completely dynamic\"\n * - \"image/*\" means \"this signal produces an image, format depends on runtime\"\n * - In SignalBinding (consumer):\n * - \"*\\/*\" means \"this binding accepts any format universally\"\n * - \"image/*\" means \"this binding accepts any image format\"\n *\n * MIME type compatibility checking (subsumption rules):\n * Subsumption hierarchy: Concrete \u2286 Type-family \u2286 Universal\n * Example: image/png \u2286 image/* \u2286 *\\/*\n *\n * A producer format is compatible with a consumer format if:\n * - Both are concrete and equal: \"image/png\" \u2286 \"image/png\" \u2705\n * - Producer is concrete, consumer is type-family: \"image/png\" \u2286 \"image/*\" \u2705\n * - Producer is concrete, consumer is universal: \"image/png\" \u2286 \"*\\/*\" \u2705\n * - Both are type-family of same type: \"image/*\" \u2286 \"image/*\" \u2705\n * - Producer is type-family, consumer is universal: \"image/*\" \u2286 \"*\\/*\" \u2705\n * - Both are universal: \"*\\/*\" \u2286 \"*\\/*\" \u2705\n * - Producer is type-family, consumer is concrete: \"image/*\" \u2286 \"image/png\" \u274C\n * - Producer is universal, consumer is type-family: \"*\\/*\" \u2286 \"image/*\" \u274C\n * - Producer is universal, consumer is concrete: \"*\\/*\" \u2286 \"image/png\" \u274C\n * - Different types: \"image/png\" \u2286 \"text/*\" \u274C\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n * - Text: \"text/plain\", \"text/csv\"\n *\n * Common wildcard examples:\n * - \"image/*\": Any raster or vector image format\n * - \"text/*\": Any text-based format\n * - \"application/*\": Any application-specific binary format\n * - \"audio/*\": Any audio format\n * - \"video/*\": Any video format\n *\n * @generated from field: string mime_type = 2;\n */\n mimeType?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalFormat.\n * Use `create(SignalFormatSchema)` to create a new message.\n */\nexport const SignalFormatSchema: GenMessage<SignalFormat, {jsonType: SignalFormatJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_format, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/jtd_schema.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { StructJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\nimport type { JsonObject, Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/jtd_schema.proto.\n */\nexport const file_mochabugapis_adapt_graph_jtd_schema: GenFile = /*@__PURE__*/\n fileDesc(\"Ciltb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvanRkX3NjaGVtYS5wcm90bxIYbW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoIsEcCglKVERTY2hlbWESegoLZGVmaW5pdGlvbnMYASADKAsyNC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hLkRlZmluaXRpb25zRW50cnlCL7pILJoBKQgAEOgHIiJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEi4KCG1ldGFkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAiAEBEhUKCG51bGxhYmxlGAMgASgISAGIAQESNwoDcmVmGAQgASgJQiW6SCJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokSAKIAQEScQoEdHlwZRgFIAEoCUJeukhbcllSB2Jvb2xlYW5SB2Zsb2F0MzJSB2Zsb2F0NjRSBGludDhSBXVpbnQ4UgVpbnQxNlIGdWludDE2UgVpbnQzMlIGdWludDMyUgZzdHJpbmdSCXRpbWVzdGFtcEgDiAEBEiQKBGVudW0YBiADKAlCFrpIE5IBEAgAEOgHGAEiB3IFEAEY6AcSOgoIZWxlbWVudHMYByABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hSASIAQESXAoKcHJvcGVydGllcxgIIAMoCzIzLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWEuUHJvcGVydGllc0VudHJ5QhO6SBCaAQ0IABDoByIGcgQQARhkEm0KE29wdGlvbmFsX3Byb3BlcnRpZXMYCSADKAsyOy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hLk9wdGlvbmFsUHJvcGVydGllc0VudHJ5QhO6SBCaAQ0IABDoByIGcgQQARhkEiIKFWFkZGl0aW9uYWxfcHJvcGVydGllcxgKIAEoCEgFiAEBEjgKBnZhbHVlcxgLIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFIBogBARIlCg1kaXNjcmltaW5hdG9yGAwgASgJQgm6SAZyBBABGGRIB4gBARJWCgdtYXBwaW5nGA0gAygLMjAubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYS5NYXBwaW5nRW50cnlCE7pIEJoBDQgAEOgHIgZyBBABGGQaVwoQRGVmaW5pdGlvbnNFbnRyeRILCgNrZXkYASABKAkSMgoFdmFsdWUYAiABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hOgI4ARpWCg9Qcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYToCOAEaXgoXT3B0aW9uYWxQcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYToCOAEaUwoMTWFwcGluZ0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWE6AjgBOuMRukjfERqTAwocanRkLm11dHVhbGx5X2V4Y2x1c2l2ZV9mb3JtcxKIAVNjaGVtYSBtdXN0IHVzZSBleGFjdGx5IG9uZSBmb3JtIChlbXB0eSwgcmVmLCB0eXBlLCBlbnVtLCBlbGVtZW50cywgcHJvcGVydGllcywgdmFsdWVzLCBvciBkaXNjcmltaW5hdG9yKS4gTXVsdGlwbGUgZm9ybSBrZXl3b3JkcyBmb3VuZC4a5wFbaGFzKHRoaXMucmVmKSwgaGFzKHRoaXMudHlwZSksIHNpemUodGhpcy5lbnVtKSA+IDAsIGhhcyh0aGlzLmVsZW1lbnRzKSwgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMub3B0aW9uYWxfcHJvcGVydGllcykgPiAwLCBoYXModGhpcy52YWx1ZXMpLCBoYXModGhpcy5kaXNjcmltaW5hdG9yKSAmJiBzaXplKHRoaXMubWFwcGluZykgPiAwXS5maWx0ZXIoeCwgeCkuc2l6ZSgpIDw9IDEa+AEKGWp0ZC5wcm9wZXJ0aWVzX25vX292ZXJsYXASWFByb3BlcnRpZXMgYW5kIG9wdGlvbmFsX3Byb3BlcnRpZXMgY2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcga2V5cyAoUkZDIDg5MjcgU2VjdGlvbiAyLjIuNikagAEhKHNpemUodGhpcy5wcm9wZXJ0aWVzKSA+IDAgJiYgc2l6ZSh0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpID4gMCkgfHwgdGhpcy5wcm9wZXJ0aWVzLmFsbChwaywgIShwayBpbiB0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpKRqQAgoxanRkLmFkZGl0aW9uYWxfcHJvcGVydGllc19vbmx5X29uX3Byb3BlcnRpZXNfZm9ybRJ2YWRkaXRpb25hbF9wcm9wZXJ0aWVzIGNhbiBvbmx5IGJlIHNldCB3aGVuIHVzaW5nIHRoZSBwcm9wZXJ0aWVzIGZvcm0gKGhhcyBub24tZW1wdHkgcHJvcGVydGllcyBvciBvcHRpb25hbF9wcm9wZXJ0aWVzKRpjIWhhcyh0aGlzLmFkZGl0aW9uYWxfcHJvcGVydGllcykgfHwgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMub3B0aW9uYWxfcHJvcGVydGllcykgPiAwGsIBCiJqdGQuZGlzY3JpbWluYXRvcl9yZXF1aXJlc19tYXBwaW5nEmdkaXNjcmltaW5hdG9yIGFuZCBtYXBwaW5nIG11c3QgYXBwZWFyIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3Qgb25lIG1hcHBpbmcgZW50cnkgKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjgpGjNoYXModGhpcy5kaXNjcmltaW5hdG9yKSA9PSAoc2l6ZSh0aGlzLm1hcHBpbmcpID4gMCka/QEKI2p0ZC5tYXBwaW5nX211c3RfYmVfcHJvcGVydGllc19mb3JtEk5BbGwgc2NoZW1hcyBpbiBtYXBwaW5nIG11c3QgYmUgb2YgdGhlIHByb3BlcnRpZXMgZm9ybSAoUkZDIDg5MjcgU2VjdGlvbiAyLjIuOCkahQFzaXplKHRoaXMubWFwcGluZykgPT0gMCB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sIHNpemUodGhpcy5tYXBwaW5nW21dLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMubWFwcGluZ1ttXS5vcHRpb25hbF9wcm9wZXJ0aWVzKSA+IDApGuIBCh5qdGQubWFwcGluZ19jYW5ub3RfYmVfbnVsbGFibGUSU1NjaGVtYXMgaW4gZGlzY3JpbWluYXRvciBtYXBwaW5nIGNhbm5vdCBoYXZlIG51bGxhYmxlPXRydWUgKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjgpGmtzaXplKHRoaXMubWFwcGluZykgPT0gMCB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sICFoYXModGhpcy5tYXBwaW5nW21dLm51bGxhYmxlKSB8fCAhdGhpcy5tYXBwaW5nW21dLm51bGxhYmxlKRrGAgoranRkLmRpc2NyaW1pbmF0b3Jfbm90X2luX21hcHBpbmdfcHJvcGVydGllcxJwRGlzY3JpbWluYXRvciB0YWcgY2Fubm90IGFwcGVhciBpbiBwcm9wZXJ0aWVzIG9yIG9wdGlvbmFsX3Byb3BlcnRpZXMgb2YgbWFwcGluZyBzY2hlbWFzIChSRkMgODkyNyBTZWN0aW9uIDIuMi44KRqkASFoYXModGhpcy5kaXNjcmltaW5hdG9yKSB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sICEodGhpcy5kaXNjcmltaW5hdG9yIGluIHRoaXMubWFwcGluZ1ttXS5wcm9wZXJ0aWVzKSAmJiAhKHRoaXMuZGlzY3JpbWluYXRvciBpbiB0aGlzLm1hcHBpbmdbbV0ub3B0aW9uYWxfcHJvcGVydGllcykpGsUCChJqdGQuZW51bV9ub25fZW1wdHkSSmVudW0gYXJyYXkgbXVzdCBiZSBub24tZW1wdHkgd2hlbiB1c2luZyBlbnVtIGZvcm0gKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjQpGuIBc2l6ZSh0aGlzLmVudW0pID4gMCAmJiAhaGFzKHRoaXMudHlwZSkgJiYgIWhhcyh0aGlzLnJlZikgJiYgIWhhcyh0aGlzLmVsZW1lbnRzKSAmJiAhaGFzKHRoaXMudmFsdWVzKSAmJiAhaGFzKHRoaXMuZGlzY3JpbWluYXRvcikgJiYgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID09IDAgJiYgc2l6ZSh0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpID09IDAgPyBzaXplKHRoaXMuZW51bSkgPiAwIDogdHJ1ZUILCglfbWV0YWRhdGFCCwoJX251bGxhYmxlQgYKBF9yZWZCBwoFX3R5cGVCCwoJX2VsZW1lbnRzQhgKFl9hZGRpdGlvbmFsX3Byb3BlcnRpZXNCCQoHX3ZhbHVlc0IQCg5fZGlzY3JpbWluYXRvcmIGcHJvdG8z\", [file_buf_validate_validate, file_google_protobuf_struct]);\n\n/**\n * Schema represents a JSON Typedef Schema (RFC 8927).\n *\n * ## Eight Mutually Exclusive Forms\n *\n * A JTD schema must take exactly ONE of these forms:\n * 1. **Empty**: No form-specific keywords (accepts anything)\n * 2. **Ref**: Has `ref` keyword\n * 3. **Type**: Has `type` keyword\n * 4. **Enum**: Has `enum` keyword (non-empty array)\n * 5. **Elements**: Has `elements` keyword\n * 6. **Properties**: Has `properties` and/or `optional_properties`\n * 7. **Values**: Has `values` keyword\n * 8. **Discriminator**: Has `discriminator` and `mapping` keywords\n *\n * ## Shared Keywords\n *\n * These can appear on ANY form:\n * - `nullable`: Allows null values in addition to the schema's type\n * - `metadata`: Arbitrary information (ignored during validation)\n *\n * ## Root-Level Keyword\n *\n * - `definitions`: Per RFC 8927 Section 2.1, this should only appear on root schemas.\n * While this cannot be enforced at the protobuf schema level, application code should\n * only populate this field on root schemas, not on nested schemas within definitions,\n * elements, properties, etc.\n *\n * @generated from message mochabugapis.adapt.graph.JTDSchema\n */\nexport type JTDSchema = Message<\"mochabugapis.adapt.graph.JTDSchema\"> & {\n /**\n * The definitions keyword MUST be an object where each value is a schema.\n * This object defines a collection of schema definitions that can be referenced via the ref keyword.\n *\n * RFC 8927 Section 2.1: definitions should only appear on root schemas, not on nested schemas.\n * Application code is responsible for enforcing this constraint.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1;\n */\n definitions: { [key: string]: JTDSchema };\n\n /**\n * The metadata keyword MUST be an object.\n * This object is ignored during validation and can store custom information about the schema.\n * Examples: descriptions, UI hints, code generation directives.\n *\n * @generated from field: optional google.protobuf.Struct metadata = 2;\n */\n metadata?: JsonObject;\n\n /**\n * The nullable keyword MUST be a boolean.\n * If true, the schema matches the value null as well as any value matched by the rest of the schema.\n *\n * RFC 8927: nullable can appear on any schema form.\n * Exception: Cannot be true on schemas within discriminator mappings (validated via CEL).\n *\n * @generated from field: optional bool nullable = 3;\n */\n nullable?: boolean;\n\n /**\n * The ref keyword MUST be a string.\n * It is a reference to a schema defined in the definitions object of the root schema.\n *\n * RFC 8927 Section 2.2.2: The value must refer to a definition in the root schema's definitions.\n * The referenced definition must exist (validated at runtime, not enforceable in protobuf schema).\n *\n * @generated from field: optional string ref = 4;\n */\n ref?: string;\n\n /**\n * The type keyword MUST be one of the predefined strings specifying the type of the value.\n * Valid values per RFC 8927 Section 2.2.3:\n * - \"boolean\": JSON true or false\n * - \"float32\", \"float64\": JSON numbers (IEEE 754 single/double precision intent)\n * - \"int8\": -128 to 127\n * - \"uint8\": 0 to 255\n * - \"int16\": -32,768 to 32,767\n * - \"uint16\": 0 to 65,535\n * - \"int32\": -2,147,483,648 to 2,147,483,647\n * - \"uint32\": 0 to 4,294,967,295\n * - \"string\": JSON string\n * - \"timestamp\": RFC 3339 timestamp string\n *\n * Note: RFC 8927 intentionally omits int64/uint64 due to JSON interoperability concerns.\n *\n * @generated from field: optional string type = 5;\n */\n type?: string;\n\n /**\n * The enum keyword MUST be a non-empty array of strings.\n * The schema matches any value that is equal to one of the elements in the array.\n *\n * RFC 8927 Section 2.2.4:\n * - When using enum form, this array MUST be non-empty\n * - The array MUST NOT contain duplicate values (enforced via unique constraint)\n * - Only string enums are supported (no numeric enums)\n *\n * @generated from field: repeated string enum = 6;\n */\n enum: string[];\n\n /**\n * The elements keyword MUST be a schema.\n * It is used to validate elements in an array.\n *\n * RFC 8927 Section 2.2.5: Describes homogeneous arrays where all elements match the same schema.\n * Empty arrays are valid. Each element is validated against this schema.\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema elements = 7;\n */\n elements?: JTDSchema;\n\n /**\n * The properties keyword MUST be an object where each value is a schema.\n * Each key is a required property that must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are REQUIRED\n * - For optional properties, use optional_properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8;\n */\n properties: { [key: string]: JTDSchema };\n\n /**\n * The optional_properties keyword MUST be an object where each value is a schema.\n * Each key is an optional property that, if present, must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are OPTIONAL\n * - For required properties, use properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9;\n */\n optionalProperties: { [key: string]: JTDSchema };\n\n /**\n * The additional_properties keyword MUST be a boolean.\n * If true, the object may have properties other than those specified in properties and optional_properties.\n *\n * RFC 8927 Section 3.1:\n * - Only valid on schemas of the \"properties\" form\n * - Controls \"allow additional properties\" mode during validation\n * - Does not get inherited by subschemas\n * - If false or absent, unknown properties cause validation errors\n *\n * @generated from field: optional bool additional_properties = 10;\n */\n additionalProperties?: boolean;\n\n /**\n * The values keyword MUST be a schema.\n * It is used to validate the values in an object (dictionary/map/associative array pattern).\n *\n * RFC 8927 Section 2.2.7: Values form describes JSON objects used as dictionaries.\n * - Keys can be any string\n * - All values must match this schema\n * - Empty objects are valid\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema values = 11;\n */\n values?: JTDSchema;\n\n /**\n * The discriminator keyword MUST be a string.\n * It is used with mapping to represent tagged unions (discriminated unions, sum types).\n *\n * RFC 8927 Section 2.2.8: Discriminator form describes tagged unions.\n * - The discriminator is a property name that acts as the \"tag\"\n * - The tag value determines which schema from mapping is used\n * - Must be used together with mapping (validated via CEL)\n *\n * @generated from field: optional string discriminator = 12;\n */\n discriminator?: string;\n\n /**\n * The mapping keyword MUST be an object where each value is a schema.\n * Used with discriminator for tagged unions, mapping discriminator tag values to schemas.\n *\n * RFC 8927 Section 2.2.8: Each schema in mapping:\n * - MUST be of the \"properties\" form (have properties and/or optional_properties)\n * - MUST NOT have nullable=true\n * - MUST NOT include the discriminator tag in properties or optional_properties\n * These constraints are validated via CEL rules below.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13;\n */\n mapping: { [key: string]: JTDSchema };\n};\n\n/**\n * Schema represents a JSON Typedef Schema (RFC 8927).\n *\n * ## Eight Mutually Exclusive Forms\n *\n * A JTD schema must take exactly ONE of these forms:\n * 1. **Empty**: No form-specific keywords (accepts anything)\n * 2. **Ref**: Has `ref` keyword\n * 3. **Type**: Has `type` keyword\n * 4. **Enum**: Has `enum` keyword (non-empty array)\n * 5. **Elements**: Has `elements` keyword\n * 6. **Properties**: Has `properties` and/or `optional_properties`\n * 7. **Values**: Has `values` keyword\n * 8. **Discriminator**: Has `discriminator` and `mapping` keywords\n *\n * ## Shared Keywords\n *\n * These can appear on ANY form:\n * - `nullable`: Allows null values in addition to the schema's type\n * - `metadata`: Arbitrary information (ignored during validation)\n *\n * ## Root-Level Keyword\n *\n * - `definitions`: Per RFC 8927 Section 2.1, this should only appear on root schemas.\n * While this cannot be enforced at the protobuf schema level, application code should\n * only populate this field on root schemas, not on nested schemas within definitions,\n * elements, properties, etc.\n *\n * @generated from message mochabugapis.adapt.graph.JTDSchema\n */\nexport type JTDSchemaJson = {\n /**\n * The definitions keyword MUST be an object where each value is a schema.\n * This object defines a collection of schema definitions that can be referenced via the ref keyword.\n *\n * RFC 8927 Section 2.1: definitions should only appear on root schemas, not on nested schemas.\n * Application code is responsible for enforcing this constraint.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1;\n */\n definitions?: { [key: string]: JTDSchemaJson };\n\n /**\n * The metadata keyword MUST be an object.\n * This object is ignored during validation and can store custom information about the schema.\n * Examples: descriptions, UI hints, code generation directives.\n *\n * @generated from field: optional google.protobuf.Struct metadata = 2;\n */\n metadata?: StructJson;\n\n /**\n * The nullable keyword MUST be a boolean.\n * If true, the schema matches the value null as well as any value matched by the rest of the schema.\n *\n * RFC 8927: nullable can appear on any schema form.\n * Exception: Cannot be true on schemas within discriminator mappings (validated via CEL).\n *\n * @generated from field: optional bool nullable = 3;\n */\n nullable?: boolean;\n\n /**\n * The ref keyword MUST be a string.\n * It is a reference to a schema defined in the definitions object of the root schema.\n *\n * RFC 8927 Section 2.2.2: The value must refer to a definition in the root schema's definitions.\n * The referenced definition must exist (validated at runtime, not enforceable in protobuf schema).\n *\n * @generated from field: optional string ref = 4;\n */\n ref?: string;\n\n /**\n * The type keyword MUST be one of the predefined strings specifying the type of the value.\n * Valid values per RFC 8927 Section 2.2.3:\n * - \"boolean\": JSON true or false\n * - \"float32\", \"float64\": JSON numbers (IEEE 754 single/double precision intent)\n * - \"int8\": -128 to 127\n * - \"uint8\": 0 to 255\n * - \"int16\": -32,768 to 32,767\n * - \"uint16\": 0 to 65,535\n * - \"int32\": -2,147,483,648 to 2,147,483,647\n * - \"uint32\": 0 to 4,294,967,295\n * - \"string\": JSON string\n * - \"timestamp\": RFC 3339 timestamp string\n *\n * Note: RFC 8927 intentionally omits int64/uint64 due to JSON interoperability concerns.\n *\n * @generated from field: optional string type = 5;\n */\n type?: string;\n\n /**\n * The enum keyword MUST be a non-empty array of strings.\n * The schema matches any value that is equal to one of the elements in the array.\n *\n * RFC 8927 Section 2.2.4:\n * - When using enum form, this array MUST be non-empty\n * - The array MUST NOT contain duplicate values (enforced via unique constraint)\n * - Only string enums are supported (no numeric enums)\n *\n * @generated from field: repeated string enum = 6;\n */\n enum?: string[];\n\n /**\n * The elements keyword MUST be a schema.\n * It is used to validate elements in an array.\n *\n * RFC 8927 Section 2.2.5: Describes homogeneous arrays where all elements match the same schema.\n * Empty arrays are valid. Each element is validated against this schema.\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema elements = 7;\n */\n elements?: JTDSchemaJson;\n\n /**\n * The properties keyword MUST be an object where each value is a schema.\n * Each key is a required property that must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are REQUIRED\n * - For optional properties, use optional_properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8;\n */\n properties?: { [key: string]: JTDSchemaJson };\n\n /**\n * The optional_properties keyword MUST be an object where each value is a schema.\n * Each key is an optional property that, if present, must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are OPTIONAL\n * - For required properties, use properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9;\n */\n optionalProperties?: { [key: string]: JTDSchemaJson };\n\n /**\n * The additional_properties keyword MUST be a boolean.\n * If true, the object may have properties other than those specified in properties and optional_properties.\n *\n * RFC 8927 Section 3.1:\n * - Only valid on schemas of the \"properties\" form\n * - Controls \"allow additional properties\" mode during validation\n * - Does not get inherited by subschemas\n * - If false or absent, unknown properties cause validation errors\n *\n * @generated from field: optional bool additional_properties = 10;\n */\n additionalProperties?: boolean;\n\n /**\n * The values keyword MUST be a schema.\n * It is used to validate the values in an object (dictionary/map/associative array pattern).\n *\n * RFC 8927 Section 2.2.7: Values form describes JSON objects used as dictionaries.\n * - Keys can be any string\n * - All values must match this schema\n * - Empty objects are valid\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema values = 11;\n */\n values?: JTDSchemaJson;\n\n /**\n * The discriminator keyword MUST be a string.\n * It is used with mapping to represent tagged unions (discriminated unions, sum types).\n *\n * RFC 8927 Section 2.2.8: Discriminator form describes tagged unions.\n * - The discriminator is a property name that acts as the \"tag\"\n * - The tag value determines which schema from mapping is used\n * - Must be used together with mapping (validated via CEL)\n *\n * @generated from field: optional string discriminator = 12;\n */\n discriminator?: string;\n\n /**\n * The mapping keyword MUST be an object where each value is a schema.\n * Used with discriminator for tagged unions, mapping discriminator tag values to schemas.\n *\n * RFC 8927 Section 2.2.8: Each schema in mapping:\n * - MUST be of the \"properties\" form (have properties and/or optional_properties)\n * - MUST NOT have nullable=true\n * - MUST NOT include the discriminator tag in properties or optional_properties\n * These constraints are validated via CEL rules below.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13;\n */\n mapping?: { [key: string]: JTDSchemaJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.JTDSchema.\n * Use `create(JTDSchemaSchema)` to create a new message.\n */\nexport const JTDSchemaSchema: GenMessage<JTDSchema, {jsonType: JTDSchemaJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_jtd_schema, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/vertex_metadata.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { Exchange, ExchangeJson } from \"./exchange_pb\";\nimport { file_mochabugapis_adapt_graph_exchange } from \"./exchange_pb\";\nimport type { Receiver, ReceiverJson } from \"./receiver_pb\";\nimport { file_mochabugapis_adapt_graph_receiver } from \"./receiver_pb\";\nimport type { Transmitter, TransmitterJson } from \"./transmitter_pb\";\nimport { file_mochabugapis_adapt_graph_transmitter } from \"./transmitter_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/vertex_metadata.proto.\n */\nexport const file_mochabugapis_adapt_graph_vertex_metadata: GenFile = /*@__PURE__*/\n fileDesc(\"Ci5tb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdmVydGV4X21ldGFkYXRhLnByb3RvEhhtb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGgihAUKDlZlcnRleE1ldGFkYXRhEhAKCGNvbXBsZXRlGAEgASgIErABCglyZWNlaXZlcnMYAiADKAsyIi5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguUmVjZWl2ZXJCebpIdroBbAoWcmVjZWl2ZXJzX3VuaXF1ZV9uYW1lcxImRWFjaCByZWNlaXZlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKnRoaXMubWFwKHJlY2VpdmVyLCByZWNlaXZlci5uYW1lKS51bmlxdWUoKZIBBAgBEDISwgEKDHRyYW5zbWl0dGVycxgDIAMoCzIlLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5UcmFuc21pdHRlckKEAbpIgAG6AXgKGXRyYW5zbWl0dGVyc191bmlxdWVfbmFtZXMSKUVhY2ggdHJhbnNtaXR0ZXIgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuGjB0aGlzLm1hcCh0cmFuc21pdHRlciwgdHJhbnNtaXR0ZXIubmFtZSkudW5pcXVlKCmSAQIQMhKuAQoJZXhjaGFuZ2VzGAQgAygLMiIubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkV4Y2hhbmdlQne6SHS6AWwKFmV4Y2hhbmdlc191bmlxdWVfbmFtZXMSJkVhY2ggZXhjaGFuZ2UgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuGip0aGlzLm1hcChleGNoYW5nZSwgZXhjaGFuZ2UubmFtZSkudW5pcXVlKCmSAQIQChIlCg1jcm9uX3NjaGVkdWxlGAYgASgJQgm6SAZyBBABGGRIAIgBAUIQCg5fY3Jvbl9zY2hlZHVsZWIGcHJvdG8z\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_exchange, file_mochabugapis_adapt_graph_receiver, file_mochabugapis_adapt_graph_transmitter]);\n\n/**\n * VertexMetadata represents the configuration for a vertex, detailing its inputs,\n * outputs, and processes (such as procedures and streams).\n *\n * @generated from message mochabugapis.adapt.graph.VertexMetadata\n */\nexport type VertexMetadata = Message<\"mochabugapis.adapt.graph.VertexMetadata\"> & {\n /**\n * Indicates if the vertex configuration is complete. Defaults to 'false'.\n *\n * @generated from field: bool complete = 1;\n */\n complete: boolean;\n\n /**\n * Input points for the vertex. Must contain between 1 and 50 receivers,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Receiver receivers = 2;\n */\n receivers: Receiver[];\n\n /**\n * Output points for the vertex. Can contain up to 50 transmitters,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 3;\n */\n transmitters: Transmitter[];\n\n /**\n * Processes initiated by transmitters and responded to by receivers.\n * Limited to 10 unique procedures.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Exchange exchanges = 4;\n */\n exchanges: Exchange[];\n\n /**\n * A unix cron expression to determine when the task should run.\n *\n * @generated from field: optional string cron_schedule = 6;\n */\n cronSchedule?: string;\n};\n\n/**\n * VertexMetadata represents the configuration for a vertex, detailing its inputs,\n * outputs, and processes (such as procedures and streams).\n *\n * @generated from message mochabugapis.adapt.graph.VertexMetadata\n */\nexport type VertexMetadataJson = {\n /**\n * Indicates if the vertex configuration is complete. Defaults to 'false'.\n *\n * @generated from field: bool complete = 1;\n */\n complete?: boolean;\n\n /**\n * Input points for the vertex. Must contain between 1 and 50 receivers,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Receiver receivers = 2;\n */\n receivers?: ReceiverJson[];\n\n /**\n * Output points for the vertex. Can contain up to 50 transmitters,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 3;\n */\n transmitters?: TransmitterJson[];\n\n /**\n * Processes initiated by transmitters and responded to by receivers.\n * Limited to 10 unique procedures.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Exchange exchanges = 4;\n */\n exchanges?: ExchangeJson[];\n\n /**\n * A unix cron expression to determine when the task should run.\n *\n * @generated from field: optional string cron_schedule = 6;\n */\n cronSchedule?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.VertexMetadata.\n * Use `create(VertexMetadataSchema)` to create a new message.\n */\nexport const VertexMetadataSchema: GenMessage<VertexMetadata, {jsonType: VertexMetadataJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_vertex_metadata, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/exchange.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { Transceiver, TransceiverJson } from \"./transceiver_pb\";\nimport { file_mochabugapis_adapt_graph_transceiver } from \"./transceiver_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/exchange.proto.\n */\nexport const file_mochabugapis_adapt_graph_exchange: GenFile = /*@__PURE__*/\n fileDesc(\"Cidtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvZXhjaGFuZ2UucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLuAwoIRXhjaGFuZ2USMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARLCAQoMdHJhbnNtaXR0ZXJzGAMgAygLMiUubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlRyYW5zY2VpdmVyQoQBukiAAboBeAoZdHJhbnNtaXR0ZXJzX3VuaXF1ZV9uYW1lcxIpRWFjaCB0cmFuc21pdHRlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aMHRoaXMubWFwKHRyYW5zbWl0dGVyLCB0cmFuc21pdHRlci5uYW1lKS51bmlxdWUoKZIBAhAKErMBCglyZWNlaXZlcnMYBCADKAsyJS5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguVHJhbnNjZWl2ZXJCebpIdroBbAoWcmVjZWl2ZXJzX3VuaXF1ZV9uYW1lcxImRWFjaCByZWNlaXZlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKnRoaXMubWFwKHJlY2VpdmVyLCByZWNlaXZlci5uYW1lKS51bmlxdWUoKZIBBAgBEApCDgoMX2Rlc2NyaXB0aW9uYgZwcm90bzM\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_transceiver]);\n\n/**\n * Exchange represents a communication setup involving both transmitters and receivers.\n *\n * @generated from message mochabugapis.adapt.graph.Exchange\n */\nexport type Exchange = Message<\"mochabugapis.adapt.graph.Exchange\"> & {\n /**\n * Identifier for the exchange, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the exchange, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * Outputs involved in the exchange, limited to 10 unique transmitters.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver transmitters = 3;\n */\n transmitters: Transceiver[];\n\n /**\n * Inputs involved in the exchange, requiring between 1 and 10 unique receivers.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver receivers = 4;\n */\n receivers: Transceiver[];\n};\n\n/**\n * Exchange represents a communication setup involving both transmitters and receivers.\n *\n * @generated from message mochabugapis.adapt.graph.Exchange\n */\nexport type ExchangeJson = {\n /**\n * Identifier for the exchange, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the exchange, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * Outputs involved in the exchange, limited to 10 unique transmitters.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver transmitters = 3;\n */\n transmitters?: TransceiverJson[];\n\n /**\n * Inputs involved in the exchange, requiring between 1 and 10 unique receivers.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver receivers = 4;\n */\n receivers?: TransceiverJson[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Exchange.\n * Use `create(ExchangeSchema)` to create a new message.\n */\nexport const ExchangeSchema: GenMessage<Exchange, {jsonType: ExchangeJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_exchange, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/transceiver.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalDescriptor, SignalDescriptorJson } from \"./signal_descriptor_pb\";\nimport { file_mochabugapis_adapt_graph_signal_descriptor } from \"./signal_descriptor_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/transceiver.proto.\n */\nexport const file_mochabugapis_adapt_graph_transceiver: GenFile = /*@__PURE__*/\n fileDesc(\"Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdHJhbnNjZWl2ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLMAgoLVHJhbnNjZWl2ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKtAQoHc2lnbmFscxgDIAMoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEZXNjcmlwdG9yQnC6SG26AWQKFHNpZ25hbHNfdW5pcXVlX25hbWVzEiRFYWNoIHNpZ25hbCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aJnRoaXMubWFwKHNpZ25hbCwgc2lnbmFsLm5hbWUpLnVuaXF1ZSgpkgEDEIAEEhYKCXN0cmVhbWluZxgEIAEoCEgBiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfc3RyZWFtaW5nYgZwcm90bzM\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_descriptor]);\n\n/**\n * Transceiver is a dual-purpose entity capable of both emitting and receiving signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transceiver\n */\nexport type Transceiver = Message<\"mochabugapis.adapt.graph.Transceiver\"> & {\n /**\n * Identifier for the transceiver, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the transceiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transceiver handles. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n\n /**\n * Wheter or not the transceiver is a streaming transceiver.\n *\n * @generated from field: optional bool streaming = 4;\n */\n streaming?: boolean;\n};\n\n/**\n * Transceiver is a dual-purpose entity capable of both emitting and receiving signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transceiver\n */\nexport type TransceiverJson = {\n /**\n * Identifier for the transceiver, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the transceiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transceiver handles. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals?: SignalDescriptorJson[];\n\n /**\n * Wheter or not the transceiver is a streaming transceiver.\n *\n * @generated from field: optional bool streaming = 4;\n */\n streaming?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Transceiver.\n * Use `create(TransceiverSchema)` to create a new message.\n */\nexport const TransceiverSchema: GenMessage<Transceiver, {jsonType: TransceiverJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_transceiver, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_descriptor.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalFormat, SignalFormatJson } from \"./signal_format_pb\";\nimport { file_mochabugapis_adapt_graph_signal_format } from \"./signal_format_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_descriptor.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_descriptor: GenFile = /*@__PURE__*/\n fileDesc(\"CjBtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2Rlc2NyaXB0b3IucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKMAgoQU2lnbmFsRGVzY3JpcHRvchIzCgRuYW1lGAEgASgJQiW6SCJyIBABGDIyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhwKBWxhYmVsGAIgASgJQgi6SAVyAxj6AUgAiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxjoB0gBiAEBEhUKCG9wdGlvbmFsGAQgASgISAKIAQESQwoHZm9ybWF0cxgFIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxGb3JtYXRCCrpIB5IBBAgBEDJCCAoGX2xhYmVsQg4KDF9kZXNjcmlwdGlvbkILCglfb3B0aW9uYWxiBnByb3RvMw\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_format]);\n\n/**\n * SignalDescriptor defines the complete specification of a signal, including its identity\n * and data format, without containing the actual signal data.\n *\n * A signal descriptor represents what a signal IS - its name, documentation, and the\n * single, specific format it produces. This is distinct from SignalBinding, which\n * represents what formats a binding point ACCEPTS.\n *\n * @generated from message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport type SignalDescriptor = Message<\"mochabugapis.adapt.graph.SignalDescriptor\"> & {\n /**\n * Identifier for the signal, following ECMAScript identifier naming conventions.\n * Must be a valid JavaScript/TypeScript identifier to ensure compatibility with\n * code generation and scripting environments.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"temperature\", \"user_id\", \"$internal\", \"_privateSignal\"\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Human-readable label for the signal, suitable for display in user interfaces.\n * Should be brief and descriptive.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Room Temperature\", \"User ID\", \"Processing Status\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the signal's purpose, behavior, and usage.\n * Should provide context for developers and users.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the signal represents\n * - When it's emitted\n * - Expected value ranges or formats\n * - Usage examples or constraints\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this signal must be provided.\n *\n * When false or unset: Signal is required and must be present\n * When true: Signal is optional and may be omitted\n *\n * Optional signals provide flexibility in graph construction, allowing\n * vertices to function with or without certain inputs.\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats that this signal produces. The signal will produce any signal whose\n * format matches at least one entry in this list.\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly complicated signals and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 5;\n */\n formats: SignalFormat[];\n};\n\n/**\n * SignalDescriptor defines the complete specification of a signal, including its identity\n * and data format, without containing the actual signal data.\n *\n * A signal descriptor represents what a signal IS - its name, documentation, and the\n * single, specific format it produces. This is distinct from SignalBinding, which\n * represents what formats a binding point ACCEPTS.\n *\n * @generated from message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport type SignalDescriptorJson = {\n /**\n * Identifier for the signal, following ECMAScript identifier naming conventions.\n * Must be a valid JavaScript/TypeScript identifier to ensure compatibility with\n * code generation and scripting environments.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"temperature\", \"user_id\", \"$internal\", \"_privateSignal\"\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Human-readable label for the signal, suitable for display in user interfaces.\n * Should be brief and descriptive.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Room Temperature\", \"User ID\", \"Processing Status\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the signal's purpose, behavior, and usage.\n * Should provide context for developers and users.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the signal represents\n * - When it's emitted\n * - Expected value ranges or formats\n * - Usage examples or constraints\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this signal must be provided.\n *\n * When false or unset: Signal is required and must be present\n * When true: Signal is optional and may be omitted\n *\n * Optional signals provide flexibility in graph construction, allowing\n * vertices to function with or without certain inputs.\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats that this signal produces. The signal will produce any signal whose\n * format matches at least one entry in this list.\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly complicated signals and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 5;\n */\n formats?: SignalFormatJson[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalDescriptor.\n * Use `create(SignalDescriptorSchema)` to create a new message.\n */\nexport const SignalDescriptorSchema: GenMessage<SignalDescriptor, {jsonType: SignalDescriptorJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_descriptor, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/receiver.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalBinding, SignalBindingJson } from \"./signal_binding_pb\";\nimport { file_mochabugapis_adapt_graph_signal_binding } from \"./signal_binding_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/receiver.proto.\n */\nexport const file_mochabugapis_adapt_graph_receiver: GenFile = /*@__PURE__*/\n fileDesc(\"Cidtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvcmVjZWl2ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKlAgoIUmVjZWl2ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKvAQoIYmluZGluZ3MYAyADKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsQmluZGluZ0J0ukhxugFoChViaW5kaW5nc191bmlxdWVfbmFtZXMSJUVhY2ggYmluZGluZyBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKHRoaXMubWFwKGJpbmRpbmcsIGJpbmRpbmcubmFtZSkudW5pcXVlKCmSAQMQgARCDgoMX2Rlc2NyaXB0aW9uYgZwcm90bzM\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_binding]);\n\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Receiver\n */\nexport type Receiver = Message<\"mochabugapis.adapt.graph.Receiver\"> & {\n /**\n * Identifier for the receiver, conforming to the ECMA naming pattern\n * and limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the receiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the receiver listens for. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalBinding bindings = 3;\n */\n bindings: SignalBinding[];\n};\n\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Receiver\n */\nexport type ReceiverJson = {\n /**\n * Identifier for the receiver, conforming to the ECMA naming pattern\n * and limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the receiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the receiver listens for. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalBinding bindings = 3;\n */\n bindings?: SignalBindingJson[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Receiver.\n * Use `create(ReceiverSchema)` to create a new message.\n */\nexport const ReceiverSchema: GenMessage<Receiver, {jsonType: ReceiverJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_receiver, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_binding.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalData, SignalDataJson } from \"./signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"./signal_data_pb\";\nimport type { SignalFormat, SignalFormatJson } from \"./signal_format_pb\";\nimport { file_mochabugapis_adapt_graph_signal_format } from \"./signal_format_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_binding.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_binding: GenFile = /*@__PURE__*/\n fileDesc(\"Ci1tb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2JpbmRpbmcucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKWBgoNU2lnbmFsQmluZGluZxIzCgRuYW1lGAEgASgJQiW6SCJyIBABGDIyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhwKBWxhYmVsGAIgASgJQgi6SAVyAxj6AUgBiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxjoB0gCiAEBEhUKCG9wdGlvbmFsGAQgASgISAOIAQESQwoHYWNjZXB0cxgFIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxGb3JtYXRCCrpIB5IBBAgBEDISXgoJcmVmZXJlbmNlGAYgASgJQkm6SEZyRBj6ATI/XlswLTlhLXpdezR9L1tfJGEtekEtWl1bXyRhLXpBLVowLTldKi9bXyRhLXpBLVpdW18kYS16QS1aMC05XSokSAAS4AEKCGNvbnN0YW50GAcgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGFCpQG6SKEBugGdAQoZY29uc3RhbnQubWF4X3BheWxvYWRfc2l6ZRJmQ29uc3RhbnQgc2lnbmFsIGRhdGEgY2Fubm90IGV4Y2VlZCA1MEtCICg1MTIwMCBieXRlcykuIEZvciBsYXJnZXIgZGF0YSwgdXNlIHNpZ25hbCByZWZlcmVuY2VzIGluc3RlYWQuGhhzaXplKHRoaXMuZGF0YSkgPD0gNTEyMDBIABJLCgVlcnJvchgIIAEoDjItLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxCaW5kaW5nLkVycm9yQgi6SAWCAQIgAEgEiAEBImYKBUVycm9yEhUKEUVSUk9SX1VOU1BFQ0lGSUVEEAASEQoNRVJST1JfVU5CT1VORBABEhgKFEVSUk9SX0lOVkFMSURfU09VUkNFEAISGQoVRVJST1JfU0NIRU1BX01JU01BVENIEANCCQoHYmluZGluZ0IICgZfbGFiZWxCDgoMX2Rlc2NyaXB0aW9uQgsKCV9vcHRpb25hbEIICgZfZXJyb3JiBnByb3RvMw\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_graph_signal_format]);\n\n/**\n * SignalBinding represents an input point for a vertex in the computation graph.\n * Unlike SignalDescriptor which describes what a signal IS (producing one specific format),\n * a binding describes what formats an input ACCEPTS (potentially accepting multiple formats).\n *\n * Bindings enable flexible graph construction by allowing vertices to accept data in\n * various compatible formats. For example, a text display component might accept strings,\n * numbers, dates, and booleans, while an image viewer might accept image/* MIME types.\n *\n * The binding can be connected to a signal reference or assigned a constant value.\n * Runtime validation ensures the bound signal's format matches one of the accepted formats.\n *\n * @generated from message mochabugapis.adapt.graph.SignalBinding\n */\nexport type SignalBinding = Message<\"mochabugapis.adapt.graph.SignalBinding\"> & {\n /**\n * Identifier for this binding point, following ECMAScript identifier conventions.\n * Must be unique within the vertex's binding collection.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"inputText\", \"image_data\", \"$config\", \"_internalParam\"\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Human-readable label for the binding, suitable for display in user interfaces.\n * Describes what this input represents in the context of the vertex.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Text to Display\", \"Source Image\", \"Configuration Object\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the binding's purpose and accepted data.\n * Should document what the vertex does with this input and any constraints.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the binding represents in the vertex's operation\n * - How the data is used or transformed\n * - Constraints on values or formats\n * - Examples of valid inputs\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this binding must be connected.\n *\n * When false or unset: Binding is required and must be connected\n * When true: Binding is optional and may be left unbound\n *\n * Optional bindings provide flexibility, allowing vertices to function\n * with or without certain inputs (e.g., optional configuration parameters).\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats this binding accepts. The binding will accept any signal whose\n * format matches at least one entry in this list.\n *\n * Format matching rules:\n * - JTD schemas: Structural compatibility according to JTD specification\n * - MIME types (exact): Exact string match (case-insensitive)\n * - MIME types (wildcard): Pattern matching with * wildcards\n * - \"image/*\" matches \"image/png\", \"image/jpeg\", \"image/webp\", etc.\n * - \"text/*\" matches \"text/plain\", \"text/html\", \"text/csv\", etc.\n * - \"application/*\" matches any application type\n *\n * Common patterns:\n *\n * Example 1: Text display (accepts primitive types for display as text)\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float32\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * Example 2: Image viewer (accepts displayable image formats)\n * accepts = [\n * { mime_type: \"image/*\" } // Accepts any image type\n * ]\n *\n * Example 3: Document viewer (accepts specific document types)\n * accepts = [\n * { mime_type: \"application/pdf\" },\n * { mime_type: \"text/html\" },\n * { mime_type: \"text/plain\" }\n * ]\n *\n * Example 4: Data processor (accepts structured data)\n * accepts = [\n * { jtd_schema: { elements: { type: \"string\" } } }, // Array of strings\n * { jtd_schema: { properties: { id: { type: \"string\" } } } } // Object with id\n * ]\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly permissive bindings and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat accepts = 5;\n */\n accepts: SignalFormat[];\n\n /**\n * The actual binding - either a reference to another signal or a constant value.\n * Not required if the binding is marked as optional.\n *\n * When required (optional = false):\n * - Exactly one of 'reference' or 'constant' must be set\n * - If neither is set, ERROR_UNBOUND will be raised\n *\n * When optional (optional = true):\n * - May be unset (neither reference nor constant)\n * - Vertex must handle the unbound case gracefully\n *\n * @generated from oneof mochabugapis.adapt.graph.SignalBinding.binding\n */\n binding: {\n /**\n * Reference to another signal in the graph.\n *\n * Format: <vertex_id>/<transmitter_name>/<signal_name>\n * - vertex_id: 4-character alphanumeric identifier (lowercase)\n * - transmitter_name: ECMAScript identifier for the output transmitter\n * - signal_name: ECMAScript identifier for the specific signal\n *\n * Examples:\n * - \"a1b2/output/temperature\"\n * - \"xyz9/results/processedData\"\n * - \"0123/$internal/_debug\"\n *\n * The referenced signal's format must match one of the accepted formats.\n * Validation occurs at graph construction time.\n *\n * @generated from field: string reference = 6;\n */\n value: string;\n case: \"reference\";\n } | {\n /**\n * Constant value to bind to this input.\n * The constant must be serialized in a format matching one of the accepted formats.\n *\n * For JTD schemas:\n * - Value must be JSON-serialized and encoded as bytes\n * - Must validate against at least one accepted JTD schema\n *\n * For MIME types:\n * - Value must be in the binary format specified by the MIME type\n * - Must match at least one accepted MIME type (considering wildcards)\n *\n * Validation occurs at graph construction time.\n *\n * @generated from field: mochabugapis.adapt.graph.SignalData constant = 7;\n */\n value: SignalData;\n case: \"constant\";\n } | { case: undefined; value?: undefined };\n\n /**\n * Error state of this binding, if any.\n * Set by the graph validation system when issues are detected.\n * Should not be set to ERROR_UNSPECIFIED (value 0).\n *\n * When unset: Binding is valid\n * When set: Binding has the specified error and requires correction\n *\n * Applications should check this field and provide appropriate user feedback\n * for bindings in error states.\n *\n * @generated from field: optional mochabugapis.adapt.graph.SignalBinding.Error error = 8;\n */\n error?: SignalBinding_Error;\n};\n\n/**\n * SignalBinding represents an input point for a vertex in the computation graph.\n * Unlike SignalDescriptor which describes what a signal IS (producing one specific format),\n * a binding describes what formats an input ACCEPTS (potentially accepting multiple formats).\n *\n * Bindings enable flexible graph construction by allowing vertices to accept data in\n * various compatible formats. For example, a text display component might accept strings,\n * numbers, dates, and booleans, while an image viewer might accept image/* MIME types.\n *\n * The binding can be connected to a signal reference or assigned a constant value.\n * Runtime validation ensures the bound signal's format matches one of the accepted formats.\n *\n * @generated from message mochabugapis.adapt.graph.SignalBinding\n */\nexport type SignalBindingJson = {\n /**\n * Identifier for this binding point, following ECMAScript identifier conventions.\n * Must be unique within the vertex's binding collection.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"inputText\", \"image_data\", \"$config\", \"_internalParam\"\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Human-readable label for the binding, suitable for display in user interfaces.\n * Describes what this input represents in the context of the vertex.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Text to Display\", \"Source Image\", \"Configuration Object\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the binding's purpose and accepted data.\n * Should document what the vertex does with this input and any constraints.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the binding represents in the vertex's operation\n * - How the data is used or transformed\n * - Constraints on values or formats\n * - Examples of valid inputs\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this binding must be connected.\n *\n * When false or unset: Binding is required and must be connected\n * When true: Binding is optional and may be left unbound\n *\n * Optional bindings provide flexibility, allowing vertices to function\n * with or without certain inputs (e.g., optional configuration parameters).\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats this binding accepts. The binding will accept any signal whose\n * format matches at least one entry in this list.\n *\n * Format matching rules:\n * - JTD schemas: Structural compatibility according to JTD specification\n * - MIME types (exact): Exact string match (case-insensitive)\n * - MIME types (wildcard): Pattern matching with * wildcards\n * - \"image/*\" matches \"image/png\", \"image/jpeg\", \"image/webp\", etc.\n * - \"text/*\" matches \"text/plain\", \"text/html\", \"text/csv\", etc.\n * - \"application/*\" matches any application type\n *\n * Common patterns:\n *\n * Example 1: Text display (accepts primitive types for display as text)\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float32\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * Example 2: Image viewer (accepts displayable image formats)\n * accepts = [\n * { mime_type: \"image/*\" } // Accepts any image type\n * ]\n *\n * Example 3: Document viewer (accepts specific document types)\n * accepts = [\n * { mime_type: \"application/pdf\" },\n * { mime_type: \"text/html\" },\n * { mime_type: \"text/plain\" }\n * ]\n *\n * Example 4: Data processor (accepts structured data)\n * accepts = [\n * { jtd_schema: { elements: { type: \"string\" } } }, // Array of strings\n * { jtd_schema: { properties: { id: { type: \"string\" } } } } // Object with id\n * ]\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly permissive bindings and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat accepts = 5;\n */\n accepts?: SignalFormatJson[];\n\n /**\n * Reference to another signal in the graph.\n *\n * Format: <vertex_id>/<transmitter_name>/<signal_name>\n * - vertex_id: 4-character alphanumeric identifier (lowercase)\n * - transmitter_name: ECMAScript identifier for the output transmitter\n * - signal_name: ECMAScript identifier for the specific signal\n *\n * Examples:\n * - \"a1b2/output/temperature\"\n * - \"xyz9/results/processedData\"\n * - \"0123/$internal/_debug\"\n *\n * The referenced signal's format must match one of the accepted formats.\n * Validation occurs at graph construction time.\n *\n * @generated from field: string reference = 6;\n */\n reference?: string;\n\n /**\n * Constant value to bind to this input.\n * The constant must be serialized in a format matching one of the accepted formats.\n *\n * For JTD schemas:\n * - Value must be JSON-serialized and encoded as bytes\n * - Must validate against at least one accepted JTD schema\n *\n * For MIME types:\n * - Value must be in the binary format specified by the MIME type\n * - Must match at least one accepted MIME type (considering wildcards)\n *\n * Validation occurs at graph construction time.\n *\n * @generated from field: mochabugapis.adapt.graph.SignalData constant = 7;\n */\n constant?: SignalDataJson;\n\n /**\n * Error state of this binding, if any.\n * Set by the graph validation system when issues are detected.\n * Should not be set to ERROR_UNSPECIFIED (value 0).\n *\n * When unset: Binding is valid\n * When set: Binding has the specified error and requires correction\n *\n * Applications should check this field and provide appropriate user feedback\n * for bindings in error states.\n *\n * @generated from field: optional mochabugapis.adapt.graph.SignalBinding.Error error = 8;\n */\n error?: SignalBinding_ErrorJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalBinding.\n * Use `create(SignalBindingSchema)` to create a new message.\n */\nexport const SignalBindingSchema: GenMessage<SignalBinding, {jsonType: SignalBindingJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_binding, 0);\n\n/**\n * Error codes that can occur during binding validation or resolution.\n * These errors are typically set by the graph validation system.\n *\n * @generated from enum mochabugapis.adapt.graph.SignalBinding.Error\n */\nexport enum SignalBinding_Error {\n /**\n * No error specified. This value should never be explicitly set as it indicates\n * the absence of an error. The error field should be unset for valid bindings.\n *\n * @generated from enum value: ERROR_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The binding is unbound (no reference or constant provided) despite being required.\n * This occurs when:\n * - The binding is not marked as optional\n * - Neither 'reference' nor 'constant' is set in the binding oneof\n *\n * Resolution: Provide either a signal reference or a constant value.\n *\n * @generated from enum value: ERROR_UNBOUND = 1;\n */\n UNBOUND = 1,\n\n /**\n * The referenced signal source does not exist in the graph.\n * This occurs when:\n * - The reference points to a non-existent vertex ID\n * - The transmitter name doesn't exist on the referenced vertex\n * - The signal name doesn't exist on the specified transmitter\n *\n * Resolution: Verify the signal reference path and ensure the source vertex,\n * transmitter, and signal all exist.\n *\n * @generated from enum value: ERROR_INVALID_SOURCE = 2;\n */\n INVALID_SOURCE = 2,\n\n /**\n * The signal format doesn't match any of the accepted formats.\n * This occurs when:\n * - The source signal's format (from SignalDescriptor) doesn't match any\n * format in the 'accepts' list\n * - JTD schema validation fails\n * - MIME type mismatch (including wildcard matching failures)\n *\n * Resolution: Either change the binding to accept the source signal's format,\n * or use a different signal source with a compatible format.\n *\n * @generated from enum value: ERROR_SCHEMA_MISMATCH = 3;\n */\n SCHEMA_MISMATCH = 3,\n}\n\n/**\n * Error codes that can occur during binding validation or resolution.\n * These errors are typically set by the graph validation system.\n *\n * @generated from enum mochabugapis.adapt.graph.SignalBinding.Error\n */\nexport type SignalBinding_ErrorJson = \"ERROR_UNSPECIFIED\" | \"ERROR_UNBOUND\" | \"ERROR_INVALID_SOURCE\" | \"ERROR_SCHEMA_MISMATCH\";\n\n/**\n * Describes the enum mochabugapis.adapt.graph.SignalBinding.Error.\n */\nexport const SignalBinding_ErrorSchema: GenEnum<SignalBinding_Error, SignalBinding_ErrorJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_graph_signal_binding, 0, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/transmitter.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalDescriptor, SignalDescriptorJson } from \"./signal_descriptor_pb\";\nimport { file_mochabugapis_adapt_graph_signal_descriptor } from \"./signal_descriptor_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/transmitter.proto.\n */\nexport const file_mochabugapis_adapt_graph_transmitter: GenFile = /*@__PURE__*/\n fileDesc(\"Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdHJhbnNtaXR0ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLCAwoLVHJhbnNtaXR0ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKtAQoHc2lnbmFscxgDIAMoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEZXNjcmlwdG9yQnC6SG26AWQKFHNpZ25hbHNfdW5pcXVlX25hbWVzEiRFYWNoIHNpZ25hbCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aJnRoaXMubWFwKHNpZ25hbCwgc2lnbmFsLm5hbWUpLnVuaXF1ZSgpkgEDEIAEEj0KBG1vZGUYBCABKA4yKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguVHJhbnNtaXR0ZXIuTW9kZUgBiAEBIlIKBE1vZGUSFAoQTU9ERV9VTlNQRUNJRklFRBAAEhEKDU1PREVfU1RBTkRBUkQQARIPCgtNT0RFX1NUUkVBTRACEhAKDE1PREVfRkFJTFVSRRADQg4KDF9kZXNjcmlwdGlvbkIHCgVfbW9kZWIGcHJvdG8z\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_descriptor]);\n\n/**\n * Transmitter represents an output point for a vertex, emitting multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transmitter\n */\nexport type Transmitter = Message<\"mochabugapis.adapt.graph.Transmitter\"> & {\n /**\n * Identifier for the transmitter, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the transmitter's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transmitter can emit. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n\n /**\n * An optional mode for the transmitter, indicating its operational context.\n * If not set, it defaults to the standard mode\n *\n * @generated from field: optional mochabugapis.adapt.graph.Transmitter.Mode mode = 4;\n */\n mode?: Transmitter_Mode;\n};\n\n/**\n * Transmitter represents an output point for a vertex, emitting multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transmitter\n */\nexport type TransmitterJson = {\n /**\n * Identifier for the transmitter, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the transmitter's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transmitter can emit. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals?: SignalDescriptorJson[];\n\n /**\n * An optional mode for the transmitter, indicating its operational context.\n * If not set, it defaults to the standard mode\n *\n * @generated from field: optional mochabugapis.adapt.graph.Transmitter.Mode mode = 4;\n */\n mode?: Transmitter_ModeJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Transmitter.\n * Use `create(TransmitterSchema)` to create a new message.\n */\nexport const TransmitterSchema: GenMessage<Transmitter, {jsonType: TransmitterJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_transmitter, 0);\n\n/**\n * The type of the transmitter.\n *\n * @generated from enum mochabugapis.adapt.graph.Transmitter.Mode\n */\nexport enum Transmitter_Mode {\n /**\n * Default value indicating the mode is not explicitly set.\n *\n * @generated from enum value: MODE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * Transmitter is transmitting with the standard mode. I.e. a single transmission\n *\n * @generated from enum value: MODE_STANDARD = 1;\n */\n STANDARD = 1,\n\n /**\n * Transmitter is transmitter with stream. I.e. multiple transmissions\n *\n * @generated from enum value: MODE_STREAM = 2;\n */\n STREAM = 2,\n\n /**\n * Transmitter is transmitting a failure. I.e. a single transmission with a failure flag\n *\n * @generated from enum value: MODE_FAILURE = 3;\n */\n FAILURE = 3,\n}\n\n/**\n * The type of the transmitter.\n *\n * @generated from enum mochabugapis.adapt.graph.Transmitter.Mode\n */\nexport type Transmitter_ModeJson = \"MODE_UNSPECIFIED\" | \"MODE_STANDARD\" | \"MODE_STREAM\" | \"MODE_FAILURE\";\n\n/**\n * Describes the enum mochabugapis.adapt.graph.Transmitter.Mode.\n */\nexport const Transmitter_ModeSchema: GenEnum<Transmitter_Mode, Transmitter_ModeJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_graph_transmitter, 0, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/runtime/v1/runtime.proto (package mochabugapis.adapt.runtime.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../../buf/validate/validate_pb\";\nimport type { FieldMask, FieldMaskJson, Timestamp, TimestampJson, Value, ValueJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_field_mask, file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Status, StatusJson } from \"../../automations/v1/automations_pb\";\nimport { file_mochabugapis_adapt_automations_v1_automations } from \"../../automations/v1/automations_pb\";\nimport type { SignalData, SignalDataJson } from \"../../graph/signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"../../graph/signal_data_pb\";\nimport type { SignalFormat, SignalFormatJson } from \"../../graph/signal_format_pb\";\nimport { file_mochabugapis_adapt_graph_signal_format } from \"../../graph/signal_format_pb\";\nimport type { Transmitter, TransmitterJson } from \"../../graph/transmitter_pb\";\nimport { file_mochabugapis_adapt_graph_transmitter } from \"../../graph/transmitter_pb\";\nimport type { VertexMetadata, VertexMetadataJson } from \"../../graph/vertex_metadata_pb\";\nimport { file_mochabugapis_adapt_graph_vertex_metadata } from \"../../graph/vertex_metadata_pb\";\nimport type { ConditionalWriteOperation, ConditionalWriteOperationJson, GetValue, GetValueJson, SelectOp, SelectOpJson, ValueMetadata, ValueMetadataJson, WriteOperation, WriteOperationJson } from \"./store_pb\";\nimport { file_mochabugapis_adapt_runtime_v1_store } from \"./store_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/runtime/v1/runtime.proto.\n */\nexport const file_mochabugapis_adapt_runtime_v1_runtime: GenFile = /*@__PURE__*/\n fileDesc(\"Cittb2NoYWJ1Z2FwaXMvYWRhcHQvcnVudGltZS92MS9ydW50aW1lLnByb3RvEh1tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MSK+AQolRXhlY3V0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVxdWVzdBJOCgpvcGVyYXRpb25zGAEgAygLMi0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuV3JpdGVPcGVyYXRpb25CC7pICJIBBQgBEPQDEkUKCW5hbWVzcGFjZRgCIAEoDjIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLk5hbWVzcGFjZUIIukgFggECIAAi7gEKJkV4ZWN1dG9yU2VydmljZUJhdGNoV3JpdGVTdG9yZVJlc3BvbnNlEmUKCG1ldGFkYXRhGAEgAygLMlMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVzcG9uc2UuTWV0YWRhdGFFbnRyeRpdCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRI7CgV2YWx1ZRgCIAEoCzIsLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlZhbHVlTWV0YWRhdGE6AjgBIrYBCiBFeGVjdXRvclNlcnZpY2VXcml0ZVN0b3JlUmVxdWVzdBJLCglvcGVyYXRpb24YASABKAsyOC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25kaXRpb25hbFdyaXRlT3BlcmF0aW9uEkUKCW5hbWVzcGFjZRgCIAEoDjIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLk5hbWVzcGFjZUIIukgFggECIAAidQohRXhlY3V0b3JTZXJ2aWNlV3JpdGVTdG9yZVJlc3BvbnNlEkMKCG1ldGFkYXRhGAEgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuVmFsdWVNZXRhZGF0YUgAiAEBQgsKCV9tZXRhZGF0YSKPAQokRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXF1ZXN0EiAKBGtleXMYASADKAlCErpID5IBDAgBEJBOIgVyAxiAIBJFCgluYW1lc3BhY2UYAiABKA4yKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5OYW1lc3BhY2VCCLpIBYIBAiAAIt4BCiVFeGVjdXRvclNlcnZpY2VCYXRjaFJlYWRTdG9yZVJlc3BvbnNlEl4KBWl0ZW1zGAEgAygLMk8ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXNwb25zZS5JdGVtc0VudHJ5GlUKCkl0ZW1zRW50cnkSCwoDa2V5GAEgASgJEjYKBXZhbHVlGAIgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuR2V0VmFsdWU6AjgBIq4BCiFFeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlcXVlc3QSQgoJb3BlcmF0aW9uGAEgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuU2VsZWN0T3BCBrpIA8gBARJFCgluYW1lc3BhY2UYAiABKA4yKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5OYW1lc3BhY2VCCLpIBYIBAiAAIoACCiJFeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlc3BvbnNlElsKBWl0ZW1zGAEgAygLMkwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlU2VsZWN0U3RvcmVSZXNwb25zZS5JdGVtc0VudHJ5EhcKCm5leHRfdG9rZW4YAiABKAlIAIgBARpVCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRI2CgV2YWx1ZRgCIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkdldFZhbHVlOgI4AUINCgtfbmV4dF90b2tlbiI2Ch5DYW5jZWxFeGNoYW5nZU9wZXJhdGlvblJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIiEKH0NhbmNlbEV4Y2hhbmdlT3BlcmF0aW9uUmVzcG9uc2UiMwobR2V0RXhjaGFuZ2VPcGVyYXRpb25SZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJeChxHZXRFeGNoYW5nZU9wZXJhdGlvblJlc3BvbnNlEj4KBGl0ZW0YASABKAsyMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGNoYW5nZU9wZXJhdGlvbiL3AgoXRGlzcGF0Y2hFeGNoYW5nZVJlcXVlc3QSMwoEbmFtZRgBIAEoCUIlukgiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBI8CghyZWNlaXZlchgCIAEoCUIlukgiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJEgAiAEBEoUBCgdzaWduYWxzGAMgAygLMkMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRGlzcGF0Y2hFeGNoYW5nZVJlcXVlc3QuU2lnbmFsc0VudHJ5Qi+6SCyaASkIABAyIiNyIRABGIAEMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBpUCgxTaWduYWxzRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGE6AjgBQgsKCV9yZWNlaXZlciJfChhEaXNwYXRjaEV4Y2hhbmdlUmVzcG9uc2USQwoJb3BlcmF0aW9uGAEgASgLMjAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhjaGFuZ2VPcGVyYXRpb24iaAoRRXhjaGFuZ2VPcGVyYXRpb24SDAoEbmFtZRgBIAEoCRIKCgJpZBgCIAEoCRI5CgZzdGF0dXMYAyABKA4yKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhdHVzIq0CCgtTZW5kUmVxdWVzdBI9Cgt0cmFuc21pdHRlchgBIAEoCUIjukggch4YZDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiRIAIgBARJ5CgdzaWduYWxzGAIgAygLMjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuU2VuZFJlcXVlc3QuU2lnbmFsc0VudHJ5Qi+6SCyaASkIABAyIiNyIRABGIAEMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBpUCgxTaWduYWxzRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGE6AjgBQg4KDF90cmFuc21pdHRlciIOCgxTZW5kUmVzcG9uc2UiYQocQmF0Y2hHZXRBY3RpdmVTaWduYWxzUmVxdWVzdBJBCgVuYW1lcxgBIAMoCUIyukgvkgEsCAEQ9AMYASIjciEQARiABDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiQi3QEKHUJhdGNoR2V0QWN0aXZlU2lnbmFsc1Jlc3BvbnNlElYKBWl0ZW1zGAEgAygLMkcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRBY3RpdmVTaWduYWxzUmVzcG9uc2UuSXRlbXNFbnRyeRIQCghyZWNlaXZlchgCIAEoCRpSCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRIzCgV2YWx1ZRgCIAEoCzIkLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEYXRhOgI4ASKoAQoYTGlzdEFjdGl2ZVNpZ25hbHNSZXF1ZXN0EiAKCXBhZ2Vfc2l6ZRgBIAEoBUIIukgFGgMY9ANIAIgBARIdCgZjdXJzb3IYAiABKAlCCLpIBXIDGPQDSAGIAQESHQoQb3JkZXJfZGVzY2VuZGluZxgDIAEoCEgCiAEBQgwKCl9wYWdlX3NpemVCCQoHX2N1cnNvckITChFfb3JkZXJfZGVzY2VuZGluZyKFAgoZTGlzdEFjdGl2ZVNpZ25hbHNSZXNwb25zZRJWCgdzaWduYWxzGAEgAygLMkUubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEFjdGl2ZVNpZ25hbHNSZXNwb25zZS5TaWduYWxzRW50cnkSEAoIcmVjZWl2ZXIYAiABKAkSGAoLbmV4dF9jdXJzb3IYAyABKAlIAIgBARpUCgxTaWduYWxzRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGE6AjgBQg4KDF9uZXh0X2N1cnNvciJrCiVFeGVjdXRvclNlcnZpY2VHZXRWZXJ0ZXhDb25maWdSZXF1ZXN0EjMKCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrSACIAQFCDQoLX2ZpZWxkX21hc2siqwIKJkV4ZWN1dG9yU2VydmljZUdldFZlcnRleENvbmZpZ1Jlc3BvbnNlEg4KBmNvbmZpZxgBIAEoDBI6CghtZXRhZGF0YRgCIAEoCzIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5WZXJ0ZXhNZXRhZGF0YRJ6ChNjb25maWd1cmVkX3NlcnZpY2VzGAMgAygLMl0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlR2V0VmVydGV4Q29uZmlnUmVzcG9uc2UuQ29uZmlndXJlZFNlcnZpY2VzRW50cnkaOQoXQ29uZmlndXJlZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgIOgI4ASLkAQoaTGlzdEluY29taW5nU2lnbmFsc1JlcXVlc3QSPAoIcmVjZWl2ZXIYASABKAlCJbpIInIgEAEYZDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiRIAIgBARI3Cgdmb3JtYXRzGAIgAygLMiYubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbEZvcm1hdBIzCgpmaWVsZF9tYXNrGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0gBiAEBQgsKCV9yZWNlaXZlckINCgtfZmllbGRfbWFzayL2AQoQSW5jb21pbmdWZXJ0aWNlcxIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEjsKDHRyYW5zbWl0dGVycxgEIAMoCzIlLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5UcmFuc21pdHRlchI+Cgt2ZXJ0ZXhfdHlwZRgFIAEoDjIpLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlZlcnRleFR5cGUSFAoHbG9nb19pZBgGIAEoCUgBiAEBQg4KDF9kZXNjcmlwdGlvbkIKCghfbG9nb19pZCKJAgobTGlzdEluY29taW5nU2lnbmFsc1Jlc3BvbnNlEkEKCHZlcnRpY2VzGAEgAygLMi8ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuSW5jb21pbmdWZXJ0aWNlcxJhCgx2ZXJ0ZXhfbG9nb3MYAiADKAsySy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5MaXN0SW5jb21pbmdTaWduYWxzUmVzcG9uc2UuVmVydGV4TG9nb3NFbnRyeRIQCghyZWNlaXZlchgDIAEoCRoyChBWZXJ0ZXhMb2dvc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEixgEKKUNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXF1ZXN0Ek4KCm9wZXJhdGlvbnMYASADKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Xcml0ZU9wZXJhdGlvbkILukgIkgEFCAEQ9AMSSQoJbmFtZXNwYWNlGAIgASgOMigubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTmFtZXNwYWNlQgy6SAmCAQYgACABIAIi9gEKKkNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXNwb25zZRJpCghtZXRhZGF0YRgBIAMoCzJXLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXNwb25zZS5NZXRhZGF0YUVudHJ5Gl0KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEjsKBXZhbHVlGAIgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuVmFsdWVNZXRhZGF0YToCOAEivgEKJENvbmZpZ3VyYXRvclNlcnZpY2VXcml0ZVN0b3JlUmVxdWVzdBJLCglvcGVyYXRpb24YASABKAsyOC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25kaXRpb25hbFdyaXRlT3BlcmF0aW9uEkkKCW5hbWVzcGFjZRgCIAEoDjIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLk5hbWVzcGFjZUIMukgJggEGIAAgASACInkKJUNvbmZpZ3VyYXRvclNlcnZpY2VXcml0ZVN0b3JlUmVzcG9uc2USQwoIbWV0YWRhdGEYASABKAsyLC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5WYWx1ZU1ldGFkYXRhSACIAQFCCwoJX21ldGFkYXRhIpcBCihDb25maWd1cmF0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXF1ZXN0EiAKBGtleXMYASADKAlCErpID5IBDAgBEJBOIgVyAxiAIBJJCgluYW1lc3BhY2UYAiABKA4yKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5OYW1lc3BhY2VCDLpICYIBBiAAIAEgAiLmAQopQ29uZmlndXJhdG9yU2VydmljZUJhdGNoUmVhZFN0b3JlUmVzcG9uc2USYgoFaXRlbXMYASADKAsyUy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXNwb25zZS5JdGVtc0VudHJ5GlUKCkl0ZW1zRW50cnkSCwoDa2V5GAEgASgJEjYKBXZhbHVlGAIgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuR2V0VmFsdWU6AjgBIrYBCiVDb25maWd1cmF0b3JTZXJ2aWNlU2VsZWN0U3RvcmVSZXF1ZXN0EkIKCW9wZXJhdGlvbhgBIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlNlbGVjdE9wQga6SAPIAQESSQoJbmFtZXNwYWNlGAIgASgOMigubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTmFtZXNwYWNlQgy6SAmCAQYgACABIAIiiAIKJkNvbmZpZ3VyYXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlc3BvbnNlEl8KBWl0ZW1zGAEgAygLMlAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZVNlbGVjdFN0b3JlUmVzcG9uc2UuSXRlbXNFbnRyeRIXCgpuZXh0X3Rva2VuGAIgASgJSACIAQEaVQoKSXRlbXNFbnRyeRILCgNrZXkYASABKAkSNgoFdmFsdWUYAiABKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5HZXRWYWx1ZToCOAFCDQoLX25leHRfdG9rZW4ibwopQ29uZmlndXJhdG9yU2VydmljZUdldFZlcnRleENvbmZpZ1JlcXVlc3QSMwoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tIAIgBAUINCgtfZmllbGRfbWFzayKzAgoqQ29uZmlndXJhdG9yU2VydmljZUdldFZlcnRleENvbmZpZ1Jlc3BvbnNlEg4KBmNvbmZpZxgBIAEoDBI6CghtZXRhZGF0YRgCIAEoCzIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5WZXJ0ZXhNZXRhZGF0YRJ+ChNjb25maWd1cmVkX3NlcnZpY2VzGAMgAygLMmEubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZUdldFZlcnRleENvbmZpZ1Jlc3BvbnNlLkNvbmZpZ3VyZWRTZXJ2aWNlc0VudHJ5GjkKF0NvbmZpZ3VyZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCDoCOAEitQIKF1Bvc3RWZXJ0ZXhDb25maWdSZXF1ZXN0EhMKBmNvbmZpZxgBIAEoDEgAiAEBEj8KCG1ldGFkYXRhGAIgASgLMigubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlZlcnRleE1ldGFkYXRhSAGIAQESHgoRb3ZlcnJpZGVfYmluZGluZ3MYAyABKAhIAogBATp2ukhzGnEKG2NvbmZpZ19vcl9tZXRhZGF0YV9yZXF1aXJlZBIqRWl0aGVyIGNvbmZpZyBvciBtZXRhZGF0YSBtdXN0IGJlIHByb3ZpZGVkGiZoYXModGhpcy5jb25maWcpIHx8IGhhcyh0aGlzLm1ldGFkYXRhKUIJCgdfY29uZmlnQgsKCV9tZXRhZGF0YUIUChJfb3ZlcnJpZGVfYmluZGluZ3MiVgoYUG9zdFZlcnRleENvbmZpZ1Jlc3BvbnNlEjoKCG1ldGFkYXRhGAEgASgLMigubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlZlcnRleE1ldGFkYXRhIhoKGEdldFN5c3RlbVNlcnZpY2VzUmVxdWVzdCLFAQoZR2V0U3lzdGVtU2VydmljZXNSZXNwb25zZRJtChNjb25maWd1cmVkX3NlcnZpY2VzGAEgAygLMlAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuR2V0U3lzdGVtU2VydmljZXNSZXNwb25zZS5Db25maWd1cmVkU2VydmljZXNFbnRyeRo5ChdDb25maWd1cmVkU2VydmljZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAg6AjgBIjIKEEF1dGhvcml6ZVJlcXVlc3QSHgoMYWNjZXNzX3Rva2VuGAEgASgJQgi6SAVyAxiQTiITChFBdXRob3JpemVSZXNwb25zZSKAAQoeQmF0Y2hHZXRTeXN0ZW1WYXJpYWJsZXNSZXF1ZXN0El4KBW5hbWVzGAEgAygJQk+6SEySAUkIARBkGAEiQXI/EAEYZDI5XltfJGEtekEtWl1bXyRhLXpBLVowLTldKig/OlwuW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKSokIsEBCh9CYXRjaEdldFN5c3RlbVZhcmlhYmxlc1Jlc3BvbnNlElgKBWl0ZW1zGAEgAygLMkkubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRTeXN0ZW1WYXJpYWJsZXNSZXNwb25zZS5JdGVtc0VudHJ5GkQKCkl0ZW1zRW50cnkSCwoDa2V5GAEgASgJEiUKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlOgI4ASJ+ChxCYXRjaEdldFVzZXJWYXJpYWJsZXNSZXF1ZXN0El4KBW5hbWVzGAEgAygJQk+6SEySAUkIARBkGAEiQXI/EAEYZDI5XltfJGEtekEtWl1bXyRhLXpBLVowLTldKig/OlwuW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKSokIr0BCh1CYXRjaEdldFVzZXJWYXJpYWJsZXNSZXNwb25zZRJWCgVpdGVtcxgBIAMoCzJHLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0VXNlclZhcmlhYmxlc1Jlc3BvbnNlLkl0ZW1zRW50cnkaRAoKSXRlbXNFbnRyeRILCgNrZXkYASABKAkSJQoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWU6AjgBInsKGUJhdGNoR2V0VXNlclRva2Vuc1JlcXVlc3QSXgoFbmFtZXMYASADKAlCT7pITJIBSQgBEGQYASJBcj8QARhkMjleW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKD86XC5bXyRhLXpBLVpdW18kYS16QS1aMC05XSopKiQixQEKGkJhdGNoR2V0VXNlclRva2Vuc1Jlc3BvbnNlElMKBWl0ZW1zGAEgAygLMkQubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRVc2VyVG9rZW5zUmVzcG9uc2UuSXRlbXNFbnRyeRpSCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRIzCgV2YWx1ZRgCIAEoCzIkLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlRva2VuOgI4ASJ9ChtCYXRjaEdldFN5c3RlbVRva2Vuc1JlcXVlc3QSXgoFbmFtZXMYASADKAlCT7pITJIBSQgBEGQYASJBcj8QARhkMjleW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKD86XC5bXyRhLXpBLVpdW18kYS16QS1aMC05XSopKiQiyQEKHEJhdGNoR2V0U3lzdGVtVG9rZW5zUmVzcG9uc2USVQoFaXRlbXMYASADKAsyRi5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5CYXRjaEdldFN5c3RlbVRva2Vuc1Jlc3BvbnNlLkl0ZW1zRW50cnkaUgoKSXRlbXNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ub2tlbjoCOAEiXwoFVG9rZW4SDAoEbmFtZRgBIAEoCRINCgV0b2tlbhgCIAEoCRIMCgR0eXBlGAMgASgJEisKB2V4cGlyZXMYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKpABCglOYW1lc3BhY2USGQoVTkFNRVNQQUNFX1VOU1BFQ0lGSUVEEAASHQoZTkFNRVNQQUNFX1ZFUlRFWF9JTlNUQU5DRRABEh0KGU5BTUVTUEFDRV9QTFVHSU5fSU5TVEFOQ0UQAhIUChBOQU1FU1BBQ0VfVkVSVEVYEAMSFAoQTkFNRVNQQUNFX1BMVUdJThAEKsEBCgpWZXJ0ZXhUeXBlEhsKF1ZFUlRFWF9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRVkVSVEVYX1RZUEVfU1RBUlQQARIWChJWRVJURVhfVFlQRV9QTFVHSU4QAhIWChJWRVJURVhfVFlQRV9PVVRQVVQQAxIYChRWRVJURVhfVFlQRV9ERUxFR0FURRAEEhcKE1ZFUlRFWF9UWVBFX0JBUlJJRVIQBRIcChhWRVJURVhfVFlQRV9FWENIQU5HRV9PVVQQBjLKDAoPRXhlY3V0b3JTZXJ2aWNlEp4BCg9HZXRWZXJ0ZXhDb25maWcSRC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VHZXRWZXJ0ZXhDb25maWdSZXF1ZXN0GkUubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlR2V0VmVydGV4Q29uZmlnUmVzcG9uc2UShgEKEUxpc3RBY3RpdmVTaWduYWxzEjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEFjdGl2ZVNpZ25hbHNSZXF1ZXN0GjgubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEFjdGl2ZVNpZ25hbHNSZXNwb25zZRKSAQoVQmF0Y2hHZXRBY3RpdmVTaWduYWxzEjsubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRBY3RpdmVTaWduYWxzUmVxdWVzdBo8Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0QWN0aXZlU2lnbmFsc1Jlc3BvbnNlEl8KBFNlbmQSKi5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5TZW5kUmVxdWVzdBorLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlNlbmRSZXNwb25zZRKDAQoQRGlzcGF0Y2hFeGNoYW5nZRI2Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkRpc3BhdGNoRXhjaGFuZ2VSZXF1ZXN0GjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRGlzcGF0Y2hFeGNoYW5nZVJlc3BvbnNlEo8BChRHZXRFeGNoYW5nZU9wZXJhdGlvbhI6Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkdldEV4Y2hhbmdlT3BlcmF0aW9uUmVxdWVzdBo7Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkdldEV4Y2hhbmdlT3BlcmF0aW9uUmVzcG9uc2USmAEKF0NhbmNlbEV4Y2hhbmdlT3BlcmF0aW9uEj0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ2FuY2VsRXhjaGFuZ2VPcGVyYXRpb25SZXF1ZXN0Gj4ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ2FuY2VsRXhjaGFuZ2VPcGVyYXRpb25SZXNwb25zZRKPAQoKV3JpdGVTdG9yZRI/Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkV4ZWN1dG9yU2VydmljZVdyaXRlU3RvcmVSZXF1ZXN0GkAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlV3JpdGVTdG9yZVJlc3BvbnNlEp4BCg9CYXRjaFdyaXRlU3RvcmUSRC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXF1ZXN0GkUubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVzcG9uc2USmwEKDkJhdGNoUmVhZFN0b3JlEkMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXF1ZXN0GkQubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXNwb25zZRKSAQoLU2VsZWN0U3RvcmUSQC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlcXVlc3QaQS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlc3BvbnNlMtkIChNDb25maWd1cmF0b3JTZXJ2aWNlEqYBCg9HZXRWZXJ0ZXhDb25maWcSSC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlR2V0VmVydGV4Q29uZmlnUmVxdWVzdBpJLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VHZXRWZXJ0ZXhDb25maWdSZXNwb25zZRKDAQoQUG9zdFZlcnRleENvbmZpZxI2Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlBvc3RWZXJ0ZXhDb25maWdSZXF1ZXN0GjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuUG9zdFZlcnRleENvbmZpZ1Jlc3BvbnNlEpcBCgpXcml0ZVN0b3JlEkMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZVdyaXRlU3RvcmVSZXF1ZXN0GkQubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZVdyaXRlU3RvcmVSZXNwb25zZRKmAQoPQmF0Y2hXcml0ZVN0b3JlEkgubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZUJhdGNoV3JpdGVTdG9yZVJlcXVlc3QaSS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVzcG9uc2USowEKDkJhdGNoUmVhZFN0b3JlEkcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZUJhdGNoUmVhZFN0b3JlUmVxdWVzdBpILm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFJlYWRTdG9yZVJlc3BvbnNlEpoBCgtTZWxlY3RTdG9yZRJELm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlcXVlc3QaRS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlU2VsZWN0U3RvcmVSZXNwb25zZRKMAQoTTGlzdEluY29taW5nU2lnbmFscxI5Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkxpc3RJbmNvbWluZ1NpZ25hbHNSZXF1ZXN0GjoubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEluY29taW5nU2lnbmFsc1Jlc3BvbnNlMtYGCg1QbHVnaW5TZXJ2aWNlEm4KCUF1dGhvcml6ZRIvLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkF1dGhvcml6ZVJlcXVlc3QaMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5BdXRob3JpemVSZXNwb25zZRKGAQoRR2V0U3lzdGVtU2VydmljZXMSNy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5HZXRTeXN0ZW1TZXJ2aWNlc1JlcXVlc3QaOC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5HZXRTeXN0ZW1TZXJ2aWNlc1Jlc3BvbnNlEpgBChdCYXRjaEdldFN5c3RlbVZhcmlhYmxlcxI9Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVmFyaWFibGVzUmVxdWVzdBo+Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVmFyaWFibGVzUmVzcG9uc2USkgEKFUJhdGNoR2V0VXNlclZhcmlhYmxlcxI7Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0VXNlclZhcmlhYmxlc1JlcXVlc3QaPC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5CYXRjaEdldFVzZXJWYXJpYWJsZXNSZXNwb25zZRKJAQoSQmF0Y2hHZXRVc2VyVG9rZW5zEjgubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRVc2VyVG9rZW5zUmVxdWVzdBo5Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0VXNlclRva2Vuc1Jlc3BvbnNlEo8BChRCYXRjaEdldFN5c3RlbVRva2VucxI6Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVG9rZW5zUmVxdWVzdBo7Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVG9rZW5zUmVzcG9uc2ViBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_google_protobuf_struct, file_google_protobuf_timestamp, file_mochabugapis_adapt_automations_v1_automations, file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_graph_signal_format, file_mochabugapis_adapt_graph_transmitter, file_mochabugapis_adapt_graph_vertex_metadata, file_mochabugapis_adapt_runtime_v1_store]);\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest\n */\nexport type ExecutorServiceBatchWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest\"> & {\n /**\n * A batch of operations to perform in the executor store.\n * Refer to the comments on the `Namespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations: WriteOperation[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest\n */\nexport type ExecutorServiceBatchWriteStoreRequestJson = {\n /**\n * A batch of operations to perform in the executor store.\n * Refer to the comments on the `Namespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations?: WriteOperationJson[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest.\n * Use `create(ExecutorServiceBatchWriteStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchWriteStoreRequestSchema: GenMessage<ExecutorServiceBatchWriteStoreRequest, {jsonType: ExecutorServiceBatchWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 0);\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse\n */\nexport type ExecutorServiceBatchWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse\"> & {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata: { [key: string]: ValueMetadata };\n};\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse\n */\nexport type ExecutorServiceBatchWriteStoreResponseJson = {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata?: { [key: string]: ValueMetadataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse.\n * Use `create(ExecutorServiceBatchWriteStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchWriteStoreResponseSchema: GenMessage<ExecutorServiceBatchWriteStoreResponse, {jsonType: ExecutorServiceBatchWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 1);\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest\n */\nexport type ExecutorServiceWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest\"> & {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperation;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest\n */\nexport type ExecutorServiceWriteStoreRequestJson = {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperationJson;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest.\n * Use `create(ExecutorServiceWriteStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceWriteStoreRequestSchema: GenMessage<ExecutorServiceWriteStoreRequest, {jsonType: ExecutorServiceWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 2);\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse\n */\nexport type ExecutorServiceWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse\"> & {\n /**\n * Metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadata;\n};\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse\n */\nexport type ExecutorServiceWriteStoreResponseJson = {\n /**\n * Metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse.\n * Use `create(ExecutorServiceWriteStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceWriteStoreResponseSchema: GenMessage<ExecutorServiceWriteStoreResponse, {jsonType: ExecutorServiceWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 3);\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest\n */\nexport type ExecutorServiceBatchReadStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest\"> & {\n /**\n * Keys to fetch from the executor store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys: string[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest\n */\nexport type ExecutorServiceBatchReadStoreRequestJson = {\n /**\n * Keys to fetch from the executor store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys?: string[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest.\n * Use `create(ExecutorServiceBatchReadStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchReadStoreRequestSchema: GenMessage<ExecutorServiceBatchReadStoreRequest, {jsonType: ExecutorServiceBatchReadStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 4);\n\n/**\n * The response of the batch store, any keys not found are ignored\n * i.e. not present in the map\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse\n */\nexport type ExecutorServiceBatchReadStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse\"> & {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n};\n\n/**\n * The response of the batch store, any keys not found are ignored\n * i.e. not present in the map\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse\n */\nexport type ExecutorServiceBatchReadStoreResponseJson = {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse.\n * Use `create(ExecutorServiceBatchReadStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchReadStoreResponseSchema: GenMessage<ExecutorServiceBatchReadStoreResponse, {jsonType: ExecutorServiceBatchReadStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 5);\n\n/**\n * The request to select from the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest\n */\nexport type ExecutorServiceSelectStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest\"> & {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOp;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to select from the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest\n */\nexport type ExecutorServiceSelectStoreRequestJson = {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOpJson;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest.\n * Use `create(ExecutorServiceSelectStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceSelectStoreRequestSchema: GenMessage<ExecutorServiceSelectStoreRequest, {jsonType: ExecutorServiceSelectStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 6);\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse\n */\nexport type ExecutorServiceSelectStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse\"> & {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse\n */\nexport type ExecutorServiceSelectStoreResponseJson = {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse.\n * Use `create(ExecutorServiceSelectStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceSelectStoreResponseSchema: GenMessage<ExecutorServiceSelectStoreResponse, {jsonType: ExecutorServiceSelectStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 7);\n\n/**\n * A request to cancel a running exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest\n */\nexport type CancelExchangeOperationRequest = Message<\"mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest\"> & {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * A request to cancel a running exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest\n */\nexport type CancelExchangeOperationRequestJson = {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest.\n * Use `create(CancelExchangeOperationRequestSchema)` to create a new message.\n */\nexport const CancelExchangeOperationRequestSchema: GenMessage<CancelExchangeOperationRequest, {jsonType: CancelExchangeOperationRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 8);\n\n/**\n * The response of cancelling the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse\n */\nexport type CancelExchangeOperationResponse = Message<\"mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse\"> & {\n};\n\n/**\n * The response of cancelling the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse\n */\nexport type CancelExchangeOperationResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse.\n * Use `create(CancelExchangeOperationResponseSchema)` to create a new message.\n */\nexport const CancelExchangeOperationResponseSchema: GenMessage<CancelExchangeOperationResponse, {jsonType: CancelExchangeOperationResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 9);\n\n/**\n * A request to check the status of an operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest\n */\nexport type GetExchangeOperationRequest = Message<\"mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest\"> & {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * A request to check the status of an operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest\n */\nexport type GetExchangeOperationRequestJson = {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest.\n * Use `create(GetExchangeOperationRequestSchema)` to create a new message.\n */\nexport const GetExchangeOperationRequestSchema: GenMessage<GetExchangeOperationRequest, {jsonType: GetExchangeOperationRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 10);\n\n/**\n * The get operation response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse\n */\nexport type GetExchangeOperationResponse = Message<\"mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse\"> & {\n /**\n * The actual operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation item = 1;\n */\n item?: ExchangeOperation;\n};\n\n/**\n * The get operation response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse\n */\nexport type GetExchangeOperationResponseJson = {\n /**\n * The actual operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation item = 1;\n */\n item?: ExchangeOperationJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse.\n * Use `create(GetExchangeOperationResponseSchema)` to create a new message.\n */\nexport const GetExchangeOperationResponseSchema: GenMessage<GetExchangeOperationResponse, {jsonType: GetExchangeOperationResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 11);\n\n/**\n * A request to start execute an exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeRequest\n */\nexport type DispatchExchangeRequest = Message<\"mochabugapis.adapt.runtime.v1.DispatchExchangeRequest\"> & {\n /**\n * The name of the exchange to dispatch\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * The receiver to send the signals on (on the exchange, mapps to transmitter on the subgraph)\n *\n * @generated from field: optional string receiver = 2;\n */\n receiver?: string;\n\n /**\n * The signals to send over the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * A request to start execute an exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeRequest\n */\nexport type DispatchExchangeRequestJson = {\n /**\n * The name of the exchange to dispatch\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * The receiver to send the signals on (on the exchange, mapps to transmitter on the subgraph)\n *\n * @generated from field: optional string receiver = 2;\n */\n receiver?: string;\n\n /**\n * The signals to send over the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.DispatchExchangeRequest.\n * Use `create(DispatchExchangeRequestSchema)` to create a new message.\n */\nexport const DispatchExchangeRequestSchema: GenMessage<DispatchExchangeRequest, {jsonType: DispatchExchangeRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 12);\n\n/**\n * The response of the exchange execution\n * Just like streams, this is an async operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeResponse\n */\nexport type DispatchExchangeResponse = Message<\"mochabugapis.adapt.runtime.v1.DispatchExchangeResponse\"> & {\n /**\n * The id of the operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperation;\n};\n\n/**\n * The response of the exchange execution\n * Just like streams, this is an async operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeResponse\n */\nexport type DispatchExchangeResponseJson = {\n /**\n * The id of the operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperationJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.DispatchExchangeResponse.\n * Use `create(DispatchExchangeResponseSchema)` to create a new message.\n */\nexport const DispatchExchangeResponseSchema: GenMessage<DispatchExchangeResponse, {jsonType: DispatchExchangeResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 13);\n\n/**\n * A representation of an exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeOperation\n */\nexport type ExchangeOperation = Message<\"mochabugapis.adapt.runtime.v1.ExchangeOperation\"> & {\n /**\n * The name of the exchange\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * The id of the fork\n *\n * @generated from field: string id = 2;\n */\n id: string;\n\n /**\n * The status of the operation\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 3;\n */\n status: Status;\n};\n\n/**\n * A representation of an exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeOperation\n */\nexport type ExchangeOperationJson = {\n /**\n * The name of the exchange\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * The id of the fork\n *\n * @generated from field: string id = 2;\n */\n id?: string;\n\n /**\n * The status of the operation\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 3;\n */\n status?: StatusJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeOperation.\n * Use `create(ExchangeOperationSchema)` to create a new message.\n */\nexport const ExchangeOperationSchema: GenMessage<ExchangeOperation, {jsonType: ExchangeOperationJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 14);\n\n/**\n * The complete execution request message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendRequest\n */\nexport type SendRequest = Message<\"mochabugapis.adapt.runtime.v1.SendRequest\"> & {\n /**\n * The transmitter to send the signals on\n *\n * @generated from field: optional string transmitter = 1;\n */\n transmitter?: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * The complete execution request message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendRequest\n */\nexport type SendRequestJson = {\n /**\n * The transmitter to send the signals on\n *\n * @generated from field: optional string transmitter = 1;\n */\n transmitter?: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.SendRequest.\n * Use `create(SendRequestSchema)` to create a new message.\n */\nexport const SendRequestSchema: GenMessage<SendRequest, {jsonType: SendRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 15);\n\n/**\n * The complete execution response message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendResponse\n */\nexport type SendResponse = Message<\"mochabugapis.adapt.runtime.v1.SendResponse\"> & {\n};\n\n/**\n * The complete execution response message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendResponse\n */\nexport type SendResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.SendResponse.\n * Use `create(SendResponseSchema)` to create a new message.\n */\nexport const SendResponseSchema: GenMessage<SendResponse, {jsonType: SendResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 16);\n\n/**\n * The request to fetch multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest\n */\nexport type BatchGetActiveSignalsRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest\"> & {\n /**\n * The names of the signals to fetch\n * An empty array will result in only fetching the connected receiver\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to fetch multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest\n */\nexport type BatchGetActiveSignalsRequestJson = {\n /**\n * The names of the signals to fetch\n * An empty array will result in only fetching the connected receiver\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest.\n * Use `create(BatchGetActiveSignalsRequestSchema)` to create a new message.\n */\nexport const BatchGetActiveSignalsRequestSchema: GenMessage<BatchGetActiveSignalsRequest, {jsonType: BatchGetActiveSignalsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 17);\n\n/**\n * The response of getting multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse\n */\nexport type BatchGetActiveSignalsResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse\"> & {\n /**\n * The returned items, items not found are ignored\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> items = 1;\n */\n items: { [key: string]: SignalData };\n\n /**\n * The connected receiver\n *\n * @generated from field: string receiver = 2;\n */\n receiver: string;\n};\n\n/**\n * The response of getting multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse\n */\nexport type BatchGetActiveSignalsResponseJson = {\n /**\n * The returned items, items not found are ignored\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> items = 1;\n */\n items?: { [key: string]: SignalDataJson };\n\n /**\n * The connected receiver\n *\n * @generated from field: string receiver = 2;\n */\n receiver?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse.\n * Use `create(BatchGetActiveSignalsResponseSchema)` to create a new message.\n */\nexport const BatchGetActiveSignalsResponseSchema: GenMessage<BatchGetActiveSignalsResponse, {jsonType: BatchGetActiveSignalsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 18);\n\n/**\n * A request to fetch the signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest\n */\nexport type ListActiveSignalsRequest = Message<\"mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest\"> & {\n /**\n * The page size, defaults to 50\n *\n * @generated from field: optional int32 page_size = 1;\n */\n pageSize?: number;\n\n /**\n * The cursor where to start the listing, defaults to beginning\n * If the cursor is set, filter and order_by are ignored\n *\n * @generated from field: optional string cursor = 2;\n */\n cursor?: string;\n\n /**\n * True if you want the result in descending order\n *\n * @generated from field: optional bool order_descending = 3;\n */\n orderDescending?: boolean;\n};\n\n/**\n * A request to fetch the signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest\n */\nexport type ListActiveSignalsRequestJson = {\n /**\n * The page size, defaults to 50\n *\n * @generated from field: optional int32 page_size = 1;\n */\n pageSize?: number;\n\n /**\n * The cursor where to start the listing, defaults to beginning\n * If the cursor is set, filter and order_by are ignored\n *\n * @generated from field: optional string cursor = 2;\n */\n cursor?: string;\n\n /**\n * True if you want the result in descending order\n *\n * @generated from field: optional bool order_descending = 3;\n */\n orderDescending?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest.\n * Use `create(ListActiveSignalsRequestSchema)` to create a new message.\n */\nexport const ListActiveSignalsRequestSchema: GenMessage<ListActiveSignalsRequest, {jsonType: ListActiveSignalsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 19);\n\n/**\n * The response of fetching the recieved signals\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a next_cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse\n */\nexport type ListActiveSignalsResponse = Message<\"mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse\"> & {\n /**\n * The actual signals on the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 1;\n */\n signals: { [key: string]: SignalData };\n\n /**\n * The receiver the signals are fetched on\n * The receiver must always be set, otherwise we cannot be inside a executor\n *\n * @generated from field: string receiver = 2;\n */\n receiver: string;\n\n /**\n * Use this cursor in the next request to go through the collection\n * Set if there's more data or if the 16MB payload limit was reached\n *\n * @generated from field: optional string next_cursor = 3;\n */\n nextCursor?: string;\n};\n\n/**\n * The response of fetching the recieved signals\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a next_cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse\n */\nexport type ListActiveSignalsResponseJson = {\n /**\n * The actual signals on the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 1;\n */\n signals?: { [key: string]: SignalDataJson };\n\n /**\n * The receiver the signals are fetched on\n * The receiver must always be set, otherwise we cannot be inside a executor\n *\n * @generated from field: string receiver = 2;\n */\n receiver?: string;\n\n /**\n * Use this cursor in the next request to go through the collection\n * Set if there's more data or if the 16MB payload limit was reached\n *\n * @generated from field: optional string next_cursor = 3;\n */\n nextCursor?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse.\n * Use `create(ListActiveSignalsResponseSchema)` to create a new message.\n */\nexport const ListActiveSignalsResponseSchema: GenMessage<ListActiveSignalsResponse, {jsonType: ListActiveSignalsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 20);\n\n/**\n * The vertex config request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest\n */\nexport type ExecutorServiceGetVertexConfigRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest\"> & {\n /**\n * An optional field mask\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMask;\n};\n\n/**\n * The vertex config request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest\n */\nexport type ExecutorServiceGetVertexConfigRequestJson = {\n /**\n * An optional field mask\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMaskJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest.\n * Use `create(ExecutorServiceGetVertexConfigRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceGetVertexConfigRequestSchema: GenMessage<ExecutorServiceGetVertexConfigRequest, {jsonType: ExecutorServiceGetVertexConfigRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 21);\n\n/**\n * The vertex config response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse\n */\nexport type ExecutorServiceGetVertexConfigResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse\"> & {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config: Uint8Array;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadata;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices: { [key: string]: boolean };\n};\n\n/**\n * The vertex config response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse\n */\nexport type ExecutorServiceGetVertexConfigResponseJson = {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config?: string;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadataJson;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices?: { [key: string]: boolean };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse.\n * Use `create(ExecutorServiceGetVertexConfigResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceGetVertexConfigResponseSchema: GenMessage<ExecutorServiceGetVertexConfigResponse, {jsonType: ExecutorServiceGetVertexConfigResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 22);\n\n/**\n * The ListIncomingSignalsRequest is used to list the signals on the receiver you query\n * If you have multiple receivers you should call this endpoint multiple times\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest\n */\nexport type ListIncomingSignalsRequest = Message<\"mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest\"> & {\n /**\n * The receiver you want to check for signals, if not set, the first connected receiver is used\n *\n * @generated from field: optional string receiver = 1;\n */\n receiver?: string;\n\n /**\n * Optional formats to filter the signals by. I.e. only return signals that subsumes to at least one schema in the array\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 2;\n */\n formats: SignalFormat[];\n\n /**\n * A fieldmaks to apply to the returned schema\n * I.e. if you want to omit logos you should set this to \"vertices\" + additional info\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 3;\n */\n fieldMask?: FieldMask;\n};\n\n/**\n * The ListIncomingSignalsRequest is used to list the signals on the receiver you query\n * If you have multiple receivers you should call this endpoint multiple times\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest\n */\nexport type ListIncomingSignalsRequestJson = {\n /**\n * The receiver you want to check for signals, if not set, the first connected receiver is used\n *\n * @generated from field: optional string receiver = 1;\n */\n receiver?: string;\n\n /**\n * Optional formats to filter the signals by. I.e. only return signals that subsumes to at least one schema in the array\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 2;\n */\n formats?: SignalFormatJson[];\n\n /**\n * A fieldmaks to apply to the returned schema\n * I.e. if you want to omit logos you should set this to \"vertices\" + additional info\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 3;\n */\n fieldMask?: FieldMaskJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest.\n * Use `create(ListIncomingSignalsRequestSchema)` to create a new message.\n */\nexport const ListIncomingSignalsRequestSchema: GenMessage<ListIncomingSignalsRequest, {jsonType: ListIncomingSignalsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 23);\n\n/**\n * A representation of a signal on a receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.IncomingVertices\n */\nexport type IncomingVertices = Message<\"mochabugapis.adapt.runtime.v1.IncomingVertices\"> & {\n /**\n * The vertex id\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The label\n *\n * @generated from field: string label = 2;\n */\n label: string;\n\n /**\n * The description\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * The transmitters on the vertex\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 4;\n */\n transmitters: Transmitter[];\n\n /**\n * We also need to know the vertex type\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.VertexType vertex_type = 5;\n */\n vertexType: VertexType;\n\n /**\n * Optional logo for the vertex, use it to get the logo from the map\n *\n * @generated from field: optional string logo_id = 6;\n */\n logoId?: string;\n};\n\n/**\n * A representation of a signal on a receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.IncomingVertices\n */\nexport type IncomingVerticesJson = {\n /**\n * The vertex id\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * The label\n *\n * @generated from field: string label = 2;\n */\n label?: string;\n\n /**\n * The description\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * The transmitters on the vertex\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 4;\n */\n transmitters?: TransmitterJson[];\n\n /**\n * We also need to know the vertex type\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.VertexType vertex_type = 5;\n */\n vertexType?: VertexTypeJson;\n\n /**\n * Optional logo for the vertex, use it to get the logo from the map\n *\n * @generated from field: optional string logo_id = 6;\n */\n logoId?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.IncomingVertices.\n * Use `create(IncomingVerticesSchema)` to create a new message.\n */\nexport const IncomingVerticesSchema: GenMessage<IncomingVertices, {jsonType: IncomingVerticesJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 24);\n\n/**\n * The ListIncomingSignalsResponse is used to return the signals on the receiver you query\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse\n */\nexport type ListIncomingSignalsResponse = Message<\"mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse\"> & {\n /**\n * The incoming vertices\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.IncomingVertices vertices = 1;\n */\n vertices: IncomingVertices[];\n\n /**\n * A map that maps vertex logo ids to logo\n *\n * @generated from field: map<string, string> vertex_logos = 2;\n */\n vertexLogos: { [key: string]: string };\n\n /**\n * The receiver the signals are fetched on\n * This is set, since otherwise the request would return not found\n *\n * @generated from field: string receiver = 3;\n */\n receiver: string;\n};\n\n/**\n * The ListIncomingSignalsResponse is used to return the signals on the receiver you query\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse\n */\nexport type ListIncomingSignalsResponseJson = {\n /**\n * The incoming vertices\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.IncomingVertices vertices = 1;\n */\n vertices?: IncomingVerticesJson[];\n\n /**\n * A map that maps vertex logo ids to logo\n *\n * @generated from field: map<string, string> vertex_logos = 2;\n */\n vertexLogos?: { [key: string]: string };\n\n /**\n * The receiver the signals are fetched on\n * This is set, since otherwise the request would return not found\n *\n * @generated from field: string receiver = 3;\n */\n receiver?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse.\n * Use `create(ListIncomingSignalsResponseSchema)` to create a new message.\n */\nexport const ListIncomingSignalsResponseSchema: GenMessage<ListIncomingSignalsResponse, {jsonType: ListIncomingSignalsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 25);\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest\n */\nexport type ConfiguratorServiceBatchWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest\"> & {\n /**\n * A batch of operations to perform in the configurator store.\n * Refer to the comments on the `StoreNamespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations: WriteOperation[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest\n */\nexport type ConfiguratorServiceBatchWriteStoreRequestJson = {\n /**\n * A batch of operations to perform in the configurator store.\n * Refer to the comments on the `StoreNamespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations?: WriteOperationJson[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest.\n * Use `create(ConfiguratorServiceBatchWriteStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchWriteStoreRequestSchema: GenMessage<ConfiguratorServiceBatchWriteStoreRequest, {jsonType: ConfiguratorServiceBatchWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 26);\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse\n */\nexport type ConfiguratorServiceBatchWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse\"> & {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata: { [key: string]: ValueMetadata };\n};\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse\n */\nexport type ConfiguratorServiceBatchWriteStoreResponseJson = {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata?: { [key: string]: ValueMetadataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse.\n * Use `create(ConfiguratorServiceBatchWriteStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchWriteStoreResponseSchema: GenMessage<ConfiguratorServiceBatchWriteStoreResponse, {jsonType: ConfiguratorServiceBatchWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 27);\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest\n */\nexport type ConfiguratorServiceWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest\"> & {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperation;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest\n */\nexport type ConfiguratorServiceWriteStoreRequestJson = {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperationJson;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest.\n * Use `create(ConfiguratorServiceWriteStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceWriteStoreRequestSchema: GenMessage<ConfiguratorServiceWriteStoreRequest, {jsonType: ConfiguratorServiceWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 28);\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse\n */\nexport type ConfiguratorServiceWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse\"> & {\n /**\n * The metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadata;\n};\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse\n */\nexport type ConfiguratorServiceWriteStoreResponseJson = {\n /**\n * The metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse.\n * Use `create(ConfiguratorServiceWriteStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceWriteStoreResponseSchema: GenMessage<ConfiguratorServiceWriteStoreResponse, {jsonType: ConfiguratorServiceWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 29);\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest\n */\nexport type ConfiguratorServiceBatchReadStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest\"> & {\n /**\n * Keys to fetch from the configurator store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys: string[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest\n */\nexport type ConfiguratorServiceBatchReadStoreRequestJson = {\n /**\n * Keys to fetch from the configurator store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys?: string[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest.\n * Use `create(ConfiguratorServiceBatchReadStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchReadStoreRequestSchema: GenMessage<ConfiguratorServiceBatchReadStoreRequest, {jsonType: ConfiguratorServiceBatchReadStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 30);\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse\n */\nexport type ConfiguratorServiceBatchReadStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse\"> & {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n};\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse\n */\nexport type ConfiguratorServiceBatchReadStoreResponseJson = {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse.\n * Use `create(ConfiguratorServiceBatchReadStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchReadStoreResponseSchema: GenMessage<ConfiguratorServiceBatchReadStoreResponse, {jsonType: ConfiguratorServiceBatchReadStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 31);\n\n/**\n * The request to select from the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest\n */\nexport type ConfiguratorServiceSelectStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest\"> & {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOp;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to select from the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest\n */\nexport type ConfiguratorServiceSelectStoreRequestJson = {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOpJson;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest.\n * Use `create(ConfiguratorServiceSelectStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceSelectStoreRequestSchema: GenMessage<ConfiguratorServiceSelectStoreRequest, {jsonType: ConfiguratorServiceSelectStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 32);\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse\n */\nexport type ConfiguratorServiceSelectStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse\"> & {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse\n */\nexport type ConfiguratorServiceSelectStoreResponseJson = {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse.\n * Use `create(ConfiguratorServiceSelectStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceSelectStoreResponseSchema: GenMessage<ConfiguratorServiceSelectStoreResponse, {jsonType: ConfiguratorServiceSelectStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 33);\n\n/**\n * The get vertex request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest\n */\nexport type ConfiguratorServiceGetVertexConfigRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest\"> & {\n /**\n * A field mask to apply to the item\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMask;\n};\n\n/**\n * The get vertex request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest\n */\nexport type ConfiguratorServiceGetVertexConfigRequestJson = {\n /**\n * A field mask to apply to the item\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMaskJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest.\n * Use `create(ConfiguratorServiceGetVertexConfigRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceGetVertexConfigRequestSchema: GenMessage<ConfiguratorServiceGetVertexConfigRequest, {jsonType: ConfiguratorServiceGetVertexConfigRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 34);\n\n/**\n * The get vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse\n */\nexport type ConfiguratorServiceGetVertexConfigResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse\"> & {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config: Uint8Array;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadata;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices: { [key: string]: boolean };\n};\n\n/**\n * The get vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse\n */\nexport type ConfiguratorServiceGetVertexConfigResponseJson = {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config?: string;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadataJson;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices?: { [key: string]: boolean };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse.\n * Use `create(ConfiguratorServiceGetVertexConfigResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceGetVertexConfigResponseSchema: GenMessage<ConfiguratorServiceGetVertexConfigResponse, {jsonType: ConfiguratorServiceGetVertexConfigResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 35);\n\n/**\n * The post vertex request\n *\n * This request updates the vertex configuration and/or metadata.\n * At least one of config or metadata must be provided in the request.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigRequest\n */\nexport type PostVertexConfigRequest = Message<\"mochabugapis.adapt.runtime.v1.PostVertexConfigRequest\"> & {\n /**\n * The vertex config\n * - Set to empty bytes to clear the config\n * - Omit (nil) to keep existing config unchanged\n * - Set to non-empty bytes to update the config\n *\n * @generated from field: optional bytes config = 1;\n */\n config?: Uint8Array;\n\n /**\n * The metadata of the config\n * - Cannot be cleared (setting to nil will be ignored)\n * - Omit (nil) to keep existing metadata unchanged\n * - Set to update the metadata\n *\n * @generated from field: optional mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadata;\n\n /**\n * You can override bindings directly in the request by setting this flag\n *\n * @generated from field: optional bool override_bindings = 3;\n */\n overrideBindings?: boolean;\n};\n\n/**\n * The post vertex request\n *\n * This request updates the vertex configuration and/or metadata.\n * At least one of config or metadata must be provided in the request.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigRequest\n */\nexport type PostVertexConfigRequestJson = {\n /**\n * The vertex config\n * - Set to empty bytes to clear the config\n * - Omit (nil) to keep existing config unchanged\n * - Set to non-empty bytes to update the config\n *\n * @generated from field: optional bytes config = 1;\n */\n config?: string;\n\n /**\n * The metadata of the config\n * - Cannot be cleared (setting to nil will be ignored)\n * - Omit (nil) to keep existing metadata unchanged\n * - Set to update the metadata\n *\n * @generated from field: optional mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadataJson;\n\n /**\n * You can override bindings directly in the request by setting this flag\n *\n * @generated from field: optional bool override_bindings = 3;\n */\n overrideBindings?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.PostVertexConfigRequest.\n * Use `create(PostVertexConfigRequestSchema)` to create a new message.\n */\nexport const PostVertexConfigRequestSchema: GenMessage<PostVertexConfigRequest, {jsonType: PostVertexConfigRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 36);\n\n/**\n * The post vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigResponse\n */\nexport type PostVertexConfigResponse = Message<\"mochabugapis.adapt.runtime.v1.PostVertexConfigResponse\"> & {\n /**\n * The metadata for the config. This is relevant if you wish to study error codes after setting bindings for example\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 1;\n */\n metadata?: VertexMetadata;\n};\n\n/**\n * The post vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigResponse\n */\nexport type PostVertexConfigResponseJson = {\n /**\n * The metadata for the config. This is relevant if you wish to study error codes after setting bindings for example\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 1;\n */\n metadata?: VertexMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.PostVertexConfigResponse.\n * Use `create(PostVertexConfigResponseSchema)` to create a new message.\n */\nexport const PostVertexConfigResponseSchema: GenMessage<PostVertexConfigResponse, {jsonType: PostVertexConfigResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 37);\n\n/**\n * The request to get the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesRequest\n */\nexport type GetSystemServicesRequest = Message<\"mochabugapis.adapt.runtime.v1.GetSystemServicesRequest\"> & {\n};\n\n/**\n * The request to get the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesRequest\n */\nexport type GetSystemServicesRequestJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetSystemServicesRequest.\n * Use `create(GetSystemServicesRequestSchema)` to create a new message.\n */\nexport const GetSystemServicesRequestSchema: GenMessage<GetSystemServicesRequest, {jsonType: GetSystemServicesRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 38);\n\n/**\n * The response of getting the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesResponse\n */\nexport type GetSystemServicesResponse = Message<\"mochabugapis.adapt.runtime.v1.GetSystemServicesResponse\"> & {\n /**\n * The services that are configured for the system\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 1;\n */\n configuredServices: { [key: string]: boolean };\n};\n\n/**\n * The response of getting the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesResponse\n */\nexport type GetSystemServicesResponseJson = {\n /**\n * The services that are configured for the system\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 1;\n */\n configuredServices?: { [key: string]: boolean };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetSystemServicesResponse.\n * Use `create(GetSystemServicesResponseSchema)` to create a new message.\n */\nexport const GetSystemServicesResponseSchema: GenMessage<GetSystemServicesResponse, {jsonType: GetSystemServicesResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 39);\n\n/**\n * Check if access token is ok\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeRequest\n */\nexport type AuthorizeRequest = Message<\"mochabugapis.adapt.runtime.v1.AuthorizeRequest\"> & {\n /**\n * The access token\n *\n * @generated from field: string access_token = 1;\n */\n accessToken: string;\n};\n\n/**\n * Check if access token is ok\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeRequest\n */\nexport type AuthorizeRequestJson = {\n /**\n * The access token\n *\n * @generated from field: string access_token = 1;\n */\n accessToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.AuthorizeRequest.\n * Use `create(AuthorizeRequestSchema)` to create a new message.\n */\nexport const AuthorizeRequestSchema: GenMessage<AuthorizeRequest, {jsonType: AuthorizeRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 40);\n\n/**\n * The response of authorizing\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeResponse\n */\nexport type AuthorizeResponse = Message<\"mochabugapis.adapt.runtime.v1.AuthorizeResponse\"> & {\n};\n\n/**\n * The response of authorizing\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeResponse\n */\nexport type AuthorizeResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.AuthorizeResponse.\n * Use `create(AuthorizeResponseSchema)` to create a new message.\n */\nexport const AuthorizeResponseSchema: GenMessage<AuthorizeResponse, {jsonType: AuthorizeResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 41);\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest\n */\nexport type BatchGetSystemVariablesRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest\"> & {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest\n */\nexport type BatchGetSystemVariablesRequestJson = {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest.\n * Use `create(BatchGetSystemVariablesRequestSchema)` to create a new message.\n */\nexport const BatchGetSystemVariablesRequestSchema: GenMessage<BatchGetSystemVariablesRequest, {jsonType: BatchGetSystemVariablesRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 42);\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse\n */\nexport type BatchGetSystemVariablesResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse\"> & {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items: { [key: string]: Value };\n};\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse\n */\nexport type BatchGetSystemVariablesResponseJson = {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items?: { [key: string]: ValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse.\n * Use `create(BatchGetSystemVariablesResponseSchema)` to create a new message.\n */\nexport const BatchGetSystemVariablesResponseSchema: GenMessage<BatchGetSystemVariablesResponse, {jsonType: BatchGetSystemVariablesResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 43);\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest\n */\nexport type BatchGetUserVariablesRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest\"> & {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest\n */\nexport type BatchGetUserVariablesRequestJson = {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest.\n * Use `create(BatchGetUserVariablesRequestSchema)` to create a new message.\n */\nexport const BatchGetUserVariablesRequestSchema: GenMessage<BatchGetUserVariablesRequest, {jsonType: BatchGetUserVariablesRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 44);\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse\n */\nexport type BatchGetUserVariablesResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse\"> & {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items: { [key: string]: Value };\n};\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse\n */\nexport type BatchGetUserVariablesResponseJson = {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items?: { [key: string]: ValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse.\n * Use `create(BatchGetUserVariablesResponseSchema)` to create a new message.\n */\nexport const BatchGetUserVariablesResponseSchema: GenMessage<BatchGetUserVariablesResponse, {jsonType: BatchGetUserVariablesResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 45);\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest\n */\nexport type BatchGetUserTokensRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest\"> & {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest\n */\nexport type BatchGetUserTokensRequestJson = {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest.\n * Use `create(BatchGetUserTokensRequestSchema)` to create a new message.\n */\nexport const BatchGetUserTokensRequestSchema: GenMessage<BatchGetUserTokensRequest, {jsonType: BatchGetUserTokensRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 46);\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse\n */\nexport type BatchGetUserTokensResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse\"> & {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items: { [key: string]: Token };\n};\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse\n */\nexport type BatchGetUserTokensResponseJson = {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items?: { [key: string]: TokenJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse.\n * Use `create(BatchGetUserTokensResponseSchema)` to create a new message.\n */\nexport const BatchGetUserTokensResponseSchema: GenMessage<BatchGetUserTokensResponse, {jsonType: BatchGetUserTokensResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 47);\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest\n */\nexport type BatchGetSystemTokensRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest\"> & {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest\n */\nexport type BatchGetSystemTokensRequestJson = {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest.\n * Use `create(BatchGetSystemTokensRequestSchema)` to create a new message.\n */\nexport const BatchGetSystemTokensRequestSchema: GenMessage<BatchGetSystemTokensRequest, {jsonType: BatchGetSystemTokensRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 48);\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse\n */\nexport type BatchGetSystemTokensResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse\"> & {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items: { [key: string]: Token };\n};\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse\n */\nexport type BatchGetSystemTokensResponseJson = {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items?: { [key: string]: TokenJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse.\n * Use `create(BatchGetSystemTokensResponseSchema)` to create a new message.\n */\nexport const BatchGetSystemTokensResponseSchema: GenMessage<BatchGetSystemTokensResponse, {jsonType: BatchGetSystemTokensResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 49);\n\n/**\n * A representation of a OAuth2 token\n *\n * @generated from message mochabugapis.adapt.runtime.v1.Token\n */\nexport type Token = Message<\"mochabugapis.adapt.runtime.v1.Token\"> & {\n /**\n * The name of the token\n * Restrictions:\n * - Must match the ECMA regex: ^[_$a-zA-Z][_$a-zA-Z0-9]*$\n * - Length must be greater than 0 and less than 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * The actual token\n *\n * @generated from field: string token = 2;\n */\n token: string;\n\n /**\n * The type of token (typically Bearer)\n *\n * @generated from field: string type = 3;\n */\n type: string;\n\n /**\n * When the token expires\n *\n * @generated from field: google.protobuf.Timestamp expires = 4;\n */\n expires?: Timestamp;\n};\n\n/**\n * A representation of a OAuth2 token\n *\n * @generated from message mochabugapis.adapt.runtime.v1.Token\n */\nexport type TokenJson = {\n /**\n * The name of the token\n * Restrictions:\n * - Must match the ECMA regex: ^[_$a-zA-Z][_$a-zA-Z0-9]*$\n * - Length must be greater than 0 and less than 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * The actual token\n *\n * @generated from field: string token = 2;\n */\n token?: string;\n\n /**\n * The type of token (typically Bearer)\n *\n * @generated from field: string type = 3;\n */\n type?: string;\n\n /**\n * When the token expires\n *\n * @generated from field: google.protobuf.Timestamp expires = 4;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.Token.\n * Use `create(TokenSchema)` to create a new message.\n */\nexport const TokenSchema: GenMessage<Token, {jsonType: TokenJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 50);\n\n/**\n * The namespace where the key should be used\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.Namespace\n */\nexport enum Namespace {\n /**\n * If the namespace has not been specified\n *\n * @generated from enum value: NAMESPACE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The key is applied on a vertex scope and lives as longest as the instance\n * Access scopes for reading values when the namespace is NAMESPACE_VERTEX_INSTANCE:\n * - 'runtimeapi/executor.store.vertex.instance'\n * - 'runtimeapi/executor.store.vertex.instance:read'\n * Access scope for writing values when the namespace is NAMESPACE_VERTEX_INSTANCE:\n * - 'runtimeapi/executor.store.vertex.instance'\n *\n * @generated from enum value: NAMESPACE_VERTEX_INSTANCE = 1;\n */\n VERTEX_INSTANCE = 1,\n\n /**\n * The key is applied on a plugin wide scope and lives as longest as the\n * instance\n * Access scopes for reading values when the namespace is NAMESPACE_PLUGIN_INSTANCE:\n * - 'runtimeapi/executor.store.plugin.instance'\n * - 'runtimeapi/executor.store.plugin.instance:read'\n * Access scope for writing values when the namespace is NAMESPACE_PLUGIN_INSTANCE:\n * - 'runtimeapi/executor.store.plugin.instance'\n *\n * @generated from enum value: NAMESPACE_PLUGIN_INSTANCE = 2;\n */\n PLUGIN_INSTANCE = 2,\n\n /**\n * The key is applied on a vertex scope and lives as longest as the app\n * Access scopes for reading values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/executor.store.vertex.app'\n * - 'runtimeapi/executor.store.vertex.app:read'\n * Access scope for writing values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/executor.store.vertex.app'\n * -----------------------------------------------\n * The key is applied on a vertex scope and lives as long as the plugin in the project\n * Access scopes for reading values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/configurator.store.vertex:read'\n * - 'runtimeapi/configurator.store.vertex'\n * Access scope for writing values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/configurator.store.vertex'\n *\n * @generated from enum value: NAMESPACE_VERTEX = 3;\n */\n VERTEX = 3,\n\n /**\n * The key is applied on a plugin wide scope and lives as longest as the\n * app\n * Access scopes for reading values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/executor.store.plugin.app'\n * - 'runtimeapi/executor.store.plugin.app:read'\n * Access scope for writing values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/executor.store.plugin.app'\n * -----------------------------------------------\n * The key is applied on a plugin wide scope and lives as long as the plugin in the project\n * Access scopes for reading values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/configurator.store.plugin:read'\n * - 'runtimeapi/configurator.store.plugin'\n * Access scope for writing values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/configurator.store.plugin'\n *\n * @generated from enum value: NAMESPACE_PLUGIN = 4;\n */\n PLUGIN = 4,\n}\n\n/**\n * The namespace where the key should be used\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.Namespace\n */\nexport type NamespaceJson = \"NAMESPACE_UNSPECIFIED\" | \"NAMESPACE_VERTEX_INSTANCE\" | \"NAMESPACE_PLUGIN_INSTANCE\" | \"NAMESPACE_VERTEX\" | \"NAMESPACE_PLUGIN\";\n\n/**\n * Describes the enum mochabugapis.adapt.runtime.v1.Namespace.\n */\nexport const NamespaceSchema: GenEnum<Namespace, NamespaceJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_runtime_v1_runtime, 0);\n\n/**\n * The different vertex types that can be incoming\n * The type of vertex to add\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.VertexType\n */\nexport enum VertexType {\n /**\n * Not specified\n *\n * @generated from enum value: VERTEX_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The start vertex\n *\n * @generated from enum value: VERTEX_TYPE_START = 1;\n */\n START = 1,\n\n /**\n * The plugin vertex\n *\n * @generated from enum value: VERTEX_TYPE_PLUGIN = 2;\n */\n PLUGIN = 2,\n\n /**\n * The output vertex\n *\n * @generated from enum value: VERTEX_TYPE_OUTPUT = 3;\n */\n OUTPUT = 3,\n\n /**\n * The delegate vertex\n *\n * @generated from enum value: VERTEX_TYPE_DELEGATE = 4;\n */\n DELEGATE = 4,\n\n /**\n * The barrier vertex\n *\n * @generated from enum value: VERTEX_TYPE_BARRIER = 5;\n */\n BARRIER = 5,\n\n /**\n * The exchange output vertex\n *\n * @generated from enum value: VERTEX_TYPE_EXCHANGE_OUT = 6;\n */\n EXCHANGE_OUT = 6,\n}\n\n/**\n * The different vertex types that can be incoming\n * The type of vertex to add\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.VertexType\n */\nexport type VertexTypeJson = \"VERTEX_TYPE_UNSPECIFIED\" | \"VERTEX_TYPE_START\" | \"VERTEX_TYPE_PLUGIN\" | \"VERTEX_TYPE_OUTPUT\" | \"VERTEX_TYPE_DELEGATE\" | \"VERTEX_TYPE_BARRIER\" | \"VERTEX_TYPE_EXCHANGE_OUT\";\n\n/**\n * Describes the enum mochabugapis.adapt.runtime.v1.VertexType.\n */\nexport const VertexTypeSchema: GenEnum<VertexType, VertexTypeJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_runtime_v1_runtime, 1);\n\n/**\n * Executor service is containg the complete API available to a executor of a\n * vertex. Every call on this service will require an Authoriation header\n *\n * @generated from service mochabugapis.adapt.runtime.v1.ExecutorService\n */\nexport const ExecutorService: GenService<{\n /**\n * Get the vertex config\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.vertexconfig:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.GetVertexConfig\n */\n getVertexConfig: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceGetVertexConfigRequestSchema;\n output: typeof ExecutorServiceGetVertexConfigResponseSchema;\n },\n /**\n * Get the signals defined by the connected receiver\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.receiversignals:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.ListActiveSignals\n */\n listActiveSignals: {\n methodKind: \"unary\";\n input: typeof ListActiveSignalsRequestSchema;\n output: typeof ListActiveSignalsResponseSchema;\n },\n /**\n * Get specific signals on the connected receiver\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.receiversignals:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.BatchGetActiveSignals\n */\n batchGetActiveSignals: {\n methodKind: \"unary\";\n input: typeof BatchGetActiveSignalsRequestSchema;\n output: typeof BatchGetActiveSignalsResponseSchema;\n },\n /**\n * Send data on the transmitter\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.send\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.Send\n */\n send: {\n methodKind: \"unary\";\n input: typeof SendRequestSchema;\n output: typeof SendResponseSchema;\n },\n /**\n * Dispatch an exchange\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.exchange\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.DispatchExchange\n */\n dispatchExchange: {\n methodKind: \"unary\";\n input: typeof DispatchExchangeRequestSchema;\n output: typeof DispatchExchangeResponseSchema;\n },\n /**\n * Get the information about the exchange instance with the id\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.exchange\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.GetExchangeOperation\n */\n getExchangeOperation: {\n methodKind: \"unary\";\n input: typeof GetExchangeOperationRequestSchema;\n output: typeof GetExchangeOperationResponseSchema;\n },\n /**\n * Cancel the execution of an exchange\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.exchange\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.CancelExchangeOperation\n */\n cancelExchangeOperation: {\n methodKind: \"unary\";\n input: typeof CancelExchangeOperationRequestSchema;\n output: typeof CancelExchangeOperationResponseSchema;\n },\n /**\n * Signel write operations support a large set of operations than batch operations such\n * as conditional writes.\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.WriteStore\n */\n writeStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceWriteStoreRequestSchema;\n output: typeof ExecutorServiceWriteStoreResponseSchema;\n },\n /**\n * Batch write operations on the vertex session store\n * The scopes depends on the namespace and operation\n * The write operations are all-or-nothing. Either all of them are committed or none are\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.BatchWriteStore\n */\n batchWriteStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceBatchWriteStoreRequestSchema;\n output: typeof ExecutorServiceBatchWriteStoreResponseSchema;\n },\n /**\n * Batch read operations on the vertex session store\n * The scopes depends on the namespace and operation\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.BatchReadStore\n */\n batchReadStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceBatchReadStoreRequestSchema;\n output: typeof ExecutorServiceBatchReadStoreResponseSchema;\n },\n /**\n * Select operations for range queries on the vertex session store\n * The scopes depends on the namespace and operation\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.SelectStore\n */\n selectStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceSelectStoreRequestSchema;\n output: typeof ExecutorServiceSelectStoreResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_runtime_v1_runtime, 0);\n\n/**\n * Configurator service is containing the complete API available to a\n * configurator of a vertex. Every call on this service will require an\n * Authoriation header\n * It's important to note that the Get / Post vertex config relates to reading the actual graph\n * and requires the runtimeapi/configurator scope. Whereas the batch store operations can be scoped to the plugin subject\n *\n * @generated from service mochabugapis.adapt.runtime.v1.ConfiguratorService\n */\nexport const ConfiguratorService: GenService<{\n /**\n * Get the vertex config\n * Valid scopes: runtimeapi/configurator, runtimeapi/configurator.vertexconfig, runtimeapi/configurator.vertexconfig:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.GetVertexConfig\n */\n getVertexConfig: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceGetVertexConfigRequestSchema;\n output: typeof ConfiguratorServiceGetVertexConfigResponseSchema;\n },\n /**\n * Replace the vertex config\n * Valid scopes: runtimeapi/configurator, runtimeapi/configurator.vertexconfig\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.PostVertexConfig\n */\n postVertexConfig: {\n methodKind: \"unary\";\n input: typeof PostVertexConfigRequestSchema;\n output: typeof PostVertexConfigResponseSchema;\n },\n /**\n * The single write operations support a larger set of operations than batch operations such\n * as conditional writes.\n * Valid scopes here are: runtimeapi/plugin runtimeapi/plugin.store.plugin runtimeapi/plugin.store.vertex\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.WriteStore\n */\n writeStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceWriteStoreRequestSchema;\n output: typeof ConfiguratorServiceWriteStoreResponseSchema;\n },\n /**\n * Batch write operations on the vertex session store\n * The scopes depends on the namespace and operation\n * The write operations are all-or-nothing. Either all of them are committed or none are\n * Valid scopes here are: runtimeapi/plugin runtimeapi/plugin.store.plugin runtimeapi/plugin.store.vertex\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.BatchWriteStore\n */\n batchWriteStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceBatchWriteStoreRequestSchema;\n output: typeof ConfiguratorServiceBatchWriteStoreResponseSchema;\n },\n /**\n * Batch read operations on the vertex session store\n * The scopes depends on the namespace and operation\n * Valid scopes here are \"runtimeapi/plugin\", \"runtimeapi/plugin.store.plugin\", \"runtimeapi/plugin.store.plugin:read\"\n * \"runtimeapi/plugin.store.vertex\", \"runtimeapi/plugin.store.vertex:read\"\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.BatchReadStore\n */\n batchReadStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceBatchReadStoreRequestSchema;\n output: typeof ConfiguratorServiceBatchReadStoreResponseSchema;\n },\n /**\n * Select operations for range queries on the vertex session store\n * The scopes depends on the namespace and operation\n * Valid scopes here are \"runtimeapi/plugin\", \"runtimeapi/plugin.store.plugin\", \"runtimeapi/plugin.store.plugin:read\"\n * \"runtimeapi/plugin.store.vertex\", \"runtimeapi/plugin.store.vertex:read\"\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.SelectStore\n */\n selectStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceSelectStoreRequestSchema;\n output: typeof ConfiguratorServiceSelectStoreResponseSchema;\n },\n /**\n * This endpoint enables the configurator to get information about incoming signals\n * Valid scopes: runtimeapi/configurator, runtimeapi/configurator.receiversignals:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.ListIncomingSignals\n */\n listIncomingSignals: {\n methodKind: \"unary\";\n input: typeof ListIncomingSignalsRequestSchema;\n output: typeof ListIncomingSignalsResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_runtime_v1_runtime, 1);\n\n/**\n * Accessible to both executor and configurator\n *\n * @generated from service mochabugapis.adapt.runtime.v1.PluginService\n */\nexport const PluginService: GenService<{\n /**\n * The authorization endpoint, make sure that the access token is OK\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.authorize\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.Authorize\n */\n authorize: {\n methodKind: \"unary\";\n input: typeof AuthorizeRequestSchema;\n output: typeof AuthorizeResponseSchema;\n },\n /**\n * Get information about configured system services\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.system.services:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.GetSystemServices\n */\n getSystemServices: {\n methodKind: \"unary\";\n input: typeof GetSystemServicesRequestSchema;\n output: typeof GetSystemServicesResponseSchema;\n },\n /**\n * Fetch the envionment variables configured by the plugin\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.variables:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetSystemVariables\n */\n batchGetSystemVariables: {\n methodKind: \"unary\";\n input: typeof BatchGetSystemVariablesRequestSchema;\n output: typeof BatchGetSystemVariablesResponseSchema;\n },\n /**\n * Fetch the envionment variables configured by the user\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.user.variables:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetUserVariables\n */\n batchGetUserVariables: {\n methodKind: \"unary\";\n input: typeof BatchGetUserVariablesRequestSchema;\n output: typeof BatchGetUserVariablesResponseSchema;\n },\n /**\n * Get oauth2 bearer token from a user's consent or a service account\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.user.tokens:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetUserTokens\n */\n batchGetUserTokens: {\n methodKind: \"unary\";\n input: typeof BatchGetUserTokensRequestSchema;\n output: typeof BatchGetUserTokensResponseSchema;\n },\n /**\n * Get oauth2 bearer token from a plugin's service account\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.tokens:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetSystemTokens\n */\n batchGetSystemTokens: {\n methodKind: \"unary\";\n input: typeof BatchGetSystemTokensRequestSchema;\n output: typeof BatchGetSystemTokensResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_runtime_v1_runtime, 2);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/automations/v1/automations.proto (package mochabugapis.adapt.automations.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../../buf/validate/validate_pb\";\nimport { file_google_api_annotations } from \"../../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../../google/api/client_pb\";\nimport type { Timestamp, TimestampJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { SignalData, SignalDataJson } from \"../../graph/signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"../../graph/signal_data_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/automations/v1/automations.proto.\n */\nexport const file_mochabugapis_adapt_automations_v1_automations: GenFile = /*@__PURE__*/\n fileDesc(\"CjNtb2NoYWJ1Z2FwaXMvYWRhcHQvYXV0b21hdGlvbnMvdjEvYXV0b21hdGlvbnMucHJvdG8SIW1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MSIvChVJbmhlcml0U2Vzc2lvblJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAEY9AMiZQoWSW5oZXJpdFNlc3Npb25SZXNwb25zZRINCgV0b2tlbhgBIAEoCRIwCgdleHBpcmVzGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQgoKCF9leHBpcmVzIq8BChFSZWFkT3V0cHV0UmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AxIaCglwYWdlX3NpemUYAiABKA1CB7pIBCoCGGQSKQoGdmVydGV4GAMgASgJQhS6SBFyDzINXlswLTlhLXpdezR9JEgAiAEBEiEKCm5ld2VyX3RoYW4YBCABKAlCCLpIBXIDsAEBSAGIAQFCCQoHX3ZlcnRleEINCgtfbmV3ZXJfdGhhbiLLAQoSUmVhZE91dHB1dFJlc3BvbnNlEjsKB3Nlc3Npb24YASABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbhI6CgdvdXRwdXRzGAIgAygLMikubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLk91dHB1dBInChBuZXh0X3BhZ2VfY3Vyc29yGAMgASgJQgi6SAVyA7ABAUgAiAEBQhMKEV9uZXh0X3BhZ2VfY3Vyc29yIncKD1JlYWRVcmxzUmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AxIaCglwYWdlX3NpemUYAiABKA1CB7pIBCoCGGQSIQoKbmV3ZXJfdGhhbhgDIAEoCUIIukgFcgOwAQFIAIgBAUINCgtfbmV3ZXJfdGhhbiLDAQoQUmVhZFVybHNSZXNwb25zZRI7CgdzZXNzaW9uGAEgASgLMioubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlNlc3Npb24SNAoEdXJscxgCIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5VcmwSJwoQbmV4dF9wYWdlX2N1cnNvchgDIAEoCUIIukgFcgOwAQFIAIgBAUITChFfbmV4dF9wYWdlX2N1cnNvciLYAgoTU3RhcnRTZXNzaW9uUmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AxI7Cgt0cmFuc21pdHRlchgCIAEoCUIhukgechwQARhkMhZeW2EtekEtWjAtOV8tXXsxLDEwMH0kSACIAQEShQEKB3NpZ25hbHMYAyADKAsyQy5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhcnRTZXNzaW9uUmVxdWVzdC5TaWduYWxzRW50cnlCL7pILJoBKSIiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJCoDyAEBGlQKDFNpZ25hbHNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAFCDgoMX3RyYW5zbWl0dGVyImMKFFN0YXJ0U2Vzc2lvblJlc3BvbnNlEg0KBXRva2VuGAEgASgJEjAKB2V4cGlyZXMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQFCCgoIX2V4cGlyZXMiLAoSU3RvcFNlc3Npb25SZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRABGPQDIhUKE1N0b3BTZXNzaW9uUmVzcG9uc2UiKwoRR2V0U2Vzc2lvblJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAEY9AMiWQoSR2V0U2Vzc2lvblJlc3BvbnNlEkMKB3Nlc3Npb24YASABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbkIGukgDyAEBIukBCgZPdXRwdXQSDgoGdmVydGV4GAEgASgJEgwKBGZvcmsYAiABKAkSQQoEZGF0YRgDIAMoCzIzLm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5PdXRwdXQuRGF0YUVudHJ5EisKB2NyZWF0ZWQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGlEKCURhdGFFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAEiegoDVXJsEgsKA3VybBgBIAEoCRIMCgRmb3JrGAIgASgJEg4KBnZlcnRleBgDIAEoCRIMCgRkb25lGAQgASgIEisKB2NyZWF0ZWQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXRva2VuGAYgASgJIlIKB1Nlc3Npb24SDAoEZm9yaxgBIAEoCRI5CgZzdGF0dXMYAiABKA4yKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhdHVzIuYBChBXZWJzb2NrZXRNZXNzYWdlEhQKAmlkGAEgASgJQgi6SAVyA7ABARI7CgZvdXRwdXQYAiABKAsyKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuT3V0cHV0SAASNQoDdXJsGAMgASgLMiYubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlVybEgAEj0KB3Nlc3Npb24YBCABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbkgAQgkKB21lc3NhZ2UqyAEKBlN0YXR1cxIWChJTVEFUVVNfVU5TUEVDSUZJRUQQABISCg5TVEFUVVNfUlVOTklORxABEhIKDlNUQVRVU19TVE9QUEVEEAISEwoPU1RBVFVTX1NUT1BQSU5HEAMSFAoQU1RBVFVTX0NPTVBMRVRFRBAEEhIKDlNUQVRVU19FWFBJUkVEEAUSEgoOU1RBVFVTX0VSUk9SRUQQBhIVChFTVEFUVVNfREVMRUdBVElORxAHEhQKEFNUQVRVU19ERUxFR0FURUQQCDKaCQoRQXV0b21hdGlvblNlcnZpY2USrgEKDFN0YXJ0U2Vzc2lvbhI2Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5TdGFydFNlc3Npb25SZXF1ZXN0GjcubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlN0YXJ0U2Vzc2lvblJlc3BvbnNlIi2C0+STAic6ASoiIi92MS9hdXRvbWF0aW9ucy97aWR9L3Nlc3Npb24vc3RhcnQSogEKC1N0b3BTZXNzaW9uEjUubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlN0b3BTZXNzaW9uUmVxdWVzdBo2Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5TdG9wU2Vzc2lvblJlc3BvbnNlIiSC0+STAh4qHC92MS9hdXRvbWF0aW9ucy97aWR9L3Nlc3Npb24StgEKDkluaGVyaXRTZXNzaW9uEjgubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLkluaGVyaXRTZXNzaW9uUmVxdWVzdBo5Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5Jbmhlcml0U2Vzc2lvblJlc3BvbnNlIi+C0+STAik6ASoiJC92MS9hdXRvbWF0aW9ucy97aWR9L3Nlc3Npb24vaW5oZXJpdBKfAQoKR2V0U2Vzc2lvbhI0Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5HZXRTZXNzaW9uUmVxdWVzdBo1Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5HZXRTZXNzaW9uUmVzcG9uc2UiJILT5JMCHhIcL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbhKmAQoKUmVhZE91dHB1dBI0Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SZWFkT3V0cHV0UmVxdWVzdBo1Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SZWFkT3V0cHV0UmVzcG9uc2UiK4LT5JMCJRIjL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbi9vdXRwdXQSngEKCFJlYWRVcmxzEjIubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlJlYWRVcmxzUmVxdWVzdBozLm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SZWFkVXJsc1Jlc3BvbnNlIimC0+STAiMSIS92MS9hdXRvbWF0aW9ucy97aWR9L3Nlc3Npb24vdXJscxqJAcpBFmFkYXB0Lm1vY2hhYnVnYXBpcy5jb23SQW1odHRwczovL3d3dy5tb2NoYWJ1Z2FwaXMuY29tL2F1dGgvYWRhcHQuYXV0b21hdGlvbnMsaHR0cHM6Ly93d3cubW9jaGFidWdhcGlzLmNvbS9hdXRoL2FkYXB0LmF1dG9tYXRpb25zLnN0YXJ0YgZwcm90bzM\", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_protobuf_timestamp, file_mochabugapis_adapt_graph_signal_data]);\n\n/**\n * The inherit session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionRequest\n */\nexport type InheritSessionRequest = Message<\"mochabugapis.adapt.automations.v1.InheritSessionRequest\"> & {\n /**\n * The automation id you would like to inherit\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * The inherit session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionRequest\n */\nexport type InheritSessionRequestJson = {\n /**\n * The automation id you would like to inherit\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.InheritSessionRequest.\n * Use `create(InheritSessionRequestSchema)` to create a new message.\n */\nexport const InheritSessionRequestSchema: GenMessage<InheritSessionRequest, {jsonType: InheritSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 0);\n\n/**\n * The inherit session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionResponse\n */\nexport type InheritSessionResponse = Message<\"mochabugapis.adapt.automations.v1.InheritSessionResponse\"> & {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: Timestamp;\n};\n\n/**\n * The inherit session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionResponse\n */\nexport type InheritSessionResponseJson = {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token?: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.InheritSessionResponse.\n * Use `create(InheritSessionResponseSchema)` to create a new message.\n */\nexport const InheritSessionResponseSchema: GenMessage<InheritSessionResponse, {jsonType: InheritSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 1);\n\n/**\n * The read output request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputRequest\n */\nexport type ReadOutputRequest = Message<\"mochabugapis.adapt.automations.v1.ReadOutputRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize: number;\n\n /**\n * You can specify a specific node you wan to read the output from as well\n * If not set, it will return all outputs\n *\n * @generated from field: optional string vertex = 3;\n */\n vertex?: string;\n\n /**\n * A sortable time uuid to indicate that that the outputs need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 4;\n */\n newerThan?: string;\n};\n\n/**\n * The read output request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputRequest\n */\nexport type ReadOutputRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize?: number;\n\n /**\n * You can specify a specific node you wan to read the output from as well\n * If not set, it will return all outputs\n *\n * @generated from field: optional string vertex = 3;\n */\n vertex?: string;\n\n /**\n * A sortable time uuid to indicate that that the outputs need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 4;\n */\n newerThan?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadOutputRequest.\n * Use `create(ReadOutputRequestSchema)` to create a new message.\n */\nexport const ReadOutputRequestSchema: GenMessage<ReadOutputRequest, {jsonType: ReadOutputRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 2);\n\n/**\n * The read output response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputResponse\n */\nexport type ReadOutputResponse = Message<\"mochabugapis.adapt.automations.v1.ReadOutputResponse\"> & {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: Session;\n\n /**\n * The outputs from the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Output outputs = 2;\n */\n outputs: Output[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * The read output response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputResponse\n */\nexport type ReadOutputResponseJson = {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: SessionJson;\n\n /**\n * The outputs from the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Output outputs = 2;\n */\n outputs?: OutputJson[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadOutputResponse.\n * Use `create(ReadOutputResponseSchema)` to create a new message.\n */\nexport const ReadOutputResponseSchema: GenMessage<ReadOutputResponse, {jsonType: ReadOutputResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 3);\n\n/**\n * The read URLs request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsRequest\n */\nexport type ReadUrlsRequest = Message<\"mochabugapis.adapt.automations.v1.ReadUrlsRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize: number;\n\n /**\n * A sortable time uuid to indicate that that the urls need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 3;\n */\n newerThan?: string;\n};\n\n/**\n * The read URLs request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsRequest\n */\nexport type ReadUrlsRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize?: number;\n\n /**\n * A sortable time uuid to indicate that that the urls need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 3;\n */\n newerThan?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadUrlsRequest.\n * Use `create(ReadUrlsRequestSchema)` to create a new message.\n */\nexport const ReadUrlsRequestSchema: GenMessage<ReadUrlsRequest, {jsonType: ReadUrlsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 4);\n\n/**\n * The read URLs response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsResponse\n */\nexport type ReadUrlsResponse = Message<\"mochabugapis.adapt.automations.v1.ReadUrlsResponse\"> & {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: Session;\n\n /**\n * The URLs for the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Url urls = 2;\n */\n urls: Url[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * The read URLs response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsResponse\n */\nexport type ReadUrlsResponseJson = {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: SessionJson;\n\n /**\n * The URLs for the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Url urls = 2;\n */\n urls?: UrlJson[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadUrlsResponse.\n * Use `create(ReadUrlsResponseSchema)` to create a new message.\n */\nexport const ReadUrlsResponseSchema: GenMessage<ReadUrlsResponse, {jsonType: ReadUrlsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 5);\n\n/**\n * The start session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionRequest\n */\nexport type StartSessionRequest = Message<\"mochabugapis.adapt.automations.v1.StartSessionRequest\"> & {\n /**\n * The automation id to start\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The transmitter to start from (optional, it defaults to the first one, always)\n *\n * @generated from field: optional string transmitter = 2;\n */\n transmitter?: string;\n\n /**\n * The signals on the transmitter you wish to start with\n * Make sure that they align to the signals JTD schema\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * The start session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionRequest\n */\nexport type StartSessionRequestJson = {\n /**\n * The automation id to start\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * The transmitter to start from (optional, it defaults to the first one, always)\n *\n * @generated from field: optional string transmitter = 2;\n */\n transmitter?: string;\n\n /**\n * The signals on the transmitter you wish to start with\n * Make sure that they align to the signals JTD schema\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StartSessionRequest.\n * Use `create(StartSessionRequestSchema)` to create a new message.\n */\nexport const StartSessionRequestSchema: GenMessage<StartSessionRequest, {jsonType: StartSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 6);\n\n/**\n * The start session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionResponse\n */\nexport type StartSessionResponse = Message<\"mochabugapis.adapt.automations.v1.StartSessionResponse\"> & {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: Timestamp;\n};\n\n/**\n * The start session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionResponse\n */\nexport type StartSessionResponseJson = {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token?: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StartSessionResponse.\n * Use `create(StartSessionResponseSchema)` to create a new message.\n */\nexport const StartSessionResponseSchema: GenMessage<StartSessionResponse, {jsonType: StartSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 7);\n\n/**\n * The stop session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionRequest\n */\nexport type StopSessionRequest = Message<\"mochabugapis.adapt.automations.v1.StopSessionRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * The stop session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionRequest\n */\nexport type StopSessionRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StopSessionRequest.\n * Use `create(StopSessionRequestSchema)` to create a new message.\n */\nexport const StopSessionRequestSchema: GenMessage<StopSessionRequest, {jsonType: StopSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 8);\n\n/**\n * The stop session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionResponse\n */\nexport type StopSessionResponse = Message<\"mochabugapis.adapt.automations.v1.StopSessionResponse\"> & {\n};\n\n/**\n * The stop session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionResponse\n */\nexport type StopSessionResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StopSessionResponse.\n * Use `create(StopSessionResponseSchema)` to create a new message.\n */\nexport const StopSessionResponseSchema: GenMessage<StopSessionResponse, {jsonType: StopSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 9);\n\n/**\n * The get session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionRequest\n */\nexport type GetSessionRequest = Message<\"mochabugapis.adapt.automations.v1.GetSessionRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * The get session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionRequest\n */\nexport type GetSessionRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.GetSessionRequest.\n * Use `create(GetSessionRequestSchema)` to create a new message.\n */\nexport const GetSessionRequestSchema: GenMessage<GetSessionRequest, {jsonType: GetSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 10);\n\n/**\n * The get session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionResponse\n */\nexport type GetSessionResponse = Message<\"mochabugapis.adapt.automations.v1.GetSessionResponse\"> & {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: Session;\n};\n\n/**\n * The get session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionResponse\n */\nexport type GetSessionResponseJson = {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: SessionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.GetSessionResponse.\n * Use `create(GetSessionResponseSchema)` to create a new message.\n */\nexport const GetSessionResponseSchema: GenMessage<GetSessionResponse, {jsonType: GetSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 11);\n\n/**\n * Output data from the automation (corresponds to an output vertex instance)\n *\n * @generated from message mochabugapis.adapt.automations.v1.Output\n */\nexport type Output = Message<\"mochabugapis.adapt.automations.v1.Output\"> & {\n /**\n * The vertex id\n *\n * @generated from field: string vertex = 1;\n */\n vertex: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork: string;\n\n /**\n * The actual data that has been output from the vertex\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> data = 3;\n */\n data: { [key: string]: SignalData };\n\n /**\n * The timestamp when the output was created\n *\n * @generated from field: google.protobuf.Timestamp created = 4;\n */\n created?: Timestamp;\n};\n\n/**\n * Output data from the automation (corresponds to an output vertex instance)\n *\n * @generated from message mochabugapis.adapt.automations.v1.Output\n */\nexport type OutputJson = {\n /**\n * The vertex id\n *\n * @generated from field: string vertex = 1;\n */\n vertex?: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork?: string;\n\n /**\n * The actual data that has been output from the vertex\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> data = 3;\n */\n data?: { [key: string]: SignalDataJson };\n\n /**\n * The timestamp when the output was created\n *\n * @generated from field: google.protobuf.Timestamp created = 4;\n */\n created?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.Output.\n * Use `create(OutputSchema)` to create a new message.\n */\nexport const OutputSchema: GenMessage<Output, {jsonType: OutputJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 12);\n\n/**\n * A representation of a URL\n *\n * @generated from message mochabugapis.adapt.automations.v1.Url\n */\nexport type Url = Message<\"mochabugapis.adapt.automations.v1.Url\"> & {\n /**\n * The URL\n *\n * @generated from field: string url = 1;\n */\n url: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork: string;\n\n /**\n * The vertex id that generated the URL\n *\n * @generated from field: string vertex = 3;\n */\n vertex: string;\n\n /**\n * Whether or not the URL is done executing\n * The client should only open URLs that are not done\n * Since the processes are generic, it's possible that a process generates multiple URLs in parallel\n * and the client should only open the ones that are not done\n *\n * @generated from field: bool done = 4;\n */\n done: boolean;\n\n /**\n * The timestamp when the URL was created\n *\n * @generated from field: google.protobuf.Timestamp created = 5;\n */\n created?: Timestamp;\n\n /**\n * The access token to access the node session\n *\n * @generated from field: string token = 6;\n */\n token: string;\n};\n\n/**\n * A representation of a URL\n *\n * @generated from message mochabugapis.adapt.automations.v1.Url\n */\nexport type UrlJson = {\n /**\n * The URL\n *\n * @generated from field: string url = 1;\n */\n url?: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork?: string;\n\n /**\n * The vertex id that generated the URL\n *\n * @generated from field: string vertex = 3;\n */\n vertex?: string;\n\n /**\n * Whether or not the URL is done executing\n * The client should only open URLs that are not done\n * Since the processes are generic, it's possible that a process generates multiple URLs in parallel\n * and the client should only open the ones that are not done\n *\n * @generated from field: bool done = 4;\n */\n done?: boolean;\n\n /**\n * The timestamp when the URL was created\n *\n * @generated from field: google.protobuf.Timestamp created = 5;\n */\n created?: TimestampJson;\n\n /**\n * The access token to access the node session\n *\n * @generated from field: string token = 6;\n */\n token?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.Url.\n * Use `create(UrlSchema)` to create a new message.\n */\nexport const UrlSchema: GenMessage<Url, {jsonType: UrlJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 13);\n\n/**\n * The session information\n *\n * @generated from message mochabugapis.adapt.automations.v1.Session\n */\nexport type Session = Message<\"mochabugapis.adapt.automations.v1.Session\"> & {\n /**\n * This is the owner's fork id, this can be different than the forks emitting outputs and urls\n *\n * @generated from field: string fork = 1;\n */\n fork: string;\n\n /**\n * The status of the session\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 2;\n */\n status: Status;\n};\n\n/**\n * The session information\n *\n * @generated from message mochabugapis.adapt.automations.v1.Session\n */\nexport type SessionJson = {\n /**\n * This is the owner's fork id, this can be different than the forks emitting outputs and urls\n *\n * @generated from field: string fork = 1;\n */\n fork?: string;\n\n /**\n * The status of the session\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 2;\n */\n status?: StatusJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.Session.\n * Use `create(SessionSchema)` to create a new message.\n */\nexport const SessionSchema: GenMessage<Session, {jsonType: SessionJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 14);\n\n/**\n * WebsocketMessage wraps all possible message types sent over WebSocket\n *\n * @generated from message mochabugapis.adapt.automations.v1.WebsocketMessage\n */\nexport type WebsocketMessage = Message<\"mochabugapis.adapt.automations.v1.WebsocketMessage\"> & {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The actual message, one of the following types\n *\n * @generated from oneof mochabugapis.adapt.automations.v1.WebsocketMessage.message\n */\n message: {\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 2;\n */\n value: Output;\n case: \"output\";\n } | {\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 3;\n */\n value: Url;\n case: \"url\";\n } | {\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 4;\n */\n value: Session;\n case: \"session\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * WebsocketMessage wraps all possible message types sent over WebSocket\n *\n * @generated from message mochabugapis.adapt.automations.v1.WebsocketMessage\n */\nexport type WebsocketMessageJson = {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 2;\n */\n output?: OutputJson;\n\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 3;\n */\n url?: UrlJson;\n\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 4;\n */\n session?: SessionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.WebsocketMessage.\n * Use `create(WebsocketMessageSchema)` to create a new message.\n */\nexport const WebsocketMessageSchema: GenMessage<WebsocketMessage, {jsonType: WebsocketMessageJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 15);\n\n/**\n * The session enum status\n *\n * @generated from enum mochabugapis.adapt.automations.v1.Status\n */\nexport enum Status {\n /**\n * Unspecified\n *\n * @generated from enum value: STATUS_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The session is running\n *\n * @generated from enum value: STATUS_RUNNING = 1;\n */\n RUNNING = 1,\n\n /**\n * The session has been stopped\n *\n * @generated from enum value: STATUS_STOPPED = 2;\n */\n STOPPED = 2,\n\n /**\n * The session is being stopped\n *\n * @generated from enum value: STATUS_STOPPING = 3;\n */\n STOPPING = 3,\n\n /**\n * The session has been completed\n *\n * @generated from enum value: STATUS_COMPLETED = 4;\n */\n COMPLETED = 4,\n\n /**\n * The session has expired\n *\n * @generated from enum value: STATUS_EXPIRED = 5;\n */\n EXPIRED = 5,\n\n /**\n * The session has been errored (errors during the runtime)\n *\n * @generated from enum value: STATUS_ERRORED = 6;\n */\n ERRORED = 6,\n\n /**\n * The owner is getting delegated to another owner\n *\n * @generated from enum value: STATUS_DELEGATING = 7;\n */\n DELEGATING = 7,\n\n /**\n * The delegation is complete, the owner of this session cannot access it anymore\n *\n * @generated from enum value: STATUS_DELEGATED = 8;\n */\n DELEGATED = 8,\n}\n\n/**\n * The session enum status\n *\n * @generated from enum mochabugapis.adapt.automations.v1.Status\n */\nexport type StatusJson = \"STATUS_UNSPECIFIED\" | \"STATUS_RUNNING\" | \"STATUS_STOPPED\" | \"STATUS_STOPPING\" | \"STATUS_COMPLETED\" | \"STATUS_EXPIRED\" | \"STATUS_ERRORED\" | \"STATUS_DELEGATING\" | \"STATUS_DELEGATED\";\n\n/**\n * Describes the enum mochabugapis.adapt.automations.v1.Status.\n */\nexport const StatusSchema: GenEnum<Status, StatusJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_automations_v1_automations, 0);\n\n/**\n * A service that provides automation functionality.\n *\n * @generated from service mochabugapis.adapt.automations.v1.AutomationService\n */\nexport const AutomationService: GenService<{\n /**\n * Start a session of the specified automation\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.StartSession\n */\n startSession: {\n methodKind: \"unary\";\n input: typeof StartSessionRequestSchema;\n output: typeof StartSessionResponseSchema;\n },\n /**\n * Stop a specific session\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.StopSession\n */\n stopSession: {\n methodKind: \"unary\";\n input: typeof StopSessionRequestSchema;\n output: typeof StopSessionResponseSchema;\n },\n /**\n * Inherit a session\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.InheritSession\n */\n inheritSession: {\n methodKind: \"unary\";\n input: typeof InheritSessionRequestSchema;\n output: typeof InheritSessionResponseSchema;\n },\n /**\n * Get session information\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.GetSession\n */\n getSession: {\n methodKind: \"unary\";\n input: typeof GetSessionRequestSchema;\n output: typeof GetSessionResponseSchema;\n },\n /**\n * Read the output from the session\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.ReadOutput\n */\n readOutput: {\n methodKind: \"unary\";\n input: typeof ReadOutputRequestSchema;\n output: typeof ReadOutputResponseSchema;\n },\n /**\n * Read URLs for the session for browser-based clients\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.ReadUrls\n */\n readUrls: {\n methodKind: \"unary\";\n input: typeof ReadUrlsRequestSchema;\n output: typeof ReadUrlsResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_automations_v1_automations, 0);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/annotations.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenExtension, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { HttpRule } from \"./http_pb\";\nimport { file_google_api_http } from \"./http_pb\";\nimport type { MethodOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/annotations.proto.\n */\nexport const file_google_api_annotations: GenFile = /*@__PURE__*/\n fileDesc(\"Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzM\", [file_google_api_http, file_google_protobuf_descriptor]);\n\n/**\n * See `HttpRule`.\n *\n * @generated from extension: google.api.HttpRule http = 72295728;\n */\nexport const http: GenExtension<MethodOptions, HttpRule> = /*@__PURE__*/\n extDesc(file_google_api_annotations, 0);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/http.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/http.proto.\n */\nexport const file_google_api_http: GenFile = /*@__PURE__*/\n fileDesc(\"ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUJnCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIER0FQSWIGcHJvdG8z\");\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * @generated from message google.api.Http\n */\nexport type Http = Message<\"google.api.Http\"> & {\n /**\n * A list of HTTP configuration rules that apply to individual API methods.\n *\n * **NOTE:** All service configuration rules follow \"last one wins\" order.\n *\n * @generated from field: repeated google.api.HttpRule rules = 1;\n */\n rules: HttpRule[];\n\n /**\n * When set to true, URL path parameters will be fully URI-decoded except in\n * cases of single segment matches in reserved expansion, where \"%2F\" will be\n * left encoded.\n *\n * The default behavior is to not decode RFC 6570 reserved characters in multi\n * segment matches.\n *\n * @generated from field: bool fully_decode_reserved_expansion = 2;\n */\n fullyDecodeReservedExpansion: boolean;\n};\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * @generated from message google.api.Http\n */\nexport type HttpJson = {\n /**\n * A list of HTTP configuration rules that apply to individual API methods.\n *\n * **NOTE:** All service configuration rules follow \"last one wins\" order.\n *\n * @generated from field: repeated google.api.HttpRule rules = 1;\n */\n rules?: HttpRuleJson[];\n\n /**\n * When set to true, URL path parameters will be fully URI-decoded except in\n * cases of single segment matches in reserved expansion, where \"%2F\" will be\n * left encoded.\n *\n * The default behavior is to not decode RFC 6570 reserved characters in multi\n * segment matches.\n *\n * @generated from field: bool fully_decode_reserved_expansion = 2;\n */\n fullyDecodeReservedExpansion?: boolean;\n};\n\n/**\n * Describes the message google.api.Http.\n * Use `create(HttpSchema)` to create a new message.\n */\nexport const HttpSchema: GenMessage<Http, {jsonType: HttpJson}> = /*@__PURE__*/\n messageDesc(file_google_api_http, 0);\n\n/**\n * gRPC Transcoding\n *\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n *\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n *\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n *\n * Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/{name=messages/*}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * string name = 1; // Mapped to URL path.\n * }\n * message Message {\n * string text = 1; // The resource content.\n * }\n *\n * This enables an HTTP REST to gRPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n *\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get:\"/v1/messages/{message_id}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * message SubMessage {\n * string subfield = 1;\n * }\n * string message_id = 1; // Mapped to URL path.\n * int64 revision = 2; // Mapped to URL query parameter `revision`.\n * SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`.\n * }\n *\n * This enables a HTTP JSON to RPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n *\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n *\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *\n * service Messaging {\n * rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"message\"\n * };\n * }\n * }\n * message UpdateMessageRequest {\n * string message_id = 1; // mapped to the URL\n * Message message = 2; // mapped to the body\n * }\n *\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n *\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body. This enables the following alternative definition of\n * the update method:\n *\n * service Messaging {\n * rpc UpdateMessage(Message) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"*\"\n * };\n * }\n * }\n * message Message {\n * string message_id = 1;\n * string text = 2;\n * }\n *\n *\n * The following HTTP JSON to RPC mapping is enabled:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n *\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n *\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/messages/{message_id}\"\n * additional_bindings {\n * get: \"/v1/users/{user_id}/messages/{message_id}\"\n * }\n * };\n * }\n * }\n * message GetMessageRequest {\n * string message_id = 1;\n * string user_id = 2;\n * }\n *\n * This enables the following two alternative HTTP JSON to RPC mappings:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n *\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n *\n * Rules for HTTP mapping\n *\n * 1. Leaf request fields (recursive expansion nested messages in the request\n * message) are classified into three categories:\n * - Fields referred by the path template. They are passed via the URL path.\n * - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n * are passed via the HTTP\n * request body.\n * - All other fields are passed via the URL query parameters, and the\n * parameter name is the field path in the request message. A repeated\n * field can be represented as multiple query parameters under the same\n * name.\n * 2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n * query parameter, all fields\n * are passed via URL path and HTTP request body.\n * 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n * request body, all\n * fields are passed via URL path and URL query parameters.\n *\n * Path template syntax\n *\n * Template = \"/\" Segments [ Verb ] ;\n * Segments = Segment { \"/\" Segment } ;\n * Segment = \"*\" | \"**\" | LITERAL | Variable ;\n * Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n * FieldPath = IDENT { \".\" IDENT } ;\n * Verb = \":\" LITERAL ;\n *\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n *\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n *\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n *\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n *\n * If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n *\n * Using gRPC API Service Configuration\n *\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n *\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n *\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *\n * http:\n * rules:\n * - selector: example.v1.Messaging.GetMessage\n * get: /v1/messages/{message_id}/{sub.subfield}\n *\n * Special notes\n *\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n *\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n *\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n *\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n *\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n *\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * @generated from message google.api.HttpRule\n */\nexport type HttpRule = Message<\"google.api.HttpRule\"> & {\n /**\n * Selects a method to which this rule applies.\n *\n * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n * details.\n *\n * @generated from field: string selector = 1;\n */\n selector: string;\n\n /**\n * Determines the URL pattern is matched by this rules. This pattern can be\n * used with any of the {get|put|post|delete|patch} methods. A custom method\n * can be defined using the 'custom' field.\n *\n * @generated from oneof google.api.HttpRule.pattern\n */\n pattern: {\n /**\n * Maps to HTTP GET. Used for listing and getting information about\n * resources.\n *\n * @generated from field: string get = 2;\n */\n value: string;\n case: \"get\";\n } | {\n /**\n * Maps to HTTP PUT. Used for replacing a resource.\n *\n * @generated from field: string put = 3;\n */\n value: string;\n case: \"put\";\n } | {\n /**\n * Maps to HTTP POST. Used for creating a resource or performing an action.\n *\n * @generated from field: string post = 4;\n */\n value: string;\n case: \"post\";\n } | {\n /**\n * Maps to HTTP DELETE. Used for deleting a resource.\n *\n * @generated from field: string delete = 5;\n */\n value: string;\n case: \"delete\";\n } | {\n /**\n * Maps to HTTP PATCH. Used for updating a resource.\n *\n * @generated from field: string patch = 6;\n */\n value: string;\n case: \"patch\";\n } | {\n /**\n * The custom pattern is used for specifying an HTTP method that is not\n * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n * HTTP method unspecified for this rule. The wild-card rule is useful\n * for services that provide content to Web (HTML) clients.\n *\n * @generated from field: google.api.CustomHttpPattern custom = 8;\n */\n value: CustomHttpPattern;\n case: \"custom\";\n } | { case: undefined; value?: undefined };\n\n /**\n * The name of the request field whose value is mapped to the HTTP request\n * body, or `*` for mapping all request fields not captured by the path\n * pattern to the HTTP body, or omitted for not having any HTTP request body.\n *\n * NOTE: the referred field must be present at the top-level of the request\n * message type.\n *\n * @generated from field: string body = 7;\n */\n body: string;\n\n /**\n * Optional. The name of the response field whose value is mapped to the HTTP\n * response body. When omitted, the entire response message will be used\n * as the HTTP response body.\n *\n * NOTE: The referred field must be present at the top-level of the response\n * message type.\n *\n * @generated from field: string response_body = 12;\n */\n responseBody: string;\n\n /**\n * Additional HTTP bindings for the selector. Nested bindings must\n * not contain an `additional_bindings` field themselves (that is,\n * the nesting may only be one level deep).\n *\n * @generated from field: repeated google.api.HttpRule additional_bindings = 11;\n */\n additionalBindings: HttpRule[];\n};\n\n/**\n * gRPC Transcoding\n *\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n *\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n *\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n *\n * Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/{name=messages/*}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * string name = 1; // Mapped to URL path.\n * }\n * message Message {\n * string text = 1; // The resource content.\n * }\n *\n * This enables an HTTP REST to gRPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n *\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get:\"/v1/messages/{message_id}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * message SubMessage {\n * string subfield = 1;\n * }\n * string message_id = 1; // Mapped to URL path.\n * int64 revision = 2; // Mapped to URL query parameter `revision`.\n * SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`.\n * }\n *\n * This enables a HTTP JSON to RPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n *\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n *\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *\n * service Messaging {\n * rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"message\"\n * };\n * }\n * }\n * message UpdateMessageRequest {\n * string message_id = 1; // mapped to the URL\n * Message message = 2; // mapped to the body\n * }\n *\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n *\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body. This enables the following alternative definition of\n * the update method:\n *\n * service Messaging {\n * rpc UpdateMessage(Message) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"*\"\n * };\n * }\n * }\n * message Message {\n * string message_id = 1;\n * string text = 2;\n * }\n *\n *\n * The following HTTP JSON to RPC mapping is enabled:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n *\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n *\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/messages/{message_id}\"\n * additional_bindings {\n * get: \"/v1/users/{user_id}/messages/{message_id}\"\n * }\n * };\n * }\n * }\n * message GetMessageRequest {\n * string message_id = 1;\n * string user_id = 2;\n * }\n *\n * This enables the following two alternative HTTP JSON to RPC mappings:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n *\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n *\n * Rules for HTTP mapping\n *\n * 1. Leaf request fields (recursive expansion nested messages in the request\n * message) are classified into three categories:\n * - Fields referred by the path template. They are passed via the URL path.\n * - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n * are passed via the HTTP\n * request body.\n * - All other fields are passed via the URL query parameters, and the\n * parameter name is the field path in the request message. A repeated\n * field can be represented as multiple query parameters under the same\n * name.\n * 2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n * query parameter, all fields\n * are passed via URL path and HTTP request body.\n * 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n * request body, all\n * fields are passed via URL path and URL query parameters.\n *\n * Path template syntax\n *\n * Template = \"/\" Segments [ Verb ] ;\n * Segments = Segment { \"/\" Segment } ;\n * Segment = \"*\" | \"**\" | LITERAL | Variable ;\n * Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n * FieldPath = IDENT { \".\" IDENT } ;\n * Verb = \":\" LITERAL ;\n *\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n *\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n *\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n *\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n *\n * If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n *\n * Using gRPC API Service Configuration\n *\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n *\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n *\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *\n * http:\n * rules:\n * - selector: example.v1.Messaging.GetMessage\n * get: /v1/messages/{message_id}/{sub.subfield}\n *\n * Special notes\n *\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n *\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n *\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n *\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n *\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n *\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * @generated from message google.api.HttpRule\n */\nexport type HttpRuleJson = {\n /**\n * Selects a method to which this rule applies.\n *\n * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n * details.\n *\n * @generated from field: string selector = 1;\n */\n selector?: string;\n\n /**\n * Maps to HTTP GET. Used for listing and getting information about\n * resources.\n *\n * @generated from field: string get = 2;\n */\n get?: string;\n\n /**\n * Maps to HTTP PUT. Used for replacing a resource.\n *\n * @generated from field: string put = 3;\n */\n put?: string;\n\n /**\n * Maps to HTTP POST. Used for creating a resource or performing an action.\n *\n * @generated from field: string post = 4;\n */\n post?: string;\n\n /**\n * Maps to HTTP DELETE. Used for deleting a resource.\n *\n * @generated from field: string delete = 5;\n */\n delete?: string;\n\n /**\n * Maps to HTTP PATCH. Used for updating a resource.\n *\n * @generated from field: string patch = 6;\n */\n patch?: string;\n\n /**\n * The custom pattern is used for specifying an HTTP method that is not\n * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n * HTTP method unspecified for this rule. The wild-card rule is useful\n * for services that provide content to Web (HTML) clients.\n *\n * @generated from field: google.api.CustomHttpPattern custom = 8;\n */\n custom?: CustomHttpPatternJson;\n\n /**\n * The name of the request field whose value is mapped to the HTTP request\n * body, or `*` for mapping all request fields not captured by the path\n * pattern to the HTTP body, or omitted for not having any HTTP request body.\n *\n * NOTE: the referred field must be present at the top-level of the request\n * message type.\n *\n * @generated from field: string body = 7;\n */\n body?: string;\n\n /**\n * Optional. The name of the response field whose value is mapped to the HTTP\n * response body. When omitted, the entire response message will be used\n * as the HTTP response body.\n *\n * NOTE: The referred field must be present at the top-level of the response\n * message type.\n *\n * @generated from field: string response_body = 12;\n */\n responseBody?: string;\n\n /**\n * Additional HTTP bindings for the selector. Nested bindings must\n * not contain an `additional_bindings` field themselves (that is,\n * the nesting may only be one level deep).\n *\n * @generated from field: repeated google.api.HttpRule additional_bindings = 11;\n */\n additionalBindings?: HttpRuleJson[];\n};\n\n/**\n * Describes the message google.api.HttpRule.\n * Use `create(HttpRuleSchema)` to create a new message.\n */\nexport const HttpRuleSchema: GenMessage<HttpRule, {jsonType: HttpRuleJson}> = /*@__PURE__*/\n messageDesc(file_google_api_http, 1);\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * @generated from message google.api.CustomHttpPattern\n */\nexport type CustomHttpPattern = Message<\"google.api.CustomHttpPattern\"> & {\n /**\n * The name of this custom HTTP verb.\n *\n * @generated from field: string kind = 1;\n */\n kind: string;\n\n /**\n * The path matched by this custom verb.\n *\n * @generated from field: string path = 2;\n */\n path: string;\n};\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * @generated from message google.api.CustomHttpPattern\n */\nexport type CustomHttpPatternJson = {\n /**\n * The name of this custom HTTP verb.\n *\n * @generated from field: string kind = 1;\n */\n kind?: string;\n\n /**\n * The path matched by this custom verb.\n *\n * @generated from field: string path = 2;\n */\n path?: string;\n};\n\n/**\n * Describes the message google.api.CustomHttpPattern.\n * Use `create(CustomHttpPatternSchema)` to create a new message.\n */\nexport const CustomHttpPatternSchema: GenMessage<CustomHttpPattern, {jsonType: CustomHttpPatternJson}> = /*@__PURE__*/\n messageDesc(file_google_api_http, 2);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/client.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { LaunchStage, LaunchStageJson } from \"./launch_stage_pb\";\nimport { file_google_api_launch_stage } from \"./launch_stage_pb\";\nimport type { Duration, DurationJson, MethodOptions, ServiceOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/client.proto.\n */\nexport const file_google_api_client: GenFile = /*@__PURE__*/\n fileDesc(\"Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+wMKFUNsaWVudExpYnJhcnlTZXR0aW5ncxIPCgd2ZXJzaW9uGAEgASgJEi0KDGxhdW5jaF9zdGFnZRgCIAEoDjIXLmdvb2dsZS5hcGkuTGF1bmNoU3RhZ2USGgoScmVzdF9udW1lcmljX2VudW1zGAMgASgIEi8KDWphdmFfc2V0dGluZ3MYFSABKAsyGC5nb29nbGUuYXBpLkphdmFTZXR0aW5ncxItCgxjcHBfc2V0dGluZ3MYFiABKAsyFy5nb29nbGUuYXBpLkNwcFNldHRpbmdzEi0KDHBocF9zZXR0aW5ncxgXIAEoCzIXLmdvb2dsZS5hcGkuUGhwU2V0dGluZ3MSMwoPcHl0aG9uX3NldHRpbmdzGBggASgLMhouZ29vZ2xlLmFwaS5QeXRob25TZXR0aW5ncxIvCg1ub2RlX3NldHRpbmdzGBkgASgLMhguZ29vZ2xlLmFwaS5Ob2RlU2V0dGluZ3MSMwoPZG90bmV0X3NldHRpbmdzGBogASgLMhouZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncxIvCg1ydWJ5X3NldHRpbmdzGBsgASgLMhguZ29vZ2xlLmFwaS5SdWJ5U2V0dGluZ3MSKwoLZ29fc2V0dGluZ3MYHCABKAsyFi5nb29nbGUuYXBpLkdvU2V0dGluZ3MiqAMKClB1Ymxpc2hpbmcSMwoPbWV0aG9kX3NldHRpbmdzGAIgAygLMhouZ29vZ2xlLmFwaS5NZXRob2RTZXR0aW5ncxIVCg1uZXdfaXNzdWVfdXJpGGUgASgJEhkKEWRvY3VtZW50YXRpb25fdXJpGGYgASgJEhYKDmFwaV9zaG9ydF9uYW1lGGcgASgJEhQKDGdpdGh1Yl9sYWJlbBhoIAEoCRIeChZjb2Rlb3duZXJfZ2l0aHViX3RlYW1zGGkgAygJEhYKDmRvY190YWdfcHJlZml4GGogASgJEjsKDG9yZ2FuaXphdGlvbhhrIAEoDjIlLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhI7ChBsaWJyYXJ5X3NldHRpbmdzGG0gAygLMiEuZ29vZ2xlLmFwaS5DbGllbnRMaWJyYXJ5U2V0dGluZ3MSKQohcHJvdG9fcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG4gASgJEigKIHJlc3RfcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG8gASgJIuMBCgxKYXZhU2V0dGluZ3MSFwoPbGlicmFyeV9wYWNrYWdlGAEgASgJEkwKE3NlcnZpY2VfY2xhc3NfbmFtZXMYAiADKAsyLy5nb29nbGUuYXBpLkphdmFTZXR0aW5ncy5TZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EjIKBmNvbW1vbhgDIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxo4ChZTZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQQoLQ3BwU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIkEKC1BocFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKbAgoOUHl0aG9uU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEk4KFWV4cGVyaW1lbnRhbF9mZWF0dXJlcxgCIAEoCzIvLmdvb2dsZS5hcGkuUHl0aG9uU2V0dGluZ3MuRXhwZXJpbWVudGFsRmVhdHVyZXMahAEKFEV4cGVyaW1lbnRhbEZlYXR1cmVzEh0KFXJlc3RfYXN5bmNfaW9fZW5hYmxlZBgBIAEoCBInCh9wcm90b2J1Zl9weXRob25pY190eXBlc19lbmFibGVkGAIgASgIEiQKHHVudmVyc2lvbmVkX3BhY2thZ2VfZGlzYWJsZWQYAyABKAgiQgoMTm9kZVNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKqAwoORG90bmV0U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEkkKEHJlbmFtZWRfc2VydmljZXMYAiADKAsyLy5nb29nbGUuYXBpLkRvdG5ldFNldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5EksKEXJlbmFtZWRfcmVzb3VyY2VzGAMgAygLMjAuZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncy5SZW5hbWVkUmVzb3VyY2VzRW50cnkSGQoRaWdub3JlZF9yZXNvdXJjZXMYBCADKAkSIAoYZm9yY2VkX25hbWVzcGFjZV9hbGlhc2VzGAUgAygJEh4KFmhhbmR3cml0dGVuX3NpZ25hdHVyZXMYBiADKAkaNgoUUmVuYW1lZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo3ChVSZW5hbWVkUmVzb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJCCgxSdWJ5U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIr8BCgpHb1NldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJFChByZW5hbWVkX3NlcnZpY2VzGAIgAygLMisuZ29vZ2xlLmFwaS5Hb1NldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5GjYKFFJlbmFtZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEizwIKDk1ldGhvZFNldHRpbmdzEhAKCHNlbGVjdG9yGAEgASgJEjwKDGxvbmdfcnVubmluZxgCIAEoCzImLmdvb2dsZS5hcGkuTWV0aG9kU2V0dGluZ3MuTG9uZ1J1bm5pbmcSHQoVYXV0b19wb3B1bGF0ZWRfZmllbGRzGAMgAygJGs0BCgtMb25nUnVubmluZxI1ChJpbml0aWFsX3BvbGxfZGVsYXkYASABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SHQoVcG9sbF9kZWxheV9tdWx0aXBsaWVyGAIgASgCEjEKDm1heF9wb2xsX2RlbGF5GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjUKEnRvdGFsX3BvbGxfdGltZW91dBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiJRChhTZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24SDwoHbWV0aG9kcxgBIAMoCRIkChxnZW5lcmF0ZV9vbWl0dGVkX2FzX2ludGVybmFsGAIgASgIKqMBChlDbGllbnRMaWJyYXJ5T3JnYW5pemF0aW9uEisKJ0NMSUVOVF9MSUJSQVJZX09SR0FOSVpBVElPTl9VTlNQRUNJRklFRBAAEgkKBUNMT1VEEAESBwoDQURTEAISCgoGUEhPVE9TEAMSDwoLU1RSRUVUX1ZJRVcQBBIMCghTSE9QUElORxAFEgcKA0dFTxAGEhEKDUdFTkVSQVRJVkVfQUkQBypnChhDbGllbnRMaWJyYXJ5RGVzdGluYXRpb24SKgomQ0xJRU5UX0xJQlJBUllfREVTVElOQVRJT05fVU5TUEVDSUZJRUQQABIKCgZHSVRIVUIQChITCg9QQUNLQUdFX01BTkFHRVIQFDpKChBtZXRob2Rfc2lnbmF0dXJlEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYmwggAygJUg9tZXRob2RTaWduYXR1cmU6QwoMZGVmYXVsdF9ob3N0Eh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJkIIAEoCVILZGVmYXVsdEhvc3Q6QwoMb2F1dGhfc2NvcGVzEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJoIIAEoCVILb2F1dGhTY29wZXM6RAoLYXBpX3ZlcnNpb24SHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYwbqr+gEgASgJUgphcGlWZXJzaW9uQmkKDmNvbS5nb29nbGUuYXBpQgtDbGllbnRQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMw\", [file_google_api_launch_stage, file_google_protobuf_descriptor, file_google_protobuf_duration]);\n\n/**\n * Required information for every language.\n *\n * @generated from message google.api.CommonLanguageSettings\n */\nexport type CommonLanguageSettings = Message<\"google.api.CommonLanguageSettings\"> & {\n /**\n * Link to automatically generated reference documentation. Example:\n * https://cloud.google.com/nodejs/docs/reference/asset/latest\n *\n * @generated from field: string reference_docs_uri = 1 [deprecated = true];\n * @deprecated\n */\n referenceDocsUri: string;\n\n /**\n * The destination where API teams want this client library to be published.\n *\n * @generated from field: repeated google.api.ClientLibraryDestination destinations = 2;\n */\n destinations: ClientLibraryDestination[];\n\n /**\n * Configuration for which RPCs should be generated in the GAPIC client.\n *\n * @generated from field: google.api.SelectiveGapicGeneration selective_gapic_generation = 3;\n */\n selectiveGapicGeneration?: SelectiveGapicGeneration;\n};\n\n/**\n * Required information for every language.\n *\n * @generated from message google.api.CommonLanguageSettings\n */\nexport type CommonLanguageSettingsJson = {\n /**\n * Link to automatically generated reference documentation. Example:\n * https://cloud.google.com/nodejs/docs/reference/asset/latest\n *\n * @generated from field: string reference_docs_uri = 1 [deprecated = true];\n * @deprecated\n */\n referenceDocsUri?: string;\n\n /**\n * The destination where API teams want this client library to be published.\n *\n * @generated from field: repeated google.api.ClientLibraryDestination destinations = 2;\n */\n destinations?: ClientLibraryDestinationJson[];\n\n /**\n * Configuration for which RPCs should be generated in the GAPIC client.\n *\n * @generated from field: google.api.SelectiveGapicGeneration selective_gapic_generation = 3;\n */\n selectiveGapicGeneration?: SelectiveGapicGenerationJson;\n};\n\n/**\n * Describes the message google.api.CommonLanguageSettings.\n * Use `create(CommonLanguageSettingsSchema)` to create a new message.\n */\nexport const CommonLanguageSettingsSchema: GenMessage<CommonLanguageSettings, {jsonType: CommonLanguageSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 0);\n\n/**\n * Details about how and where to publish client libraries.\n *\n * @generated from message google.api.ClientLibrarySettings\n */\nexport type ClientLibrarySettings = Message<\"google.api.ClientLibrarySettings\"> & {\n /**\n * Version of the API to apply these settings to. This is the full protobuf\n * package for the API, ending in the version element.\n * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n *\n * @generated from field: string version = 1;\n */\n version: string;\n\n /**\n * Launch stage of this version of the API.\n *\n * @generated from field: google.api.LaunchStage launch_stage = 2;\n */\n launchStage: LaunchStage;\n\n /**\n * When using transport=rest, the client request will encode enums as\n * numbers rather than strings.\n *\n * @generated from field: bool rest_numeric_enums = 3;\n */\n restNumericEnums: boolean;\n\n /**\n * Settings for legacy Java features, supported in the Service YAML.\n *\n * @generated from field: google.api.JavaSettings java_settings = 21;\n */\n javaSettings?: JavaSettings;\n\n /**\n * Settings for C++ client libraries.\n *\n * @generated from field: google.api.CppSettings cpp_settings = 22;\n */\n cppSettings?: CppSettings;\n\n /**\n * Settings for PHP client libraries.\n *\n * @generated from field: google.api.PhpSettings php_settings = 23;\n */\n phpSettings?: PhpSettings;\n\n /**\n * Settings for Python client libraries.\n *\n * @generated from field: google.api.PythonSettings python_settings = 24;\n */\n pythonSettings?: PythonSettings;\n\n /**\n * Settings for Node client libraries.\n *\n * @generated from field: google.api.NodeSettings node_settings = 25;\n */\n nodeSettings?: NodeSettings;\n\n /**\n * Settings for .NET client libraries.\n *\n * @generated from field: google.api.DotnetSettings dotnet_settings = 26;\n */\n dotnetSettings?: DotnetSettings;\n\n /**\n * Settings for Ruby client libraries.\n *\n * @generated from field: google.api.RubySettings ruby_settings = 27;\n */\n rubySettings?: RubySettings;\n\n /**\n * Settings for Go client libraries.\n *\n * @generated from field: google.api.GoSettings go_settings = 28;\n */\n goSettings?: GoSettings;\n};\n\n/**\n * Details about how and where to publish client libraries.\n *\n * @generated from message google.api.ClientLibrarySettings\n */\nexport type ClientLibrarySettingsJson = {\n /**\n * Version of the API to apply these settings to. This is the full protobuf\n * package for the API, ending in the version element.\n * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n *\n * @generated from field: string version = 1;\n */\n version?: string;\n\n /**\n * Launch stage of this version of the API.\n *\n * @generated from field: google.api.LaunchStage launch_stage = 2;\n */\n launchStage?: LaunchStageJson;\n\n /**\n * When using transport=rest, the client request will encode enums as\n * numbers rather than strings.\n *\n * @generated from field: bool rest_numeric_enums = 3;\n */\n restNumericEnums?: boolean;\n\n /**\n * Settings for legacy Java features, supported in the Service YAML.\n *\n * @generated from field: google.api.JavaSettings java_settings = 21;\n */\n javaSettings?: JavaSettingsJson;\n\n /**\n * Settings for C++ client libraries.\n *\n * @generated from field: google.api.CppSettings cpp_settings = 22;\n */\n cppSettings?: CppSettingsJson;\n\n /**\n * Settings for PHP client libraries.\n *\n * @generated from field: google.api.PhpSettings php_settings = 23;\n */\n phpSettings?: PhpSettingsJson;\n\n /**\n * Settings for Python client libraries.\n *\n * @generated from field: google.api.PythonSettings python_settings = 24;\n */\n pythonSettings?: PythonSettingsJson;\n\n /**\n * Settings for Node client libraries.\n *\n * @generated from field: google.api.NodeSettings node_settings = 25;\n */\n nodeSettings?: NodeSettingsJson;\n\n /**\n * Settings for .NET client libraries.\n *\n * @generated from field: google.api.DotnetSettings dotnet_settings = 26;\n */\n dotnetSettings?: DotnetSettingsJson;\n\n /**\n * Settings for Ruby client libraries.\n *\n * @generated from field: google.api.RubySettings ruby_settings = 27;\n */\n rubySettings?: RubySettingsJson;\n\n /**\n * Settings for Go client libraries.\n *\n * @generated from field: google.api.GoSettings go_settings = 28;\n */\n goSettings?: GoSettingsJson;\n};\n\n/**\n * Describes the message google.api.ClientLibrarySettings.\n * Use `create(ClientLibrarySettingsSchema)` to create a new message.\n */\nexport const ClientLibrarySettingsSchema: GenMessage<ClientLibrarySettings, {jsonType: ClientLibrarySettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 1);\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * @generated from message google.api.Publishing\n */\nexport type Publishing = Message<\"google.api.Publishing\"> & {\n /**\n * A list of API method settings, e.g. the behavior for methods that use the\n * long-running operation pattern.\n *\n * @generated from field: repeated google.api.MethodSettings method_settings = 2;\n */\n methodSettings: MethodSettings[];\n\n /**\n * Link to a *public* URI where users can report issues. Example:\n * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n *\n * @generated from field: string new_issue_uri = 101;\n */\n newIssueUri: string;\n\n /**\n * Link to product home page. Example:\n * https://cloud.google.com/asset-inventory/docs/overview\n *\n * @generated from field: string documentation_uri = 102;\n */\n documentationUri: string;\n\n /**\n * Used as a tracking tag when collecting data about the APIs developer\n * relations artifacts like docs, packages delivered to package managers,\n * etc. Example: \"speech\".\n *\n * @generated from field: string api_short_name = 103;\n */\n apiShortName: string;\n\n /**\n * GitHub label to apply to issues and pull requests opened for this API.\n *\n * @generated from field: string github_label = 104;\n */\n githubLabel: string;\n\n /**\n * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n * containing source code for the client libraries for this API.\n *\n * @generated from field: repeated string codeowner_github_teams = 105;\n */\n codeownerGithubTeams: string[];\n\n /**\n * A prefix used in sample code when demarking regions to be included in\n * documentation.\n *\n * @generated from field: string doc_tag_prefix = 106;\n */\n docTagPrefix: string;\n\n /**\n * For whom the client library is being published.\n *\n * @generated from field: google.api.ClientLibraryOrganization organization = 107;\n */\n organization: ClientLibraryOrganization;\n\n /**\n * Client library settings. If the same version string appears multiple\n * times in this list, then the last one wins. Settings from earlier\n * settings with the same version string are discarded.\n *\n * @generated from field: repeated google.api.ClientLibrarySettings library_settings = 109;\n */\n librarySettings: ClientLibrarySettings[];\n\n /**\n * Optional link to proto reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n *\n * @generated from field: string proto_reference_documentation_uri = 110;\n */\n protoReferenceDocumentationUri: string;\n\n /**\n * Optional link to REST reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rest\n *\n * @generated from field: string rest_reference_documentation_uri = 111;\n */\n restReferenceDocumentationUri: string;\n};\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * @generated from message google.api.Publishing\n */\nexport type PublishingJson = {\n /**\n * A list of API method settings, e.g. the behavior for methods that use the\n * long-running operation pattern.\n *\n * @generated from field: repeated google.api.MethodSettings method_settings = 2;\n */\n methodSettings?: MethodSettingsJson[];\n\n /**\n * Link to a *public* URI where users can report issues. Example:\n * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n *\n * @generated from field: string new_issue_uri = 101;\n */\n newIssueUri?: string;\n\n /**\n * Link to product home page. Example:\n * https://cloud.google.com/asset-inventory/docs/overview\n *\n * @generated from field: string documentation_uri = 102;\n */\n documentationUri?: string;\n\n /**\n * Used as a tracking tag when collecting data about the APIs developer\n * relations artifacts like docs, packages delivered to package managers,\n * etc. Example: \"speech\".\n *\n * @generated from field: string api_short_name = 103;\n */\n apiShortName?: string;\n\n /**\n * GitHub label to apply to issues and pull requests opened for this API.\n *\n * @generated from field: string github_label = 104;\n */\n githubLabel?: string;\n\n /**\n * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n * containing source code for the client libraries for this API.\n *\n * @generated from field: repeated string codeowner_github_teams = 105;\n */\n codeownerGithubTeams?: string[];\n\n /**\n * A prefix used in sample code when demarking regions to be included in\n * documentation.\n *\n * @generated from field: string doc_tag_prefix = 106;\n */\n docTagPrefix?: string;\n\n /**\n * For whom the client library is being published.\n *\n * @generated from field: google.api.ClientLibraryOrganization organization = 107;\n */\n organization?: ClientLibraryOrganizationJson;\n\n /**\n * Client library settings. If the same version string appears multiple\n * times in this list, then the last one wins. Settings from earlier\n * settings with the same version string are discarded.\n *\n * @generated from field: repeated google.api.ClientLibrarySettings library_settings = 109;\n */\n librarySettings?: ClientLibrarySettingsJson[];\n\n /**\n * Optional link to proto reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n *\n * @generated from field: string proto_reference_documentation_uri = 110;\n */\n protoReferenceDocumentationUri?: string;\n\n /**\n * Optional link to REST reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rest\n *\n * @generated from field: string rest_reference_documentation_uri = 111;\n */\n restReferenceDocumentationUri?: string;\n};\n\n/**\n * Describes the message google.api.Publishing.\n * Use `create(PublishingSchema)` to create a new message.\n */\nexport const PublishingSchema: GenMessage<Publishing, {jsonType: PublishingJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 2);\n\n/**\n * Settings for Java client libraries.\n *\n * @generated from message google.api.JavaSettings\n */\nexport type JavaSettings = Message<\"google.api.JavaSettings\"> & {\n /**\n * The package name to use in Java. Clobbers the java_package option\n * set in the protobuf. This should be used **only** by APIs\n * who have already set the language_settings.java.package_name\" field\n * in gapic.yaml. API teams should use the protobuf java_package option\n * where possible.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * library_package: com.google.cloud.pubsub.v1\n *\n * @generated from field: string library_package = 1;\n */\n libraryPackage: string;\n\n /**\n * Configure the Java class name to use instead of the service's for its\n * corresponding generated GAPIC client. Keys are fully-qualified\n * service names as they appear in the protobuf (including the full\n * the language_settings.java.interface_names\" field in gapic.yaml. API\n * teams should otherwise use the service name as it appears in the\n * protobuf.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * service_class_names:\n * - google.pubsub.v1.Publisher: TopicAdmin\n * - google.pubsub.v1.Subscriber: SubscriptionAdmin\n *\n * @generated from field: map<string, string> service_class_names = 2;\n */\n serviceClassNames: { [key: string]: string };\n\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 3;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Java client libraries.\n *\n * @generated from message google.api.JavaSettings\n */\nexport type JavaSettingsJson = {\n /**\n * The package name to use in Java. Clobbers the java_package option\n * set in the protobuf. This should be used **only** by APIs\n * who have already set the language_settings.java.package_name\" field\n * in gapic.yaml. API teams should use the protobuf java_package option\n * where possible.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * library_package: com.google.cloud.pubsub.v1\n *\n * @generated from field: string library_package = 1;\n */\n libraryPackage?: string;\n\n /**\n * Configure the Java class name to use instead of the service's for its\n * corresponding generated GAPIC client. Keys are fully-qualified\n * service names as they appear in the protobuf (including the full\n * the language_settings.java.interface_names\" field in gapic.yaml. API\n * teams should otherwise use the service name as it appears in the\n * protobuf.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * service_class_names:\n * - google.pubsub.v1.Publisher: TopicAdmin\n * - google.pubsub.v1.Subscriber: SubscriptionAdmin\n *\n * @generated from field: map<string, string> service_class_names = 2;\n */\n serviceClassNames?: { [key: string]: string };\n\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 3;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.JavaSettings.\n * Use `create(JavaSettingsSchema)` to create a new message.\n */\nexport const JavaSettingsSchema: GenMessage<JavaSettings, {jsonType: JavaSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 3);\n\n/**\n * Settings for C++ client libraries.\n *\n * @generated from message google.api.CppSettings\n */\nexport type CppSettings = Message<\"google.api.CppSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for C++ client libraries.\n *\n * @generated from message google.api.CppSettings\n */\nexport type CppSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.CppSettings.\n * Use `create(CppSettingsSchema)` to create a new message.\n */\nexport const CppSettingsSchema: GenMessage<CppSettings, {jsonType: CppSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 4);\n\n/**\n * Settings for Php client libraries.\n *\n * @generated from message google.api.PhpSettings\n */\nexport type PhpSettings = Message<\"google.api.PhpSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Php client libraries.\n *\n * @generated from message google.api.PhpSettings\n */\nexport type PhpSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.PhpSettings.\n * Use `create(PhpSettingsSchema)` to create a new message.\n */\nexport const PhpSettingsSchema: GenMessage<PhpSettings, {jsonType: PhpSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 5);\n\n/**\n * Settings for Python client libraries.\n *\n * @generated from message google.api.PythonSettings\n */\nexport type PythonSettings = Message<\"google.api.PythonSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Experimental features to be included during client library generation.\n *\n * @generated from field: google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;\n */\n experimentalFeatures?: PythonSettings_ExperimentalFeatures;\n};\n\n/**\n * Settings for Python client libraries.\n *\n * @generated from message google.api.PythonSettings\n */\nexport type PythonSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n\n /**\n * Experimental features to be included during client library generation.\n *\n * @generated from field: google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;\n */\n experimentalFeatures?: PythonSettings_ExperimentalFeaturesJson;\n};\n\n/**\n * Describes the message google.api.PythonSettings.\n * Use `create(PythonSettingsSchema)` to create a new message.\n */\nexport const PythonSettingsSchema: GenMessage<PythonSettings, {jsonType: PythonSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 6);\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * @generated from message google.api.PythonSettings.ExperimentalFeatures\n */\nexport type PythonSettings_ExperimentalFeatures = Message<\"google.api.PythonSettings.ExperimentalFeatures\"> & {\n /**\n * Enables generation of asynchronous REST clients if `rest` transport is\n * enabled. By default, asynchronous REST clients will not be generated.\n * This feature will be enabled by default 1 month after launching the\n * feature in preview packages.\n *\n * @generated from field: bool rest_async_io_enabled = 1;\n */\n restAsyncIoEnabled: boolean;\n\n /**\n * Enables generation of protobuf code using new types that are more\n * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n * enabled by default 1 month after launching the feature in preview\n * packages.\n *\n * @generated from field: bool protobuf_pythonic_types_enabled = 2;\n */\n protobufPythonicTypesEnabled: boolean;\n\n /**\n * Disables generation of an unversioned Python package for this client\n * library. This means that the module names will need to be versioned in\n * import statements. For example `import google.cloud.library_v2` instead\n * of `import google.cloud.library`.\n *\n * @generated from field: bool unversioned_package_disabled = 3;\n */\n unversionedPackageDisabled: boolean;\n};\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * @generated from message google.api.PythonSettings.ExperimentalFeatures\n */\nexport type PythonSettings_ExperimentalFeaturesJson = {\n /**\n * Enables generation of asynchronous REST clients if `rest` transport is\n * enabled. By default, asynchronous REST clients will not be generated.\n * This feature will be enabled by default 1 month after launching the\n * feature in preview packages.\n *\n * @generated from field: bool rest_async_io_enabled = 1;\n */\n restAsyncIoEnabled?: boolean;\n\n /**\n * Enables generation of protobuf code using new types that are more\n * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n * enabled by default 1 month after launching the feature in preview\n * packages.\n *\n * @generated from field: bool protobuf_pythonic_types_enabled = 2;\n */\n protobufPythonicTypesEnabled?: boolean;\n\n /**\n * Disables generation of an unversioned Python package for this client\n * library. This means that the module names will need to be versioned in\n * import statements. For example `import google.cloud.library_v2` instead\n * of `import google.cloud.library`.\n *\n * @generated from field: bool unversioned_package_disabled = 3;\n */\n unversionedPackageDisabled?: boolean;\n};\n\n/**\n * Describes the message google.api.PythonSettings.ExperimentalFeatures.\n * Use `create(PythonSettings_ExperimentalFeaturesSchema)` to create a new message.\n */\nexport const PythonSettings_ExperimentalFeaturesSchema: GenMessage<PythonSettings_ExperimentalFeatures, {jsonType: PythonSettings_ExperimentalFeaturesJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 6, 0);\n\n/**\n * Settings for Node client libraries.\n *\n * @generated from message google.api.NodeSettings\n */\nexport type NodeSettings = Message<\"google.api.NodeSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Node client libraries.\n *\n * @generated from message google.api.NodeSettings\n */\nexport type NodeSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.NodeSettings.\n * Use `create(NodeSettingsSchema)` to create a new message.\n */\nexport const NodeSettingsSchema: GenMessage<NodeSettings, {jsonType: NodeSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 7);\n\n/**\n * Settings for Dotnet client libraries.\n *\n * @generated from message google.api.DotnetSettings\n */\nexport type DotnetSettings = Message<\"google.api.DotnetSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Map from original service names to renamed versions.\n * This is used when the default generated types\n * would cause a naming conflict. (Neither name is\n * fully-qualified.)\n * Example: Subscriber to SubscriberServiceApi.\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices: { [key: string]: string };\n\n /**\n * Map from full resource types to the effective short name\n * for the resource. This is used when otherwise resource\n * named from different services would cause naming collisions.\n * Example entry:\n * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n *\n * @generated from field: map<string, string> renamed_resources = 3;\n */\n renamedResources: { [key: string]: string };\n\n /**\n * List of full resource types to ignore during generation.\n * This is typically used for API-specific Location resources,\n * which should be handled by the generator as if they were actually\n * the common Location resources.\n * Example entry: \"documentai.googleapis.com/Location\"\n *\n * @generated from field: repeated string ignored_resources = 4;\n */\n ignoredResources: string[];\n\n /**\n * Namespaces which must be aliased in snippets due to\n * a known (but non-generator-predictable) naming collision\n *\n * @generated from field: repeated string forced_namespace_aliases = 5;\n */\n forcedNamespaceAliases: string[];\n\n /**\n * Method signatures (in the form \"service.method(signature)\")\n * which are provided separately, so shouldn't be generated.\n * Snippets *calling* these methods are still generated, however.\n *\n * @generated from field: repeated string handwritten_signatures = 6;\n */\n handwrittenSignatures: string[];\n};\n\n/**\n * Settings for Dotnet client libraries.\n *\n * @generated from message google.api.DotnetSettings\n */\nexport type DotnetSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n\n /**\n * Map from original service names to renamed versions.\n * This is used when the default generated types\n * would cause a naming conflict. (Neither name is\n * fully-qualified.)\n * Example: Subscriber to SubscriberServiceApi.\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices?: { [key: string]: string };\n\n /**\n * Map from full resource types to the effective short name\n * for the resource. This is used when otherwise resource\n * named from different services would cause naming collisions.\n * Example entry:\n * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n *\n * @generated from field: map<string, string> renamed_resources = 3;\n */\n renamedResources?: { [key: string]: string };\n\n /**\n * List of full resource types to ignore during generation.\n * This is typically used for API-specific Location resources,\n * which should be handled by the generator as if they were actually\n * the common Location resources.\n * Example entry: \"documentai.googleapis.com/Location\"\n *\n * @generated from field: repeated string ignored_resources = 4;\n */\n ignoredResources?: string[];\n\n /**\n * Namespaces which must be aliased in snippets due to\n * a known (but non-generator-predictable) naming collision\n *\n * @generated from field: repeated string forced_namespace_aliases = 5;\n */\n forcedNamespaceAliases?: string[];\n\n /**\n * Method signatures (in the form \"service.method(signature)\")\n * which are provided separately, so shouldn't be generated.\n * Snippets *calling* these methods are still generated, however.\n *\n * @generated from field: repeated string handwritten_signatures = 6;\n */\n handwrittenSignatures?: string[];\n};\n\n/**\n * Describes the message google.api.DotnetSettings.\n * Use `create(DotnetSettingsSchema)` to create a new message.\n */\nexport const DotnetSettingsSchema: GenMessage<DotnetSettings, {jsonType: DotnetSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 8);\n\n/**\n * Settings for Ruby client libraries.\n *\n * @generated from message google.api.RubySettings\n */\nexport type RubySettings = Message<\"google.api.RubySettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Ruby client libraries.\n *\n * @generated from message google.api.RubySettings\n */\nexport type RubySettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.RubySettings.\n * Use `create(RubySettingsSchema)` to create a new message.\n */\nexport const RubySettingsSchema: GenMessage<RubySettings, {jsonType: RubySettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 9);\n\n/**\n * Settings for Go client libraries.\n *\n * @generated from message google.api.GoSettings\n */\nexport type GoSettings = Message<\"google.api.GoSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Map of service names to renamed services. Keys are the package relative\n * service names and values are the name to be used for the service client\n * and call options.\n *\n * publishing:\n * go_settings:\n * renamed_services:\n * Publisher: TopicAdmin\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices: { [key: string]: string };\n};\n\n/**\n * Settings for Go client libraries.\n *\n * @generated from message google.api.GoSettings\n */\nexport type GoSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n\n /**\n * Map of service names to renamed services. Keys are the package relative\n * service names and values are the name to be used for the service client\n * and call options.\n *\n * publishing:\n * go_settings:\n * renamed_services:\n * Publisher: TopicAdmin\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices?: { [key: string]: string };\n};\n\n/**\n * Describes the message google.api.GoSettings.\n * Use `create(GoSettingsSchema)` to create a new message.\n */\nexport const GoSettingsSchema: GenMessage<GoSettings, {jsonType: GoSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 10);\n\n/**\n * Describes the generator configuration for a method.\n *\n * @generated from message google.api.MethodSettings\n */\nexport type MethodSettings = Message<\"google.api.MethodSettings\"> & {\n /**\n * The fully qualified name of the method, for which the options below apply.\n * This is used to find the method to apply the options.\n *\n * Example:\n *\n * publishing:\n * method_settings:\n * - selector: google.storage.control.v2.StorageControl.CreateFolder\n * # method settings for CreateFolder...\n *\n * @generated from field: string selector = 1;\n */\n selector: string;\n\n /**\n * Describes settings to use for long-running operations when generating\n * API methods for RPCs. Complements RPCs that use the annotations in\n * google/longrunning/operations.proto.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * method_settings:\n * - selector: google.cloud.speech.v2.Speech.BatchRecognize\n * long_running:\n * initial_poll_delay: 60s # 1 minute\n * poll_delay_multiplier: 1.5\n * max_poll_delay: 360s # 6 minutes\n * total_poll_timeout: 54000s # 90 minutes\n *\n * @generated from field: google.api.MethodSettings.LongRunning long_running = 2;\n */\n longRunning?: MethodSettings_LongRunning;\n\n /**\n * List of top-level fields of the request message, that should be\n * automatically populated by the client libraries based on their\n * (google.api.field_info).format. Currently supported format: UUID4.\n *\n * Example of a YAML configuration:\n *\n * publishing:\n * method_settings:\n * - selector: google.example.v1.ExampleService.CreateExample\n * auto_populated_fields:\n * - request_id\n *\n * @generated from field: repeated string auto_populated_fields = 3;\n */\n autoPopulatedFields: string[];\n};\n\n/**\n * Describes the generator configuration for a method.\n *\n * @generated from message google.api.MethodSettings\n */\nexport type MethodSettingsJson = {\n /**\n * The fully qualified name of the method, for which the options below apply.\n * This is used to find the method to apply the options.\n *\n * Example:\n *\n * publishing:\n * method_settings:\n * - selector: google.storage.control.v2.StorageControl.CreateFolder\n * # method settings for CreateFolder...\n *\n * @generated from field: string selector = 1;\n */\n selector?: string;\n\n /**\n * Describes settings to use for long-running operations when generating\n * API methods for RPCs. Complements RPCs that use the annotations in\n * google/longrunning/operations.proto.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * method_settings:\n * - selector: google.cloud.speech.v2.Speech.BatchRecognize\n * long_running:\n * initial_poll_delay: 60s # 1 minute\n * poll_delay_multiplier: 1.5\n * max_poll_delay: 360s # 6 minutes\n * total_poll_timeout: 54000s # 90 minutes\n *\n * @generated from field: google.api.MethodSettings.LongRunning long_running = 2;\n */\n longRunning?: MethodSettings_LongRunningJson;\n\n /**\n * List of top-level fields of the request message, that should be\n * automatically populated by the client libraries based on their\n * (google.api.field_info).format. Currently supported format: UUID4.\n *\n * Example of a YAML configuration:\n *\n * publishing:\n * method_settings:\n * - selector: google.example.v1.ExampleService.CreateExample\n * auto_populated_fields:\n * - request_id\n *\n * @generated from field: repeated string auto_populated_fields = 3;\n */\n autoPopulatedFields?: string[];\n};\n\n/**\n * Describes the message google.api.MethodSettings.\n * Use `create(MethodSettingsSchema)` to create a new message.\n */\nexport const MethodSettingsSchema: GenMessage<MethodSettings, {jsonType: MethodSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 11);\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * @generated from message google.api.MethodSettings.LongRunning\n */\nexport type MethodSettings_LongRunning = Message<\"google.api.MethodSettings.LongRunning\"> & {\n /**\n * Initial delay after which the first poll request will be made.\n * Default value: 5 seconds.\n *\n * @generated from field: google.protobuf.Duration initial_poll_delay = 1;\n */\n initialPollDelay?: Duration;\n\n /**\n * Multiplier to gradually increase delay between subsequent polls until it\n * reaches max_poll_delay.\n * Default value: 1.5.\n *\n * @generated from field: float poll_delay_multiplier = 2;\n */\n pollDelayMultiplier: number;\n\n /**\n * Maximum time between two subsequent poll requests.\n * Default value: 45 seconds.\n *\n * @generated from field: google.protobuf.Duration max_poll_delay = 3;\n */\n maxPollDelay?: Duration;\n\n /**\n * Total polling timeout.\n * Default value: 5 minutes.\n *\n * @generated from field: google.protobuf.Duration total_poll_timeout = 4;\n */\n totalPollTimeout?: Duration;\n};\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * @generated from message google.api.MethodSettings.LongRunning\n */\nexport type MethodSettings_LongRunningJson = {\n /**\n * Initial delay after which the first poll request will be made.\n * Default value: 5 seconds.\n *\n * @generated from field: google.protobuf.Duration initial_poll_delay = 1;\n */\n initialPollDelay?: DurationJson;\n\n /**\n * Multiplier to gradually increase delay between subsequent polls until it\n * reaches max_poll_delay.\n * Default value: 1.5.\n *\n * @generated from field: float poll_delay_multiplier = 2;\n */\n pollDelayMultiplier?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * Maximum time between two subsequent poll requests.\n * Default value: 45 seconds.\n *\n * @generated from field: google.protobuf.Duration max_poll_delay = 3;\n */\n maxPollDelay?: DurationJson;\n\n /**\n * Total polling timeout.\n * Default value: 5 minutes.\n *\n * @generated from field: google.protobuf.Duration total_poll_timeout = 4;\n */\n totalPollTimeout?: DurationJson;\n};\n\n/**\n * Describes the message google.api.MethodSettings.LongRunning.\n * Use `create(MethodSettings_LongRunningSchema)` to create a new message.\n */\nexport const MethodSettings_LongRunningSchema: GenMessage<MethodSettings_LongRunning, {jsonType: MethodSettings_LongRunningJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 11, 0);\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * @generated from message google.api.SelectiveGapicGeneration\n */\nexport type SelectiveGapicGeneration = Message<\"google.api.SelectiveGapicGeneration\"> & {\n /**\n * An allowlist of the fully qualified names of RPCs that should be included\n * on public client surfaces.\n *\n * @generated from field: repeated string methods = 1;\n */\n methods: string[];\n\n /**\n * Setting this to true indicates to the client generators that methods\n * that would be excluded from the generation should instead be generated\n * in a way that indicates these methods should not be consumed by\n * end users. How this is expressed is up to individual language\n * implementations to decide. Some examples may be: added annotations,\n * obfuscated identifiers, or other language idiomatic patterns.\n *\n * @generated from field: bool generate_omitted_as_internal = 2;\n */\n generateOmittedAsInternal: boolean;\n};\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * @generated from message google.api.SelectiveGapicGeneration\n */\nexport type SelectiveGapicGenerationJson = {\n /**\n * An allowlist of the fully qualified names of RPCs that should be included\n * on public client surfaces.\n *\n * @generated from field: repeated string methods = 1;\n */\n methods?: string[];\n\n /**\n * Setting this to true indicates to the client generators that methods\n * that would be excluded from the generation should instead be generated\n * in a way that indicates these methods should not be consumed by\n * end users. How this is expressed is up to individual language\n * implementations to decide. Some examples may be: added annotations,\n * obfuscated identifiers, or other language idiomatic patterns.\n *\n * @generated from field: bool generate_omitted_as_internal = 2;\n */\n generateOmittedAsInternal?: boolean;\n};\n\n/**\n * Describes the message google.api.SelectiveGapicGeneration.\n * Use `create(SelectiveGapicGenerationSchema)` to create a new message.\n */\nexport const SelectiveGapicGenerationSchema: GenMessage<SelectiveGapicGeneration, {jsonType: SelectiveGapicGenerationJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 12);\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * @generated from enum google.api.ClientLibraryOrganization\n */\nexport enum ClientLibraryOrganization {\n /**\n * Not useful.\n *\n * @generated from enum value: CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0;\n */\n CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0,\n\n /**\n * Google Cloud Platform Org.\n *\n * @generated from enum value: CLOUD = 1;\n */\n CLOUD = 1,\n\n /**\n * Ads (Advertising) Org.\n *\n * @generated from enum value: ADS = 2;\n */\n ADS = 2,\n\n /**\n * Photos Org.\n *\n * @generated from enum value: PHOTOS = 3;\n */\n PHOTOS = 3,\n\n /**\n * Street View Org.\n *\n * @generated from enum value: STREET_VIEW = 4;\n */\n STREET_VIEW = 4,\n\n /**\n * Shopping Org.\n *\n * @generated from enum value: SHOPPING = 5;\n */\n SHOPPING = 5,\n\n /**\n * Geo Org.\n *\n * @generated from enum value: GEO = 6;\n */\n GEO = 6,\n\n /**\n * Generative AI - https://developers.generativeai.google\n *\n * @generated from enum value: GENERATIVE_AI = 7;\n */\n GENERATIVE_AI = 7,\n}\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * @generated from enum google.api.ClientLibraryOrganization\n */\nexport type ClientLibraryOrganizationJson = \"CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED\" | \"CLOUD\" | \"ADS\" | \"PHOTOS\" | \"STREET_VIEW\" | \"SHOPPING\" | \"GEO\" | \"GENERATIVE_AI\";\n\n/**\n * Describes the enum google.api.ClientLibraryOrganization.\n */\nexport const ClientLibraryOrganizationSchema: GenEnum<ClientLibraryOrganization, ClientLibraryOrganizationJson> = /*@__PURE__*/\n enumDesc(file_google_api_client, 0);\n\n/**\n * To where should client libraries be published?\n *\n * @generated from enum google.api.ClientLibraryDestination\n */\nexport enum ClientLibraryDestination {\n /**\n * Client libraries will neither be generated nor published to package\n * managers.\n *\n * @generated from enum value: CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0;\n */\n CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0,\n\n /**\n * Generate the client library in a repo under github.com/googleapis,\n * but don't publish it to package managers.\n *\n * @generated from enum value: GITHUB = 10;\n */\n GITHUB = 10,\n\n /**\n * Publish the library to package managers like nuget.org and npmjs.com.\n *\n * @generated from enum value: PACKAGE_MANAGER = 20;\n */\n PACKAGE_MANAGER = 20,\n}\n\n/**\n * To where should client libraries be published?\n *\n * @generated from enum google.api.ClientLibraryDestination\n */\nexport type ClientLibraryDestinationJson = \"CLIENT_LIBRARY_DESTINATION_UNSPECIFIED\" | \"GITHUB\" | \"PACKAGE_MANAGER\";\n\n/**\n * Describes the enum google.api.ClientLibraryDestination.\n */\nexport const ClientLibraryDestinationSchema: GenEnum<ClientLibraryDestination, ClientLibraryDestinationJson> = /*@__PURE__*/\n enumDesc(file_google_api_client, 1);\n\n/**\n * A definition of a client library method signature.\n *\n * In client libraries, each proto RPC corresponds to one or more methods\n * which the end user is able to call, and calls the underlying RPC.\n * Normally, this method receives a single argument (a struct or instance\n * corresponding to the RPC request object). Defining this field will\n * add one or more overloads providing flattened or simpler method signatures\n * in some languages.\n *\n * The fields on the method signature are provided as a comma-separated\n * string.\n *\n * For example, the proto RPC and annotation:\n *\n * rpc CreateSubscription(CreateSubscriptionRequest)\n * returns (Subscription) {\n * option (google.api.method_signature) = \"name,topic\";\n * }\n *\n * Would add the following Java overload (in addition to the method accepting\n * the request object):\n *\n * public final Subscription createSubscription(String name, String topic)\n *\n * The following backwards-compatibility guidelines apply:\n *\n * * Adding this annotation to an unannotated method is backwards\n * compatible.\n * * Adding this annotation to a method which already has existing\n * method signature annotations is backwards compatible if and only if\n * the new method signature annotation is last in the sequence.\n * * Modifying or removing an existing method signature annotation is\n * a breaking change.\n * * Re-ordering existing method signature annotations is a breaking\n * change.\n *\n * @generated from extension: repeated string method_signature = 1051;\n */\nexport const method_signature: GenExtension<MethodOptions, string[]> = /*@__PURE__*/\n extDesc(file_google_api_client, 0);\n\n/**\n * The hostname for this service.\n * This should be specified with no prefix or protocol.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.default_host) = \"foo.googleapi.com\";\n * ...\n * }\n *\n * @generated from extension: string default_host = 1049;\n */\nexport const default_host: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 1);\n\n/**\n * OAuth scopes needed for the client.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.oauth_scopes) = \\\n * \"https://www.googleapis.com/auth/cloud-platform\";\n * ...\n * }\n *\n * If there is more than one scope, use a comma-separated string:\n *\n * Example:\n *\n * service Foo {\n * option (google.api.oauth_scopes) = \\\n * \"https://www.googleapis.com/auth/cloud-platform,\"\n * \"https://www.googleapis.com/auth/monitoring\";\n * ...\n * }\n *\n * @generated from extension: string oauth_scopes = 1050;\n */\nexport const oauth_scopes: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 2);\n\n/**\n * The API version of this service, which should be sent by version-aware\n * clients to the service. This allows services to abide by the schema and\n * behavior of the service at the time this API version was deployed.\n * The format of the API version must be treated as opaque by clients.\n * Services may use a format with an apparent structure, but clients must\n * not rely on this to determine components within an API version, or attempt\n * to construct other valid API versions. Note that this is for upcoming\n * functionality and may not be implemented for all services.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.api_version) = \"v1_20230821_preview\";\n * }\n *\n * @generated from extension: string api_version = 525000001;\n */\nexport const api_version: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 3);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/launch_stage.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file google/api/launch_stage.proto.\n */\nexport const file_google_api_launch_stage: GenFile = /*@__PURE__*/\n fileDesc(\"Ch1nb29nbGUvYXBpL2xhdW5jaF9zdGFnZS5wcm90bxIKZ29vZ2xlLmFwaSqMAQoLTGF1bmNoU3RhZ2USHAoYTEFVTkNIX1NUQUdFX1VOU1BFQ0lGSUVEEAASEQoNVU5JTVBMRU1FTlRFRBAGEg0KCVBSRUxBVU5DSBAHEhAKDEVBUkxZX0FDQ0VTUxABEgkKBUFMUEhBEAISCAoEQkVUQRADEgYKAkdBEAQSDgoKREVQUkVDQVRFRBAFQloKDmNvbS5nb29nbGUuYXBpQhBMYXVuY2hTdGFnZVByb3RvUAFaLWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpO2FwaaICBEdBUEliBnByb3RvMw\");\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * @generated from enum google.api.LaunchStage\n */\nexport enum LaunchStage {\n /**\n * Do not use this default value.\n *\n * @generated from enum value: LAUNCH_STAGE_UNSPECIFIED = 0;\n */\n LAUNCH_STAGE_UNSPECIFIED = 0,\n\n /**\n * The feature is not yet implemented. Users can not use it.\n *\n * @generated from enum value: UNIMPLEMENTED = 6;\n */\n UNIMPLEMENTED = 6,\n\n /**\n * Prelaunch features are hidden from users and are only visible internally.\n *\n * @generated from enum value: PRELAUNCH = 7;\n */\n PRELAUNCH = 7,\n\n /**\n * Early Access features are limited to a closed group of testers. To use\n * these features, you must sign up in advance and sign a Trusted Tester\n * agreement (which includes confidentiality provisions). These features may\n * be unstable, changed in backward-incompatible ways, and are not\n * guaranteed to be released.\n *\n * @generated from enum value: EARLY_ACCESS = 1;\n */\n EARLY_ACCESS = 1,\n\n /**\n * Alpha is a limited availability test for releases before they are cleared\n * for widespread use. By Alpha, all significant design issues are resolved\n * and we are in the process of verifying functionality. Alpha customers\n * need to apply for access, agree to applicable terms, and have their\n * projects allowlisted. Alpha releases don't have to be feature complete,\n * no SLAs are provided, and there are no technical support obligations, but\n * they will be far enough along that customers can actually use them in\n * test environments or for limited-use tests -- just like they would in\n * normal production cases.\n *\n * @generated from enum value: ALPHA = 2;\n */\n ALPHA = 2,\n\n /**\n * Beta is the point at which we are ready to open a release for any\n * customer to use. There are no SLA or technical support obligations in a\n * Beta release. Products will be complete from a feature perspective, but\n * may have some open outstanding issues. Beta releases are suitable for\n * limited production use cases.\n *\n * @generated from enum value: BETA = 3;\n */\n BETA = 3,\n\n /**\n * GA features are open to all developers and are considered stable and\n * fully qualified for production use.\n *\n * @generated from enum value: GA = 4;\n */\n GA = 4,\n\n /**\n * Deprecated features are scheduled to be shut down and removed. For more\n * information, see the \"Deprecation Policy\" section of our [Terms of\n * Service](https://cloud.google.com/terms/)\n * and the [Google Cloud Platform Subject to the Deprecation\n * Policy](https://cloud.google.com/terms/deprecation) documentation.\n *\n * @generated from enum value: DEPRECATED = 5;\n */\n DEPRECATED = 5,\n}\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * @generated from enum google.api.LaunchStage\n */\nexport type LaunchStageJson = \"LAUNCH_STAGE_UNSPECIFIED\" | \"UNIMPLEMENTED\" | \"PRELAUNCH\" | \"EARLY_ACCESS\" | \"ALPHA\" | \"BETA\" | \"GA\" | \"DEPRECATED\";\n\n/**\n * Describes the enum google.api.LaunchStage.\n */\nexport const LaunchStageSchema: GenEnum<LaunchStage, LaunchStageJson> = /*@__PURE__*/\n enumDesc(file_google_api_launch_stage, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/runtime/v1/store.proto (package mochabugapis.adapt.runtime.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../../buf/validate/validate_pb\";\nimport type { Timestamp, TimestampJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/runtime/v1/store.proto.\n */\nexport const file_mochabugapis_adapt_runtime_v1_store: GenFile = /*@__PURE__*/\n fileDesc(\"Ciltb2NoYWJ1Z2FwaXMvYWRhcHQvcnVudGltZS92MS9zdG9yZS5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEiJgoIUHV0VmFsdWUSDQoFdmFsdWUYASABKAwSCwoDdHRsGAIgASgFIlkKCEdldFZhbHVlEg0KBXZhbHVlGAEgASgMEj4KCG1ldGFkYXRhGAIgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuVmFsdWVNZXRhZGF0YSJdCg1WYWx1ZU1ldGFkYXRhEgsKA3R0bBgBIAEoBRIxCg1sYXN0X21vZGlmaWVkGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIMCgRldGFnGAMgASgJIuwBCg5UaW1lc3RhbXBSYW5nZRIxCgVzdGFydBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBrpIA8gBARIvCgNlbmQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESFwoPc3RhcnRfaW5jbHVzaXZlGAMgASgIEhUKDWVuZF9pbmNsdXNpdmUYBCABKAg6RrpIQxpBCgt2YWxpZF9yYW5nZRIbc3RhcnQgbXVzdCBiZSBsZXNzIHRoYW4gZW5kGhV0aGlzLnN0YXJ0IDwgdGhpcy5lbmQinwMKCFNlbGVjdE9wEhwKBXN0YXJ0GAEgASgJQgi6SAVyAxiAIEgAiAEBEhoKA2VuZBgCIAEoCUIIukgFcgMYgCBIAYgBARIcCg9zdGFydF9pbmNsdXNpdmUYAyABKAhIAogBARIaCg1lbmRfaW5jbHVzaXZlGAQgASgISAOIAQESHgoFbGltaXQYBSABKAVCCrpIBxoFGOgHKABIBIgBARIXCgpwYWdlX3Rva2VuGAYgASgJSAWIAQE6lAG6SJABGo0BCgt2YWxpZF9yYW5nZRJBd2hlbiBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIHByb3ZpZGVkLCBzdGFydCBtdXN0IGJlIGxlc3MgdGhhbiBlbmQaOyFoYXModGhpcy5zdGFydCkgfHwgIWhhcyh0aGlzLmVuZCkgfHwgdGhpcy5zdGFydCA8IHRoaXMuZW5kQggKBl9zdGFydEIGCgRfZW5kQhIKEF9zdGFydF9pbmNsdXNpdmVCEAoOX2VuZF9pbmNsdXNpdmVCCAoGX2xpbWl0Qg0KC19wYWdlX3Rva2VuIuABCg5Xcml0ZU9wZXJhdGlvbhI5CgZpbnNlcnQYASABKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5JbnNlcnRPcEgAEjkKBmRlbGV0ZRgCIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkRlbGV0ZU9wSAASRAoMcmFuZ2VfZGVsZXRlGAMgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuUmFuZ2VEZWxldGVPcEgAQhIKCW9wZXJhdGlvbhIFukgCCAEiuwEKGUNvbmRpdGlvbmFsV3JpdGVPcGVyYXRpb24SRAoGaW5zZXJ0GAEgASgLMjIubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZGl0aW9uYWxJbnNlcnRPcEgAEkQKBmRlbGV0ZRgCIAEoCzIyLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmRpdGlvbmFsRGVsZXRlT3BIAEISCglvcGVyYXRpb24SBbpIAggBItICCg1SYW5nZURlbGV0ZU9wEhwKBXN0YXJ0GAEgASgJQgi6SAVyAxiAIEgAiAEBEhoKA2VuZBgCIAEoCUIIukgFcgMYgCBIAYgBARIcCg9zdGFydF9pbmNsdXNpdmUYAyABKAhIAogBARIaCg1lbmRfaW5jbHVzaXZlGAQgASgISAOIAQE6lAG6SJABGo0BCgt2YWxpZF9yYW5nZRJBd2hlbiBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIHByb3ZpZGVkLCBzdGFydCBtdXN0IGJlIGxlc3MgdGhhbiBlbmQaOyFoYXModGhpcy5zdGFydCkgfHwgIWhhcyh0aGlzLmVuZCkgfHwgdGhpcy5zdGFydCA8IHRoaXMuZW5kQggKBl9zdGFydEIGCgRfZW5kQhIKEF9zdGFydF9pbmNsdXNpdmVCEAoOX2VuZF9pbmNsdXNpdmUiYQoISW5zZXJ0T3ASFQoDa2V5GAEgASgJQgi6SAVyAxiAIBI+CgV2YWx1ZRgCIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlB1dFZhbHVlQga6SAPIAQEiIQoIRGVsZXRlT3ASFQoDa2V5GAEgASgJQgi6SAVyAxiAICK2BgoTQ29uZGl0aW9uYWxJbnNlcnRPcBIVCgNrZXkYASABKAlCCLpIBXIDGIAgEj4KBXZhbHVlGAIgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuUHV0VmFsdWVCBrpIA8gBARJaCgxwcmVjb25kaXRpb24YAyABKAsyPy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25kaXRpb25hbEluc2VydE9wLlByZWNvbmRpdGlvbkgAiAEBGtoECgxQcmVjb25kaXRpb24SOgoUbGFzdF9tb2RpZmllZF9lcXVhbHMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAASTAoTbGFzdF9tb2RpZmllZF9yYW5nZRgCIAEoCzItLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlRpbWVzdGFtcFJhbmdlSAASEQoEZXRhZxgEIAEoCUgBiAEBEhsKDmZhaWxfaWZfZXhpc3RzGAUgASgISAKIAQE63AK6SNgCGscBCiBub190aW1lc3RhbXBfd2l0aF9mYWlsX2lmX2V4aXN0cxI7ZmFpbF9pZl9leGlzdHMgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGltZXN0YW1wIGNvbmRpdGlvbnMaZnRoaXMuZmFpbF9pZl9leGlzdHMgPT0gdHJ1ZSA/ICFoYXModGhpcy5sYXN0X21vZGlmaWVkX2VxdWFscykgJiYgIWhhcyh0aGlzLmxhc3RfbW9kaWZpZWRfcmFuZ2UpIDogdHJ1ZRqLAQobbm9fZXRhZ193aXRoX2ZhaWxfaWZfZXhpc3RzEjZmYWlsX2lmX2V4aXN0cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBldGFnIGNvbmRpdGlvbnMaNHRoaXMuZmFpbF9pZl9leGlzdHMgPT0gdHJ1ZSA/ICFoYXModGhpcy5ldGFnKSA6IHRydWVCFQoTdGltZXN0YW1wX2NvbmRpdGlvbkIHCgVfZXRhZ0IRCg9fZmFpbF9pZl9leGlzdHNCDwoNX3ByZWNvbmRpdGlvbiLeBQoTQ29uZGl0aW9uYWxEZWxldGVPcBIVCgNrZXkYASABKAlCCLpIBXIDGIAgEloKDHByZWNvbmRpdGlvbhgCIAEoCzI/Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmRpdGlvbmFsRGVsZXRlT3AuUHJlY29uZGl0aW9uSACIAQEawgQKDFByZWNvbmRpdGlvbhIYCgttdXN0X2V4aXN0cxgBIAEoCEgBiAEBEjoKFGxhc3RfbW9kaWZpZWRfZXF1YWxzGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAEkwKE2xhc3RfbW9kaWZpZWRfcmFuZ2UYAyABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5UaW1lc3RhbXBSYW5nZUgAEhEKBGV0YWcYBCABKAlIAogBATrKArpIxgIavgEKHW5vX3RpbWVzdGFtcF93aXRoX211c3RfZXhpc3RzEjhtdXN0X2V4aXN0cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCB0aW1lc3RhbXAgY29uZGl0aW9ucxpjdGhpcy5tdXN0X2V4aXN0cyA9PSB0cnVlID8gIWhhcyh0aGlzLmxhc3RfbW9kaWZpZWRfZXF1YWxzKSAmJiAhaGFzKHRoaXMubGFzdF9tb2RpZmllZF9yYW5nZSkgOiB0cnVlGoIBChhub19ldGFnX3dpdGhfbXVzdF9leGlzdHMSM211c3RfZXhpc3RzIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGV0YWcgY29uZGl0aW9ucxoxdGhpcy5tdXN0X2V4aXN0cyA9PSB0cnVlID8gIWhhcyh0aGlzLmV0YWcpIDogdHJ1ZUIVChN0aW1lc3RhbXBfY29uZGl0aW9uQg4KDF9tdXN0X2V4aXN0c0IHCgVfZXRhZ0IPCg1fcHJlY29uZGl0aW9uYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_timestamp]);\n\n/**\n * This represents a value to be stored\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PutValue\n */\nexport type PutValue = Message<\"mochabugapis.adapt.runtime.v1.PutValue\"> & {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n\n /**\n * TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 2;\n */\n ttl: number;\n};\n\n/**\n * This represents a value to be stored\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PutValue\n */\nexport type PutValueJson = {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value?: string;\n\n /**\n * TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 2;\n */\n ttl?: number;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.PutValue.\n * Use `create(PutValueSchema)` to create a new message.\n */\nexport const PutValueSchema: GenMessage<PutValue, {jsonType: PutValueJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 0);\n\n/**\n * Retrieved value\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetValue\n */\nexport type GetValue = Message<\"mochabugapis.adapt.runtime.v1.GetValue\"> & {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n\n /**\n * The metadata for the written value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 2;\n */\n metadata?: ValueMetadata;\n};\n\n/**\n * Retrieved value\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetValue\n */\nexport type GetValueJson = {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value?: string;\n\n /**\n * The metadata for the written value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 2;\n */\n metadata?: ValueMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetValue.\n * Use `create(GetValueSchema)` to create a new message.\n */\nexport const GetValueSchema: GenMessage<GetValue, {jsonType: GetValueJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 1);\n\n/**\n * Write metadata\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ValueMetadata\n */\nexport type ValueMetadata = Message<\"mochabugapis.adapt.runtime.v1.ValueMetadata\"> & {\n /**\n * Remaining TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 1;\n */\n ttl: number;\n\n /**\n * Last modified\n *\n * @generated from field: google.protobuf.Timestamp last_modified = 2;\n */\n lastModified?: Timestamp;\n\n /**\n * ETag\n *\n * @generated from field: string etag = 3;\n */\n etag: string;\n};\n\n/**\n * Write metadata\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ValueMetadata\n */\nexport type ValueMetadataJson = {\n /**\n * Remaining TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 1;\n */\n ttl?: number;\n\n /**\n * Last modified\n *\n * @generated from field: google.protobuf.Timestamp last_modified = 2;\n */\n lastModified?: TimestampJson;\n\n /**\n * ETag\n *\n * @generated from field: string etag = 3;\n */\n etag?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ValueMetadata.\n * Use `create(ValueMetadataSchema)` to create a new message.\n */\nexport const ValueMetadataSchema: GenMessage<ValueMetadata, {jsonType: ValueMetadataJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 2);\n\n/**\n * Timestamp range\n *\n * @generated from message mochabugapis.adapt.runtime.v1.TimestampRange\n */\nexport type TimestampRange = Message<\"mochabugapis.adapt.runtime.v1.TimestampRange\"> & {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: Timestamp;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: Timestamp;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive: boolean;\n};\n\n/**\n * Timestamp range\n *\n * @generated from message mochabugapis.adapt.runtime.v1.TimestampRange\n */\nexport type TimestampRangeJson = {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: TimestampJson;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: TimestampJson;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.TimestampRange.\n * Use `create(TimestampRangeSchema)` to create a new message.\n */\nexport const TimestampRangeSchema: GenMessage<TimestampRange, {jsonType: TimestampRangeJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 3);\n\n/**\n * Range query on keys (lexicographic comparison)\n * Examples: \"user/\" to \"user/~\", \"logs/2024-01/\" to \"logs/2024-02/\"\n * not setting any start or end will scan the entire store\n * Results are always returned in ascending order by key\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SelectOp\n */\nexport type SelectOp = Message<\"mochabugapis.adapt.runtime.v1.SelectOp\"> & {\n /**\n * Not setting the start will be equivalent of fetching from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded queries\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n\n /**\n * Max results (1-1000), defaults to 100\n *\n * @generated from field: optional int32 limit = 5;\n */\n limit?: number;\n\n /**\n * An optional page_token to continue the query\n *\n * @generated from field: optional string page_token = 6;\n */\n pageToken?: string;\n};\n\n/**\n * Range query on keys (lexicographic comparison)\n * Examples: \"user/\" to \"user/~\", \"logs/2024-01/\" to \"logs/2024-02/\"\n * not setting any start or end will scan the entire store\n * Results are always returned in ascending order by key\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SelectOp\n */\nexport type SelectOpJson = {\n /**\n * Not setting the start will be equivalent of fetching from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded queries\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n\n /**\n * Max results (1-1000), defaults to 100\n *\n * @generated from field: optional int32 limit = 5;\n */\n limit?: number;\n\n /**\n * An optional page_token to continue the query\n *\n * @generated from field: optional string page_token = 6;\n */\n pageToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.SelectOp.\n * Use `create(SelectOpSchema)` to create a new message.\n */\nexport const SelectOpSchema: GenMessage<SelectOp, {jsonType: SelectOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 4);\n\n/**\n * Batch write (no preconditions)\n * All operations in a batch share the same timestamp.\n * Interfering operations on the same key have undefined order.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.WriteOperation\n */\nexport type WriteOperation = Message<\"mochabugapis.adapt.runtime.v1.WriteOperation\"> & {\n /**\n * Operation\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.WriteOperation.operation\n */\n operation: {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.InsertOp insert = 1;\n */\n value: InsertOp;\n case: \"insert\";\n } | {\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.DeleteOp delete = 2;\n */\n value: DeleteOp;\n case: \"delete\";\n } | {\n /**\n * Range delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.RangeDeleteOp range_delete = 3;\n */\n value: RangeDeleteOp;\n case: \"rangeDelete\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Batch write (no preconditions)\n * All operations in a batch share the same timestamp.\n * Interfering operations on the same key have undefined order.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.WriteOperation\n */\nexport type WriteOperationJson = {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.InsertOp insert = 1;\n */\n insert?: InsertOpJson;\n\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.DeleteOp delete = 2;\n */\n delete?: DeleteOpJson;\n\n /**\n * Range delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.RangeDeleteOp range_delete = 3;\n */\n rangeDelete?: RangeDeleteOpJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.WriteOperation.\n * Use `create(WriteOperationSchema)` to create a new message.\n */\nexport const WriteOperationSchema: GenMessage<WriteOperation, {jsonType: WriteOperationJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 5);\n\n/**\n * Single write (supports preconditions)\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalWriteOperation\n */\nexport type ConditionalWriteOperation = Message<\"mochabugapis.adapt.runtime.v1.ConditionalWriteOperation\"> & {\n /**\n * Operation\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.ConditionalWriteOperation.operation\n */\n operation: {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalInsertOp insert = 1;\n */\n value: ConditionalInsertOp;\n case: \"insert\";\n } | {\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalDeleteOp delete = 2;\n */\n value: ConditionalDeleteOp;\n case: \"delete\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Single write (supports preconditions)\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalWriteOperation\n */\nexport type ConditionalWriteOperationJson = {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalInsertOp insert = 1;\n */\n insert?: ConditionalInsertOpJson;\n\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalDeleteOp delete = 2;\n */\n delete?: ConditionalDeleteOpJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalWriteOperation.\n * Use `create(ConditionalWriteOperationSchema)` to create a new message.\n */\nexport const ConditionalWriteOperationSchema: GenMessage<ConditionalWriteOperation, {jsonType: ConditionalWriteOperationJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 6);\n\n/**\n * Range delete, works like SelectOp for defining the range\n * For example, to delete all keys with prefix \"user/\", set start=\"user/\" and end=\"user/~\"\n *\n * @generated from message mochabugapis.adapt.runtime.v1.RangeDeleteOp\n */\nexport type RangeDeleteOp = Message<\"mochabugapis.adapt.runtime.v1.RangeDeleteOp\"> & {\n /**\n * Not setting the start will be equivalent of deleting from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded deletes\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n};\n\n/**\n * Range delete, works like SelectOp for defining the range\n * For example, to delete all keys with prefix \"user/\", set start=\"user/\" and end=\"user/~\"\n *\n * @generated from message mochabugapis.adapt.runtime.v1.RangeDeleteOp\n */\nexport type RangeDeleteOpJson = {\n /**\n * Not setting the start will be equivalent of deleting from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded deletes\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.RangeDeleteOp.\n * Use `create(RangeDeleteOpSchema)` to create a new message.\n */\nexport const RangeDeleteOpSchema: GenMessage<RangeDeleteOp, {jsonType: RangeDeleteOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 7);\n\n/**\n * Insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.InsertOp\n */\nexport type InsertOp = Message<\"mochabugapis.adapt.runtime.v1.InsertOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValue;\n};\n\n/**\n * Insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.InsertOp\n */\nexport type InsertOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValueJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.InsertOp.\n * Use `create(InsertOpSchema)` to create a new message.\n */\nexport const InsertOpSchema: GenMessage<InsertOp, {jsonType: InsertOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 8);\n\n/**\n * Delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DeleteOp\n */\nexport type DeleteOp = Message<\"mochabugapis.adapt.runtime.v1.DeleteOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n};\n\n/**\n * Delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DeleteOp\n */\nexport type DeleteOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.DeleteOp.\n * Use `create(DeleteOpSchema)` to create a new message.\n */\nexport const DeleteOpSchema: GenMessage<DeleteOp, {jsonType: DeleteOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 9);\n\n/**\n * Conditional insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp\n */\nexport type ConditionalInsertOp = Message<\"mochabugapis.adapt.runtime.v1.ConditionalInsertOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValue;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition precondition = 3;\n */\n precondition?: ConditionalInsertOp_Precondition;\n};\n\n/**\n * Conditional insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp\n */\nexport type ConditionalInsertOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValueJson;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition precondition = 3;\n */\n precondition?: ConditionalInsertOp_PreconditionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.\n * Use `create(ConditionalInsertOpSchema)` to create a new message.\n */\nexport const ConditionalInsertOpSchema: GenMessage<ConditionalInsertOp, {jsonType: ConditionalInsertOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 10);\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition\n */\nexport type ConditionalInsertOp_Precondition = Message<\"mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition\"> & {\n /**\n * Timestamp\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition.timestamp_condition\n */\n timestampCondition: {\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 1;\n */\n value: Timestamp;\n case: \"lastModifiedEquals\";\n } | {\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 2;\n */\n value: TimestampRange;\n case: \"lastModifiedRange\";\n } | { case: undefined; value?: undefined };\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n\n /**\n * Fail if exists\n *\n * @generated from field: optional bool fail_if_exists = 5;\n */\n failIfExists?: boolean;\n};\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition\n */\nexport type ConditionalInsertOp_PreconditionJson = {\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 1;\n */\n lastModifiedEquals?: TimestampJson;\n\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 2;\n */\n lastModifiedRange?: TimestampRangeJson;\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n\n /**\n * Fail if exists\n *\n * @generated from field: optional bool fail_if_exists = 5;\n */\n failIfExists?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition.\n * Use `create(ConditionalInsertOp_PreconditionSchema)` to create a new message.\n */\nexport const ConditionalInsertOp_PreconditionSchema: GenMessage<ConditionalInsertOp_Precondition, {jsonType: ConditionalInsertOp_PreconditionJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 10, 0);\n\n/**\n * Conditional delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp\n */\nexport type ConditionalDeleteOp = Message<\"mochabugapis.adapt.runtime.v1.ConditionalDeleteOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition precondition = 2;\n */\n precondition?: ConditionalDeleteOp_Precondition;\n};\n\n/**\n * Conditional delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp\n */\nexport type ConditionalDeleteOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition precondition = 2;\n */\n precondition?: ConditionalDeleteOp_PreconditionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.\n * Use `create(ConditionalDeleteOpSchema)` to create a new message.\n */\nexport const ConditionalDeleteOpSchema: GenMessage<ConditionalDeleteOp, {jsonType: ConditionalDeleteOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 11);\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition\n */\nexport type ConditionalDeleteOp_Precondition = Message<\"mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition\"> & {\n /**\n * Must exist\n *\n * @generated from field: optional bool must_exists = 1;\n */\n mustExists?: boolean;\n\n /**\n * Timestamp\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition.timestamp_condition\n */\n timestampCondition: {\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 2;\n */\n value: Timestamp;\n case: \"lastModifiedEquals\";\n } | {\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 3;\n */\n value: TimestampRange;\n case: \"lastModifiedRange\";\n } | { case: undefined; value?: undefined };\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n};\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition\n */\nexport type ConditionalDeleteOp_PreconditionJson = {\n /**\n * Must exist\n *\n * @generated from field: optional bool must_exists = 1;\n */\n mustExists?: boolean;\n\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 2;\n */\n lastModifiedEquals?: TimestampJson;\n\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 3;\n */\n lastModifiedRange?: TimestampRangeJson;\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition.\n * Use `create(ConditionalDeleteOp_PreconditionSchema)` to create a new message.\n */\nexport const ConditionalDeleteOp_PreconditionSchema: GenMessage<ConditionalDeleteOp_Precondition, {jsonType: ConditionalDeleteOp_PreconditionJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 11, 0);\n\n", "import type {\n DescMessage,\n DescMethodStreaming,\n DescMethodUnary,\n MessageInitShape,\n MessageShape\n} from '@bufbuild/protobuf';\nimport type {\n ContextValues,\n Interceptor,\n StreamResponse,\n Transport,\n UnaryRequest,\n UnaryResponse\n} from '@connectrpc/connect';\nimport { Code, ConnectError, createContextValues } from '@connectrpc/connect';\nimport {\n compressedFlag,\n createClientMethodSerializers,\n createEnvelopeReadableStream,\n createMethodUrl,\n encodeEnvelope,\n runStreamingCall,\n runUnaryCall\n} from '@connectrpc/connect/protocol';\nimport {\n headerGrpcStatus,\n requestHeader,\n trailerFlag,\n trailerParse,\n validateResponse,\n validateTrailer\n} from '@connectrpc/connect/protocol-grpc-web';\nimport { Fetcher } from './types';\n\nexport interface GrpcWebTransportOptions {\n fetcher: Fetcher;\n interceptors?: Interceptor[];\n}\n\nexport function createGrpcWebTransport(\n options: GrpcWebTransportOptions\n): Transport {\n return {\n async unary<I extends DescMessage, O extends DescMessage>(\n method: DescMethodUnary<I, O>,\n signal: AbortSignal | undefined,\n timeoutMs: number | undefined,\n header: Headers,\n message: MessageInitShape<I>,\n contextValues?: ContextValues\n ): Promise<UnaryResponse<I, O>> {\n const { serialize, parse } = createClientMethodSerializers(method, true);\n\n return runUnaryCall<I, O>({\n interceptors: options.interceptors,\n signal,\n timeoutMs,\n req: {\n stream: false,\n service: method.parent,\n method,\n requestMethod: 'POST',\n url: createMethodUrl('https://runtimeapi/', method),\n header: requestHeader(true, timeoutMs, header, false),\n contextValues: contextValues ?? createContextValues(),\n message\n },\n next: async (req: UnaryRequest<I, O>): Promise<UnaryResponse<I, O>> => {\n const response = await options.fetcher.fetch(req.url, {\n method: req.requestMethod,\n headers: req.header,\n signal: req.signal,\n body: encodeEnvelope(0, serialize(req.message))\n });\n\n const { headerError } = validateResponse(\n response.status,\n response.headers\n );\n if (!response.body) {\n if (headerError !== undefined) throw headerError;\n throw new ConnectError('missing response body', Code.Internal);\n }\n\n const reader = createEnvelopeReadableStream(\n response.body\n ).getReader();\n let trailer: Headers | undefined;\n let msg: MessageShape<O> | undefined;\n\n for (;;) {\n const r = await reader.read();\n if (r.done) {\n break;\n }\n const { flags, data } = r.value;\n if ((flags & compressedFlag) === compressedFlag) {\n throw new ConnectError(\n 'received compressed data, which is unsupported',\n Code.Internal\n );\n }\n if (flags === trailerFlag) {\n if (trailer !== undefined) {\n throw new ConnectError('extra trailer', Code.Internal);\n }\n trailer = trailerParse(data);\n continue;\n }\n if (msg !== undefined) {\n throw new ConnectError('extra message', Code.Unimplemented);\n }\n msg = parse(data);\n }\n\n if (trailer === undefined) {\n if (headerError !== undefined) throw headerError;\n throw new ConnectError(\n 'missing trailer',\n response.headers.has(headerGrpcStatus)\n ? Code.Unimplemented\n : Code.Unknown\n );\n }\n validateTrailer(trailer, response.headers);\n\n if (msg === undefined) {\n throw new ConnectError(\n 'missing message',\n trailer.has(headerGrpcStatus) ? Code.Unimplemented : Code.Unknown\n );\n }\n\n return {\n stream: false,\n service: method.parent,\n method,\n header: response.headers,\n message: msg,\n trailer\n };\n }\n });\n },\n\n async stream<I extends DescMessage, O extends DescMessage>(\n method: DescMethodStreaming<I, O>,\n signal: AbortSignal | undefined,\n timeoutMs: number | undefined,\n header:\n | Headers\n | Record<string, string>\n | Iterable<Iterable<string>>\n | undefined,\n input: AsyncIterable<MessageInitShape<I>>,\n contextValues?: ContextValues\n ): Promise<StreamResponse<I, O>> {\n const { serialize, parse } = createClientMethodSerializers(method, true);\n\n async function createRequestBody(\n source: AsyncIterable<MessageShape<I>>\n ): Promise<Uint8Array> {\n // Minimal approach: we only allow sending a single message, since\n // standard fetch in browsers doesn't support streaming request bodies.\n const { value, done } = await source[Symbol.asyncIterator]().next();\n if (done) {\n throw new ConnectError(\n 'missing request message',\n Code.InvalidArgument\n );\n }\n return encodeEnvelope(0, serialize(value));\n }\n\n async function* parseResponseBody(\n body: ReadableStream<Uint8Array>,\n foundStatus: boolean,\n trailerTarget: Headers,\n rawHeader: Headers,\n abortSignal: AbortSignal\n ) {\n // If foundStatus is true, that means we received grpc-status:0 in headers\n // indicating a \"trailers-only\" response with no body (or no data).\n if (foundStatus) {\n // We tolerate an empty body for status 0 (success).\n // Just ensure it's actually empty.\n const emptyReader = createEnvelopeReadableStream(body).getReader();\n if (!(await emptyReader.read()).done) {\n throw new ConnectError(\n 'extra data for trailers-only',\n Code.Internal\n );\n }\n return;\n }\n\n const reader = createEnvelopeReadableStream(body).getReader();\n let trailerReceived = false;\n for (;;) {\n const result = await reader.read();\n if (result.done) {\n break;\n }\n const { flags, data } = result.value;\n if ((flags & trailerFlag) === trailerFlag) {\n if (trailerReceived) {\n throw new ConnectError('extra trailer', Code.Internal);\n }\n trailerReceived = true;\n const trailer = trailerParse(data);\n validateTrailer(trailer, rawHeader);\n trailer.forEach((value, key) => trailerTarget.set(key, value));\n continue;\n }\n if (trailerReceived) {\n throw new ConnectError(\n 'extra message after trailer',\n Code.Internal\n );\n }\n yield parse(data);\n }\n\n // Workaround for Node not always throwing on read if the signal was aborted\n if ('throwIfAborted' in abortSignal) {\n abortSignal.throwIfAborted?.();\n }\n\n if (!trailerReceived) {\n throw new ConnectError('missing trailer', Code.Internal);\n }\n }\n\n return runStreamingCall<I, O>({\n interceptors: options.interceptors,\n signal,\n timeoutMs,\n req: {\n stream: true,\n service: method.parent,\n method,\n requestMethod: 'POST',\n url: createMethodUrl('https://runtimeapi/', method),\n header: requestHeader(true, timeoutMs, header as HeadersInit, false),\n contextValues: contextValues ?? createContextValues(),\n message: input\n },\n next: async (req) => {\n const body = await createRequestBody(req.message);\n const fRes = await options.fetcher.fetch(req.url, {\n method: req.requestMethod,\n headers: req.header,\n signal: req.signal,\n body: body as BodyInit\n });\n\n const { foundStatus, headerError } = validateResponse(\n fRes.status,\n fRes.headers\n );\n if (headerError) {\n throw headerError;\n }\n if (!fRes.body) {\n throw new ConnectError('missing response body', Code.Internal);\n }\n\n const trailer = new Headers();\n const res: StreamResponse<I, O> = {\n ...req,\n header: fRes.headers,\n trailer,\n message: parseResponseBody(\n fRes.body,\n foundStatus,\n trailer,\n fRes.headers,\n req.signal\n )\n };\n return res;\n }\n });\n }\n };\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/runtime/v1/incoming.proto (package mochabugapis.adapt.runtime.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { SignalData, SignalDataJson } from \"../../graph/signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"../../graph/signal_data_pb\";\nimport type { ExchangeOperation, ExchangeOperationJson } from \"./runtime_pb\";\nimport { file_mochabugapis_adapt_runtime_v1_runtime } from \"./runtime_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/runtime/v1/incoming.proto.\n */\nexport const file_mochabugapis_adapt_runtime_v1_incoming: GenFile = /*@__PURE__*/\n fileDesc(\"Cixtb2NoYWJ1Z2FwaXMvYWRhcHQvcnVudGltZS92MS9pbmNvbWluZy5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEiOgoOSG9zdGluZ0RldGFpbHMSGAoLcHVibGljX2hvc3QYASABKAlIAIgBAUIOCgxfcHVibGljX2hvc3QiZgoVU3RhcnRFeGVjdXRpb25SZXF1ZXN0EhAKCHJlY2VpdmVyGAEgASgJEjsKBGhvc3QYAiABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ib3N0aW5nRGV0YWlscyIYChZTdGFydEV4ZWN1dGlvblJlc3BvbnNlIlMKFFN0b3BFeGVjdXRpb25SZXF1ZXN0EjsKBGhvc3QYASABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ib3N0aW5nRGV0YWlscyIXChVTdG9wRXhlY3V0aW9uUmVzcG9uc2UiUQoSQ3JvblRyaWdnZXJSZXF1ZXN0EjsKBGhvc3QYASABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ib3N0aW5nRGV0YWlscyIVChNDcm9uVHJpZ2dlclJlc3BvbnNlIsgBCg5FeGNoYW5nZVJlc3VsdBITCgt0cmFuc21pdHRlchgBIAEoCRJLCgdzaWduYWxzGAIgAygLMjoubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhjaGFuZ2VSZXN1bHQuU2lnbmFsc0VudHJ5GlQKDFNpZ25hbHNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAEi2AEKFUV4Y2hhbmdlUmVzdWx0UmVxdWVzdBJDCglvcGVyYXRpb24YASABKAsyMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGNoYW5nZU9wZXJhdGlvbhI9CgZyZXN1bHQYAiABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGNoYW5nZVJlc3VsdBI7CgRob3N0GAMgASgLMi0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuSG9zdGluZ0RldGFpbHMiGAoWRXhjaGFuZ2VSZXN1bHRSZXNwb25zZWIGcHJvdG8z\", [file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_runtime_v1_runtime]);\n\n/**\n * Some information about the host environment\n * Can for example be used to automatically register hooks for external triggers\n *\n * @generated from message mochabugapis.adapt.runtime.v1.HostingDetails\n */\nexport type HostingDetails = Message<\"mochabugapis.adapt.runtime.v1.HostingDetails\"> & {\n /**\n * The public host (i.e. domain without protocol) of the host environment\n * Only set for public vertices like external triggers and browsers\n *\n * @generated from field: optional string public_host = 1;\n */\n publicHost?: string;\n};\n\n/**\n * Some information about the host environment\n * Can for example be used to automatically register hooks for external triggers\n *\n * @generated from message mochabugapis.adapt.runtime.v1.HostingDetails\n */\nexport type HostingDetailsJson = {\n /**\n * The public host (i.e. domain without protocol) of the host environment\n * Only set for public vertices like external triggers and browsers\n *\n * @generated from field: optional string public_host = 1;\n */\n publicHost?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.HostingDetails.\n * Use `create(HostingDetailsSchema)` to create a new message.\n */\nexport const HostingDetailsSchema: GenMessage<HostingDetails, {jsonType: HostingDetailsJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 0);\n\n/**\n * The request object used to initiate an execution on a specific receiver.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionRequest\n */\nexport type StartExecutionRequest = Message<\"mochabugapis.adapt.runtime.v1.StartExecutionRequest\"> & {\n /**\n * The name of the receiver to start the execution on.\n *\n * @generated from field: string receiver = 1;\n */\n receiver: string;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 2;\n */\n host?: HostingDetails;\n};\n\n/**\n * The request object used to initiate an execution on a specific receiver.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionRequest\n */\nexport type StartExecutionRequestJson = {\n /**\n * The name of the receiver to start the execution on.\n *\n * @generated from field: string receiver = 1;\n */\n receiver?: string;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 2;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StartExecutionRequest.\n * Use `create(StartExecutionRequestSchema)` to create a new message.\n */\nexport const StartExecutionRequestSchema: GenMessage<StartExecutionRequest, {jsonType: StartExecutionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 1);\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionResponse\n */\nexport type StartExecutionResponse = Message<\"mochabugapis.adapt.runtime.v1.StartExecutionResponse\"> & {\n};\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionResponse\n */\nexport type StartExecutionResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StartExecutionResponse.\n * Use `create(StartExecutionResponseSchema)` to create a new message.\n */\nexport const StartExecutionResponseSchema: GenMessage<StartExecutionResponse, {jsonType: StartExecutionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 2);\n\n/**\n * The request object used to stop a currently running execution.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionRequest\n */\nexport type StopExecutionRequest = Message<\"mochabugapis.adapt.runtime.v1.StopExecutionRequest\"> & {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetails;\n};\n\n/**\n * The request object used to stop a currently running execution.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionRequest\n */\nexport type StopExecutionRequestJson = {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StopExecutionRequest.\n * Use `create(StopExecutionRequestSchema)` to create a new message.\n */\nexport const StopExecutionRequestSchema: GenMessage<StopExecutionRequest, {jsonType: StopExecutionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 3);\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionResponse\n */\nexport type StopExecutionResponse = Message<\"mochabugapis.adapt.runtime.v1.StopExecutionResponse\"> & {\n};\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionResponse\n */\nexport type StopExecutionResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StopExecutionResponse.\n * Use `create(StopExecutionResponseSchema)` to create a new message.\n */\nexport const StopExecutionResponseSchema: GenMessage<StopExecutionResponse, {jsonType: StopExecutionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 4);\n\n/**\n * The request object used to manage cron-trigger related operations.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerRequest\n */\nexport type CronTriggerRequest = Message<\"mochabugapis.adapt.runtime.v1.CronTriggerRequest\"> & {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetails;\n};\n\n/**\n * The request object used to manage cron-trigger related operations.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerRequest\n */\nexport type CronTriggerRequestJson = {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CronTriggerRequest.\n * Use `create(CronTriggerRequestSchema)` to create a new message.\n */\nexport const CronTriggerRequestSchema: GenMessage<CronTriggerRequest, {jsonType: CronTriggerRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 5);\n\n/**\n * The response of the cron-trigger operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerResponse\n */\nexport type CronTriggerResponse = Message<\"mochabugapis.adapt.runtime.v1.CronTriggerResponse\"> & {\n};\n\n/**\n * The response of the cron-trigger operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerResponse\n */\nexport type CronTriggerResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CronTriggerResponse.\n * Use `create(CronTriggerResponseSchema)` to create a new message.\n */\nexport const CronTriggerResponseSchema: GenMessage<CronTriggerResponse, {jsonType: CronTriggerResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 6);\n\n/**\n * The result of executing a exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResult\n */\nexport type ExchangeResult = Message<\"mochabugapis.adapt.runtime.v1.ExchangeResult\"> & {\n /**\n * The name of the transmitter pushing the resulting signals\n *\n * @generated from field: string transmitter = 1;\n */\n transmitter: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * The result of executing a exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResult\n */\nexport type ExchangeResultJson = {\n /**\n * The name of the transmitter pushing the resulting signals\n *\n * @generated from field: string transmitter = 1;\n */\n transmitter?: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeResult.\n * Use `create(ExchangeResultSchema)` to create a new message.\n */\nexport const ExchangeResultSchema: GenMessage<ExchangeResult, {jsonType: ExchangeResultJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 7);\n\n/**\n * Represents the result object providing detailed information about the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultRequest\n */\nexport type ExchangeResultRequest = Message<\"mochabugapis.adapt.runtime.v1.ExchangeResultRequest\"> & {\n /**\n * The exchange operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperation;\n\n /**\n * The result of the exchange, check the operation status before using\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeResult result = 2;\n */\n result?: ExchangeResult;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 3;\n */\n host?: HostingDetails;\n};\n\n/**\n * Represents the result object providing detailed information about the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultRequest\n */\nexport type ExchangeResultRequestJson = {\n /**\n * The exchange operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperationJson;\n\n /**\n * The result of the exchange, check the operation status before using\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeResult result = 2;\n */\n result?: ExchangeResultJson;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 3;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeResultRequest.\n * Use `create(ExchangeResultRequestSchema)` to create a new message.\n */\nexport const ExchangeResultRequestSchema: GenMessage<ExchangeResultRequest, {jsonType: ExchangeResultRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 8);\n\n/**\n * The response of the procedure result\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultResponse\n */\nexport type ExchangeResultResponse = Message<\"mochabugapis.adapt.runtime.v1.ExchangeResultResponse\"> & {\n};\n\n/**\n * The response of the procedure result\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultResponse\n */\nexport type ExchangeResultResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeResultResponse.\n * Use `create(ExchangeResultResponseSchema)` to create a new message.\n */\nexport const ExchangeResultResponseSchema: GenMessage<ExchangeResultResponse, {jsonType: ExchangeResultResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 9);\n\n"],
5
- "mappings": "ubAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,aAAAE,EAAA,2BAAAC,GAAA,4BAAAC,GAAA,sBAAAC,GAAA,uCAAAC,GAAA,wCAAAC,GAAA,sCAAAC,GAAA,uCAAAC,GAAA,yCAAAC,GAAA,0CAAAC,GAAA,oCAAAC,GAAA,qCAAAC,GAAA,uCAAAC,GAAA,wCAAAC,GAAA,oBAAAC,GAAA,yCAAAC,GAAA,0CAAAC,GAAA,8CAAAC,GAAA,2CAAAC,GAAA,8BAAAC,GAAA,2CAAAC,GAAA,oCAAAC,GAAA,oBAAAC,GAAA,wBAAAC,GAAA,mDAAAC,GAAA,oDAAAC,GAAA,oDAAAC,GAAA,qDAAAC,GAAA,oDAAAC,GAAA,qDAAAC,GAAA,gDAAAC,GAAA,iDAAAC,GAAA,+CAAAC,GAAA,gDAAAC,GAAA,6DAAAC,GAAA,8BAAAC,GAAA,mBAAAC,GAAA,kCAAAC,GAAA,mCAAAC,GAAA,4BAAAC,GAAA,gCAAAC,GAAA,iCAAAC,GAAA,yBAAAC,GAAA,mBAAAC,GAAA,gBAAAC,GAAA,oBAAAC,GAAA,+CAAAC,GAAA,gDAAAC,GAAA,gDAAAC,GAAA,iDAAAC,GAAA,gDAAAC,GAAA,iDAAAC,GAAA,4CAAAC,GAAA,6CAAAC,GAAA,2CAAAC,GAAA,4CAAAC,GAAA,sCAAAC,GAAA,uCAAAC,GAAA,4BAAAC,GAAA,6BAAAC,GAAA,mCAAAC,GAAA,oCAAAC,GAAA,mBAAAC,GAAA,yBAAAC,GAAA,2BAAAC,GAAA,gCAAAC,GAAA,iCAAAC,GAAA,mBAAAC,GAAA,oBAAAC,GAAA,mCAAAC,GAAA,oCAAAC,GAAA,qCAAAC,GAAA,sCAAAC,GAAA,cAAAC,GAAA,oBAAAC,GAAA,iBAAAC,GAAA,kBAAAC,GAAA,kCAAAC,GAAA,mCAAAC,GAAA,mBAAAC,GAAA,wBAAAC,GAAA,4BAAAC,GAAA,6BAAAC,GAAA,0BAAAC,GAAA,2BAAAC,GAAA,mBAAAC,GAAA,mBAAAC,GAAA,sBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,kBAAAC,GAAA,wBAAAC,GAAA,wBAAAC,GAAA,8BAAAC,GAAA,qBAAAC,EAAA,2BAAAC,GAAA,uBAAAC,GAAA,gCAAAC,GAAA,iCAAAC,GAAA,8BAAAC,GAAA,+BAAAC,GAAA,WAAAC,GAAA,iBAAAC,GAAA,+BAAAC,GAAA,gCAAAC,GAAA,oBAAAC,GAAA,6BAAAC,GAAA,8BAAAC,GAAA,UAAAC,EAAA,yBAAAC,GAAA,gBAAAC,GAAA,sBAAAC,GAAA,sBAAAC,GAAA,qBAAAC,GAAA,2BAAAC,GAAA,cAAAC,GAAA,wBAAAC,GAAA,yBAAAC,EAAA,eAAAC,GAAA,qBAAAC,GAAA,2BAAAC,GAAA,sBAAAC,GAAA,yBAAAC,EAAA,uDAAAC,EAAA,2CAAAC,GAAA,6CAAAC,EAAA,2CAAAC,GAAA,iDAAAC,EAAA,8CAAAC,EAAA,oDAAAC,EAAA,gDAAAC,EAAA,8CAAAC,GAAA,8CAAAC,EAAA,kDAAAC,GAAA,gDAAAC,EAAA,+CAAAC,EAAA,6CAAAC,EAAA,gCAAAC,GAAA,iBAAAC,KAAA,eAAAC,GAAA7I,IAYA,IAAA8I,EAMO,8BACPC,EAMO,kCACPC,EAAyD,+BCNzD,IAAAC,EAAsC,wCCAtC,IAAAC,EAAyD,wCAEzDC,EAA+G,kCAMlGC,KACX,YAAS,mrqEAAorqE,CAAC,kCAAiC,gCAA+B,gCAA8B,CAAC,EDFxxqE,IAAMC,KACX,YAAS,60DAA80D,CAACC,CAA0B,CAAC,EAoMx2DC,KACX,eAAYF,EAA2C,CAAC,EE7M1D,IAAAG,EAAsC,wCCAtC,IAAAC,EAAsC,wCAGtC,IAAAC,GAA4C,kCAM/BC,KACX,YAAS,+2JAAg3J,CAACC,EAA4B,8BAA2B,CAAC,EAkZv6JC,MACX,eAAYF,EAA0C,CAAC,EDpZlD,IAAMG,KACX,YAAS,29BAA49B,CAACC,EAA4BC,CAAwC,CAAC,EAwShiCC,MACX,eAAYH,EAA6C,CAAC,EEnT5D,IAAAI,GAAsC,wCCAtC,IAAAC,GAAsC,wCCAtC,IAAAC,GAAsC,wCCAtC,IAAAC,GAAsC,wCAS/B,IAAMC,KACX,aAAS,6dAA8d,CAACC,EAA4BC,CAA2C,CAAC,EAkKriBC,MACX,gBAAYH,EAAiD,CAAC,EDpKzD,IAAMI,MACX,aAAS,0iBAA2iB,CAACC,EAA4BC,CAA+C,CAAC,EA4EtnBC,MACX,gBAAYH,GAA2C,CAAC,ED9EnD,IAAMI,MACX,aAAS,8vBAA+vB,CAACC,EAA4BC,EAAyC,CAAC,EA4Ep0BC,MACX,gBAAYH,GAAwC,CAAC,EGvFvD,IAAAI,GAAsC,wCCAtC,IAAAC,EAAgD,wCAWzC,IAAMC,KACX,YAAS,ipCAAkpC,CAACC,EAA4BC,EAA2CC,CAA2C,CAAC,EAgXpwCC,MACX,eAAYJ,EAA8C,CAAC,EAQjDK,QAOVA,IAAA,YAAc,GAAd,cAYAA,IAAA,QAAU,GAAV,UAcAA,IAAA,eAAiB,GAAjB,iBAeAA,IAAA,gBAAkB,GAAlB,kBAhDUA,QAAA,IA8DCC,MACX,YAASN,EAA8C,EAAG,CAAC,ED3btD,IAAMO,MACX,aAAS,kfAAmf,CAACC,EAA4BC,CAA4C,CAAC,EAkE3jBC,MACX,gBAAYH,GAAwC,CAAC,EE7EvD,IAAAI,EAAgD,wCASzC,IAAMC,KACX,YAAS,usBAAwsB,CAACC,EAA4BC,CAA+C,CAAC,EA8EnxBC,MACX,eAAYH,EAA2C,CAAC,EAO9CI,QAMVA,IAAA,YAAc,GAAd,cAOAA,IAAA,SAAW,GAAX,WAOAA,IAAA,OAAS,GAAT,SAOAA,IAAA,QAAU,GAAV,UA3BUA,QAAA,IAwCCC,MACX,YAASL,EAA2C,EAAG,CAAC,EN5HnD,IAAMM,MACX,aAAS,+8BAAg9B,CAACC,EAA4BC,GAAwCC,GAAwCC,CAAyC,CAAC,EAkGrmCC,KACX,gBAAYL,GAA+C,CAAC,EOjH9D,IAAAM,EAA6D,wCAG7D,IAAAC,EAA6G,kCCH7G,IAAAC,EAA6D,wCCA7D,IAAAC,GAAkC,wCCAlC,IAAAC,GAAsC,wCAMzBC,MACX,aAAS,stBAAstB,EDHjuB,IAAAC,GAAgD,kCAKnCC,MACX,aAAS,kUAAmU,CAACC,GAAsB,kCAA+B,CAAC,EEVrY,IAAAC,EAAyD,wCCAzD,IAAAC,GAAmC,wCAKtBC,MACX,aAAS,gYAAgY,EDF3Y,IAAAC,GAA+E,kCAMlEC,MACX,YAAS,6xJAA8xJ,CAACC,GAA8B,mCAAiC,gCAA6B,CAAC,EHNv4J,IAAAC,GAA+C,kCAQxC,IAAMC,KACX,YAAS,0xJAA2xJ,CAACC,EAA4BC,GAA6BC,GAAwB,kCAAgCC,CAAyC,CAAC,EAoCr7JC,MACX,eAAYL,EAAoD,CAAC,EAgDtDM,MACX,eAAYN,EAAoD,CAAC,EAkFtDO,MACX,eAAYP,EAAoD,CAAC,EA8DtDQ,MACX,eAAYR,EAAoD,CAAC,EAkEtDS,MACX,eAAYT,EAAoD,CAAC,EA8DtDU,MACX,eAAYV,EAAoD,CAAC,EAgEtDW,MACX,eAAYX,EAAoD,CAAC,EAgDtDY,MACX,eAAYZ,EAAoD,CAAC,EAoCtDa,MACX,eAAYb,EAAoD,CAAC,EAsBtDc,MACX,eAAYd,EAAoD,CAAC,EAkCtDe,MACX,eAAYf,EAAoD,EAAE,EAkCvDgB,MACX,eAAYhB,EAAoD,EAAE,EA4EvDiB,MACX,eAAYjB,EAAoD,EAAE,EA8GvDkB,MACX,eAAYlB,EAAoD,EAAE,EAgDvDmB,MACX,eAAYnB,EAAoD,EAAE,EAsFvDoB,MACX,eAAYpB,EAAoD,EAAE,EAOxDqB,QAMVA,IAAA,YAAc,GAAd,cAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,SAAW,GAAX,WAOAA,IAAA,UAAY,GAAZ,YAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,WAAa,GAAb,aAOAA,IAAA,UAAY,GAAZ,YA9DUA,QAAA,IA2ECC,MACX,YAAStB,EAAoD,CAAC,EAOnDuB,MA8DX,eAAYvB,EAAoD,CAAC,EKxkCnE,IAAAwB,EAAsC,wCAGtC,IAAAC,GAA+C,kCAMlCC,KACX,YAAS,k9IAAm9I,CAACC,EAA4B,iCAA8B,CAAC,EAgD7gJC,MACX,eAAYF,EAA0C,CAAC,EAgD5CG,MACX,eAAYH,EAA0C,CAAC,EA8D5CI,MACX,eAAYJ,EAA0C,CAAC,EA4E5CK,MACX,eAAYL,EAA0C,CAAC,EA8G5CM,MACX,eAAYN,EAA0C,CAAC,EA4E5CO,KACX,eAAYP,EAA0C,CAAC,EAyD5CQ,MACX,eAAYR,EAA0C,CAAC,EA8E5CS,MACX,eAAYT,EAA0C,CAAC,EAgD5CU,MACX,eAAYV,EAA0C,CAAC,EAkC5CW,MACX,eAAYX,EAA0C,CAAC,EA8D5CY,MACX,eAAYZ,EAA0C,EAAE,EAqF7Ca,MACX,eAAYb,EAA0C,GAAI,CAAC,EAgDhDc,MACX,eAAYd,EAA0C,EAAE,EAqF7Ce,MACX,eAAYf,EAA0C,GAAI,CAAC,ENx5BtD,IAAMgB,KACX,YAAS,qmhBAAsmhB,CAACC,EAA4B,kCAAiC,8BAA6B,iCAAgCC,EAAoDC,EAA2CC,EAA6CC,EAA2CC,GAA+CC,CAAwC,CAAC,EAkD9+hBC,MACX,eAAYR,EAA4C,CAAC,EAoC9CS,MACX,eAAYT,EAA4C,CAAC,EAsD9CU,MACX,eAAYV,EAA4C,CAAC,EAoC9CW,MACX,eAAYX,EAA4C,CAAC,EAkD9CY,MACX,eAAYZ,EAA4C,CAAC,EAoC9Ca,MACX,eAAYb,EAA4C,CAAC,EAgD9Cc,MACX,eAAYd,EAA4C,CAAC,EAgD9Ce,MACX,eAAYf,EAA4C,CAAC,EAkC9CgB,MACX,eAAYhB,EAA4C,CAAC,EAsB9CiB,MACX,eAAYjB,EAA4C,CAAC,EAkC9CkB,MACX,eAAYlB,EAA4C,EAAE,EAkC/CmB,MACX,eAAYnB,EAA4C,EAAE,EA8D/CoB,MACX,eAAYpB,EAA4C,EAAE,EAoC/CqB,MACX,eAAYrB,EAA4C,EAAE,EA8D/CsB,MACX,eAAYtB,EAA4C,EAAE,EAgD/CuB,MACX,eAAYvB,EAA4C,EAAE,EAsB/CwB,MACX,eAAYxB,EAA4C,EAAE,EAoC/CyB,MACX,eAAYzB,EAA4C,EAAE,EAgD/C0B,MACX,eAAY1B,EAA4C,EAAE,EAgE/C2B,MACX,eAAY3B,EAA4C,EAAE,EA4E/C4B,MACX,eAAY5B,EAA4C,EAAE,EAkC/C6B,MACX,eAAY7B,EAA4C,EAAE,EAwE/C8B,MACX,eAAY9B,EAA4C,EAAE,EAkE/C+B,MACX,eAAY/B,EAA4C,EAAE,EAwG/CgC,MACX,eAAYhC,EAA4C,EAAE,EAgE/CiC,MACX,eAAYjC,EAA4C,EAAE,EAkD/CkC,MACX,eAAYlC,EAA4C,EAAE,EAoC/CmC,MACX,eAAYnC,EAA4C,EAAE,EAsD/CoC,MACX,eAAYpC,EAA4C,EAAE,EAoC/CqC,MACX,eAAYrC,EAA4C,EAAE,EAkD/CsC,MACX,eAAYtC,EAA4C,EAAE,EAkC/CuC,MACX,eAAYvC,EAA4C,EAAE,EAgD/CwC,MACX,eAAYxC,EAA4C,EAAE,EAgD/CyC,MACX,eAAYzC,EAA4C,EAAE,EAkC/C0C,MACX,eAAY1C,EAA4C,EAAE,EAwE/C2C,MACX,eAAY3C,EAA4C,EAAE,EAgF/C4C,MACX,eAAY5C,EAA4C,EAAE,EAkC/C6C,MACX,eAAY7C,EAA4C,EAAE,EAsB/C8C,MACX,eAAY9C,EAA4C,EAAE,EA4C/C+C,MACX,eAAY/C,EAA4C,EAAE,EAkC/CgD,MACX,eAAYhD,EAA4C,EAAE,EAsB/CiD,MACX,eAAYjD,EAA4C,EAAE,EAkC/CkD,MACX,eAAYlD,EAA4C,EAAE,EAkC/CmD,MACX,eAAYnD,EAA4C,EAAE,EAkC/CoD,MACX,eAAYpD,EAA4C,EAAE,EAkC/CqD,MACX,eAAYrD,EAA4C,EAAE,EAkC/CsD,MACX,eAAYtD,EAA4C,EAAE,EAkC/CuD,MACX,eAAYvD,EAA4C,EAAE,EAkC/CwD,MACX,eAAYxD,EAA4C,EAAE,EAkC/CyD,MACX,eAAYzD,EAA4C,EAAE,EAkF/C0D,MACX,eAAY1D,EAA4C,EAAE,EAOhD2D,QAMVA,IAAA,YAAc,GAAd,cAYAA,IAAA,gBAAkB,GAAlB,kBAaAA,IAAA,gBAAkB,GAAlB,kBAmBAA,IAAA,OAAS,GAAT,SAoBAA,IAAA,OAAS,GAAT,SAtEUA,QAAA,IAmFCC,MACX,YAAS5D,EAA4C,CAAC,EAQ5C6D,QAMVA,IAAA,YAAc,GAAd,cAOAA,IAAA,MAAQ,GAAR,QAOAA,IAAA,OAAS,GAAT,SAOAA,IAAA,OAAS,GAAT,SAOAA,IAAA,SAAW,GAAX,WAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,aAAe,GAAf,eAhDUA,QAAA,IA8DCC,MACX,YAAS9D,EAA4C,CAAC,EAQ3C+D,MA4HX,eAAY/D,EAA4C,CAAC,EAW9CgE,MAsFX,eAAYhE,EAA4C,CAAC,EAO9CiE,MAoEX,eAAYjE,EAA4C,CAAC,EOxzF3D,IAAAkE,EAAwD,+BACxDC,EAQO,wCACPC,EAOO,iDAQA,SAASC,EACdC,EACW,CACX,MAAO,CACL,MAAM,MACJC,EACAC,EACAC,EACAC,EACAC,EACAC,EAC8B,CAC9B,GAAM,CAAE,UAAAC,EAAW,MAAAC,CAAM,KAAI,iCAA8BP,EAAQ,EAAI,EAEvE,SAAO,gBAAmB,CACxB,aAAcD,EAAQ,aACtB,OAAAE,EACA,UAAAC,EACA,IAAK,CACH,OAAQ,GACR,QAASF,EAAO,OAChB,OAAAA,EACA,cAAe,OACf,OAAK,mBAAgB,sBAAuBA,CAAM,EAClD,UAAQ,iBAAc,GAAME,EAAWC,EAAQ,EAAK,EACpD,cAAeE,MAAiB,uBAAoB,EACpD,QAAAD,CACF,EACA,KAAM,MAAOI,GAA0D,CACrE,IAAMC,EAAW,MAAMV,EAAQ,QAAQ,MAAMS,EAAI,IAAK,CACpD,OAAQA,EAAI,cACZ,QAASA,EAAI,OACb,OAAQA,EAAI,OACZ,QAAM,kBAAe,EAAGF,EAAUE,EAAI,OAAO,CAAC,CAChD,CAAC,EAEK,CAAE,YAAAE,CAAY,KAAI,oBACtBD,EAAS,OACTA,EAAS,OACX,EACA,GAAI,CAACA,EAAS,KACZ,MAAIC,IAAgB,OAAiBA,EAC/B,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAG/D,IAAMC,KAAS,gCACbF,EAAS,IACX,EAAE,UAAU,EACRG,EACAC,EAEJ,OAAS,CACP,IAAMC,EAAI,MAAMH,EAAO,KAAK,EAC5B,GAAIG,EAAE,KACJ,MAEF,GAAM,CAAE,MAAAC,EAAO,KAAAC,CAAK,EAAIF,EAAE,MAC1B,IAAKC,EAAQ,oBAAoB,iBAC/B,MAAM,IAAI,eACR,iDACA,OAAK,QACP,EAEF,GAAIA,IAAU,cAAa,CACzB,GAAIH,IAAY,OACd,MAAM,IAAI,eAAa,gBAAiB,OAAK,QAAQ,EAEvDA,KAAU,gBAAaI,CAAI,EAC3B,QACF,CACA,GAAIH,IAAQ,OACV,MAAM,IAAI,eAAa,gBAAiB,OAAK,aAAa,EAE5DA,EAAMN,EAAMS,CAAI,CAClB,CAEA,GAAIJ,IAAY,OACd,MAAIF,IAAgB,OAAiBA,EAC/B,IAAI,eACR,kBACAD,EAAS,QAAQ,IAAI,kBAAgB,EACjC,OAAK,cACL,OAAK,OACX,EAIF,MAFA,mBAAgBG,EAASH,EAAS,OAAO,EAErCI,IAAQ,OACV,MAAM,IAAI,eACR,kBACAD,EAAQ,IAAI,kBAAgB,EAAI,OAAK,cAAgB,OAAK,OAC5D,EAGF,MAAO,CACL,OAAQ,GACR,QAASZ,EAAO,OAChB,OAAAA,EACA,OAAQS,EAAS,QACjB,QAASI,EACT,QAAAD,CACF,CACF,CACF,CAAC,CACH,EAEA,MAAM,OACJZ,EACAC,EACAC,EACAC,EAKAc,EACAZ,EAC+B,CAC/B,GAAM,CAAE,UAAAC,EAAW,MAAAC,CAAM,KAAI,iCAA8BP,EAAQ,EAAI,EAEvE,eAAekB,EACbC,EACqB,CAGrB,GAAM,CAAE,MAAAC,EAAO,KAAAC,CAAK,EAAI,MAAMF,EAAO,OAAO,aAAa,EAAE,EAAE,KAAK,EAClE,GAAIE,EACF,MAAM,IAAI,eACR,0BACA,OAAK,eACP,EAEF,SAAO,kBAAe,EAAGf,EAAUc,CAAK,CAAC,CAC3C,CAEA,eAAgBE,EACdC,EACAC,EACAC,EACAC,EACAC,EACA,CAGA,GAAIH,EAAa,CAIf,GAAI,EAAE,QADc,gCAA6BD,CAAI,EAAE,UAAU,EACzC,KAAK,GAAG,KAC9B,MAAM,IAAI,eACR,+BACA,OAAK,QACP,EAEF,MACF,CAEA,IAAMZ,KAAS,gCAA6BY,CAAI,EAAE,UAAU,EACxDK,EAAkB,GACtB,OAAS,CACP,IAAMC,GAAS,MAAMlB,EAAO,KAAK,EACjC,GAAIkB,GAAO,KACT,MAEF,GAAM,CAAE,MAAAd,GAAO,KAAAC,EAAK,EAAIa,GAAO,MAC/B,IAAKd,GAAQ,iBAAiB,cAAa,CACzC,GAAIa,EACF,MAAM,IAAI,eAAa,gBAAiB,OAAK,QAAQ,EAEvDA,EAAkB,GAClB,IAAMhB,MAAU,gBAAaI,EAAI,KACjC,mBAAgBJ,GAASc,CAAS,EAClCd,GAAQ,QAAQ,CAACQ,GAAOU,KAAQL,EAAc,IAAIK,GAAKV,EAAK,CAAC,EAC7D,QACF,CACA,GAAIQ,EACF,MAAM,IAAI,eACR,8BACA,OAAK,QACP,EAEF,MAAMrB,EAAMS,EAAI,CAClB,CAOA,GAJI,mBAAoBW,GACtBA,EAAY,iBAAiB,EAG3B,CAACC,EACH,MAAM,IAAI,eAAa,kBAAmB,OAAK,QAAQ,CAE3D,CAEA,SAAO,oBAAuB,CAC5B,aAAc7B,EAAQ,aACtB,OAAAE,EACA,UAAAC,EACA,IAAK,CACH,OAAQ,GACR,QAASF,EAAO,OAChB,OAAAA,EACA,cAAe,OACf,OAAK,mBAAgB,sBAAuBA,CAAM,EAClD,UAAQ,iBAAc,GAAME,EAAWC,EAAuB,EAAK,EACnE,cAAeE,MAAiB,uBAAoB,EACpD,QAASY,CACX,EACA,KAAM,MAAOT,GAAQ,CACnB,IAAMe,EAAO,MAAML,EAAkBV,EAAI,OAAO,EAC1CuB,EAAO,MAAMhC,EAAQ,QAAQ,MAAMS,EAAI,IAAK,CAChD,OAAQA,EAAI,cACZ,QAASA,EAAI,OACb,OAAQA,EAAI,OACZ,KAAMe,CACR,CAAC,EAEK,CAAE,YAAAC,EAAa,YAAAd,CAAY,KAAI,oBACnCqB,EAAK,OACLA,EAAK,OACP,EACA,GAAIrB,EACF,MAAMA,EAER,GAAI,CAACqB,EAAK,KACR,MAAM,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAG/D,IAAMnB,EAAU,IAAI,QAapB,MAZkC,CAChC,GAAGJ,EACH,OAAQuB,EAAK,QACb,QAAAnB,EACA,QAASU,EACPS,EAAK,KACLP,EACAZ,EACAmB,EAAK,QACLvB,EAAI,MACN,CACF,CAEF,CACF,CAAC,CACH,CACF,CACF,CC1QA,IAAAwB,EAAsC,wCAU/B,IAAMC,KACX,YAAS,uuCAAwuC,CAACC,EAA2CC,CAA0C,CAAC,EAsC7zCC,MACX,eAAYH,EAA6C,CAAC,EAgD/CI,MACX,eAAYJ,EAA6C,CAAC,EAsB/CK,MACX,eAAYL,EAA6C,CAAC,EAkC/CM,MACX,eAAYN,EAA6C,CAAC,EAsB/CO,MACX,eAAYP,EAA6C,CAAC,EAkC/CQ,MACX,eAAYR,EAA6C,CAAC,EAsB/CS,MACX,eAAYT,EAA6C,CAAC,EAgD/CU,MACX,eAAYV,EAA6C,CAAC,EA8D/CW,MACX,eAAYX,EAA6C,CAAC,EAsB/CY,MACX,eAAYZ,EAA6C,CAAC,EpB/S5D,IAAMa,GAA6C,CACjD,OAAQ,SACR,SAAU,WACV,mBAAoB,qBACtB,EAEA,SAASC,GAAYC,EAA2B,CAC9C,OAAOF,GAAmBE,CAAS,GAAKA,CAC1C,CAoCO,IAAMC,EAAN,KAAc,CACT,IACA,cACA,YAQV,YAAYC,EAAkBC,EAAqB,CACjD,KAAK,IAAMD,EACX,KAAK,YAAcC,EACnB,KAAK,iBAAgB,gBACnBC,GACAC,EAAuB,CACrB,QAAS,KAAK,IAAI,OAClB,aAAc,CACXC,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB,UAAU,KAAK,WAAW,EAAE,EACrD,MAAMD,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAeA,MAAM,kBAAiCC,EAA0B,CAI/D,IAAMC,GAHW,MAAM,KAAK,cAAc,wBAAwB,CAChE,MAAO,CAACD,CAAI,CACd,CAAC,GACsB,MAAMA,CAAI,EACjC,OAAQC,KAAQ,UAAO,cAAaA,CAAK,EAAI,MAC/C,CAyBA,MAAM,sBACDC,EACS,CACZ,IAAMC,EAAW,MAAM,KAAK,cAAc,wBAAwB,CAChE,MAAOD,CACT,CAAC,EACKE,EAAiC,CAAC,EACxC,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,EAAS,KAAK,EACtDC,EAAIC,CAAG,KAAI,UAAO,cAAaC,CAAK,EAEtC,OAAOF,CACT,CAeA,MAAM,gBAA+BJ,EAA0B,CAI7D,IAAMC,GAHW,MAAM,KAAK,cAAc,sBAAsB,CAC9D,MAAO,CAACD,CAAI,CACd,CAAC,GACsB,MAAMA,CAAI,EACjC,OAAQC,KAAQ,UAAO,cAAaA,CAAK,EAAI,MAC/C,CAyBA,MAAM,oBACDC,EACS,CACZ,IAAMC,EAAW,MAAM,KAAK,cAAc,sBAAsB,CAC9D,MAAOD,CACT,CAAC,EACKE,EAAiC,CAAC,EACxC,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,EAAS,KAAK,EACtDC,EAAIC,CAAG,KAAI,UAAO,cAAaC,CAAK,EAEtC,OAAOF,CACT,CAkBA,MAAM,aAAaJ,EAA8B,CAI/C,OAHiB,MAAM,KAAK,cAAc,mBAAmB,CAC3D,MAAO,CAACA,CAAI,CACd,CAAC,GACe,MAAMA,CAAI,CAC5B,CAmBA,MAAM,iBAAiBO,EAAiD,CAItE,OAHiB,MAAM,KAAK,cAAc,mBAAmB,CAC3D,MAAAA,CACF,CAAC,GACe,KAClB,CAkBA,MAAM,eAAeP,EAA8B,CAIjD,OAHiB,MAAM,KAAK,cAAc,qBAAqB,CAC7D,MAAO,CAACA,CAAI,CACd,CAAC,GACe,MAAMA,CAAI,CAC5B,CAmBA,MAAM,mBAAmBO,EAAiD,CAIxE,OAHiB,MAAM,KAAK,cAAc,qBAAqB,CAC7D,MAAAA,CACF,CAAC,GACe,KAClB,CAiBA,cAAcP,EAA4B,CACxC,MAAO,CAACQ,EAA+BC,IAAuB,CAC5D,IAAMV,EAAM,IAAI,QAAQS,EAAOC,CAAI,EACnC,OAAAV,EAAI,QAAQ,IACV,0CACA,UAAU,KAAK,WAAW,EAC5B,EACAA,EAAI,QAAQ,IAAI,yCAA0C,QAAQC,CAAI,EAAE,EACxED,EAAI,QAAQ,IAAI,OAAQ,IAAI,IAAIA,EAAI,GAAG,EAAE,IAAI,EAEtC,KAAK,IAAI,UAAU,MAAMA,CAAG,CACrC,CACF,CAiBA,gBAAgBC,EAA4B,CAC1C,MAAO,CAACQ,EAA+BC,IAAuB,CAC5D,IAAMV,EAAM,IAAI,QAAQS,EAAOC,CAAI,EACnC,OAAAV,EAAI,QAAQ,IACV,0CACA,UAAU,KAAK,WAAW,EAC5B,EACAA,EAAI,QAAQ,IACV,yCACA,UAAUC,CAAI,EAChB,EACAD,EAAI,QAAQ,IAAI,OAAQ,IAAI,IAAIA,EAAI,GAAG,EAAE,IAAI,EACtC,KAAK,IAAI,UAAU,MAAMA,CAAG,CACrC,CACF,CAoBA,MAAM,UAAUW,EAA8B,CAC5C,MAAM,KAAK,cAAc,UAAU,CAAE,YAAaA,CAAM,CAAC,CAC3D,CAeA,MAAM,mBAAyD,CAE7D,OADiB,MAAM,KAAK,cAAc,kBAAkB,CAAC,CAAC,GAC9C,kBAClB,CASA,MAAM,SAASC,EAAkC,CAC/C,IAAIC,EAAM,IAAI,IAAI,oBAAoB,EACtCA,EAAI,SAAWD,EACf,IAAMP,EAAM,MAAM,KAAK,IAAI,OAAO,MAAMQ,EAAK,CAAE,OAAQ,KAAM,CAAC,EAC9D,GAAI,CAACR,EAAI,GACP,MAAMS,GAAaT,EAAI,MAAM,EAG/B,IAAMU,EAAcV,EAAI,QAAQ,IAAI,cAAc,EAClD,GACE,CAACU,GACD,CAACA,EAAY,YAAY,EAAE,SAAS,0BAA0B,EAE9D,MAAM,IAAI,eACR,6CACA,OAAK,eACP,EAGF,MAAO,CAAE,QAASV,EAAI,KAAwB,KAAMU,CAAY,CAClE,CASA,MAAM,cAAcH,EAAuC,CACzD,IAAIC,EAAM,IAAI,IAAI,oBAAoB,EACtCA,EAAI,SAAWD,EACf,IAAMP,EAAM,MAAM,KAAK,IAAI,OAAO,MAAMQ,EAAK,CAAE,OAAQ,KAAM,CAAC,EAC9D,GAAI,CAACR,EAAI,GACP,MAAMS,GAAaT,EAAI,MAAM,EAG/B,IAAMU,EAAcV,EAAI,QAAQ,IAAI,cAAc,EAClD,GACE,CAACU,GACD,CAACA,EAAY,YAAY,EAAE,SAAS,kBAAkB,EAEtD,MAAM,IAAI,eACR,6CACA,OAAK,eACP,EAEF,OAAQ,MAAMV,EAAI,KAAK,CACzB,CACF,EAMaW,GAAN,KAAsB,CAClB,OAOT,YAAYC,EAAkC,CAC5C,KAAK,OAASA,CAChB,CAqBA,IACEX,EAQY,CACZ,IAAMD,EAAM,KAAK,OAAOC,CAAG,EAC3B,GAAKD,EAGL,MAAO,CACL,MAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAI,KAAK,CAAC,EACrD,IAAKA,EAAI,SAAU,IACnB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,EACvD,KAAMA,EAAI,SAAU,IACtB,CACF,CAqBA,UAAUC,EAOI,CACZ,IAAMD,EAAM,KAAK,OAAOC,CAAG,EAC3B,GAAKD,EAIL,MAAO,CACL,IAAKA,EAAI,SAAU,IACnB,MAAOA,EAAI,MACX,gBAAc,iBAAcA,EAAI,SAAU,YAAa,EACvD,KAAMA,EAAI,SAAU,IACtB,CACF,CACF,EASaa,GAAN,KAAwB,CACrB,IAAwB,CAAC,EAkBjC,OAAgBZ,EAAaC,EAAUY,EAAoB,CACzD,YAAK,IAAI,QACP,UAAOC,EAAsB,CAC3B,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAAd,EACA,MAAO,CACL,MACEC,aAAiB,WACbA,EACA,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUA,CAAK,CAAC,EACpD,IAAAY,CACF,CACF,CACF,CACF,CAAC,CACH,EACO,IACT,CAgBA,OAAOb,EAAmB,CACxB,YAAK,IAAI,QACP,UAAOc,EAAsB,CAC3B,UAAW,CACT,KAAM,SACN,MAAO,CAAE,IAAAd,CAAI,CACf,CACF,CAAC,CACH,EACO,IACT,CAuBA,YACEe,EACAC,EACAC,EACAC,EACM,CACN,YAAK,IAAI,QACP,UAAOJ,EAAsB,CAC3B,UAAW,CACT,KAAM,cACN,MAAO,CACL,MAAAC,EACA,IAAAC,EACA,eAAAC,EACA,aAAAC,CACF,CACF,CACF,CAAC,CACH,EACO,IACT,CAOA,OAA0B,CACxB,OAAO,KAAK,GACd,CACF,EA4LaC,EAAN,KAAY,CACT,QACA,UAQR,YAAYC,EAA6BC,EAA0B,CACjE,KAAK,QAAUD,EACf,KAAK,aAAY,gBAAaE,GAAiBD,CAAS,CAC1D,CA8BA,MAAM,OACJrB,EACAC,EACAY,EACAU,EACwB,CACxB,IAAIC,EACAD,IACFC,KAAe,UAAOC,GAAwC,CAAC,CAAC,EAC5DF,EAAU,aACZC,EAAa,aAAe,IAExBD,EAAU,aACZC,EAAa,KAAOD,EAAU,YAE5BA,EAAU,gBACZC,EAAa,mBAAqB,CAChC,KAAM,qBACN,SAAO,qBAAkBD,EAAU,eAAe,CACpD,EACSA,EAAU,iBACnBC,EAAa,mBAAqB,CAChC,KAAM,oBACN,SAAO,UAAOE,GAAsB,CAClC,MAAOH,EAAU,eAAe,SAC5B,qBAAkBA,EAAU,eAAe,KAAK,EAChD,OACJ,IAAKA,EAAU,eAAe,OAC1B,qBAAkBA,EAAU,eAAe,GAAG,EAC9C,OACJ,eAAgBA,EAAU,eAAe,eACzC,aAAcA,EAAU,eAAe,YACzC,CAAC,CACH,KAKN,IAAMxB,EAAM,MAAM,KAAK,QAAQ,WAAW,CACxC,UAAW,CACT,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAAC,EACA,MAAO,CACL,MACEC,aAAiB,WACbA,EACA,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUA,CAAK,CAAC,EACpD,IAAAY,CACF,EACA,aAAAW,CACF,CACF,CACF,EACA,UAAW,KAAK,SAClB,CAAC,EAED,MAAO,CACL,IAAKzB,EAAI,SAAU,IACnB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,EACvD,KAAMA,EAAI,SAAU,IACtB,CACF,CA4BA,MAAM,OAAOC,EAAauB,EAA4C,CACpE,IAAIC,EACAD,IACFC,KAAe,UAAOG,GAAwC,CAAC,CAAC,EAC5DJ,EAAU,WACZC,EAAa,WAAa,IAEtBD,EAAU,aACZC,EAAa,KAAOD,EAAU,YAE5BA,EAAU,gBACZC,EAAa,mBAAqB,CAChC,KAAM,qBACN,SAAO,qBAAkBD,EAAU,eAAe,CACpD,EACSA,EAAU,iBACnBC,EAAa,mBAAqB,CAChC,KAAM,oBACN,SAAO,UAAOE,GAAsB,CAClC,MAAOH,EAAU,eAAe,SAC5B,qBAAkBA,EAAU,eAAe,KAAK,EAChD,OACJ,IAAKA,EAAU,eAAe,OAC1B,qBAAkBA,EAAU,eAAe,GAAG,EAC9C,OACJ,eAAgBA,EAAU,eAAe,eACzC,aAAcA,EAAU,eAAe,YACzC,CAAC,CACH,KAKN,MAAM,KAAK,QAAQ,WAAW,CAC5B,UAAW,CACT,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAAvB,EACA,aAAAwB,CACF,CACF,CACF,EACA,UAAW,KAAK,SAClB,CAAC,CACH,CA6BA,MAAM,YACJT,EACAC,EACAC,EACAC,EACe,CACf,MAAM,KAAK,QAAQ,gBAAgB,CACjC,UAAW,KAAK,UAChB,WAAY,CACV,CACE,UAAW,CACT,KAAM,cACN,MAAO,CACL,MAAAH,EACA,IAAAC,EACA,eAAAC,EACA,aAAAC,CACF,CACF,CACF,CACF,CACF,CAAC,CACH,CAoBA,MAAM,IACJlB,EASA,CAMA,IAAM4B,GALM,MAAM,KAAK,QAAQ,eAAe,CAC5C,KAAM,CAAC5B,CAAG,EACV,UAAW,KAAK,SAClB,CAAC,GAEkB,MAAMA,CAAG,EAC5B,GAAI4B,EACF,MAAO,CACL,KAAM,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAO,KAAK,CAAC,EACvD,IAAKA,EAAO,SAAU,IACtB,KAAMA,EAAO,SAAU,KACvB,gBAAc,iBAAcA,EAAO,SAAU,YAAa,CAC5D,CAEJ,CAoBA,MAAM,UAAU5B,EAQd,CAMA,IAAM4B,GALM,MAAM,KAAK,QAAQ,eAAe,CAC5C,KAAM,CAAC5B,CAAG,EACV,UAAW,KAAK,SAClB,CAAC,GAEkB,MAAMA,CAAG,EAC5B,GAAI4B,EACF,MAAO,CACL,KAAMA,EAAO,MACb,IAAKA,EAAO,SAAU,IACtB,KAAMA,EAAO,SAAU,KACvB,gBAAc,iBAAcA,EAAO,SAAU,YAAa,CAC5D,CAEJ,CA+CA,MAAM,YACJC,EAUC,CACD,IAAM9B,EAAM,MAAM,KAAK,QAAQ,YAAY,CACzC,UAAW,KAAK,UAChB,UAAW8B,CACb,CAAC,EAED,MAAO,CACL,UAAW9B,EAAI,UACf,MAAO,OAAO,QAAQA,EAAI,KAAK,EAC5B,KAAK,CAAC,CAAC+B,CAAI,EAAG,CAACC,CAAI,IAAMD,EAAK,cAAcC,CAAI,CAAC,EACjD,IAAI,CAAC,CAAC/B,EAAKgC,CAAG,KAAO,CACpB,IAAAhC,EACA,MAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOgC,EAAI,KAAK,CAAC,EACrD,IAAKA,EAAI,SAAU,IACnB,KAAMA,EAAI,SAAU,KACpB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,CACzD,EAAE,CACN,CACF,CA+CA,MAAM,kBAAkBH,EAQrB,CACD,IAAM9B,EAAM,MAAM,KAAK,QAAQ,YAAY,CACzC,UAAW,KAAK,UAChB,UAAW8B,CACb,CAAC,EAED,MAAO,CACL,UAAW9B,EAAI,UACf,MAAO,OAAO,OAAOA,EAAI,KAAK,EAAE,IAAKiC,IAAS,CAC5C,MAAOA,EAAI,MACX,IAAKA,EAAI,SAAU,IACnB,KAAMA,EAAI,SAAU,KACpB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,CACzD,EAAE,CACJ,CACF,CA2BA,MAAM,WAAWC,EAEd,CACD,IAAMnC,EAAW,MAAM,KAAK,QAAQ,gBAAgB,CAClD,UAAW,KAAK,UAChB,WAAYmC,CACd,CAAC,EAEGtB,EAA2C,CAAC,EAChD,OAAW,CAACX,EAAKkC,CAAQ,IAAK,OAAO,QAAQpC,EAAS,QAAQ,EAC5Da,EAAOX,CAAG,EAAI,CACZ,IAAKkC,EAAS,IACd,gBAAc,iBAAcA,EAAS,YAAa,EAClD,KAAMA,EAAS,IACjB,EAEF,OAAOvB,CACT,CAkBA,MAAM,UAAUd,EAA0C,CACxD,IAAMC,EAAW,MAAM,KAAK,QAAQ,eAAe,CACjD,UAAW,KAAK,UAChB,KAAAD,CACF,CAAC,EACD,OAAO,IAAIa,GAAgBZ,EAAS,KAAK,CAC3C,CAsBA,MAAM,QAAQqC,EAAgBtB,EAAgC,CAC5D,GAAI,CACF,MAAM,KAAK,QAAQ,WAAW,CAC5B,UAAW,KAAK,UAChB,UAAW,CACT,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAKsB,EACL,MAAO,CACL,MAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EACzB,IAAKtB,GAAO,CACd,EACA,gBAAc,UAAOY,GAAwC,CAC3D,aAAc,EAChB,CAAC,CACH,CACF,CACF,CACF,CAAC,CACH,OAASW,EAAG,CACV,GAAIA,aAAa,gBAAgBA,EAAE,OAAS,OAAK,mBAC/C,MAAO,GAET,MAAMA,CACR,CAEA,MAAO,EACT,CAaA,MAAM,QAAQD,EAA+B,CAC3C,MAAM,KAAK,WAAW,IAAIvB,GAAkB,EAAE,OAAOuB,CAAM,EAAE,MAAM,CAAC,CACtE,CAkCA,MAAM,KACJnC,EACAqC,EACAC,EACY,CACZ,IAAMC,EAAaD,GAAS,YAAc,EACpCE,EAAeF,GAAS,cAAgB,GACxCG,EAAWH,GAAS,UAAY,IAEtC,QAASI,EAAU,EAAGA,EAAUH,EAAYG,IAE1C,GADiB,MAAM,KAAK,QAAQ1C,CAAG,EAErC,GAAI,CACF,OAAO,MAAMqC,EAAQ,CACvB,QAAE,CACA,MAAM,KAAK,QAAQrC,CAAG,CACxB,SACS0C,EAAUH,EAAa,EAAG,CACnC,IAAMI,EAAQ,KAAK,IAAIH,EAAe,GAAKE,EAASD,CAAQ,EAC5D,QAAQ,IACN,+BAA+BzC,CAAG,kBAAkB2C,CAAK,IAC3D,EACA,MAAM,IAAI,QAASC,GAAY,WAAWA,EAASD,CAAK,CAAC,CAC3D,CAEF,MAAM,IAAI,MAAM,8CAA8C,CAChE,CACF,EAMaE,GAAN,cAA0BzD,CAAQ,CAC7B,SAQV,YAAYC,EAA0BC,EAAqB,CACzD,MAAMD,EAAKC,CAAW,EACtB,KAAK,YAAW,gBACdwD,GACAtD,EAAuB,CACrB,QAASH,EAAI,SACb,aAAc,CACXI,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB,UAAUJ,CAAW,EAAE,EAChD,MAAMG,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAiDA,MAAM,aACDqD,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,SAAS,gBAAgB,CACnD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAY1E,GAVIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,EACnC,GAAIlD,EAAS,QAAUA,EAAS,OAAO,OAAS,EAC9C,GAAI,CACFa,EAAO,OAAS,KAAK,MACnB,IAAI,YAAY,EAAE,OAAOb,EAAS,MAAM,CAC1C,CACF,MAAQ,CACNa,EAAO,OAAS,MAClB,MAEAA,EAAO,OAAS,OAIpB,OAAOA,CACT,CA4CA,MAAM,mBACDoC,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,SAAS,gBAAgB,CACnD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAE1E,OAAIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,IACnCrC,EAAO,OAASb,EAAS,QAGpBa,CACT,CAgBA,cAAcU,EAAuC,CACnD,OAAO,IAAIF,EACT,KAAK,SACLE,IAAc,SAAW,mBAAqB,kBAChD,CACF,CASA,cAAc6B,EAAwC,CACpD,OAAO,IAAIC,GACT,KAAK,IACL,KAAK,YACLD,CACF,CACF,CACF,EAMaE,GAAN,cAA8BP,EAAY,CAIrC,kBASV,YACExD,EACAC,EACA+D,EACA,CACA,MAAMhE,EAAKC,CAAW,EACtB,KAAK,kBAAoB+D,EAGzB,KAAK,YAAW,gBACdP,GACAtD,EAAuB,CACrB,QAASH,EAAI,SACb,aAAc,CACXI,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB2D,CAAiB,EAC1C,MAAM5D,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAeA,eAAwB,CACtB,OAAO,KAAK,iBACd,CAiBA,gBAAgB2B,EAAuC,CACrD,OAAO,IAAIF,EACT,KAAK,SACLE,IAAc,SACV,4BACA,2BACN,CACF,CACF,EA4Ba8B,GAAN,cAAiCC,EAAgB,CAQtD,YACE/D,EACAC,EACA+D,EACA,CACA,MAAMhE,EAAKC,EAAa+D,CAAiB,CAC3C,CAyBA,MAAM,YAAYf,EAIf,CACD,IAAMxC,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,SAAUwC,GAAS,SACnB,gBAAiBA,GAAS,eAC5B,CAAC,EAED,MAAO,CACL,QAAS,OAAO,YACd,OAAO,QAAQxC,EAAS,OAAO,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAK,IAAM,CACrDD,EACA,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOC,EAAM,IAAI,CAAC,CACjD,CAAC,CACH,EACA,SAAUH,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAyBA,MAAM,kBAAkBwC,EAIrB,CACD,IAAMxC,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,SAAUwC,GAAS,SACnB,gBAAiBA,GAAS,eAC5B,CAAC,EACD,MAAO,CACL,QAASxC,EAAS,QAClB,SAAUA,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAkBA,MAAM,oBAAoBwD,EAIvB,CACD,IAAMxD,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,OAAAwD,CACF,CAAC,EAED,MAAO,CACL,QAAS,OAAO,YACd,OAAO,QAAQxD,EAAS,OAAO,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAK,IAAM,CACrDD,EACA,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOC,EAAM,IAAI,CAAC,CACjD,CAAC,CACH,EACA,SAAUH,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAkBA,MAAM,0BAA0BwD,EAI7B,CACD,IAAMxD,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,OAAAwD,CACF,CAAC,EACD,MAAO,CACL,QAASxD,EAAS,QAClB,SAAUA,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAiBA,MAAM,UAAqCH,EAA0B,CAInE,IAAM4D,GAHW,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAO,CAAC5D,CAAI,CACd,CAAC,GACqB,MAAMA,CAAI,EAChC,OACE4D,EAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAK,IAAI,CAAC,EAAI,MAE7D,CAiBA,MAAM,gBAAgB5D,EAA+C,CAInE,OAHiB,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAO,CAACA,CAAI,CACd,CAAC,GACe,MAAMA,CAAI,CAC5B,CA4BA,MAAM,cACDO,EACS,CACZ,GAAIA,EAAM,SAAW,EACnB,MAAO,CAAC,EAGV,IAAMJ,EAAW,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAOI,CACT,CAAC,EAED,GAAI,OAAO,KAAKJ,EAAS,KAAK,EAAE,SAAW,EACzC,MAAO,CAAC,EAGV,IAAMC,EAAiC,CAAC,EACxC,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,EAAS,KAAK,EACtDC,EAAIC,CAAG,EAAI,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOC,EAAM,IAAI,CAAC,EAE5D,OAAOF,CACT,CAoBA,MAAM,oBACDG,EACkC,CACrC,OAAIA,EAAM,SAAW,EACZ,CAAC,GAGO,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAOA,CACT,CAAC,GAEe,KAClB,CAoCA,MAAM,KACJsD,EACAC,EASe,CACf,MAAM,KAAK,SAAS,KAAK,CACvB,YAAAD,EACA,QAASC,EACL,OAAO,YACL,OAAO,QAAQA,CAAO,EAAE,IAAI,CAAC,CAACzD,EAAKC,CAAK,IAGpCA,GAAO,gBAAgB,YACvB,OAAOA,GAAO,UAAa,UAC3BA,EAAM,SAEC,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAMzD,EAAM,KACZ,SAAUA,EAAM,SAChB,SAAUA,EAAM,QAClB,CAAC,CACH,EAIK,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAM,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUzD,CAAK,CAAC,EACpD,SAAU,kBACZ,CAAC,CACH,CACD,CACH,EACA,CAAC,CACP,CAAC,CACH,CA8BA,MAAM,iBACJN,EACAgE,EACAF,EAS4B,CAmC5B,OAlCiB,MAAM,KAAK,SAAS,iBAAiB,CACpD,KAAA9D,EACA,SAAUgE,EACV,QAASF,EACL,OAAO,YACL,OAAO,QAAQA,CAAO,EAAE,IAAI,CAAC,CAACzD,EAAKC,CAAK,IAGpCA,GAAO,gBAAgB,YACvB,OAAOA,GAAO,UAAa,UAC3BA,EAAM,SAEC,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAMzD,EAAM,KACZ,SAAUA,EAAM,SAChB,SAAUA,EAAM,QAClB,CAAC,CACH,EAIK,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAM,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUzD,CAAK,CAAC,EACpD,SAAU,kBACZ,CAAC,CACH,CACD,CACH,EACA,CAAC,CACP,CAAC,GACe,SAClB,CAeA,MAAM,YAAY2D,EAAwC,CACxD,IAAM9D,EAAW,MAAM,KAAK,SAAS,qBAAqB,CACxD,GAAA8D,CACF,CAAC,EACD,GAAI,CAAC9D,EAAS,KACZ,MAAM,IAAI,eAAa,+BAAgC,OAAK,QAAQ,EAEtE,OAAOA,EAAS,IAClB,CAcA,MAAM,eAAe8D,EAA2B,CAC9C,MAAM,KAAK,SAAS,wBAAwB,CAAE,GAAAA,CAAG,CAAC,CACpD,CACF,EA+CaC,GAAN,cAA8BzE,CAAQ,CACnC,aAQR,YAAYC,EAA8BC,EAAqB,CAC7D,MAAMD,EAAKC,CAAW,EACtB,KAAK,gBAAe,gBAClBwE,GACAtE,EAAuB,CACrB,QAASH,EAAI,aACb,aAAc,CACXI,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB,UAAUJ,CAAW,EAAE,EAChD,MAAMG,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAqCA,MAAM,aACDqD,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,aAAa,gBAAgB,CACvD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAY1E,GAVIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,EACnC,GAAIlD,EAAS,QAAUA,EAAS,OAAO,OAAS,EAC9C,GAAI,CACFa,EAAO,OAAS,KAAK,MACnB,IAAI,YAAY,EAAE,OAAOb,EAAS,MAAM,CAC1C,CACF,MAAQ,CACNa,EAAO,OAAS,MAClB,MAEAA,EAAO,OAAS,OAIpB,OAAOA,CACT,CAmCA,MAAM,mBACDoC,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,aAAa,gBAAgB,CACvD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAE1E,OAAIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,IACnCrC,EAAO,OAASb,EAAS,QAGpBa,CACT,CAuCA,MAAM,WACJoD,EAC6B,CAC7B,GAAI,CAACA,EAAK,QAAU,CAACA,EAAK,SACxB,MAAM,IAAI,eACR,6CACA,OAAK,eACP,EAGF,IAAIC,EACAD,EAAK,SAAW,SAClBC,EACED,EAAK,kBAAkB,WACnBA,EAAK,OACL,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUA,EAAK,MAAM,CAAC,GAG5D,IAAMjE,EAAW,MAAM,KAAK,aAAa,iBAAiB,CACxD,OAAQkE,EACR,SAAUD,EAAK,YACX,YAASd,EAAsBc,EAAK,QAAQ,EAC5C,OACJ,iBAAkBA,GAAM,gBAC1B,CAAC,EACD,SAAO,UACLd,EACAnD,EAAS,QACX,CACF,CAgCA,MAAM,oBACJ6D,EACAM,EACAC,EAC0C,CAC1C,IAAMpE,EAAW,MAAM,KAAK,aAAa,oBAAoB,CAC3D,SAAA6D,EACA,QAASM,GAAS,IAAKE,MAAM,YAASC,GAAoBD,CAAC,CAAC,GAAK,CAAC,EAClE,UAAWD,KAAY,YAAS,kBAAiBA,CAAS,EAAI,MAChE,CAAC,EACD,SAAO,UACLG,GACAvE,CACF,CACF,CASA,cAAcuB,EAAuC,CACnD,OAAO,IAAIF,EACT,KAAK,aACLE,IAAc,SAAW,mBAAqB,kBAChD,CACF,CACF,EAQO,SAASb,GAAa8D,EAA8B,CACzD,OAAQA,EAAQ,CACd,IAAK,KACH,OAAO,IAAI,eAAa,cAAe,OAAK,eAAe,EAC7D,IAAK,KACH,OAAO,IAAI,eAAa,eAAgB,OAAK,eAAe,EAC9D,IAAK,KACH,OAAO,IAAI,eAAa,YAAa,OAAK,gBAAgB,EAC5D,IAAK,KACH,OAAO,IAAI,eAAa,YAAa,OAAK,QAAQ,EACpD,IAAK,KACH,OAAO,IAAI,eAAa,WAAY,OAAK,aAAa,EACxD,IAAK,KACH,OAAO,IAAI,eAAa,oBAAqB,OAAK,iBAAiB,EACrE,IAAK,KACH,OAAO,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAChE,IAAK,KACH,OAAO,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAChE,IAAK,KACH,OAAO,IAAI,eAAa,kBAAmB,OAAK,aAAa,EAC/D,IAAK,KACH,OAAO,IAAI,eAAa,sBAAuB,OAAK,WAAW,EACjE,IAAK,KACH,OAAO,IAAI,eAAa,kBAAmB,OAAK,gBAAgB,EAClE,QACE,OAAO,IAAI,eAAa,uBAAuBA,CAAM,GAAI,OAAK,OAAO,CACzE,CACF,CAQO,SAASC,GAA4BC,EAA6B,CACvE,OAAQA,EAAM,KAAM,CAClB,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,QACR,MAAO,KACT,KAAK,OAAK,gBACR,MAAO,KACT,KAAK,OAAK,iBACR,MAAO,KACT,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,cACR,MAAO,KACT,KAAK,OAAK,iBACR,MAAO,KACT,KAAK,OAAK,kBACR,MAAO,KACT,KAAK,OAAK,mBACR,MAAO,KACT,KAAK,OAAK,QACR,MAAO,KACT,KAAK,OAAK,WACR,MAAO,KACT,KAAK,OAAK,cACR,MAAO,KACT,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,YACR,MAAO,KACT,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,gBACR,MAAO,KACT,QAEE,MAAO,IACX,CACF",
6
- "names": ["api_exports", "__export", "ApiBase", "AuthorizeRequestSchema", "AuthorizeResponseSchema", "AutomationService", "BatchGetActiveSignalsRequestSchema", "BatchGetActiveSignalsResponseSchema", "BatchGetSystemTokensRequestSchema", "BatchGetSystemTokensResponseSchema", "BatchGetSystemVariablesRequestSchema", "BatchGetSystemVariablesResponseSchema", "BatchGetUserTokensRequestSchema", "BatchGetUserTokensResponseSchema", "BatchGetUserVariablesRequestSchema", "BatchGetUserVariablesResponseSchema", "BatchReadResult", "CancelExchangeOperationRequestSchema", "CancelExchangeOperationResponseSchema", "ConditionalDeleteOpSchema", "ConditionalDeleteOp_PreconditionSchema", "ConditionalInsertOpSchema", "ConditionalInsertOp_PreconditionSchema", "ConditionalWriteOperationSchema", "ConfiguratorApi", "ConfiguratorService", "ConfiguratorServiceBatchReadStoreRequestSchema", "ConfiguratorServiceBatchReadStoreResponseSchema", "ConfiguratorServiceBatchWriteStoreRequestSchema", "ConfiguratorServiceBatchWriteStoreResponseSchema", "ConfiguratorServiceGetVertexConfigRequestSchema", "ConfiguratorServiceGetVertexConfigResponseSchema", "ConfiguratorServiceSelectStoreRequestSchema", "ConfiguratorServiceSelectStoreResponseSchema", "ConfiguratorServiceWriteStoreRequestSchema", "ConfiguratorServiceWriteStoreResponseSchema", "CronTriggerRequestSchema", "CronTriggerResponseSchema", "DeleteOpSchema", "DispatchExchangeRequestSchema", "DispatchExchangeResponseSchema", "ExchangeOperationSchema", "ExchangeResultRequestSchema", "ExchangeResultResponseSchema", "ExchangeResultSchema", "ExchangeSchema", "ExecutorApi", "ExecutorService", "ExecutorServiceBatchReadStoreRequestSchema", "ExecutorServiceBatchReadStoreResponseSchema", "ExecutorServiceBatchWriteStoreRequestSchema", "ExecutorServiceBatchWriteStoreResponseSchema", "ExecutorServiceGetVertexConfigRequestSchema", "ExecutorServiceGetVertexConfigResponseSchema", "ExecutorServiceSelectStoreRequestSchema", "ExecutorServiceSelectStoreResponseSchema", "ExecutorServiceWriteStoreRequestSchema", "ExecutorServiceWriteStoreResponseSchema", "GetExchangeOperationRequestSchema", "GetExchangeOperationResponseSchema", "GetSessionRequestSchema", "GetSessionResponseSchema", "GetSystemServicesRequestSchema", "GetSystemServicesResponseSchema", "GetValueSchema", "HostingDetailsSchema", "IncomingVerticesSchema", "InheritSessionRequestSchema", "InheritSessionResponseSchema", "InsertOpSchema", "JTDSchemaSchema", "ListActiveSignalsRequestSchema", "ListActiveSignalsResponseSchema", "ListIncomingSignalsRequestSchema", "ListIncomingSignalsResponseSchema", "Namespace", "NamespaceSchema", "OutputSchema", "PluginService", "PostVertexConfigRequestSchema", "PostVertexConfigResponseSchema", "PutValueSchema", "RangeDeleteOpSchema", "ReadOutputRequestSchema", "ReadOutputResponseSchema", "ReadUrlsRequestSchema", "ReadUrlsResponseSchema", "ReceiverSchema", "SelectOpSchema", "SendRequestSchema", "SendResponseSchema", "SessionExecutorApi", "SessionSchema", "SignalBindingSchema", "SignalBinding_Error", "SignalBinding_ErrorSchema", "SignalDataSchema", "SignalDescriptorSchema", "SignalFormatSchema", "StartExecutionRequestSchema", "StartExecutionResponseSchema", "StartSessionRequestSchema", "StartSessionResponseSchema", "Status", "StatusSchema", "StopExecutionRequestSchema", "StopExecutionResponseSchema", "StopExecutorApi", "StopSessionRequestSchema", "StopSessionResponseSchema", "Store", "TimestampRangeSchema", "TokenSchema", "TransceiverSchema", "TransmitterSchema", "Transmitter_Mode", "Transmitter_ModeSchema", "UrlSchema", "ValueMetadataSchema", "VertexMetadataSchema", "VertexType", "VertexTypeSchema", "WebsocketMessageSchema", "WriteBatchBuilder", "WriteOperationSchema", "file_mochabugapis_adapt_automations_v1_automations", "file_mochabugapis_adapt_graph_exchange", "file_mochabugapis_adapt_graph_jtd_schema", "file_mochabugapis_adapt_graph_receiver", "file_mochabugapis_adapt_graph_signal_binding", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_graph_signal_descriptor", "file_mochabugapis_adapt_graph_signal_format", "file_mochabugapis_adapt_graph_transceiver", "file_mochabugapis_adapt_graph_transmitter", "file_mochabugapis_adapt_graph_vertex_metadata", "file_mochabugapis_adapt_runtime_v1_incoming", "file_mochabugapis_adapt_runtime_v1_runtime", "file_mochabugapis_adapt_runtime_v1_store", "mapConnectErrorToHttpStatus", "mapHttpError", "__toCommonJS", "import_protobuf", "import_wkt", "import_connect", "import_codegenv2", "import_codegenv2", "import_wkt", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_data", "file_buf_validate_validate", "SignalDataSchema", "import_codegenv2", "import_codegenv2", "import_wkt", "file_mochabugapis_adapt_graph_jtd_schema", "file_buf_validate_validate", "JTDSchemaSchema", "file_mochabugapis_adapt_graph_signal_format", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_jtd_schema", "SignalFormatSchema", "import_codegenv2", "import_codegenv2", "import_codegenv2", "import_codegenv2", "file_mochabugapis_adapt_graph_signal_descriptor", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_format", "SignalDescriptorSchema", "file_mochabugapis_adapt_graph_transceiver", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_descriptor", "TransceiverSchema", "file_mochabugapis_adapt_graph_exchange", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_transceiver", "ExchangeSchema", "import_codegenv2", "import_codegenv2", "file_mochabugapis_adapt_graph_signal_binding", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_graph_signal_format", "SignalBindingSchema", "SignalBinding_Error", "SignalBinding_ErrorSchema", "file_mochabugapis_adapt_graph_receiver", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_binding", "ReceiverSchema", "import_codegenv2", "file_mochabugapis_adapt_graph_transmitter", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_descriptor", "TransmitterSchema", "Transmitter_Mode", "Transmitter_ModeSchema", "file_mochabugapis_adapt_graph_vertex_metadata", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_exchange", "file_mochabugapis_adapt_graph_receiver", "file_mochabugapis_adapt_graph_transmitter", "VertexMetadataSchema", "import_codegenv2", "import_wkt", "import_codegenv2", "import_codegenv2", "import_codegenv2", "file_google_api_http", "import_wkt", "file_google_api_annotations", "file_google_api_http", "import_codegenv2", "import_codegenv2", "file_google_api_launch_stage", "import_wkt", "file_google_api_client", "file_google_api_launch_stage", "import_wkt", "file_mochabugapis_adapt_automations_v1_automations", "file_buf_validate_validate", "file_google_api_annotations", "file_google_api_client", "file_mochabugapis_adapt_graph_signal_data", "InheritSessionRequestSchema", "InheritSessionResponseSchema", "ReadOutputRequestSchema", "ReadOutputResponseSchema", "ReadUrlsRequestSchema", "ReadUrlsResponseSchema", "StartSessionRequestSchema", "StartSessionResponseSchema", "StopSessionRequestSchema", "StopSessionResponseSchema", "GetSessionRequestSchema", "GetSessionResponseSchema", "OutputSchema", "UrlSchema", "SessionSchema", "WebsocketMessageSchema", "Status", "StatusSchema", "AutomationService", "import_codegenv2", "import_wkt", "file_mochabugapis_adapt_runtime_v1_store", "file_buf_validate_validate", "PutValueSchema", "GetValueSchema", "ValueMetadataSchema", "TimestampRangeSchema", "SelectOpSchema", "WriteOperationSchema", "ConditionalWriteOperationSchema", "RangeDeleteOpSchema", "InsertOpSchema", "DeleteOpSchema", "ConditionalInsertOpSchema", "ConditionalInsertOp_PreconditionSchema", "ConditionalDeleteOpSchema", "ConditionalDeleteOp_PreconditionSchema", "file_mochabugapis_adapt_runtime_v1_runtime", "file_buf_validate_validate", "file_mochabugapis_adapt_automations_v1_automations", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_graph_signal_format", "file_mochabugapis_adapt_graph_transmitter", "file_mochabugapis_adapt_graph_vertex_metadata", "file_mochabugapis_adapt_runtime_v1_store", "ExecutorServiceBatchWriteStoreRequestSchema", "ExecutorServiceBatchWriteStoreResponseSchema", "ExecutorServiceWriteStoreRequestSchema", "ExecutorServiceWriteStoreResponseSchema", "ExecutorServiceBatchReadStoreRequestSchema", "ExecutorServiceBatchReadStoreResponseSchema", "ExecutorServiceSelectStoreRequestSchema", "ExecutorServiceSelectStoreResponseSchema", "CancelExchangeOperationRequestSchema", "CancelExchangeOperationResponseSchema", "GetExchangeOperationRequestSchema", "GetExchangeOperationResponseSchema", "DispatchExchangeRequestSchema", "DispatchExchangeResponseSchema", "ExchangeOperationSchema", "SendRequestSchema", "SendResponseSchema", "BatchGetActiveSignalsRequestSchema", "BatchGetActiveSignalsResponseSchema", "ListActiveSignalsRequestSchema", "ListActiveSignalsResponseSchema", "ExecutorServiceGetVertexConfigRequestSchema", "ExecutorServiceGetVertexConfigResponseSchema", "ListIncomingSignalsRequestSchema", "IncomingVerticesSchema", "ListIncomingSignalsResponseSchema", "ConfiguratorServiceBatchWriteStoreRequestSchema", "ConfiguratorServiceBatchWriteStoreResponseSchema", "ConfiguratorServiceWriteStoreRequestSchema", "ConfiguratorServiceWriteStoreResponseSchema", "ConfiguratorServiceBatchReadStoreRequestSchema", "ConfiguratorServiceBatchReadStoreResponseSchema", "ConfiguratorServiceSelectStoreRequestSchema", "ConfiguratorServiceSelectStoreResponseSchema", "ConfiguratorServiceGetVertexConfigRequestSchema", "ConfiguratorServiceGetVertexConfigResponseSchema", "PostVertexConfigRequestSchema", "PostVertexConfigResponseSchema", "GetSystemServicesRequestSchema", "GetSystemServicesResponseSchema", "AuthorizeRequestSchema", "AuthorizeResponseSchema", "BatchGetSystemVariablesRequestSchema", "BatchGetSystemVariablesResponseSchema", "BatchGetUserVariablesRequestSchema", "BatchGetUserVariablesResponseSchema", "BatchGetUserTokensRequestSchema", "BatchGetUserTokensResponseSchema", "BatchGetSystemTokensRequestSchema", "BatchGetSystemTokensResponseSchema", "TokenSchema", "Namespace", "NamespaceSchema", "VertexType", "VertexTypeSchema", "ExecutorService", "ConfiguratorService", "PluginService", "import_connect", "import_protocol", "import_protocol_grpc_web", "createGrpcWebTransport", "options", "method", "signal", "timeoutMs", "header", "message", "contextValues", "serialize", "parse", "req", "response", "headerError", "reader", "trailer", "msg", "r", "flags", "data", "input", "createRequestBody", "source", "value", "done", "parseResponseBody", "body", "foundStatus", "trailerTarget", "rawHeader", "abortSignal", "trailerReceived", "result", "key", "fRes", "import_codegenv2", "file_mochabugapis_adapt_runtime_v1_incoming", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_runtime_v1_runtime", "HostingDetailsSchema", "StartExecutionRequestSchema", "StartExecutionResponseSchema", "StopExecutionRequestSchema", "StopExecutionResponseSchema", "CronTriggerRequestSchema", "CronTriggerResponseSchema", "ExchangeResultSchema", "ExchangeResultRequestSchema", "ExchangeResultResponseSchema", "CAMEL_TO_SNAKE_MAP", "toSnakeCase", "camelCase", "ApiBase", "env", "pluginToken", "PluginService", "createGrpcWebTransport", "next", "req", "name", "vares", "keys", "response", "res", "key", "value", "names", "input", "init", "token", "path", "url", "mapHttpError", "contentType", "BatchReadResult", "result", "WriteBatchBuilder", "ttl", "WriteOperationSchema", "start", "end", "startInclusive", "endInclusive", "Store", "service", "namespace", "NamespaceSchema", "condition", "precondition", "ConditionalInsertOp_PreconditionSchema", "TimestampRangeSchema", "ConditionalDeleteOp_PreconditionSchema", "resGet", "select", "keyA", "keyB", "val", "ops", "metadata", "locker", "e", "section", "options", "maxRetries", "initialDelay", "maxDelay", "attempt", "delay", "resolve", "ExecutorApi", "ExecutorService", "fields", "fieldsToInclude", "VertexMetadataSchema", "authHeader", "SessionExecutorApi", "StopExecutorApi", "sessionAuthHeader", "cursor", "data", "transmitter", "signals", "SignalDataSchema", "receiver", "id", "ConfiguratorApi", "ConfiguratorService", "opts", "configBytes", "formats", "fieldMask", "f", "SignalFormatSchema", "ListIncomingSignalsResponseSchema", "status", "mapConnectErrorToHttpStatus", "error"]
4
+ "sourcesContent": ["// Copyright (c) 2023 mochabug AB. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\n// this file except in compliance with the License. You may obtain a copy of the\n// License at http://www.apache.org/licenses/LICENSE-2.0\n// THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n// KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\n// WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\n// MERCHANTABLITY OR NON-INFRINGEMENT.\n// See the Apache Version 2.0 License for specific language governing permissions\n// and limitations under the License.\n\nimport {\n create,\n enumFromJson,\n fromJson,\n JsonValue,\n toJson\n} from '@bufbuild/protobuf';\nimport {\n FieldMaskSchema,\n timestampDate,\n timestampFromDate,\n ValueJson,\n ValueSchema\n} from '@bufbuild/protobuf/wkt';\nimport { Client, Code, ConnectError, createClient } from '@connectrpc/connect';\nimport {\n SignalData,\n SignalDataSchema\n} from './genproto/mochabugapis/adapt/graph/signal_data_pb';\nimport {\n SignalFormatJson,\n SignalFormatSchema\n} from './genproto/mochabugapis/adapt/graph/signal_format_pb';\nimport {\n VertexMetadataJson,\n VertexMetadataSchema\n} from './genproto/mochabugapis/adapt/graph/vertex_metadata_pb';\nimport {\n ConfiguratorService,\n ExchangeOperation,\n ExecutorService,\n ListIncomingSignalsResponseJson,\n ListIncomingSignalsResponseSchema,\n Namespace,\n NamespaceJson,\n NamespaceSchema,\n PluginService,\n Token\n} from './genproto/mochabugapis/adapt/runtime/v1/runtime_pb';\nimport {\n ConditionalDeleteOp_Precondition,\n ConditionalDeleteOp_PreconditionSchema,\n ConditionalInsertOp_Precondition,\n ConditionalInsertOp_PreconditionSchema,\n GetValue,\n SelectOpJson,\n TimestampRangeSchema,\n WriteOperation,\n WriteOperationSchema\n} from './genproto/mochabugapis/adapt/runtime/v1/store_pb';\nimport { createGrpcWebTransport } from './grpcweb';\nimport {\n ConfiguratorEnvironment,\n Environment,\n ExecutorEnvironment\n} from './types';\n\nexport * from './genproto/mochabugapis/adapt/automations/v1/automations_pb';\nexport * from './genproto/mochabugapis/adapt/graph/exchange_pb';\nexport * from './genproto/mochabugapis/adapt/graph/jtd_schema_pb';\nexport * from './genproto/mochabugapis/adapt/graph/receiver_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_binding_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_data_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_descriptor_pb';\nexport * from './genproto/mochabugapis/adapt/graph/signal_format_pb';\nexport * from './genproto/mochabugapis/adapt/graph/transceiver_pb';\nexport * from './genproto/mochabugapis/adapt/graph/transmitter_pb';\nexport * from './genproto/mochabugapis/adapt/graph/vertex_metadata_pb';\nexport * from './genproto/mochabugapis/adapt/runtime/v1/incoming_pb';\nexport * from './genproto/mochabugapis/adapt/runtime/v1/runtime_pb';\nexport * from './genproto/mochabugapis/adapt/runtime/v1/store_pb';\nexport * from './types';\nexport { Code, ConnectError };\nexport type { ValueJson };\n\n/**\n * Convert camelCase field names to snake_case for protocol buffer field masks\n */\nconst CAMEL_TO_SNAKE_MAP: Record<string, string> = {\n config: 'config',\n metadata: 'metadata',\n configuredServices: 'configured_services'\n};\n\nfunction toSnakeCase(camelCase: string): string {\n return CAMEL_TO_SNAKE_MAP[camelCase] ?? camelCase;\n}\n\n/**\n * Array representing asset directories.\n */\nexport type AssetDirectory = {\n /**\n * Name of the asset directory.\n */\n name: string;\n\n /**\n * Type of the asset (file or directory).\n */\n type: 'file' | 'directory';\n}[];\n\n/**\n * Represents the content of an asset file.\n */\nexport type AssetFile = {\n /**\n * Content of the asset file as a readable stream.\n */\n content: ReadableStream;\n\n /**\n * MIME type of the asset file.\n */\n mime: string;\n};\n\n/**\n * Base class for API interactions. Extended by specific API implementations.\n * Not intended for direct use.\n */\nexport class ApiBase {\n protected env: Environment;\n protected pluginService: Client<typeof PluginService>;\n protected pluginToken: string;\n\n /**\n * Initializes the ApiBase instance with environment settings and a plugin token.\n *\n * @param env - Environment configuration for API communication.\n * @param pluginToken - Token for plugin authentication.\n */\n constructor(env: Environment, pluginToken: string) {\n this.env = env;\n this.pluginToken = pluginToken;\n this.pluginService = createClient(\n PluginService,\n createGrpcWebTransport({\n fetcher: this.env.plugin,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', `Bearer ${this.pluginToken}`);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Retrieves a single plugin-scoped variable by its name.\n * Supports dot notation for nested variable names (e.g., 'api.credentials.key').\n *\n * @param name - The name of the variable (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the variable value (undefined if not found).\n *\n * @example\n * ```typescript\n * const apiUrl = await api.getSystemVariable<string>('api.url');\n * const nested = await api.getSystemVariable<string>('config.database.host');\n * ```\n */\n async getSystemVariable<T = ValueJson>(name: string): Promise<T> {\n const response = await this.pluginService.batchGetSystemVariables({\n names: [name]\n });\n const vares = response.items[name];\n return (vares ? toJson(ValueSchema, vares) : undefined) as T;\n }\n\n /**\n * Retrieves multiple plugin-scoped variables by their names with full type safety.\n * Supports dot notation for nested variable names.\n *\n * @template T - Record type mapping variable names to their expected types.\n * @param keys - Names of the variables to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping variable names to their typed values.\n * @throws {ConnectError} Code.InvalidArgument if keys array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const vars = await api.getSystemVariables<{\n * 'api.url': string;\n * 'api.timeout': number;\n * 'api.enabled': boolean;\n * }>('api.url', 'api.timeout', 'api.enabled');\n *\n * // Fully typed!\n * vars['api.url']; // string\n * vars['api.timeout']; // number\n * vars['api.enabled']; // boolean\n * ```\n */\n async getSystemVariables<T extends Record<string, any>>(\n ...keys: Array<keyof T & string>\n ): Promise<T> {\n const response = await this.pluginService.batchGetSystemVariables({\n names: keys\n });\n const res: Record<string, ValueJson> = {};\n for (const [key, value] of Object.entries(response.items)) {\n res[key] = toJson(ValueSchema, value);\n }\n return res as T;\n }\n\n /**\n * Retrieves a single user-scoped variable by its name.\n * Supports dot notation for nested variable names (e.g., 'user.preferences.theme').\n *\n * @param name - The name of the variable (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the user variable value (undefined if not found).\n *\n * @example\n * ```typescript\n * const theme = await api.getUserVariable<string>('user.preferences.theme');\n * const email = await api.getUserVariable<string>('user.email');\n * ```\n */\n async getUserVariable<T = ValueJson>(name: string): Promise<T> {\n const response = await this.pluginService.batchGetUserVariables({\n names: [name]\n });\n const vares = response.items[name];\n return (vares ? toJson(ValueSchema, vares) : undefined) as T;\n }\n\n /**\n * Retrieves multiple user-scoped variables by their names with full type safety.\n * Supports dot notation for nested variable names.\n *\n * @template T - Record type mapping variable names to their expected types.\n * @param keys - Names of the user variables to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping variable names to their typed values.\n * @throws {ConnectError} Code.InvalidArgument if keys array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const vars = await api.getUserVariables<{\n * 'user.email': string;\n * 'user.age': number;\n * 'user.verified': boolean;\n * }>('user.email', 'user.age', 'user.verified');\n *\n * // Fully typed!\n * vars['user.email']; // string\n * vars['user.age']; // number\n * vars['user.verified']; // boolean\n * ```\n */\n async getUserVariables<T extends Record<string, any>>(\n ...keys: Array<keyof T & string>\n ): Promise<T> {\n const response = await this.pluginService.batchGetUserVariables({\n names: keys\n });\n const res: Record<string, ValueJson> = {};\n for (const [key, value] of Object.entries(response.items)) {\n res[key] = toJson(ValueSchema, value);\n }\n return res as T;\n }\n\n /**\n * Retrieves a single user OAuth2 bearer token by its name.\n * Returns a Token object containing the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param name - The name of the user token (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the Token object (undefined if not found).\n * Token contains: { name, token, type, expires }\n *\n * @example\n * ```typescript\n * const githubToken = await api.getUserToken('github');\n * if (githubToken) {\n * console.log(githubToken.token, githubToken.type, githubToken.expires);\n * }\n * ```\n */\n async getUserToken(name: string): Promise<Token> {\n const response = await this.pluginService.batchGetUserTokens({\n names: [name]\n });\n return response.items[name];\n }\n\n /**\n * Retrieves multiple user OAuth2 bearer tokens by their names.\n * Each Token contains the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param names - Names of the user tokens to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping token names to their Token objects.\n * Each Token contains: { name, token, type, expires }\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const tokens = await api.getUserTokens('github', 'google');\n *\n * tokens['github']; // Token | undefined\n * tokens['google']; // Token | undefined\n * ```\n */\n async getUserTokens(...names: string[]): Promise<Record<string, Token>> {\n const response = await this.pluginService.batchGetUserTokens({\n names\n });\n return response.items;\n }\n\n /**\n * Retrieves a single plugin OAuth2 bearer token from a service account by its name.\n * Returns a Token object containing the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param name - The name of the plugin token (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*(?:\\.[_$a-zA-Z][_$a-zA-Z0-9]*)*$).\n * @returns A promise that resolves with the Token object (undefined if not found).\n * Token contains: { name, token, type, expires }\n *\n * @example\n * ```typescript\n * const serviceToken = await api.getSystemToken('service_account');\n * if (serviceToken) {\n * console.log(serviceToken.token, serviceToken.expires);\n * }\n * ```\n */\n async getSystemToken(name: string): Promise<Token> {\n const response = await this.pluginService.batchGetSystemTokens({\n names: [name]\n });\n return response.items[name];\n }\n\n /**\n * Retrieves multiple plugin OAuth2 bearer tokens from service accounts by their names.\n * Each Token contains the access token, type (typically 'Bearer'), and expiration timestamp.\n *\n * @param names - Names of the plugin tokens to retrieve (1-100 unique names, each 1-100 chars).\n * @returns A promise that resolves with an object mapping token names to their Token objects.\n * Each Token contains: { name, token, type, expires }\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 100 items.\n *\n * @example\n * ```typescript\n * const tokens = await api.getSystemTokens('service_account', 'backup_service');\n *\n * tokens['service_account']; // Token | undefined\n * tokens['backup_service']; // Token | undefined\n * ```\n */\n async getSystemTokens(...names: string[]): Promise<Record<string, Token>> {\n const response = await this.pluginService.batchGetSystemTokens({\n names\n });\n return response.items;\n }\n\n /**\n * Creates a fetch function for user-level HTTP proxy requests.\n *\n * User services are vertex-level configurations where each user can provide\n * their own certificates, API keys, and credentials.\n *\n * @param name - The service name defined in vertex user_services\n * @returns A fetch function configured with HTTP proxy headers\n *\n * @example\n * ```typescript\n * const fetch = api.userHttpProxy(\"stripe_api\");\n * const res = await fetch(\"https://api.stripe.com/v1/charges\");\n * ```\n */\n userHttpProxy(name: string): typeof fetch {\n return (input: string | Request | URL, init?: RequestInit) => {\n const req = new Request(input, init);\n req.headers.set(\n 'X-Mochabug-Adapt-Plugin-HttpProxy-Token',\n `Bearer ${this.pluginToken}`\n );\n req.headers.set('X-Mochabug-Adapt-Plugin-HttpProxy-Path', `user:${name}`);\n req.headers.set('Host', new URL(req.url).host);\n\n return this.env.httpproxy.fetch(req);\n };\n }\n\n /**\n * Creates a fetch function for system-level HTTP proxy requests.\n *\n * System services are plugin-wide configurations shared across all vertices.\n * Configured once by plugin administrators.\n *\n * @param name - The service name defined in manifest system_services\n * @returns A fetch function configured with HTTP proxy headers\n *\n * @example\n * ```typescript\n * const fetch = api.systemHttpProxy(\"internal_api\");\n * const res = await fetch(\"https://internal.example.com/data\");\n * ```\n */\n systemHttpProxy(name: string): typeof fetch {\n return (input: string | Request | URL, init?: RequestInit) => {\n const req = new Request(input, init);\n req.headers.set(\n 'X-Mochabug-Adapt-Plugin-HttpProxy-Token',\n `Bearer ${this.pluginToken}`\n );\n req.headers.set(\n 'X-Mochabug-Adapt-Plugin-HttpProxy-Path',\n `system:${name}`\n );\n req.headers.set('Host', new URL(req.url).host);\n return this.env.httpproxy.fetch(req);\n };\n }\n\n /**\n * Validates an access token to ensure it's authorized for the current plugin and execution context.\n * The authorization check verifies the token has the required scopes for plugin operations.\n *\n * @param token - The access token to validate (max 10000 chars).\n * @returns A promise that resolves when the token is successfully validated.\n * @throws {ConnectError} Code.Unauthenticated if the token is invalid or Code.PermissionDenied if unauthorized.\n *\n * @example\n * ```typescript\n * try {\n * await api.authorize(userProvidedToken);\n * // Token is valid, proceed with operations\n * } catch (error) {\n * // Token is invalid or lacks permissions\n * }\n * ```\n */\n async authorize(token: string): Promise<void> {\n await this.pluginService.authorize({ accessToken: token });\n }\n\n /**\n * Get information about configured system services.\n * System services are plugin-wide configurations shared across all vertices.\n *\n * @returns A promise that resolves with a map of configured services where keys are service paths\n * (using dot notation for nested services) and values indicate if the service is configured.\n *\n * @example\n * ```typescript\n * const services = await api.getSystemServices();\n * // Returns { \"http_service\": true, \"oneof_service.option_a\": true, \"grouped.nested\": true }\n * ```\n */\n async getSystemServices(): Promise<{ [key: string]: boolean }> {\n const response = await this.pluginService.getSystemServices({});\n return response.configuredServices;\n }\n\n /**\n * Reads a file from the plugin's assets directory.\n *\n * @param path - The file path relative to the assets directory.\n * @returns A promise that resolves with the file content and MIME type.\n * @throws {ConnectError} If the file is not found or is actually a directory.\n */\n async readFile(path: string): Promise<AssetFile> {\n let url = new URL('https://runtimeapi');\n url.pathname = path;\n const res = await this.env.assets.fetch(url, { method: 'GET' });\n if (!res.ok) {\n throw mapHttpError(res.status);\n }\n\n const contentType = res.headers.get('content-type');\n if (\n !contentType ||\n !contentType.toLowerCase().includes('application/octet-stream')\n ) {\n throw new ConnectError(\n 'Invalid file. Are you reading a directory?',\n Code.InvalidArgument\n );\n }\n\n return { content: res.body as ReadableStream, mime: contentType };\n }\n\n /**\n * Reads a directory listing from the plugin's assets directory.\n *\n * @param path - The directory path relative to the assets directory.\n * @returns A promise that resolves with the directory content as an array of assets.\n * @throws {ConnectError} If the directory is not found or is actually a file.\n */\n async readDirectory(path: string): Promise<AssetDirectory> {\n let url = new URL('https://runtimeapi');\n url.pathname = path;\n const res = await this.env.assets.fetch(url, { method: 'GET' });\n if (!res.ok) {\n throw mapHttpError(res.status);\n }\n\n const contentType = res.headers.get('content-type');\n if (\n !contentType ||\n !contentType.toLowerCase().includes('application/json')\n ) {\n throw new ConnectError(\n 'Invalid directory. Are you reading a file?',\n Code.InvalidArgument\n );\n }\n return (await res.json()) as AssetDirectory;\n }\n}\n\n/**\n * Represents the result of a batch read operation from the store.\n * Keys that were not found in the store are not present in the result.\n */\nexport class BatchReadResult {\n readonly result: Record<string, GetValue>;\n\n /**\n * Constructs a BatchReadResult from the store's batch read response.\n * @param result - Map of keys to their retrieved values (keys not found are excluded).\n * @internal\n */\n constructor(result: Record<string, GetValue>) {\n this.result = result;\n }\n\n /**\n * Retrieves the result of a specific read operation by its key as JSON.\n *\n * @param key - The key to retrieve from the batch result.\n * @returns The value and metadata, or undefined if the key was not found in the store.\n * - value: The parsed JSON value\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - lastModified: When the value was last modified\n * - etag: Entity tag for concurrency control\n *\n * @example\n * ```typescript\n * const result = await store.readBatch(['user:1', 'user:2', 'user:3']);\n * const user1 = result.get<User>('user:1');\n * if (user1) {\n * console.log(user1.value.name, 'TTL:', user1.ttl);\n * }\n * ```\n */\n get<T = any>(\n key: string\n ):\n | {\n value: T;\n ttl: number;\n lastModified: Date;\n etag: string;\n }\n | undefined {\n const res = this.result[key];\n if (!res) {\n return undefined;\n }\n return {\n value: JSON.parse(new TextDecoder().decode(res.value)) as T,\n ttl: res.metadata!.ttl,\n lastModified: timestampDate(res.metadata!.lastModified!),\n etag: res.metadata!.etag\n };\n }\n\n /**\n * Retrieves the result of a specific read operation by its key as raw binary.\n *\n * @param key - The key to retrieve from the batch result.\n * @returns The raw binary value and metadata, or undefined if the key was not found in the store.\n * - value: The raw binary data as Uint8Array\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - lastModified: When the value was last modified\n * - etag: Entity tag for concurrency control\n *\n * @example\n * ```typescript\n * const result = await store.readBatch(['asset:1', 'asset:2']);\n * const asset1 = result.getBinary('asset:1');\n * if (asset1) {\n * console.log('Size:', asset1.value.length, 'bytes');\n * }\n * ```\n */\n getBinary(key: string):\n | {\n ttl: number;\n value: Uint8Array;\n lastModified: Date;\n etag: string;\n }\n | undefined {\n const res = this.result[key];\n if (!res) {\n return undefined;\n }\n\n return {\n ttl: res.metadata!.ttl,\n value: res.value,\n lastModified: timestampDate(res.metadata!.lastModified!),\n etag: res.metadata!.etag\n };\n }\n}\n\n/**\n * Utility class for constructing batch write operations for the KV store.\n * Provides a fluent interface for building write batches.\n *\n * Note: Batch operations do not support preconditions. Use Store.insert() and Store.delete()\n * methods directly for conditional writes.\n */\nexport class WriteBatchBuilder {\n private ops: WriteOperation[] = [];\n\n /**\n * Adds an insert operation to the batch for JSON data or raw binary data.\n *\n * @param key - The key to insert (max 4096 characters).\n * @param value - The value to store (will be JSON-serialized unless it's Uint8Array).\n * @param ttl - Optional time-to-live in seconds (0 = no expiration).\n * @returns The current instance of the builder for chaining.\n *\n * @example\n * ```typescript\n * const batch = new WriteBatchBuilder()\n * .insert('user:1', { name: 'Alice' }, 3600)\n * .insert('user:2', { name: 'Bob' })\n * .build();\n * ```\n */\n insert<T = any>(key: string, value: T, ttl?: number): this {\n this.ops.push(\n create(WriteOperationSchema, {\n operation: {\n case: 'insert',\n value: {\n key,\n value: {\n value:\n value instanceof Uint8Array\n ? value\n : new TextEncoder().encode(JSON.stringify(value)),\n ttl\n }\n }\n }\n })\n );\n return this;\n }\n\n /**\n * Adds a delete operation to the batch.\n *\n * @param key - The key to delete (max 4096 characters).\n * @returns The current instance of the builder for chaining.\n *\n * @example\n * ```typescript\n * const batch = new WriteBatchBuilder()\n * .delete('temp:cache:1')\n * .delete('temp:cache:2')\n * .build();\n * ```\n */\n delete(key: string): this {\n this.ops.push(\n create(WriteOperationSchema, {\n operation: {\n case: 'delete',\n value: { key }\n }\n })\n );\n return this;\n }\n\n /**\n * Adds a range delete operation to the batch (lexicographic comparison).\n *\n * Range delete works like SelectOp for defining the range. Not setting any start or end will\n * delete the entire store when this batch is executed.\n *\n * @param start - The start key of the range. If omitted, deletes from the empty key.\n * @param end - The end key of the range. If omitted, deletes to the end.\n * @param startInclusive - Include start (>= vs >). Defaults to `false`.\n * @param endInclusive - Include end (<= vs <). Defaults to `false`.\n * @returns The current instance for method chaining.\n *\n * @example\n * ```typescript\n * // Delete all keys with prefix \"user/\"\n * builder.rangeDelete('user/', 'user/~');\n *\n * // Delete logs for a specific month\n * builder.rangeDelete('logs/2024-01/', 'logs/2024-02/');\n * ```\n */\n rangeDelete(\n start?: string,\n end?: string,\n startInclusive?: boolean,\n endInclusive?: boolean\n ): this {\n this.ops.push(\n create(WriteOperationSchema, {\n operation: {\n case: 'rangeDelete',\n value: {\n start,\n end,\n startInclusive,\n endInclusive\n }\n }\n })\n );\n return this;\n }\n\n /**\n * Finalizes the batch and returns the array of write operations.\n *\n * @returns The array of WriteOperation objects ready to be executed.\n */\n build(): WriteOperation[] {\n return this.ops;\n }\n}\n\n/**\n * Options for lock operations.\n */\nexport interface LockOptions {\n /**\n * Maximum number of retries if the lock is not acquired immediately. Defaults to 5.\n */\n maxRetries?: number;\n\n /**\n * Initial delay before retrying in milliseconds. Defaults to 50ms.\n */\n initialDelay?: number;\n\n /**\n * Maximum delay between retries in milliseconds. Defaults to 2000ms.\n */\n maxDelay?: number;\n}\n\n/**\n * Preconditions for conditional insert operations.\n * Used for implementing locks and optimistic concurrency control.\n *\n * IMPORTANT CONSTRAINTS (from proto validation):\n * - failIfExists CANNOT be combined with etagEquals, timestampEquals, or timestampRange\n * - When failIfExists is true, all other fields must be undefined\n * - etagEquals and timestamp conditions can be used together\n */\nexport interface InsertCondition {\n /**\n * Fail the insert if the key already exists.\n * When true, this cannot be combined with any other conditions.\n * Useful for acquiring locks atomically.\n */\n failIfExists?: boolean;\n\n /**\n * Only insert if the current etag matches this value.\n * Cannot be used with failIfExists.\n */\n etagEquals?: string;\n\n /**\n * Only insert if last_modified exactly matches this timestamp.\n * Cannot be used with failIfExists or timestampRange.\n */\n timestampEquals?: Date;\n\n /**\n * Only insert if last_modified falls within this time range.\n * Cannot be used with failIfExists or timestampEquals.\n */\n timestampRange: {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: Date;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: Date;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive: boolean;\n };\n}\n\n/**\n * Preconditions for conditional delete operations.\n * Used for safe deletion with verification.\n *\n * IMPORTANT CONSTRAINTS (from proto validation):\n * - mustExists CANNOT be combined with etagEquals, timestampEquals, or timestampRange\n * - When mustExists is true, all other fields must be undefined\n * - etagEquals and timestamp conditions can be used together\n */\nexport interface DeleteCondition {\n /**\n * Fail the delete if the key doesn't exist.\n * When true, this cannot be combined with any other conditions.\n */\n mustExists?: boolean;\n\n /**\n * Only delete if the current etag matches this value.\n * Cannot be used with mustExists.\n */\n etagEquals?: string;\n\n /**\n * Only delete if last_modified exactly matches this timestamp.\n * Cannot be used with mustExists or timestampRange.\n */\n timestampEquals?: Date;\n\n /**\n * Only delete if last_modified falls within this time range.\n * Cannot be used with mustExists or timestampEquals.\n */\n timestampRange: {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: Date;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: Date;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive: boolean;\n };\n}\n\n/**\n * Metadata returned from store write operations.\n */\nexport interface StoreMetadata {\n /**\n * Remaining time-to-live in seconds.\n * 0 means no expiration (the value will not expire).\n */\n ttl: number;\n\n /**\n * Timestamp when the value was last modified.\n * All operations in a write batch share the same timestamp.\n */\n lastModified: Date;\n\n /**\n * Entity tag for optimistic concurrency control.\n * Changes with each modification of the value.\n */\n etag: string;\n}\n\n/**\n * Internal type for store service clients\n * @internal\n */\ntype StoreServiceClient =\n | Client<typeof ExecutorService>\n | Client<typeof ConfiguratorService>;\n\n/**\n * Represents a store in a specific namespace, providing key-value storage operations.\n * Stores can be scoped to different namespaces with different lifetimes:\n * - NAMESPACE_VERTEX: Lives as long as the plugin in the project (vertex scope)\n * - NAMESPACE_PLUGIN: Lives as long as the plugin in the project (plugin-wide scope)\n * - NAMESPACE_VERTEX_INSTANCE: Lives as long as the instance (vertex scope, session storage)\n * - NAMESPACE_PLUGIN_INSTANCE: Lives as long as the instance (plugin-wide scope, session storage)\n */\nexport class Store {\n private service: StoreServiceClient;\n private namespace: Namespace;\n\n /**\n * Constructs a Store instance for a specific namespace.\n * @param service - The gRPC service client (ExecutorService or ConfiguratorService).\n * @param namespace - The namespace determining the store's scope and lifetime.\n * @internal\n */\n constructor(service: StoreServiceClient, namespace: NamespaceJson) {\n this.service = service;\n this.namespace = enumFromJson(NamespaceSchema, namespace);\n }\n\n /**\n * Inserts or updates a key-value pair in the store with JSON data.\n * Supports conditional writes for implementing locks and optimistic concurrency control.\n *\n * @param key - The key to insert (max 4096 characters).\n * @param value - The JSON value to store (will be JSON-serialized).\n * @param ttl - Optional time-to-live in seconds (0 = no expiration).\n * @param condition - Optional preconditions for the write:\n * - failIfExists: Fail if key already exists (cannot be combined with other conditions)\n * - etagEquals: Only write if current etag matches\n * - timestampEquals: Only write if last_modified exactly matches\n * - timestampRange: Only write if last_modified falls within range\n * @returns A promise that resolves with metadata (ttl, lastModified, etag) when the operation completes.\n * @throws {ConnectError} Code.FailedPrecondition if precondition fails, Code.InvalidArgument for invalid inputs.\n *\n * @example\n * ```typescript\n * // Simple insert\n * await store.insert('user:123', { name: 'Alice' }, 3600);\n *\n * // Conditional insert - fail if exists (for locks)\n * await store.insert('lock:resource', { owner: 'process-1' }, 30, { failIfExists: true });\n *\n * // Optimistic concurrency with etag\n * const data = await store.get('counter');\n * await store.insert('counter', data.data + 1, undefined, { etagEquals: data.etag });\n * ```\n */\n async insert<T = any>(\n key: string,\n value: T,\n ttl?: number,\n condition?: InsertCondition\n ): Promise<StoreMetadata> {\n let precondition: ConditionalInsertOp_Precondition | undefined;\n if (condition) {\n precondition = create(ConditionalInsertOp_PreconditionSchema, {});\n if (condition.failIfExists) {\n precondition.failIfExists = true;\n } else {\n if (condition.etagEquals) {\n precondition.etag = condition.etagEquals;\n }\n if (condition.timestampEquals) {\n precondition.timestampCondition = {\n case: 'lastModifiedEquals',\n value: timestampFromDate(condition.timestampEquals)\n };\n } else if (condition.timestampRange) {\n precondition.timestampCondition = {\n case: 'lastModifiedRange',\n value: create(TimestampRangeSchema, {\n start: condition.timestampRange.start\n ? timestampFromDate(condition.timestampRange.start)\n : undefined,\n end: condition.timestampRange.end\n ? timestampFromDate(condition.timestampRange.end)\n : undefined,\n startInclusive: condition.timestampRange.startInclusive,\n endInclusive: condition.timestampRange.endInclusive\n })\n };\n }\n }\n }\n\n const res = await this.service.writeStore({\n operation: {\n operation: {\n case: 'insert',\n value: {\n key,\n value: {\n value:\n value instanceof Uint8Array\n ? value\n : new TextEncoder().encode(JSON.stringify(value)),\n ttl\n },\n precondition\n }\n }\n },\n namespace: this.namespace\n });\n\n return {\n ttl: res.metadata!.ttl,\n lastModified: timestampDate(res.metadata!.lastModified!),\n etag: res.metadata!.etag\n };\n }\n\n /**\n * Deletes a key-value pair from the store.\n * Supports conditional deletes for safe removal operations.\n *\n * @param key - The key to delete (max 4096 characters).\n * @param condition - Optional preconditions for the delete:\n * - mustExists: Fail if key doesn't exist (cannot be combined with other conditions)\n * - etagEquals: Only delete if current etag matches\n * - timestampEquals: Only delete if last_modified exactly matches\n * - timestampRange: Only delete if last_modified falls within range\n * @returns A promise that resolves when the operation completes.\n * @throws {ConnectError} Code.FailedPrecondition if precondition fails.\n *\n * @example\n * ```typescript\n * // Simple delete\n * await store.delete('temp:data');\n *\n * // Conditional delete - only if exists\n * await store.delete('lock:resource', { mustExists: true });\n *\n * // Delete with etag verification\n * const data = await store.get('config');\n * await store.delete('config', { etagEquals: data.etag });\n * ```\n */\n async delete(key: string, condition?: DeleteCondition): Promise<void> {\n let precondition: ConditionalDeleteOp_Precondition | undefined;\n if (condition) {\n precondition = create(ConditionalDeleteOp_PreconditionSchema, {});\n if (condition.mustExists) {\n precondition.mustExists = true;\n } else {\n if (condition.etagEquals) {\n precondition.etag = condition.etagEquals;\n }\n if (condition.timestampEquals) {\n precondition.timestampCondition = {\n case: 'lastModifiedEquals',\n value: timestampFromDate(condition.timestampEquals)\n };\n } else if (condition.timestampRange) {\n precondition.timestampCondition = {\n case: 'lastModifiedRange',\n value: create(TimestampRangeSchema, {\n start: condition.timestampRange.start\n ? timestampFromDate(condition.timestampRange.start)\n : undefined,\n end: condition.timestampRange.end\n ? timestampFromDate(condition.timestampRange.end)\n : undefined,\n startInclusive: condition.timestampRange.startInclusive,\n endInclusive: condition.timestampRange.endInclusive\n })\n };\n }\n }\n }\n\n await this.service.writeStore({\n operation: {\n operation: {\n case: 'delete',\n value: {\n key,\n precondition\n }\n }\n },\n namespace: this.namespace\n });\n }\n\n /**\n * Deletes all items within a specified key range from the store (lexicographic comparison).\n *\n * Range delete works like SelectOp for defining the range. Not setting any start or end will\n * delete the entire store.\n *\n * Note: Range delete operations do not support preconditions. For conditional deletes,\n * use the {@link delete} method.\n *\n * @param start - The start key of the range. If omitted, deletes from the empty key.\n * @param end - The end key of the range. If omitted, deletes to the end.\n * @param startInclusive - Include start (>= vs >). Defaults to `false`.\n * @param endInclusive - Include end (<= vs <). Defaults to `false`.\n * @returns A promise that resolves when the range delete operation completes.\n *\n * @example\n * ```typescript\n * // Delete all keys with prefix \"user/\"\n * await store.rangeDelete('user/', 'user/~');\n *\n * // Delete logs for a specific month\n * await store.rangeDelete('logs/2024-01/', 'logs/2024-02/');\n *\n * // Delete all items in the store\n * await store.rangeDelete();\n * ```\n */\n async rangeDelete(\n start?: string,\n end?: string,\n startInclusive?: boolean,\n endInclusive?: boolean\n ): Promise<void> {\n await this.service.batchWriteStore({\n namespace: this.namespace,\n operations: [\n {\n operation: {\n case: 'rangeDelete',\n value: {\n start,\n end,\n startInclusive,\n endInclusive\n }\n }\n }\n ]\n });\n }\n\n /**\n * Retrieves a value by its key from the store as JSON.\n *\n * @param key - The key to retrieve (max 4096 characters).\n * @returns A promise that resolves with the retrieved JSON value and metadata, or undefined if key not found.\n * - data: The parsed JSON value\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - etag: The ETag for optimistic concurrency control\n * - lastModified: Timestamp of last modification\n *\n * @example\n * ```typescript\n * const user = await store.get<User>('user:123');\n * if (user) {\n * console.log(user.data.name, 'expires in', user.ttl, 'seconds');\n * }\n * ```\n */\n async get<T = any>(\n key: string\n ): Promise<\n | {\n data: T;\n ttl: number;\n etag: string;\n lastModified: Date;\n }\n | undefined\n > {\n const res = await this.service.batchReadStore({\n keys: [key],\n namespace: this.namespace\n });\n\n const resGet = res.items[key];\n if (resGet) {\n return {\n data: JSON.parse(new TextDecoder().decode(resGet.value)) as T,\n ttl: resGet.metadata!.ttl,\n etag: resGet.metadata!.etag,\n lastModified: timestampDate(resGet.metadata!.lastModified!)\n };\n }\n }\n\n /**\n * Retrieves a value by its key from the store as raw binary.\n *\n * @param key - The key to retrieve (max 4096 characters).\n * @returns A promise that resolves with the retrieved binary value and metadata, or undefined if key not found.\n * - data: The raw binary value as Uint8Array\n * - ttl: Remaining TTL in seconds (0 = no expiration)\n * - etag: The ETag for optimistic concurrency control\n * - lastModified: Timestamp of last modification\n *\n * @example\n * ```typescript\n * const asset = await store.getBinary('asset:image.png');\n * if (asset) {\n * console.log('Image size:', asset.data.length, 'bytes');\n * }\n * ```\n */\n async getBinary(key: string): Promise<\n | {\n data: Uint8Array<ArrayBufferLike>;\n ttl: number;\n etag: string;\n lastModified: Date;\n }\n | undefined\n > {\n const res = await this.service.batchReadStore({\n keys: [key],\n namespace: this.namespace\n });\n\n const resGet = res.items[key];\n if (resGet) {\n return {\n data: resGet.value,\n ttl: resGet.metadata!.ttl,\n etag: resGet.metadata!.etag,\n lastModified: timestampDate(resGet.metadata!.lastModified!)\n };\n }\n }\n\n /**\n * Performs a range query on keys using lexicographic comparison, returning parsed JSON data.\n *\n * Range queries allow scanning keys within a specific range. For example:\n * - \"user/\" to \"user/~\" - all keys starting with \"user/\"\n * - \"logs/2024-01/\" to \"logs/2024-02/\" - all logs from January 2024\n *\n * Not setting start or end will scan the entire store.\n * Results are always returned in ascending order by key.\n *\n * @param select - The select operation specifying:\n * - start: Optional start key (max 4096 chars). Omit to start from empty key\n * - end: Optional end key (max 4096 chars)\n * - startInclusive: Whether to include start key (>= vs >)\n * - endInclusive: Whether to include end key (<= vs <)\n * - limit: Max results (1-1000)\n * - pageToken: Optional token to continue from previous query\n * @returns A promise that resolves to an object containing:\n * - items: Array of values with metadata (value as JSON type T, TTL, etag, lastModified)\n * - nextToken: Optional pagination token to continue the query\n *\n * @example\n * ```typescript\n * // Get all user keys\n * const result = await store.selectRange<User>({\n * start: 'user/',\n * end: 'user/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 100\n * });\n *\n * // Continue pagination\n * if (result.nextToken) {\n * const next = await store.selectRange({\n * start: 'user/',\n * end: 'user/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 100,\n * pageToken: result.nextToken\n * });\n * }\n * ```\n */\n async selectRange<T = JsonValue>(\n select: SelectOpJson\n ): Promise<{\n nextToken?: string;\n items: {\n key: string;\n value: T;\n ttl: number;\n etag: string;\n lastModified: Date;\n }[];\n }> {\n const res = await this.service.selectStore({\n namespace: this.namespace,\n operation: select\n });\n\n return {\n nextToken: res.nextToken,\n items: Object.entries(res.items)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, val]) => ({\n key,\n value: JSON.parse(new TextDecoder().decode(val.value)) as T,\n ttl: val.metadata!.ttl,\n etag: val.metadata!.etag,\n lastModified: timestampDate(val.metadata!.lastModified!)\n }))\n };\n }\n\n /**\n * Performs a range query on keys using lexicographic comparison, returning raw binary data.\n *\n * Range queries allow scanning keys within a specific range. For example:\n * - \"user/\" to \"user/~\" - all keys starting with \"user/\"\n * - \"logs/2024-01/\" to \"logs/2024-02/\" - all logs from January 2024\n *\n * Not setting start or end will scan the entire store.\n * Results are always returned in ascending order by key.\n *\n * @param select - The select operation specifying:\n * - start: Optional start key (max 4096 chars). Omit to start from empty key\n * - end: Optional end key (max 4096 chars)\n * - startInclusive: Whether to include start key (>= vs >)\n * - endInclusive: Whether to include end key (<= vs <)\n * - limit: Max results (1-1000)\n * - pageToken: Optional token to continue from previous query\n * @returns A promise that resolves to an object containing:\n * - items: Array of values with metadata (value as Uint8Array, TTL, etag, lastModified)\n * - nextToken: Optional pagination token to continue the query\n *\n * @example\n * ```typescript\n * // Get all binary assets\n * const result = await store.selectRangeBinary({\n * start: 'assets/',\n * end: 'assets/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 50\n * });\n *\n * // Continue pagination\n * if (result.nextToken) {\n * const next = await store.selectRangeBinary({\n * start: 'assets/',\n * end: 'assets/~',\n * startInclusive: true,\n * endInclusive: false,\n * limit: 50,\n * pageToken: result.nextToken\n * });\n * }\n * ```\n */\n async selectRangeBinary(select: SelectOpJson): Promise<{\n nextToken?: string;\n items: {\n value: Uint8Array<ArrayBufferLike>;\n ttl: number;\n etag: string;\n lastModified: Date;\n }[];\n }> {\n const res = await this.service.selectStore({\n namespace: this.namespace,\n operation: select\n });\n\n return {\n nextToken: res.nextToken,\n items: Object.values(res.items).map((val) => ({\n value: val.value,\n ttl: val.metadata!.ttl,\n etag: val.metadata!.etag,\n lastModified: timestampDate(val.metadata!.lastModified!)\n }))\n };\n }\n\n /**\n * Executes a batch of write operations on the store.\n * All operations are atomic - either all succeed or all fail.\n * All operations in a batch share the same timestamp.\n * Interfering operations on the same key have undefined order.\n *\n * Note: Batch operations do not support preconditions. Use the single insert/delete\n * methods for conditional writes.\n *\n * @param ops - The write operations to execute (1-500 operations). Use WriteBatchBuilder to construct.\n * @returns A promise that resolves with metadata for each inserted key (deletes don't return metadata).\n * @throws {ConnectError} Code.InvalidArgument if invalid operations or limits exceeded.\n *\n * @example\n * ```typescript\n * const ops = new WriteBatchBuilder()\n * .insert('user:1', { name: 'Alice' }, 3600)\n * .insert('user:2', { name: 'Bob' }, 3600)\n * .delete('temp:old')\n * .build();\n *\n * const metadata = await store.writeBatch(ops);\n * console.log('Insert metadata:', metadata);\n * ```\n */\n async writeBatch(ops: WriteOperation[]): Promise<{\n [key: string]: StoreMetadata;\n }> {\n const response = await this.service.batchWriteStore({\n namespace: this.namespace,\n operations: ops\n });\n\n let result: { [key: string]: StoreMetadata } = {};\n for (const [key, metadata] of Object.entries(response.metadata)) {\n result[key] = {\n ttl: metadata.ttl,\n lastModified: timestampDate(metadata.lastModified!),\n etag: metadata.etag\n };\n }\n return result;\n }\n\n /**\n * Executes a batch of read operations on the store.\n * Keys not found are ignored (not present in the result).\n *\n * @param keys - The keys to read (1-10000 keys, each max 4096 characters).\n * @returns A promise that resolves with a BatchReadResult containing found items.\n *\n * @example\n * ```typescript\n * const result = await store.readBatch(['user:1', 'user:2', 'user:3']);\n * const user1 = result.get<User>('user:1');\n * if (user1) {\n * console.log(user1.value.name);\n * }\n * ```\n */\n async readBatch(keys: string[]): Promise<BatchReadResult> {\n const response = await this.service.batchReadStore({\n namespace: this.namespace,\n keys\n });\n return new BatchReadResult(response.items);\n }\n\n /**\n * Attempts to acquire a lock for a specified duration.\n * Uses an atomic insert operation with failIfExists precondition that fails if the key already exists.\n *\n * @param locker - The unique identifier for the lock (max 4096 chars).\n * @param ttl - Time-to-live in seconds (defaults to 5 seconds if not specified).\n * @returns A promise that resolves with true if the lock was acquired, false if already held.\n *\n * @example\n * ```typescript\n * // Try to acquire lock with default 5 second TTL\n * const acquired = await store.acquire('resource_lock');\n * if (acquired) {\n * // Lock acquired, perform work\n * }\n *\n * // Acquire lock with custom TTL\n * const acquired2 = await store.acquire('long_operation', 30);\n * ```\n */\n async acquire(locker: string, ttl?: number): Promise<boolean> {\n try {\n await this.service.writeStore({\n namespace: this.namespace,\n operation: {\n operation: {\n case: 'insert',\n value: {\n key: locker,\n value: {\n value: new Uint8Array([1]),\n ttl: ttl ?? 5 // Default TTL of 5 seconds\n },\n precondition: create(ConditionalInsertOp_PreconditionSchema, {\n failIfExists: true\n })\n }\n }\n }\n });\n } catch (e) {\n if (e instanceof ConnectError && e.code === Code.FailedPrecondition) {\n return false;\n }\n throw e;\n }\n\n return true;\n }\n\n /**\n * Releases a previously acquired lock by deleting the lock key.\n *\n * @param locker - The unique identifier for the lock (max 4096 chars).\n * @returns A promise that resolves when the lock is released.\n *\n * @example\n * ```typescript\n * await store.release('resource_lock');\n * ```\n */\n async release(locker: string): Promise<void> {\n await this.writeBatch(new WriteBatchBuilder().delete(locker).build());\n }\n\n /**\n * Acquires a lock and executes a critical section of code with exponential backoff retry logic.\n * Automatically releases the lock after the section completes or fails.\n *\n * The retry mechanism uses exponential backoff:\n * - Delay = min(initialDelay * 2^attempt, maxDelay)\n * - Default: 50ms, 100ms, 200ms, 400ms, 800ms (capped at maxDelay)\n *\n * @template T - The return type of the critical section function.\n * @param key - The unique identifier for the lock (max 4096 chars).\n * @param section - The critical section to execute once the lock is acquired.\n * @param options - Optional lock options:\n * - maxRetries: Maximum retry attempts (default: 5)\n * - initialDelay: Initial delay in ms before first retry (default: 50ms)\n * - maxDelay: Maximum delay in ms between retries (default: 2000ms)\n * @returns A promise that resolves with the result of the critical section.\n * @throws {Error} If the lock cannot be acquired after maxRetries attempts.\n *\n * @example\n * ```typescript\n * const result = await store.lock('counter_lock', async () => {\n * const counter = await store.get<number>('counter');\n * await store.insert('counter', (counter?.data ?? 0) + 1);\n * return counter?.data ?? 0;\n * });\n *\n * // With custom options\n * const result2 = await store.lock('resource', async () => {\n * // critical work\n * }, { maxRetries: 10, initialDelay: 100, maxDelay: 5000 });\n * ```\n */\n async lock<T>(\n key: string,\n section: () => Promise<T>,\n options?: LockOptions\n ): Promise<T> {\n const maxRetries = options?.maxRetries ?? 5;\n const initialDelay = options?.initialDelay ?? 50;\n const maxDelay = options?.maxDelay ?? 2000;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n const acquired = await this.acquire(key);\n if (acquired) {\n try {\n return await section();\n } finally {\n await this.release(key);\n }\n } else if (attempt < maxRetries - 1) {\n const delay = Math.min(initialDelay * 2 ** attempt, maxDelay);\n console.log(\n `Acquisition failed for key: ${key}. Delaying for ${delay}ms`\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n throw new Error(`Failed to acquire lock after maximum retries`);\n }\n}\n\n/**\n * Provides access to the least privileged Executor API, without session capabilities.\n * This API allows plugins to interact with vertex configuration and local storage.\n */\nexport class ExecutorApi extends ApiBase {\n protected executor: Client<typeof ExecutorService>;\n\n /**\n * Initializes an instance of ExecutorApi.\n *\n * @param env - The executor environment configuration.\n * @param pluginToken - The plugin token for authorization.\n */\n constructor(env: ExecutorEnvironment, pluginToken: string) {\n super(env, pluginToken);\n this.executor = createClient(\n ExecutorService,\n createGrpcWebTransport({\n fetcher: env.executor,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', `Bearer ${pluginToken}`);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Get vertex configuration with JSON-parsed config field.\n * Optionally specify which fields to include in the response.\n *\n * @template T - Type of the config object (defaults to any)\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as parsed JSON (type T).\n *\n * @example\n * ```typescript\n * // Get all fields (all fields are guaranteed to be present)\n * const {config, metadata, services} = await api.getConfig<Settings>();\n *\n * // Get only config with type - result type is { config: Settings }\n * const {config} = await api.getConfig<Settings>('config');\n *\n * // Get config and metadata - result type is { config: Settings; metadata: VertexMetadataJson }\n * const {config, metadata} = await api.getConfig<Settings>('config', 'metadata');\n * ```\n */\n // No fields specified - returns all fields (non-optional)\n async getConfig<T = any>(): Promise<{\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfig<\n T = any,\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfig<T = any>(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.executor.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n if (response.config && response.config.length > 0) {\n try {\n result.config = JSON.parse(\n new TextDecoder().decode(response.config)\n ) as T;\n } catch {\n result.config = undefined;\n }\n } else {\n result.config = undefined;\n }\n }\n\n return result;\n }\n\n /**\n * Get vertex configuration with binary config field (Uint8Array).\n * Optionally specify which fields to include in the response.\n *\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as raw Uint8Array.\n *\n * @example\n * ```typescript\n * // Get all fields with binary config (all guaranteed present)\n * const {config, metadata, services} = await api.getConfigBinary();\n *\n * // Get only binary config - result type is { config: Uint8Array }\n * const {config} = await api.getConfigBinary('config');\n * ```\n */\n // No fields specified - returns all fields (non-optional)\n async getConfigBinary(): Promise<{\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfigBinary<\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfigBinary(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.executor.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n result.config = response.config;\n }\n\n return result;\n }\n\n /**\n * Provides access to a local store instance, scoped by namespace.\n *\n * Namespace lifetimes:\n * - 'vertex' (NAMESPACE_VERTEX): Vertex-scoped, lives as long as the plugin in the project\n * - 'plugin' (NAMESPACE_PLUGIN): Plugin-wide scope, lives as long as the plugin in the project\n *\n * Access scopes:\n * - NAMESPACE_VERTEX: runtimeapi/executor.store.vertex.app, runtimeapi/executor.store.vertex.app:read\n * - NAMESPACE_PLUGIN: runtimeapi/executor.store.plugin.app, runtimeapi/executor.store.plugin.app:read\n *\n * @param namespace - The namespace for the store, either 'vertex' or 'plugin'.\n * @returns An instance of Store configured for the specified namespace.\n */\n getLocalStore(namespace: 'vertex' | 'plugin'): Store {\n return new Store(\n this.executor,\n namespace === 'vertex' ? 'NAMESPACE_VERTEX' : 'NAMESPACE_PLUGIN'\n );\n }\n\n /**\n * Retrieves a session-scoped API with the provided authorization header.\n * Session APIs have additional capabilities like sending signals and managing exchanges.\n *\n * @param authHeader - The authorization header to use for the session API (e.g., 'Bearer <access-token>').\n * @returns An instance of SessionExecutorApi configured with the provided auth header.\n */\n getSessionApi(authHeader: string): SessionExecutorApi {\n return new SessionExecutorApi(\n this.env as ExecutorEnvironment,\n this.pluginToken,\n authHeader\n );\n }\n}\n\n/**\n * Provides an API with session storage capabilities, specifically for use when a session is stopping.\n * This API allows access to session-scoped stores that persist for the lifetime of the instance.\n */\nexport class StopExecutorApi extends ExecutorApi {\n /**\n * The session authorization header for session-based operations.\n */\n protected sessionAuthHeader: string;\n\n /**\n * Initializes an instance of StopExecutorApi.\n *\n * @param env - The executor environment configuration.\n * @param pluginToken - The plugin token for authorization.\n * @param sessionAuthHeader - The authorization header for session-based operations.\n */\n constructor(\n env: ExecutorEnvironment,\n pluginToken: string,\n sessionAuthHeader: string\n ) {\n super(env, pluginToken);\n this.sessionAuthHeader = sessionAuthHeader;\n\n // Replace the executor client with one that uses the session authorization header.\n this.executor = createClient(\n ExecutorService,\n createGrpcWebTransport({\n fetcher: env.executor,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', sessionAuthHeader);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Retrieves the session authorization header used for this API instance.\n * This header contains the session access token and can be used to create\n * additional session-scoped API instances or for custom authorization needs.\n *\n * @returns The session authorization header (format: 'Bearer <token>').\n *\n * @example\n * ```typescript\n * const authHeader = api.getAuthHeader();\n * // Use for creating another session API or custom requests\n * ```\n */\n getAuthHeader(): string {\n return this.sessionAuthHeader;\n }\n\n /**\n * Retrieves a session-specific store instance based on the provided namespace.\n * Session stores persist for the lifetime of the instance (the running session).\n *\n * Namespace lifetimes:\n * - 'vertex' (NAMESPACE_VERTEX_INSTANCE): Vertex-scoped, lives as long as the instance\n * - 'plugin' (NAMESPACE_PLUGIN_INSTANCE): Plugin-wide scope, lives as long as the instance\n *\n * Access scopes:\n * - NAMESPACE_VERTEX_INSTANCE: runtimeapi/executor.store.vertex.instance, runtimeapi/executor.store.vertex.instance:read\n * - NAMESPACE_PLUGIN_INSTANCE: runtimeapi/executor.store.plugin.instance, runtimeapi/executor.store.plugin.instance:read\n *\n * @param namespace - The namespace for the store, either 'vertex' or 'plugin'.\n * @returns An instance of Store configured for the session's namespace.\n */\n getSessionStore(namespace: 'vertex' | 'plugin'): Store {\n return new Store(\n this.executor,\n namespace === 'vertex'\n ? 'NAMESPACE_VERTEX_INSTANCE'\n : 'NAMESPACE_PLUGIN_INSTANCE'\n );\n }\n}\n\n/**\n * Options for listing bound receiver signals.\n */\nexport interface ListSignalsOptions {\n /**\n * Number of signals per page (max 500, defaults to 50 if not specified).\n */\n pageSize?: number;\n\n /**\n * Whether to order signals in descending order.\n */\n orderDescending?: boolean;\n\n /**\n * Cursor for pagination (max 500 chars).\n * Used internally by continueListSignals - typically you don't set this directly.\n * @internal\n */\n cursor?: string;\n}\n\n/**\n * Provides access to the Privileged Executor API, allowing session-based operations.\n * This API enables sending signals, managing exchanges, and accessing receiver signals.\n */\nexport class SessionExecutorApi extends StopExecutorApi {\n /**\n * Initializes an instance of SessionExecutorApi.\n *\n * @param env - The executor environment configuration.\n * @param pluginToken - The plugin token for authorization.\n * @param sessionAuthHeader - The authorization header for session access.\n */\n constructor(\n env: ExecutorEnvironment,\n pluginToken: string,\n sessionAuthHeader: string\n ) {\n super(env, pluginToken, sessionAuthHeader);\n }\n\n /**\n * Lists signals bound to the receiver that activated this vertex, returning parsed JSON data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @param options - Optional listing options:\n * - pageSize: Number of signals per page (max 500, defaults to 50)\n * - orderDescending: Whether to order signals in descending order\n * @returns A promise that resolves to the list of signals, receiver name, and a cursor for pagination.\n *\n * @example\n * ```typescript\n * const result = await api.listSignals({ pageSize: 10 });\n * result.signals // Record<string, ValueJson>\n * ```\n */\n async listSignals(options?: ListSignalsOptions): Promise<{\n signals: Record<string, ValueJson>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n pageSize: options?.pageSize,\n orderDescending: options?.orderDescending\n });\n\n return {\n signals: Object.fromEntries(\n Object.entries(response.signals).map(([key, value]) => [\n key,\n JSON.parse(new TextDecoder().decode(value.data))\n ])\n ),\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Lists signals bound to the receiver that activated this vertex, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @param options - Optional listing options:\n * - pageSize: Number of signals per page (max 500, defaults to 50)\n * - orderDescending: Whether to order signals in descending order\n * @returns A promise that resolves to the list of binary signals, receiver name, and a cursor for pagination.\n *\n * @example\n * ```typescript\n * const result = await api.listSignalsBinary({ pageSize: 10 });\n * result.signals // Record<string, SignalData>\n * ```\n */\n async listSignalsBinary(options?: ListSignalsOptions): Promise<{\n signals: Record<string, SignalData>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n pageSize: options?.pageSize,\n orderDescending: options?.orderDescending\n });\n return {\n signals: response.signals,\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Continues listing signals bound to the receiver that activated this vertex from a given cursor, returning parsed JSON data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param cursor - The cursor to continue from.\n * @returns A promise that resolves to the next set of signals, receiver name, and a new cursor for further pagination.\n *\n * @example\n * ```typescript\n * const result = await api.continueListSignals(cursor);\n * result.signals // Record<string, ValueJson>\n * ```\n */\n async continueListSignals(cursor: string): Promise<{\n signals: Record<string, ValueJson>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n cursor\n });\n\n return {\n signals: Object.fromEntries(\n Object.entries(response.signals).map(([key, value]) => [\n key,\n JSON.parse(new TextDecoder().decode(value.data))\n ])\n ),\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Continues listing signals bound to the receiver that activated this vertex from a given cursor, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param cursor - The cursor to continue from.\n * @returns A promise that resolves to the next set of binary signals, receiver name, and a new cursor for further pagination.\n *\n * @example\n * ```typescript\n * const result = await api.continueListSignalsBinary(cursor);\n * result.signals // Record<string, Uint8Array<ArrayBufferLike>>\n * ```\n */\n async continueListSignalsBinary(cursor: string): Promise<{\n signals: Record<string, SignalData>;\n receiver: string;\n cursor?: string;\n }> {\n const response = await this.executor.listActiveSignals({\n cursor\n });\n return {\n signals: response.signals,\n receiver: response.receiver,\n cursor: response.nextCursor\n };\n }\n\n /**\n * Retrieves a signal bound to the receiver that activated this vertex, returning parsed JSON data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param name - The name of the signal (1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves to the signal data, or undefined if not set.\n *\n * @example\n * ```typescript\n * const user = await api.getSignal<{name: string}>('user'); // {name: string} | undefined\n * ```\n */\n async getSignal<T = ValueJson | undefined>(name: string): Promise<T> {\n const response = await this.executor.batchGetActiveSignals({\n names: [name]\n });\n const data = response.items[name];\n return (\n data ? JSON.parse(new TextDecoder().decode(data.data)) : undefined\n ) as T;\n }\n\n /**\n * Retrieves a signal bound to the receiver that activated this vertex, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param name - The name of the signal (1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves to the signal data as Uint8Array, or undefined if not set.\n *\n * @example\n * ```typescript\n * const binary = await api.getSignalBinary('avatar'); // SignalData | undefined\n * ```\n */\n async getSignalBinary(name: string): Promise<SignalData | undefined> {\n const response = await this.executor.batchGetActiveSignals({\n names: [name]\n });\n return response.items[name];\n }\n\n /**\n * Retrieves multiple signals bound to the receiver that activated this vertex in a single batch operation with full type safety.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @template T - Record type mapping signal names to their expected types.\n * @param names - Names of the signals to retrieve (1-500 unique names, each 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves with an object mapping signal names to their typed values.\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 500 items.\n *\n * @example\n * ```typescript\n * const signals = await api.getSignals<{\n * 'user': { name: string; email: string };\n * 'settings': { theme: string; notifications: boolean };\n * 'count': number;\n * }>('user', 'settings', 'count');\n *\n * // Fully typed!\n * signals['user']; // { name: string; email: string }\n * signals['settings']; // { theme: string; notifications: boolean }\n * signals['count']; // number\n * ```\n */\n async getSignals<T extends Record<string, any>>(\n ...names: Array<keyof T & string>\n ): Promise<T> {\n if (names.length === 0) {\n return {} as T;\n }\n\n const response = await this.executor.batchGetActiveSignals({\n names: names as string[]\n });\n\n if (Object.keys(response.items).length === 0) {\n return {} as T;\n }\n\n const res: Record<string, ValueJson> = {};\n for (const [key, value] of Object.entries(response.items)) {\n res[key] = JSON.parse(new TextDecoder().decode(value.data));\n }\n return res as T;\n }\n\n /**\n * Retrieves multiple signals bound to the receiver that activated this vertex in a single batch operation, returning raw binary data.\n *\n * Signal retrieval is always scoped to the specific receiver that triggered\n * the vertex execution, providing access to the contextual data that initiated\n * this workflow.\n *\n * @param names - The names of the signals to retrieve (1-500 unique names, each 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @returns A promise that resolves to a record mapping signal names to their binary data.\n * @throws {ConnectError} Code.InvalidArgument if names array is empty or exceeds 500 items.\n *\n * @example\n * ```typescript\n * const binaries = await api.getSignalsBinary('avatar', 'thumbnail', 'document');\n * binaries['avatar']; // SignalData\n * binaries['thumbnail']; // SignalData\n * ```\n */\n async getSignalsBinary(\n ...names: string[]\n ): Promise<Record<string, SignalData>> {\n if (names.length === 0) {\n return {};\n }\n\n const response = await this.executor.batchGetActiveSignals({\n names: names as string[]\n });\n\n return response.items;\n }\n\n /**\n * Sends data on the specified transmitter with the given signals.\n * For stream transmitters, this sends data but does not advance the cursor position in the graph.\n *\n * Signal values can be either JSON data or raw binary data (Uint8Array). The method\n * automatically detects the type and encodes accordingly.\n *\n * @param transmitter - The identifier of the transmitter (max 100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$, optional).\n * @param signals - Signals to transmit (0-50 signals, each signal name 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * Values can be JSON or Uint8Array.\n * @returns A promise that resolves when the send operation is completed.\n * @throws {ConnectError} Code.InvalidArgument if transmitter or signal constraints are violated.\n *\n * @example\n * ```typescript\n * // Send JSON signals\n * await api.send('output', {\n * user: { name: 'John', age: 30 },\n * status: 'success'\n * });\n *\n * // Send binary signals\n * await api.send('output', {\n * avatar: new Uint8Array([...]),\n * document: new Uint8Array([...])\n * });\n *\n * // Mix JSON and binary\n * await api.send('output', {\n * user: { name: 'John' },\n * avatar: new Uint8Array([...])\n * });\n * ```\n */\n async send(\n transmitter?: string,\n signals?: {\n [name: string]:\n | any\n | {\n data: Uint8Array<ArrayBufferLike>;\n mimeType: string;\n filename?: string;\n };\n }\n ): Promise<void> {\n await this.executor.send({\n transmitter,\n signals: signals\n ? Object.fromEntries(\n Object.entries(signals).map(([key, value]) => {\n // Check if it's a SignalData-like object (must have BOTH data as Uint8Array AND mimeType)\n if (\n value?.data instanceof Uint8Array &&\n typeof value?.mimeType === 'string' &&\n value.mimeType\n ) {\n return [\n key,\n create(SignalDataSchema, {\n data: value.data,\n mimeType: value.mimeType,\n filename: value.filename\n })\n ];\n }\n\n // Otherwise, treat as JSON\n return [\n key,\n create(SignalDataSchema, {\n data: new TextEncoder().encode(JSON.stringify(value)),\n mimeType: 'application/json'\n })\n ];\n })\n )\n : {}\n });\n }\n /**\n * Dispatches an exchange operation with a specific receiver and set of signals.\n * Exchanges are asynchronous operations that can return results through transmitters.\n *\n * Signal values can be either JSON data or raw binary data (Uint8Array). The method\n * automatically detects the type and encodes accordingly.\n *\n * @param name - The name of the exchange to dispatch (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @param receiver - The receiver to dispatch the exchange to (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * @param signals - Signals to send with the exchange (0-50 signals, each signal name 1-512 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * Values can be JSON or Uint8Array.\n * @returns A promise that resolves to the exchange operation details.\n * @throws {ConnectError} Code.InvalidArgument if name, receiver, or signal constraints are violated.\n *\n * @example\n * ```typescript\n * // Dispatch exchange with JSON signals\n * const op = await api.dispatchExchange('process_user', 'user_handler', {\n * user: { name: 'John', age: 30 },\n * action: 'create'\n * });\n *\n * // Dispatch exchange with binary signals\n * const op = await api.dispatchExchange('process_image', 'image_handler', {\n * image: new Uint8Array([...]),\n * metadata: { width: 800, height: 600 }\n * });\n * ```\n */\n async dispatchExchange(\n name: string,\n receiver: string,\n signals?: {\n [name: string]:\n | any\n | {\n data: Uint8Array<ArrayBufferLike>;\n mimeType: string;\n filename?: string;\n };\n }\n ): Promise<ExchangeOperation> {\n const response = await this.executor.dispatchExchange({\n name,\n receiver: receiver,\n signals: signals\n ? Object.fromEntries(\n Object.entries(signals).map(([key, value]) => {\n // Check if it's a SignalData-like object (must have BOTH data as Uint8Array AND mimeType)\n if (\n value?.data instanceof Uint8Array &&\n typeof value?.mimeType === 'string' &&\n value.mimeType\n ) {\n return [\n key,\n create(SignalDataSchema, {\n data: value.data,\n mimeType: value.mimeType,\n filename: value.filename\n })\n ];\n }\n\n // Otherwise, treat as JSON\n return [\n key,\n create(SignalDataSchema, {\n data: new TextEncoder().encode(JSON.stringify(value)),\n mimeType: 'application/json'\n })\n ];\n })\n )\n : {}\n });\n return response.operation!;\n }\n\n /**\n * Retrieves an exchange operation by its ID to check its status and results.\n *\n * @param id - The UUID of the exchange operation (must be a valid UUID).\n * @returns A promise that resolves to the exchange operation details.\n * @throws {ConnectError} Code.NotFound if the exchange operation doesn't exist.\n *\n * @example\n * ```typescript\n * const op = await api.getExchange('550e8400-e29b-41d4-a716-446655440000');\n * console.log('Status:', op.status);\n * ```\n */\n async getExchange(id: string): Promise<ExchangeOperation> {\n const response = await this.executor.getExchangeOperation({\n id\n });\n if (!response.item) {\n throw new ConnectError('Exchange operation not found', Code.NotFound);\n }\n return response.item;\n }\n\n /**\n * Cancels an ongoing exchange operation by its ID.\n * If the exchange is already completed or cancelled, this operation is idempotent.\n *\n * @param id - The UUID of the exchange operation to cancel (must be a valid UUID).\n * @returns A promise that resolves when the exchange is successfully canceled.\n *\n * @example\n * ```typescript\n * await api.cancelExchange('550e8400-e29b-41d4-a716-446655440000');\n * ```\n */\n async cancelExchange(id: string): Promise<void> {\n await this.executor.cancelExchangeOperation({ id });\n }\n}\n\n/**\n * Options for posting vertex configuration.\n *\n * Config semantics:\n * - Set config to a value (object or Uint8Array) to update it\n * - Set config to empty Uint8Array (new Uint8Array()) to clear it\n * - Omit config (undefined) to keep existing config unchanged\n *\n * Metadata semantics:\n * - Set metadata to update it\n * - Omit metadata (undefined) to keep existing metadata unchanged\n * - Metadata cannot be cleared\n *\n * At least one of config or metadata MUST be provided.\n */\nexport interface PostConfigOptions<Config = any> {\n /**\n * Set this to true if you would like to override any bindings that already exist.\n * This should be used if the plugin is handling signal bindings itself.\n * When true, the plugin takes full control of receiver/transmitter bindings.\n */\n overrideBindings?: boolean;\n\n /**\n * The configuration to set. Can be either a typed object (which will be JSON-serialized)\n * or raw Uint8Array.\n * - Set to value: Updates the config\n * - Set to empty Uint8Array: Clears the config\n * - Omit (undefined): Keeps existing config unchanged\n */\n config?: Config | Uint8Array;\n\n /**\n * Metadata to update with the configuration.\n * - Set to value: Updates the metadata\n * - Omit (undefined): Keeps existing metadata unchanged\n * - Cannot be cleared (must always have a value if present)\n */\n metadata?: VertexMetadataJson;\n}\n\n/**\n * API for interacting with the Configurator service.\n * This API allows plugins to manage vertex configuration and access persistent storage.\n */\nexport class ConfiguratorApi extends ApiBase {\n private configurator: Client<typeof ConfiguratorService>;\n\n /**\n * Initializes an instance of ConfiguratorApi.\n *\n * @param env - The environment configuration for the Configurator.\n * @param pluginToken - The plugin token for authorization.\n */\n constructor(env: ConfiguratorEnvironment, pluginToken: string) {\n super(env, pluginToken);\n this.configurator = createClient(\n ConfiguratorService,\n createGrpcWebTransport({\n fetcher: env.configurator,\n interceptors: [\n (next) => async (req) => {\n req.header.set('Authorization', `Bearer ${pluginToken}`);\n return await next(req);\n }\n ]\n })\n );\n }\n\n /**\n * Get vertex configuration with JSON-parsed config field.\n * Optionally specify which fields to include in the response.\n *\n * @template T - Type of the config object (defaults to any)\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as parsed JSON (type T).\n */\n // No fields specified - returns all fields (non-optional)\n async getConfig<T = any>(): Promise<{\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfig<\n T = any,\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: T;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfig<T = any>(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.configurator.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n if (response.config && response.config.length > 0) {\n try {\n result.config = JSON.parse(\n new TextDecoder().decode(response.config)\n ) as T;\n } catch {\n result.config = undefined;\n }\n } else {\n result.config = undefined;\n }\n }\n\n return result;\n }\n\n /**\n * Get vertex configuration with binary config field (Uint8Array).\n * Optionally specify which fields to include in the response.\n *\n * @param fields - Optional field names to include. If not specified, returns all fields.\n * @returns Object containing the requested fields with config as raw Uint8Array.\n */\n // No fields specified - returns all fields (non-optional)\n async getConfigBinary(): Promise<{\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n }>;\n\n // Specific fields requested - returns Pick with only those fields (non-optional)\n async getConfigBinary<\n K extends 'config' | 'metadata' | 'configuredServices' =\n | 'config'\n | 'metadata'\n | 'configuredServices'\n >(\n ...fields: K[]\n ): Promise<\n Pick<\n {\n config: Uint8Array;\n metadata: VertexMetadataJson;\n configuredServices: { [key: string]: boolean };\n },\n K\n >\n >;\n\n async getConfigBinary(\n ...fields: ('config' | 'metadata' | 'configuredServices')[]\n ): Promise<any> {\n const response = await this.configurator.getVertexConfig({\n fieldMask:\n fields.length > 0\n ? create(FieldMaskSchema, { paths: fields.map(toSnakeCase) })\n : undefined\n });\n\n const result: any = {};\n const fieldsToInclude =\n fields.length > 0 ? fields : ['config', 'metadata', 'configuredServices'];\n\n if (fieldsToInclude.includes('metadata')) {\n result.metadata = response.metadata\n ? toJson(VertexMetadataSchema, response.metadata)\n : undefined;\n }\n\n if (fieldsToInclude.includes('configuredServices')) {\n result.configuredServices = response.configuredServices || {};\n }\n\n if (fieldsToInclude.includes('config')) {\n result.config = response.config;\n }\n\n return result;\n }\n\n /**\n * Updates the vertex configuration and/or metadata.\n * At least one of config or metadata must be provided.\n *\n * Config handling:\n * - Set to a value (object or Uint8Array) to update the config\n * - Set to empty bytes to clear the config\n * - Omit (undefined) to keep existing config unchanged\n *\n * Metadata handling:\n * - Set to update the metadata\n * - Omit (undefined) to keep existing metadata unchanged\n * - Cannot be cleared\n *\n * @param opts - Configuration options:\n * - config: The configuration to set (will be JSON-serialized unless Uint8Array)\n * - metadata: Optional metadata to update\n * - overrideBindings: Set to true to override existing signal bindings (use when plugin handles bindings)\n * @returns A promise that resolves to the updated vertex metadata (useful for checking error codes after setting bindings).\n * @throws {ConnectError} Code.InvalidArgument if neither config nor metadata is provided.\n *\n * @example\n * ```typescript\n * // Update config only\n * await api.postConfig({ config: { apiKey: 'new-key' } });\n *\n * // Update metadata only\n * await api.postConfig({ metadata: { label: 'New Label' } });\n *\n * // Update both with binding override\n * await api.postConfig({\n * config: { enabled: true },\n * metadata: { description: 'Updated' },\n * overrideBindings: true\n * });\n * ```\n */\n async postConfig<T = any>(\n opts: PostConfigOptions<T>\n ): Promise<VertexMetadataJson> {\n if (!opts.config && !opts.metadata) {\n throw new ConnectError(\n 'Either config or metadata must be provided',\n Code.InvalidArgument\n );\n }\n\n let configBytes: Uint8Array | undefined;\n if (opts.config !== undefined) {\n configBytes =\n opts.config instanceof Uint8Array\n ? opts.config\n : new TextEncoder().encode(JSON.stringify(opts.config));\n }\n\n const response = await this.configurator.postVertexConfig({\n config: configBytes,\n metadata: opts.metadata\n ? fromJson(VertexMetadataSchema, opts.metadata)\n : undefined,\n overrideBindings: opts?.overrideBindings\n });\n return toJson(\n VertexMetadataSchema,\n response.metadata!\n ) as VertexMetadataJson;\n }\n\n /**\n * Lists all available incoming signals on a specific receiver.\n * This endpoint enables the configurator to get information about incoming signals\n * from vertices that transmit to this vertex's receivers.\n *\n * If you have multiple receivers, call this endpoint multiple times (once per receiver).\n *\n * @param receiver - The receiver to check for signals (1-100 chars, pattern: ^[_$a-zA-Z][_$a-zA-Z0-9]*$).\n * If not set, the first connected receiver is used.\n * @param formats - Optional signal formats to filter by. Only returns signals that match at least one schema in the array.\n * This allows filtering incoming signals to only those that conform to specific JTD schemas.\n * @param fieldMask - Optional field mask to apply to the returned schema.\n * Example: Set to \"vertices\" to omit vertex logos and reduce response size.\n * @returns A promise that resolves to information about incoming vertices, their transmitters, and available signals.\n * - vertices: Array of incoming vertices with their transmitters and signal definitions\n * - vertexLogos: Map of vertex logo IDs to logo data (base64 or data URI)\n * - receiver: The receiver name the signals are fetched on\n *\n * @example\n * ```typescript\n * // Get all incoming signals on default receiver\n * const signals = await api.listIncomingSignals();\n *\n * // Get signals from specific receiver, filtered by format\n * const filtered = await api.listIncomingSignals('data_receiver', [mySignalFormat]);\n *\n * // Get signals without logos (smaller response)\n * const minimal = await api.listIncomingSignals('input', undefined, 'vertices');\n * ```\n */\n async listIncomingSignals(\n receiver?: string,\n formats?: SignalFormatJson[],\n fieldMask?: string\n ): Promise<ListIncomingSignalsResponseJson> {\n const response = await this.configurator.listIncomingSignals({\n receiver,\n formats: formats?.map((f) => fromJson(SignalFormatSchema, f)) ?? [],\n fieldMask: fieldMask ? fromJson(FieldMaskSchema, fieldMask) : undefined\n });\n return toJson(\n ListIncomingSignalsResponseSchema,\n response\n ) as ListIncomingSignalsResponseJson;\n }\n\n /**\n * Provides access to a local store scoped by the specified namespace.\n * Local stores persist for the lifetime of the plugin in the project.\n *\n * @param namespace - The namespace for the store, either 'vertex' or 'plugin'.\n * @returns An instance of Store configured for the specified namespace.\n */\n getLocalStore(namespace: 'vertex' | 'plugin'): Store {\n return new Store(\n this.configurator,\n namespace === 'vertex' ? 'NAMESPACE_VERTEX' : 'NAMESPACE_PLUGIN'\n );\n }\n}\n\n/**\n * Maps HTTP status codes to ConnectError instances.\n *\n * @param status - The HTTP status code.\n * @returns A ConnectError instance with the appropriate code and message.\n */\nexport function mapHttpError(status: number): ConnectError {\n switch (status) {\n case 400:\n return new ConnectError('Bad Request', Code.InvalidArgument);\n case 401:\n return new ConnectError('Unauthorized', Code.Unauthenticated);\n case 403:\n return new ConnectError('Forbidden', Code.PermissionDenied);\n case 404:\n return new ConnectError('Not Found', Code.NotFound);\n case 409:\n return new ConnectError('Conflict', Code.AlreadyExists);\n case 429:\n return new ConnectError('Too Many Requests', Code.ResourceExhausted);\n case 499:\n return new ConnectError('Client Closed Request', Code.Canceled);\n case 500:\n return new ConnectError('Internal Server Error', Code.Internal);\n case 501:\n return new ConnectError('Not Implemented', Code.Unimplemented);\n case 503:\n return new ConnectError('Service Unavailable', Code.Unavailable);\n case 504:\n return new ConnectError('Gateway Timeout', Code.DeadlineExceeded);\n default:\n return new ConnectError(`Unknown HTTP error: ${status}`, Code.Unknown);\n }\n}\n\n/**\n * Maps a ConnectError to the corresponding HTTP status code.\n *\n * @param error - The ConnectError instance.\n * @returns The corresponding HTTP status code.\n */\nexport function mapConnectErrorToHttpStatus(error: ConnectError): number {\n switch (error.code) {\n case Code.Canceled:\n return 499; // Client Closed Request\n case Code.Unknown:\n return 500; // Internal Server Error (catch-all)\n case Code.InvalidArgument:\n return 400; // Bad Request\n case Code.DeadlineExceeded:\n return 504; // Gateway Timeout\n case Code.NotFound:\n return 404; // Not Found\n case Code.AlreadyExists:\n return 409; // Conflict\n case Code.PermissionDenied:\n return 403; // Forbidden\n case Code.ResourceExhausted:\n return 429; // Too Many Requests\n case Code.FailedPrecondition:\n return 400; // Bad Request\n case Code.Aborted:\n return 409; // Conflict\n case Code.OutOfRange:\n return 400; // Bad Request\n case Code.Unimplemented:\n return 501; // Not Implemented\n case Code.Internal:\n return 500; // Internal Server Error\n case Code.Unavailable:\n return 503; // Service Unavailable\n case Code.DataLoss:\n return 500; // Internal Server Error\n case Code.Unauthenticated:\n return 401; // Unauthorized\n default:\n // Any other or unknown ConnectError code\n return 500;\n }\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_data.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_data.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_data: GenFile = /*@__PURE__*/\n fileDesc(\"Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2RhdGEucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKmCgoKU2lnbmFsRGF0YRL3BQoIZmlsZW5hbWUYASABKAlC3wW6SNsFugGvAQobZmlsZW5hbWUubm9fcGF0aF9zZXBhcmF0b3JzEmNGaWxlbmFtZSBjYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKCcvJyBvciAnXCcpLiBVc2Ugb25seSB0aGUgZmlsZW5hbWUgd2l0aG91dCBkaXJlY3RvcnkgcGF0aC4aKyF0aGlzLmNvbnRhaW5zKCcvJykgJiYgIXRoaXMuY29udGFpbnMoJ1xcJym6AbsBCh5maWxlbmFtZS5ub19jb250cm9sX2NoYXJhY3RlcnMSOUZpbGVuYW1lIGNhbm5vdCBjb250YWluIGNvbnRyb2wgY2hhcmFjdGVycyBvciBudWxsIGJ5dGVzLhpeIXRoaXMuY29udGFpbnMoJ1x4MDAnKSAmJiAhdGhpcy5jb250YWlucygnXG4nKSAmJiAhdGhpcy5jb250YWlucygnXHInKSAmJiAhdGhpcy5jb250YWlucygnXHQnKboBbQonZmlsZW5hbWUubm9fbGVhZGluZ190cmFpbGluZ193aGl0ZXNwYWNlEi1GaWxlbmFtZSBjYW5ub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZS4aE3RoaXMgPT0gdGhpcy50cmltKCm6AdMBChxmaWxlbmFtZS5ub193aW5kb3dzX3Jlc2VydmVkEmpGaWxlbmFtZSBjYW5ub3QgYmUgYSBXaW5kb3dzIHJlc2VydmVkIG5hbWUgKENPTiwgUFJOLCBBVVgsIE5VTCwgQ09NMS05LCBMUFQxLTkpIHdpdGggb3Igd2l0aG91dCBleHRlbnNpb24uGkchdGhpcy5tYXRjaGVzKCdeKD9pKShDT058UFJOfEFVWHxOVUx8Q09NWzEtOV18TFBUWzEtOV0pKD86XFwuW14uXSopPyQnKXIgEAEY/wEyGV5bXi88PjoifD8qXHgwMC1ceDFGXFxdKyRIAIgBARKCBAoJbWltZV90eXBlGAIgASgJQu4DukjqA7oByQEKFm1pbWVfdHlwZS5ub193aWxkY2FyZHMSmQFNSU1FIHR5cGUgd2lsZGNhcmRzIGFyZSBub3QgYWxsb3dlZCBpbiBTaWduYWxEYXRhLiBVc2UgYSBjb25jcmV0ZSBNSU1FIHR5cGUgbGlrZSAnaW1hZ2UvcG5nJyBvciAnYXBwbGljYXRpb24vcGRmJywgbm90IHdpbGRjYXJkcyBsaWtlICdpbWFnZS8qJyBvciAnKi8qJy4aEyF0aGlzLmNvbnRhaW5zKCcqJym6Ab8BChdtaW1lX3R5cGUubm9fcGFyYW1ldGVycxKOAU1JTUUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBub3QgYWxsb3dlZC4gVXNlICd0ZXh0L3BsYWluJyBpbnN0ZWFkIG9mICd0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Jy4gVVRGLTggZW5jb2RpbmcgaXMgYXNzdW1lZCBmb3IgYWxsIHRleHQgZm9ybWF0cy4aEyF0aGlzLmNvbnRhaW5zKCc7JylyWBADGP8BMlFeW2EtekEtWjAtOV1bYS16QS1aMC05ISMkJlwtXl8uK117MCwxMjZ9L1thLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fSQSDAoEZGF0YRgDIAEoDEILCglfZmlsZW5hbWViBnByb3RvMw\", [file_buf_validate_validate]);\n\n/**\n * This represents the actual data in the system\n *\n * @generated from message mochabugapis.adapt.graph.SignalData\n */\nexport type SignalData = Message<\"mochabugapis.adapt.graph.SignalData\"> & {\n /**\n * An optional filename associated with the signal.\n * Supports international filenames with Unicode characters.\n * Can include extension (e.g., \"document.pdf\") or be extension-less (e.g., \"README\").\n *\n * Supported characters:\n * - All Unicode characters (international support)\n * - All printable ASCII including special characters\n * - Spaces, dots, hyphens, underscores anywhere in the filename\n *\n * Blocked characters (filesystem-illegal):\n * - Path separators: / \\\n * - Windows-illegal: < > : \" | ? *\n * - Control characters: null bytes, newlines, tabs, etc. (0x00-0x1F)\n *\n * Additional restrictions:\n * - Cannot start or end with whitespace (enforced by CEL)\n * - Maximum length: 255 characters (filesystem compatibility)\n *\n * Examples:\n * \u2705 \"document.pdf\"\n * \u2705 \"my-file_v2.txt\"\n * \u2705 \"Report (Final).docx\"\n * \u2705 \"r\u00E9sum\u00E9.pdf\" (French accents)\n * \u2705 \"\u6587\u6863.pdf\" (Chinese)\n * \u2705 \"\u0444\u0430\u0439\u043B.txt\" (Cyrillic)\n * \u2705 \"Project #2.xlsx\"\n * \u2705 \".gitignore\" (hidden files allowed)\n * \u274C \" file.txt\" (starts with space)\n * \u274C \"file.txt \" (ends with space)\n * \u274C \"path/to/file.txt\" (contains path separator)\n * \u274C \"file\\0.txt\" (contains null byte)\n * \u274C \"file<name>.txt\" (contains Windows-illegal char)\n *\n * @generated from field: optional string filename = 1;\n */\n filename?: string;\n\n /**\n * The MIME type of the signal data.\n * Must be a **concrete** MIME type conforming to RFC 6838 (NO wildcards allowed).\n *\n * This field specifies the actual format of the binary data in the `data` field.\n * Unlike SignalFormat which can use wildcards for format families, SignalData\n * represents actual concrete data and must have a specific MIME type.\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"application/pdf\")\n * - Type must be concrete alphanumeric (no wildcards)\n * - Subtype must be concrete alphanumeric (no wildcards)\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * **No wildcards**: Unlike SignalFormat, wildcards are FORBIDDEN here because\n * this represents actual data which must have a concrete format.\n * \u274C \"*\\/*\" - Forbidden (data must have specific format)\n * \u274C \"image/*\" - Forbidden (data must be specific image format)\n * \u274C \"*\\/png\" - Forbidden (semantically invalid anyway)\n * \u2705 \"image/png\" - Valid (concrete format)\n * \u2705 \"application/pdf\" - Valid (concrete format)\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. Charset parameters are forbidden.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (parameters not allowed)\n * \u274C \"image/*\" (wildcards not allowed)\n * \u274C \"*\\/*\" (wildcards not allowed)\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\", \"text/plain\"\n * - Data: \"application/json\", \"application/xml\", \"text/csv\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n *\n * @generated from field: string mime_type = 2;\n */\n mimeType: string;\n\n /**\n * The actual raw binary data\n *\n * @generated from field: bytes data = 3;\n */\n data: Uint8Array;\n};\n\n/**\n * This represents the actual data in the system\n *\n * @generated from message mochabugapis.adapt.graph.SignalData\n */\nexport type SignalDataJson = {\n /**\n * An optional filename associated with the signal.\n * Supports international filenames with Unicode characters.\n * Can include extension (e.g., \"document.pdf\") or be extension-less (e.g., \"README\").\n *\n * Supported characters:\n * - All Unicode characters (international support)\n * - All printable ASCII including special characters\n * - Spaces, dots, hyphens, underscores anywhere in the filename\n *\n * Blocked characters (filesystem-illegal):\n * - Path separators: / \\\n * - Windows-illegal: < > : \" | ? *\n * - Control characters: null bytes, newlines, tabs, etc. (0x00-0x1F)\n *\n * Additional restrictions:\n * - Cannot start or end with whitespace (enforced by CEL)\n * - Maximum length: 255 characters (filesystem compatibility)\n *\n * Examples:\n * \u2705 \"document.pdf\"\n * \u2705 \"my-file_v2.txt\"\n * \u2705 \"Report (Final).docx\"\n * \u2705 \"r\u00E9sum\u00E9.pdf\" (French accents)\n * \u2705 \"\u6587\u6863.pdf\" (Chinese)\n * \u2705 \"\u0444\u0430\u0439\u043B.txt\" (Cyrillic)\n * \u2705 \"Project #2.xlsx\"\n * \u2705 \".gitignore\" (hidden files allowed)\n * \u274C \" file.txt\" (starts with space)\n * \u274C \"file.txt \" (ends with space)\n * \u274C \"path/to/file.txt\" (contains path separator)\n * \u274C \"file\\0.txt\" (contains null byte)\n * \u274C \"file<name>.txt\" (contains Windows-illegal char)\n *\n * @generated from field: optional string filename = 1;\n */\n filename?: string;\n\n /**\n * The MIME type of the signal data.\n * Must be a **concrete** MIME type conforming to RFC 6838 (NO wildcards allowed).\n *\n * This field specifies the actual format of the binary data in the `data` field.\n * Unlike SignalFormat which can use wildcards for format families, SignalData\n * represents actual concrete data and must have a specific MIME type.\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"application/pdf\")\n * - Type must be concrete alphanumeric (no wildcards)\n * - Subtype must be concrete alphanumeric (no wildcards)\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * **No wildcards**: Unlike SignalFormat, wildcards are FORBIDDEN here because\n * this represents actual data which must have a concrete format.\n * \u274C \"*\\/*\" - Forbidden (data must have specific format)\n * \u274C \"image/*\" - Forbidden (data must be specific image format)\n * \u274C \"*\\/png\" - Forbidden (semantically invalid anyway)\n * \u2705 \"image/png\" - Valid (concrete format)\n * \u2705 \"application/pdf\" - Valid (concrete format)\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. Charset parameters are forbidden.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (parameters not allowed)\n * \u274C \"image/*\" (wildcards not allowed)\n * \u274C \"*\\/*\" (wildcards not allowed)\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\", \"text/plain\"\n * - Data: \"application/json\", \"application/xml\", \"text/csv\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n *\n * @generated from field: string mime_type = 2;\n */\n mimeType?: string;\n\n /**\n * The actual raw binary data\n *\n * @generated from field: bytes data = 3;\n */\n data?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalData.\n * Use `create(SignalDataSchema)` to create a new message.\n */\nexport const SignalDataSchema: GenMessage<SignalData, {jsonType: SignalDataJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_data, 0);\n\n", "// Copyright 2023-2025 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Duration, DurationJson, FieldDescriptorProto_Type, FieldDescriptorProto_TypeJson, FieldMask, FieldMaskJson, FieldOptions, MessageOptions, OneofOptions, Timestamp, TimestampJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file buf/validate/validate.proto.\n */\nexport const file_buf_validate_validate: GenFile = /*@__PURE__*/\n fileDesc(\"ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSKGAQoMTWVzc2FnZVJ1bGVzEhYKDmNlbF9leHByZXNzaW9uGAUgAygJEh8KA2NlbBgDIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEi0KBW9uZW9mGAQgAygLMh4uYnVmLnZhbGlkYXRlLk1lc3NhZ2VPbmVvZlJ1bGVKBAgBEAJSCGRpc2FibGVkIjQKEE1lc3NhZ2VPbmVvZlJ1bGUSDgoGZmllbGRzGAEgAygJEhAKCHJlcXVpcmVkGAIgASgIIh4KCk9uZW9mUnVsZXMSEAoIcmVxdWlyZWQYASABKAgiiwkKCkZpZWxkUnVsZXMSFgoOY2VsX2V4cHJlc3Npb24YHSADKAkSHwoDY2VsGBcgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSEAoIcmVxdWlyZWQYGSABKAgSJAoGaWdub3JlGBsgASgOMhQuYnVmLnZhbGlkYXRlLklnbm9yZRIpCgVmbG9hdBgBIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GbG9hdFJ1bGVzSAASKwoGZG91YmxlGAIgASgLMhkuYnVmLnZhbGlkYXRlLkRvdWJsZVJ1bGVzSAASKQoFaW50MzIYAyABKAsyGC5idWYudmFsaWRhdGUuSW50MzJSdWxlc0gAEikKBWludDY0GAQgASgLMhguYnVmLnZhbGlkYXRlLkludDY0UnVsZXNIABIrCgZ1aW50MzIYBSABKAsyGS5idWYudmFsaWRhdGUuVUludDMyUnVsZXNIABIrCgZ1aW50NjQYBiABKAsyGS5idWYudmFsaWRhdGUuVUludDY0UnVsZXNIABIrCgZzaW50MzIYByABKAsyGS5idWYudmFsaWRhdGUuU0ludDMyUnVsZXNIABIrCgZzaW50NjQYCCABKAsyGS5idWYudmFsaWRhdGUuU0ludDY0UnVsZXNIABItCgdmaXhlZDMyGAkgASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkMzJSdWxlc0gAEi0KB2ZpeGVkNjQYCiABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQ2NFJ1bGVzSAASLwoIc2ZpeGVkMzIYCyABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkMzJSdWxlc0gAEi8KCHNmaXhlZDY0GAwgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDY0UnVsZXNIABInCgRib29sGA0gASgLMhcuYnVmLnZhbGlkYXRlLkJvb2xSdWxlc0gAEisKBnN0cmluZxgOIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TdHJpbmdSdWxlc0gAEikKBWJ5dGVzGA8gASgLMhguYnVmLnZhbGlkYXRlLkJ5dGVzUnVsZXNIABInCgRlbnVtGBAgASgLMhcuYnVmLnZhbGlkYXRlLkVudW1SdWxlc0gAEi8KCHJlcGVhdGVkGBIgASgLMhsuYnVmLnZhbGlkYXRlLlJlcGVhdGVkUnVsZXNIABIlCgNtYXAYEyABKAsyFi5idWYudmFsaWRhdGUuTWFwUnVsZXNIABIlCgNhbnkYFCABKAsyFi5idWYudmFsaWRhdGUuQW55UnVsZXNIABIvCghkdXJhdGlvbhgVIAEoCzIbLmJ1Zi52YWxpZGF0ZS5EdXJhdGlvblJ1bGVzSAASMgoKZmllbGRfbWFzaxgcIAEoCzIcLmJ1Zi52YWxpZGF0ZS5GaWVsZE1hc2tSdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJVCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSLaFwoKRmxvYXRSdWxlcxKDAQoFY29uc3QYASABKAJCdMJIcQpvCgtmbG9hdC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEp8BCgJsdBgCIAEoAkKQAcJIjAEKiQEKCGZsb2F0Lmx0Gn0haGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0KT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEq8BCgNsdGUYAyABKAJCnwHCSJsBCpgBCglmbG9hdC5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLvBwoCZ3QYBCABKAJC4AfCSNwHCo0BCghmbG9hdC5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsMBCgtmbG9hdC5ndF9sdBqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCs0BChVmbG9hdC5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrTAQoMZmxvYXQuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3QEKFmZsb2F0Lmd0X2x0ZV9leGNsdXNpdmUawgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEroICgNndGUYBSABKAJCqgjCSKYICpsBCglmbG9hdC5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0gEKDGZsb2F0Lmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3AEKFmZsb2F0Lmd0ZV9sdF9leGNsdXNpdmUawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCuIBCg1mbG9hdC5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrsAQoXZmxvYXQuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESfwoCaW4YBiADKAJCc8JIcApuCghmbG9hdC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdgoGbm90X2luGAcgAygCQmbCSGMKYQoMZmxvYXQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdQoGZmluaXRlGAggASgIQmXCSGIKYAoMZmxvYXQuZmluaXRlGlBydWxlcy5maW5pdGUgPyAodGhpcy5pc05hbigpIHx8IHRoaXMuaXNJbmYoKSA/ICd2YWx1ZSBtdXN0IGJlIGZpbml0ZScgOiAnJykgOiAnJxIrCgdleGFtcGxlGAkgAygCQhrCSBcKFQoNZmxvYXQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i7RcKC0RvdWJsZVJ1bGVzEoQBCgVjb25zdBgBIAEoAUJ1wkhyCnAKDGRvdWJsZS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqABCgJsdBgCIAEoAUKRAcJIjQEKigEKCWRvdWJsZS5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKwAQoDbHRlGAMgASgBQqABwkicAQqZAQoKZG91YmxlLmx0ZRqKASFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEvQHCgJndBgEIAEoAULlB8JI4QcKjgEKCWRvdWJsZS5ndBqAASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCsQBCgxkb3VibGUuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrOAQoWZG91YmxlLmd0X2x0X2V4Y2x1c2l2ZRqzAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCtQBCg1kb3VibGUuZ3RfbHRlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycK3gEKF2RvdWJsZS5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK/CAoDZ3RlGAUgASgBQq8IwkirCAqcAQoKZG91YmxlLmd0ZRqNASFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrTAQoNZG91YmxlLmd0ZV9sdBrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK3QEKF2RvdWJsZS5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrjAQoOZG91YmxlLmd0ZV9sdGUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCu0BChhkb3VibGUuZ3RlX2x0ZV9leGNsdXNpdmUa0AFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygBQnTCSHEKbwoJZG91YmxlLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKAFCZ8JIZApiCg1kb3VibGUubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSdgoGZmluaXRlGAggASgIQmbCSGMKYQoNZG91YmxlLmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSLAoHZXhhbXBsZRgJIAMoAUIbwkgYChYKDmRvdWJsZS5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50MzJSdWxlcxKDAQoFY29uc3QYASABKAVCdMJIcQpvCgtpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoBUJ8wkh5CncKCGludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKAVCjAHCSIgBCoUBCglpbnQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoBUKIB8JIhAcKegoIaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgFQtMHwkjPBwqIAQoJaW50MzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygFQnPCSHAKbgoIaW50MzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoBUJmwkhjCmEKDGludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCCADKAVCGsJIFwoVCg1pbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKMFQoKSW50NjRSdWxlcxKDAQoFY29uc3QYASABKANCdMJIcQpvCgtpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEooBCgJsdBgCIAEoA0J8wkh5CncKCGludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEpwBCgNsdGUYAyABKANCjAHCSIgBCoUBCglpbnQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEpcHCgJndBgEIAEoA0KIB8JIhAcKegoIaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrMBCgtpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKuwEKFWludDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsMBCgxpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCssBChZpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLjBwoDZ3RlGAUgASgDQtMHwkjPBwqIAQoJaW50NjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKwgEKDGludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrKAQoWaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0gEKDWludDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK2gEKF2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygDQnPCSHAKbgoIaW50NjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoA0JmwkhjCmEKDGludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEisKB2V4YW1wbGUYCSADKANCGsJIFwoVCg1pbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDMyUnVsZXMShAEKBWNvbnN0GAEgASgNQnXCSHIKcAoMdWludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgNQn3CSHoKeAoJdWludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKA1CjQHCSIkBCoYBCgp1aW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKA1CjQfCSIkHCnsKCXVpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgNQtgHwkjUBwqJAQoKdWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygNQnTCSHEKbwoJdWludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKA1CZ8JIZApiCg11aW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoDUIbwkgYChYKDnVpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLVUludDY0UnVsZXMShAEKBWNvbnN0GAEgASgEQnXCSHIKcAoMdWludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgEQn3CSHoKeAoJdWludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKARCjQHCSIkBCoYBCgp1aW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKARCjQfCSIkHCnsKCXVpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHVpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNdWludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3VpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgEQtgHwkjUBwqJAQoKdWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg11aW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChd1aW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnVpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChh1aW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygEQnTCSHEKbwoJdWludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKARCZ8JIZApiCg11aW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoBEIbwkgYChYKDnVpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDMyUnVsZXMShAEKBWNvbnN0GAEgASgRQnXCSHIKcAoMc2ludDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgRQn3CSHoKeAoJc2ludDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBFCjQHCSIkBCoYBCgpzaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBFCjQfCSIkHCnsKCXNpbnQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgRQtgHwkjUBwqJAQoKc2ludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50MzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50MzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50MzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygRQnTCSHEKbwoJc2ludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBFCZ8JIZApiCg1zaW50MzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEUIbwkgYChYKDnNpbnQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKeFQoLU0ludDY0UnVsZXMShAEKBWNvbnN0GAEgASgSQnXCSHIKcAoMc2ludDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSiwEKAmx0GAIgASgSQn3CSHoKeAoJc2ludDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp0BCgNsdGUYAyABKBJCjQHCSIkBCoYBCgpzaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKcBwoCZ3QYBCABKBJCjQfCSIkHCnsKCXNpbnQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtAEKDHNpbnQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvAEKFnNpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrEAQoNc2ludDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzAEKF3NpbnQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLoBwoDZ3RlGAUgASgSQtgHwkjUBwqJAQoKc2ludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsMBCg1zaW50NjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCssBChdzaW50NjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK0wEKDnNpbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtsBChhzaW50NjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgAEKAmluGAYgAygSQnTCSHEKbwoJc2ludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YByADKBJCZ8JIZApiCg1zaW50NjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLAoHZXhhbXBsZRgIIAMoEkIbwkgYChYKDnNpbnQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQzMlJ1bGVzEoUBCgVjb25zdBgBIAEoB0J2wkhzCnEKDWZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAdCfsJIewp5CgpmaXhlZDMyLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAdCjgHCSIoBCocBCgtmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgHQpIHwkiOBwp8CgpmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQzMi5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQzMi5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgHQt0HwkjZBwqKAQoLZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkMzIuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAdCdcJIcgpwCgpmaXhlZDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAdCaMJIZQpjCg5maXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAdCHMJIGQoXCg9maXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIq8VCgxGaXhlZDY0UnVsZXMShQEKBWNvbnN0GAEgASgGQnbCSHMKcQoNZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEowBCgJsdBgCIAEoBkJ+wkh7CnkKCmZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASngEKA2x0ZRgDIAEoBkKOAcJIigEKhwEKC2ZpeGVkNjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKhBwoCZ3QYBCABKAZCkgfCSI4HCnwKCmZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrUBCg1maXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq9AQoXZml4ZWQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrFAQoOZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs0BChhmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEu0HCgNndGUYBSABKAZC3QfCSNkHCooBCgtmaXhlZDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsQBCg5maXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrMAQoYZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrUAQoPZml4ZWQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtwBChlmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoEBCgJpbhgGIAMoBkJ1wkhyCnAKCmZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEngKBm5vdF9pbhgHIAMoBkJowkhlCmMKDmZpeGVkNjQubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLQoHZXhhbXBsZRgIIAMoBkIcwkgZChcKD2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iwBUKDVNGaXhlZDMyUnVsZXMShgEKBWNvbnN0GAEgASgPQnfCSHQKcgoOc2ZpeGVkMzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKNAQoCbHQYAiABKA9Cf8JIfAp6CgtzZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKfAQoDbHRlGAMgASgPQo8BwkiLAQqIAQoMc2ZpeGVkMzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKmBwoCZ3QYBCABKA9ClwfCSJMHCn0KC3NmaXhlZDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOc2ZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhzZml4ZWQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPc2ZpeGVkMzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZc2ZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES8gcKA2d0ZRgFIAEoD0LiB8JI3gcKiwEKDHNmaXhlZDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9zZml4ZWQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGXNmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBzZml4ZWQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpzZml4ZWQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKCAQoCaW4YBiADKA9CdsJIcwpxCgtzZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeQoGbm90X2luGAcgAygPQmnCSGYKZAoPc2ZpeGVkMzIubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSLgoHZXhhbXBsZRgIIAMoD0IdwkgaChgKEHNmaXhlZDMyLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQ2NFJ1bGVzEoYBCgVjb25zdBgBIAEoEEJ3wkh0CnIKDnNmaXhlZDY0LmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgQQn/CSHwKegoLc2ZpeGVkNjQubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoEEKPAcJIiwEKiAEKDHNmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgQQpcHwkiTBwp9CgtzZml4ZWQ2NC5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDY0Lmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDY0Lmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDY0Lmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKBBC4gfCSN4HCosBCgxzZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkNjQuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQ2NC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkNjQuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygQQnbCSHMKcQoLc2ZpeGVkNjQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoEEJpwkhmCmQKD3NmaXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKBBCHcJIGgoYChBzZml4ZWQ2NC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLHAQoJQm9vbFJ1bGVzEoIBCgVjb25zdBgBIAEoCEJzwkhwCm4KCmJvb2wuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIqCgdleGFtcGxlGAIgAygIQhnCSBYKFAoMYm9vbC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIiiDkKC1N0cmluZ1J1bGVzEoYBCgVjb25zdBgBIAEoCUJ3wkh0CnIKDHN0cmluZy5jb25zdBpidGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCBgJXNgJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSfgoDbGVuGBMgASgEQnHCSG4KbAoKc3RyaW5nLmxlbhpedWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKZAQoHbWluX2xlbhgCIAEoBEKHAcJIgwEKgAEKDnN0cmluZy5taW5fbGVuGm51aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgY2hhcmFjdGVycycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKXAQoHbWF4X2xlbhgDIAEoBEKFAcJIgQEKfwoOc3RyaW5nLm1heF9sZW4abXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSmwEKCWxlbl9ieXRlcxgUIAEoBEKHAcJIgwEKgAEKEHN0cmluZy5sZW5fYnl0ZXMabHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSAhPSBydWxlcy5sZW5fYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuX2J5dGVzXSkgOiAnJxKjAQoJbWluX2J5dGVzGAQgASgEQo8BwkiLAQqIAQoQc3RyaW5nLm1pbl9ieXRlcxp0dWludChieXRlcyh0aGlzKS5zaXplKCkpIDwgcnVsZXMubWluX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1pbl9ieXRlc10pIDogJycSogEKCW1heF9ieXRlcxgFIAEoBEKOAcJIigEKhwEKEHN0cmluZy5tYXhfYnl0ZXMac3VpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA+IHJ1bGVzLm1heF9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9ieXRlc10pIDogJycSjQEKB3BhdHRlcm4YBiABKAlCfMJIeQp3Cg5zdHJpbmcucGF0dGVybhplIXRoaXMubWF0Y2hlcyhydWxlcy5wYXR0ZXJuKSA/ICd2YWx1ZSBkb2VzIG5vdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycShAEKBnByZWZpeBgHIAEoCUJ0wkhxCm8KDXN0cmluZy5wcmVmaXgaXiF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCBgJXNgJy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSggEKBnN1ZmZpeBgIIAEoCUJywkhvCm0KDXN0cmluZy5zdWZmaXgaXCF0aGlzLmVuZHNXaXRoKHJ1bGVzLnN1ZmZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBzdWZmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEpABCghjb250YWlucxgJIAEoCUJ+wkh7CnkKD3N0cmluZy5jb250YWlucxpmIXRoaXMuY29udGFpbnMocnVsZXMuY29udGFpbnMpID8gJ3ZhbHVlIGRvZXMgbm90IGNvbnRhaW4gc3Vic3RyaW5nIGAlc2AnLmZvcm1hdChbcnVsZXMuY29udGFpbnNdKSA6ICcnEpgBCgxub3RfY29udGFpbnMYFyABKAlCgQHCSH4KfAoTc3RyaW5nLm5vdF9jb250YWlucxpldGhpcy5jb250YWlucyhydWxlcy5ub3RfY29udGFpbnMpID8gJ3ZhbHVlIGNvbnRhaW5zIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLm5vdF9jb250YWluc10pIDogJycSgAEKAmluGAogAygJQnTCSHEKbwoJc3RyaW5nLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ3CgZub3RfaW4YCyADKAlCZ8JIZApiCg1zdHJpbmcubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycS3wEKBWVtYWlsGAwgASgIQs0BwkjJAQphCgxzdHJpbmcuZW1haWwSI3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGiwhcnVsZXMuZW1haWwgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzRW1haWwoKQpkChJzdHJpbmcuZW1haWxfZW1wdHkSMnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzGhohcnVsZXMuZW1haWwgfHwgdGhpcyAhPSAnJ0gAEucBCghob3N0bmFtZRgNIAEoCELSAcJIzgEKZQoPc3RyaW5nLmhvc3RuYW1lEh52YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdG5hbWUaMiFydWxlcy5ob3N0bmFtZSB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpCmUKFXN0cmluZy5ob3N0bmFtZV9lbXB0eRItdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lGh0hcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyAhPSAnJ0gAEscBCgJpcBgOIAEoCEK4AcJItAEKVQoJc3RyaW5nLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxomIXJ1bGVzLmlwIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKCkKWwoPc3RyaW5nLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxoXIXJ1bGVzLmlwIHx8IHRoaXMgIT0gJydIABLWAQoEaXB2NBgPIAEoCELFAcJIwQEKXAoLc3RyaW5nLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaKSFydWxlcy5pcHY0IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwKDQpCmEKEXN0cmluZy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGhkhcnVsZXMuaXB2NCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjYYECABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY2EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzGikhcnVsZXMuaXB2NiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg2KQphChFzdHJpbmcuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxoZIXJ1bGVzLmlwdjYgfHwgdGhpcyAhPSAnJ0gAEr8BCgN1cmkYESABKAhCrwHCSKsBClEKCnN0cmluZy51cmkSGXZhbHVlIG11c3QgYmUgYSB2YWxpZCBVUkkaKCFydWxlcy51cmkgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzVXJpKCkKVgoQc3RyaW5nLnVyaV9lbXB0eRIodmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIFVSSRoYIXJ1bGVzLnVyaSB8fCB0aGlzICE9ICcnSAAScAoHdXJpX3JlZhgSIAEoCEJdwkhaClgKDnN0cmluZy51cmlfcmVmEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJIFJlZmVyZW5jZRohIXJ1bGVzLnVyaV9yZWYgfHwgdGhpcy5pc1VyaVJlZigpSAASkAIKB2FkZHJlc3MYFSABKAhC/AHCSPgBCoEBCg5zdHJpbmcuYWRkcmVzcxItdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGkAhcnVsZXMuYWRkcmVzcyB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0bmFtZSgpIHx8IHRoaXMuaXNJcCgpCnIKFHN0cmluZy5hZGRyZXNzX2VtcHR5Ejx2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgaG9zdG5hbWUsIG9yIGlwIGFkZHJlc3MaHCFydWxlcy5hZGRyZXNzIHx8IHRoaXMgIT0gJydIABKYAgoEdXVpZBgWIAEoCEKHAsJIgwIKpQEKC3N0cmluZy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBp6IXJ1bGVzLnV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0kJykKWQoRc3RyaW5nLnV1aWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVVUlEGhkhcnVsZXMudXVpZCB8fCB0aGlzICE9ICcnSAAS8AEKBXR1dWlkGCEgASgIQt4BwkjaAQpzCgxzdHJpbmcudHV1aWQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCB0cmltbWVkIFVVSUQaPyFydWxlcy50dXVpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTlhLWZBLUZdezMyfSQnKQpjChJzdHJpbmcudHV1aWRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCB0cmltbWVkIFVVSUQaGiFydWxlcy50dXVpZCB8fCB0aGlzICE9ICcnSAASlgIKEWlwX3dpdGhfcHJlZml4bGVuGBogASgIQvgBwkj0AQp4ChhzdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW4SH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaOyFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCgpCngKHnN0cmluZy5pcF93aXRoX3ByZWZpeGxlbl9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBomIXJ1bGVzLmlwX3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2NF93aXRoX3ByZWZpeGxlbhgbIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCkKkgEKIHN0cmluZy5pcHY0X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjRfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEs8CChNpcHY2X3dpdGhfcHJlZml4bGVuGBwgASgIQq8CwkirAgqTAQoac3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW4SNXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGj4hcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2KQqSAQogc3RyaW5nLmlwdjZfd2l0aF9wcmVmaXhsZW5fZW1wdHkSRHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3Mgd2l0aCBwcmVmaXggbGVuZ3RoGighcnVsZXMuaXB2Nl93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAAS8gEKCWlwX3ByZWZpeBgdIAEoCELcAcJI2AEKbAoQc3RyaW5nLmlwX3ByZWZpeBIfdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIHByZWZpeBo3IXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCh0cnVlKQpoChZzdHJpbmcuaXBfcHJlZml4X2VtcHR5Ei52YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgcHJlZml4Gh4hcnVsZXMuaXBfcHJlZml4IHx8IHRoaXMgIT0gJydIABKDAgoLaXB2NF9wcmVmaXgYHiABKAhC6wHCSOcBCnUKEnN0cmluZy5pcHY0X3ByZWZpeBIhdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgcHJlZml4GjwhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNCwgdHJ1ZSkKbgoYc3RyaW5nLmlwdjRfcHJlZml4X2VtcHR5EjB2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBwcmVmaXgaICFydWxlcy5pcHY0X3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjZfcHJlZml4GB8gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2Nl9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IHByZWZpeBo8IXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDYsIHRydWUpCm4KGHN0cmluZy5pcHY2X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgcHJlZml4GiAhcnVsZXMuaXB2Nl9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAErUCCg1ob3N0X2FuZF9wb3J0GCAgASgIQpsCwkiXAgqZAQoUc3RyaW5nLmhvc3RfYW5kX3BvcnQSQXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0IChob3N0bmFtZSBvciBJUCBhZGRyZXNzKSBhbmQgcG9ydCBwYWlyGj4hcnVsZXMuaG9zdF9hbmRfcG9ydCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNIb3N0QW5kUG9ydCh0cnVlKQp5ChpzdHJpbmcuaG9zdF9hbmRfcG9ydF9lbXB0eRI3dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3QgYW5kIHBvcnQgcGFpchoiIXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyAhPSAnJ0gAEvUBCgR1bGlkGCMgASgIQuQBwkjgAQqCAQoLc3RyaW5nLnVsaWQSGnZhbHVlIG11c3QgYmUgYSB2YWxpZCBVTElEGlchcnVsZXMudWxpZCB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcygnXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kJykKWQoRc3RyaW5nLnVsaWRfZW1wdHkSKXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVTElEGhkhcnVsZXMudWxpZCB8fCB0aGlzICE9ICcnSAASqAUKEHdlbGxfa25vd25fcmVnZXgYGCABKA4yGC5idWYudmFsaWRhdGUuS25vd25SZWdleELxBMJI7QQK8AEKI3N0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lEiZ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRqgAXJ1bGVzLndlbGxfa25vd25fcmVnZXggIT0gMSB8fCB0aGlzID09ICcnIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXjo/WzAtOWEtekEtWiEjJCUmXCcqKy0uXl98flx4NjBdKyQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSskJykKjQEKKXN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl9uYW1lX2VtcHR5EjV2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSFRUUCBoZWFkZXIgbmFtZRopcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgIT0gJycK5wEKJHN0cmluZy53ZWxsX2tub3duX3JlZ2V4LmhlYWRlcl92YWx1ZRIndmFsdWUgbXVzdCBiZSBhIHZhbGlkIEhUVFAgaGVhZGVyIHZhbHVlGpUBcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAyIHx8IHRoaXMubWF0Y2hlcyghaGFzKHJ1bGVzLnN0cmljdCkgfHwgcnVsZXMuc3RyaWN0ID8nXlteXHUwMDAwLVx1MDAwOFx1MDAwQS1cdTAwMUZcdTAwN0ZdKiQnIDonXlteXHUwMDAwXHUwMDBBXHUwMDBEXSokJylIABIOCgZzdHJpY3QYGSABKAgSLAoHZXhhbXBsZRgiIAMoCUIbwkgYChYKDnN0cmluZy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLCEgoKQnl0ZXNSdWxlcxKAAQoFY29uc3QYASABKAxCccJIbgpsCgtieXRlcy5jb25zdBpddGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBiZSAleCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEngKA2xlbhgNIAEoBEJrwkhoCmYKCWJ5dGVzLmxlbhpZdWludCh0aGlzLnNpemUoKSkgIT0gcnVsZXMubGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSkAEKB21pbl9sZW4YAiABKARCf8JIfAp6Cg1ieXRlcy5taW5fbGVuGml1aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSiAEKB21heF9sZW4YAyABKARCd8JIdApyCg1ieXRlcy5tYXhfbGVuGmF1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbXVzdCBiZSBhdCBtb3N0ICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpABCgdwYXR0ZXJuGAQgASgJQn/CSHwKegoNYnl0ZXMucGF0dGVybhppIXN0cmluZyh0aGlzKS5tYXRjaGVzKHJ1bGVzLnBhdHRlcm4pID8gJ3ZhbHVlIG11c3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoEBCgZwcmVmaXgYBSABKAxCccJIbgpsCgxieXRlcy5wcmVmaXgaXCF0aGlzLnN0YXJ0c1dpdGgocnVsZXMucHJlZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHByZWZpeCAleCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEn8KBnN1ZmZpeBgGIAEoDEJvwkhsCmoKDGJ5dGVzLnN1ZmZpeBpaIXRoaXMuZW5kc1dpdGgocnVsZXMuc3VmZml4KSA/ICd2YWx1ZSBkb2VzIG5vdCBoYXZlIHN1ZmZpeCAleCcuZm9ybWF0KFtydWxlcy5zdWZmaXhdKSA6ICcnEoMBCghjb250YWlucxgHIAEoDEJxwkhuCmwKDmJ5dGVzLmNvbnRhaW5zGlohdGhpcy5jb250YWlucyhydWxlcy5jb250YWlucykgPyAndmFsdWUgZG9lcyBub3QgY29udGFpbiAleCcuZm9ybWF0KFtydWxlcy5jb250YWluc10pIDogJycSpwEKAmluGAggAygMQpoBwkiWAQqTAQoIYnl0ZXMuaW4ahgFnZXRGaWVsZChydWxlcywgJ2luJykuc2l6ZSgpID4gMCAmJiAhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YCSADKAxCZsJIYwphCgxieXRlcy5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxLrAQoCaXAYCiABKAhC3AHCSNgBCnQKCGJ5dGVzLmlwEiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgYWRkcmVzcxpGIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNCB8fCB0aGlzLnNpemUoKSA9PSAxNgpgCg5ieXRlcy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaHSFydWxlcy5pcCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5AEKBGlwdjQYCyABKAhC0wHCSM8BCmUKCmJ5dGVzLmlwdjQSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IGFkZHJlc3MaMyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gNApmChBieXRlcy5pcHY0X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NCBhZGRyZXNzGh8hcnVsZXMuaXB2NCB8fCB0aGlzLnNpemUoKSAhPSAwSAAS5QEKBGlwdjYYDCABKAhC1AHCSNABCmYKCmJ5dGVzLmlwdjYSInZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY2IGFkZHJlc3MaNCFydWxlcy5pcHY2IHx8IHRoaXMuc2l6ZSgpID09IDAgfHwgdGhpcy5zaXplKCkgPT0gMTYKZgoQYnl0ZXMuaXB2Nl9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjYgYWRkcmVzcxofIXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgIT0gMEgAEtUBCgR1dWlkGA8gASgIQsQBwkjAAQpeCgpieXRlcy51dWlkEhp2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVVJRBo0IXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpeChBieXRlcy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBofIXJ1bGVzLnV1aWQgfHwgdGhpcy5zaXplKCkgIT0gMEgAEisKB2V4YW1wbGUYDiADKAxCGsJIFwoVCg1ieXRlcy5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCDAoKd2VsbF9rbm93biLUAwoJRW51bVJ1bGVzEoIBCgVjb25zdBgBIAEoBUJzwkhwCm4KCmVudW0uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxIUCgxkZWZpbmVkX29ubHkYAiABKAgSfgoCaW4YAyADKAVCcsJIbwptCgdlbnVtLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ1CgZub3RfaW4YBCADKAVCZcJIYgpgCgtlbnVtLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEioKB2V4YW1wbGUYBSADKAVCGcJIFgoUCgxlbnVtLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAiL7AwoNUmVwZWF0ZWRSdWxlcxKeAQoJbWluX2l0ZW1zGAEgASgEQooBwkiGAQqDAQoScmVwZWF0ZWQubWluX2l0ZW1zGm11aW50KHRoaXMuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9pdGVtcyA/ICd2YWx1ZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJWQgaXRlbShzKScuZm9ybWF0KFtydWxlcy5taW5faXRlbXNdKSA6ICcnEqIBCgltYXhfaXRlbXMYAiABKARCjgHCSIoBCocBChJyZXBlYXRlZC5tYXhfaXRlbXMacXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gJXMgaXRlbShzKScuZm9ybWF0KFtydWxlcy5tYXhfaXRlbXNdKSA6ICcnEnAKBnVuaXF1ZRgDIAEoCEJgwkhdClsKD3JlcGVhdGVkLnVuaXF1ZRIocmVwZWF0ZWQgdmFsdWUgbXVzdCBjb250YWluIHVuaXF1ZSBpdGVtcxoeIXJ1bGVzLnVuaXF1ZSB8fCB0aGlzLnVuaXF1ZSgpEicKBWl0ZW1zGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiKKAwoITWFwUnVsZXMSjwEKCW1pbl9wYWlycxgBIAEoBEJ8wkh5CncKDW1hcC5taW5fcGFpcnMaZnVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX3BhaXJzID8gJ21hcCBtdXN0IGJlIGF0IGxlYXN0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWluX3BhaXJzXSkgOiAnJxKOAQoJbWF4X3BhaXJzGAIgASgEQnvCSHgKdgoNbWFwLm1heF9wYWlycxpldWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbW9zdCAlZCBlbnRyaWVzJy5mb3JtYXQoW3J1bGVzLm1heF9wYWlyc10pIDogJycSJgoEa2V5cxgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzEigKBnZhbHVlcxgFIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzKgkI6AcQgICAgAIiJgoIQW55UnVsZXMSCgoCaW4YAiADKAkSDgoGbm90X2luGAMgAygJIpkXCg1EdXJhdGlvblJ1bGVzEqEBCgVjb25zdBgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJ3wkh0CnIKDmR1cmF0aW9uLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSqAEKAmx0GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQn/CSHwKegoLZHVyYXRpb24ubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASugEKA2x0ZRgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkKPAcJIiwEKiAEKDGR1cmF0aW9uLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASwQcKAmd0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQpcHwkiTBwp9CgtkdXJhdGlvbi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDmR1cmF0aW9uLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYZHVyYXRpb24uZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD2R1cmF0aW9uLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGWR1cmF0aW9uLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEo0ICgNndGUYBiABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25C4gfCSN4HCosBCgxkdXJhdGlvbi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPZHVyYXRpb24uZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlkdXJhdGlvbi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQZHVyYXRpb24uZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoaZHVyYXRpb24uZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESnQEKAmluGAcgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnbCSHMKcQoLZHVyYXRpb24uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEpQBCgZub3RfaW4YCCADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CacJIZgpkCg9kdXJhdGlvbi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxJJCgdleGFtcGxlGAkgAygLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQh3CSBoKGAoQZHVyYXRpb24uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4i/QUKDkZpZWxkTWFza1J1bGVzEr8BCgVjb25zdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tCkwHCSI8BCowBChBmaWVsZF9tYXNrLmNvbnN0Gnh0aGlzLnBhdGhzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRocyA/ICd2YWx1ZSBtdXN0IGVxdWFsIHBhdGhzICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKS5wYXRoc10pIDogJycS2QEKAmluGAIgAygJQswBwkjIAQrFAQoNZmllbGRfbWFzay5pbhqzASF0aGlzLnBhdGhzLmFsbChwLCBwIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ2luJykuZXhpc3RzKGYsIHAuc3RhcnRzV2l0aChmKycuJykpKSA/ICd2YWx1ZSBtdXN0IG9ubHkgY29udGFpbiBwYXRocyBpbiAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEvMBCgZub3RfaW4YAyADKAlC4gHCSN4BCtsBChFmaWVsZF9tYXNrLm5vdF9pbhrFASF0aGlzLnBhdGhzLmFsbChwLCAhKHAgaW4gZ2V0RmllbGQocnVsZXMsICdub3RfaW4nKSB8fCBnZXRGaWVsZChydWxlcywgJ25vdF9pbicpLmV4aXN0cyhmLCBwLnN0YXJ0c1dpdGgoZisnLicpKSkpID8gJ3ZhbHVlIG11c3Qgbm90IGNvbnRhaW4gYW55IHBhdGhzIGluICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnbm90X2luJyldKSA6ICcnEkwKB2V4YW1wbGUYBCADKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQh/CSBwKGgoSZmllbGRfbWFzay5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAIikhgKDlRpbWVzdGFtcFJ1bGVzEqMBCgVjb25zdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCeMJIdQpzCg90aW1lc3RhbXAuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKrAQoCbHQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQoABwkh9CnsKDHRpbWVzdGFtcC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK8AQoDbHRlGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKQAcJIjAEKiQEKDXRpbWVzdGFtcC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEmwKBmx0X25vdxgHIAEoCEJawkhXClUKEHRpbWVzdGFtcC5sdF9ub3caQShydWxlcy5sdF9ub3cgJiYgdGhpcyA+IG5vdykgPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbm93JyA6ICcnSAASxwcKAmd0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEKcB8JImAcKfgoMdGltZXN0YW1wLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq3AQoPdGltZXN0YW1wLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq/AQoZdGltZXN0YW1wLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCscBChB0aW1lc3RhbXAuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrPAQoadGltZXN0YW1wLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEpMICgNndGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQucHwkjjBwqMAQoNdGltZXN0YW1wLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsYBChB0aW1lc3RhbXAuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs4BChp0aW1lc3RhbXAuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1gEKEXRpbWVzdGFtcC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt4BCht0aW1lc3RhbXAuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESbwoGZ3Rfbm93GAggASgIQl3CSFoKWAoQdGltZXN0YW1wLmd0X25vdxpEKHJ1bGVzLmd0X25vdyAmJiB0aGlzIDwgbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBub3cnIDogJydIARK4AQoGd2l0aGluGAkgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQowBwkiIAQqFAQoQdGltZXN0YW1wLndpdGhpbhpxdGhpcyA8IG5vdy1ydWxlcy53aXRoaW4gfHwgdGhpcyA+IG5vdytydWxlcy53aXRoaW4gPyAndmFsdWUgbXVzdCBiZSB3aXRoaW4gJXMgb2Ygbm93Jy5mb3JtYXQoW3J1bGVzLndpdGhpbl0pIDogJycSSwoHZXhhbXBsZRgKIAMoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCHsJIGwoZChF0aW1lc3RhbXAuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4iOQoKVmlvbGF0aW9ucxIrCgp2aW9sYXRpb25zGAEgAygLMhcuYnVmLnZhbGlkYXRlLlZpb2xhdGlvbiKfAQoJVmlvbGF0aW9uEiYKBWZpZWxkGAUgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIlCgRydWxlGAYgASgLMhcuYnVmLnZhbGlkYXRlLkZpZWxkUGF0aBIPCgdydWxlX2lkGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSDwoHZm9yX2tleRgEIAEoCEoECAEQAlIKZmllbGRfcGF0aCI9CglGaWVsZFBhdGgSMAoIZWxlbWVudHMYASADKAsyHi5idWYudmFsaWRhdGUuRmllbGRQYXRoRWxlbWVudCLpAgoQRmllbGRQYXRoRWxlbWVudBIUCgxmaWVsZF9udW1iZXIYASABKAUSEgoKZmllbGRfbmFtZRgCIAEoCRI+CgpmaWVsZF90eXBlGAMgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSPAoIa2V5X3R5cGUYBCABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI+Cgp2YWx1ZV90eXBlGAUgASgOMiouZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvLlR5cGUSDwoFaW5kZXgYBiABKARIABISCghib29sX2tleRgHIAEoCEgAEhEKB2ludF9rZXkYCCABKANIABISCgh1aW50X2tleRgJIAEoBEgAEhQKCnN0cmluZ19rZXkYCiABKAlIAEILCglzdWJzY3JpcHQqoQEKBklnbm9yZRIWChJJR05PUkVfVU5TUEVDSUZJRUQQABIYChRJR05PUkVfSUZfWkVST19WQUxVRRABEhEKDUlHTk9SRV9BTFdBWVMQAyIECAIQAioMSUdOT1JFX0VNUFRZKg5JR05PUkVfREVGQVVMVCoXSUdOT1JFX0lGX0RFRkFVTFRfVkFMVUUqFUlHTk9SRV9JRl9VTlBPUFVMQVRFRCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQm4KEmJ1aWxkLmJ1Zi52YWxpZGF0ZUINVmFsaWRhdGVQcm90b1ABWkdidWYuYnVpbGQvZ2VuL2dvL2J1ZmJ1aWxkL3Byb3RvdmFsaWRhdGUvcHJvdG9jb2xidWZmZXJzL2dvL2J1Zi92YWxpZGF0ZQ\", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_field_mask, file_google_protobuf_timestamp]);\n\n/**\n * `Rule` represents a validation rule written in the Common Expression\n * Language (CEL) syntax. Each Rule includes a unique identifier, an\n * optional error message, and the CEL expression to evaluate. For more\n * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message Foo {\n * option (buf.validate.message).cel = {\n * id: \"foo.bar\"\n * message: \"bar must be greater than 0\"\n * expression: \"this.bar > 0\"\n * };\n * int32 bar = 1;\n * }\n * ```\n *\n * @generated from message buf.validate.Rule\n */\nexport type Rule = Message<\"buf.validate.Rule\"> & {\n /**\n * `id` is a string that serves as a machine-readable name for this Rule.\n * It should be unique within its scope, which could be either a message or a field.\n *\n * @generated from field: optional string id = 1;\n */\n id: string;\n\n /**\n * `message` is an optional field that provides a human-readable error message\n * for this Rule when the CEL expression evaluates to false. If a\n * non-empty message is provided, any strings resulting from the CEL\n * expression evaluation are ignored.\n *\n * @generated from field: optional string message = 2;\n */\n message: string;\n\n /**\n * `expression` is the actual CEL expression that will be evaluated for\n * validation. This string must resolve to either a boolean or a string\n * value. If the expression evaluates to false or a non-empty string, the\n * validation is considered failed, and the message is rejected.\n *\n * @generated from field: optional string expression = 3;\n */\n expression: string;\n};\n\n/**\n * `Rule` represents a validation rule written in the Common Expression\n * Language (CEL) syntax. Each Rule includes a unique identifier, an\n * optional error message, and the CEL expression to evaluate. For more\n * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message Foo {\n * option (buf.validate.message).cel = {\n * id: \"foo.bar\"\n * message: \"bar must be greater than 0\"\n * expression: \"this.bar > 0\"\n * };\n * int32 bar = 1;\n * }\n * ```\n *\n * @generated from message buf.validate.Rule\n */\nexport type RuleJson = {\n /**\n * `id` is a string that serves as a machine-readable name for this Rule.\n * It should be unique within its scope, which could be either a message or a field.\n *\n * @generated from field: optional string id = 1;\n */\n id?: string;\n\n /**\n * `message` is an optional field that provides a human-readable error message\n * for this Rule when the CEL expression evaluates to false. If a\n * non-empty message is provided, any strings resulting from the CEL\n * expression evaluation are ignored.\n *\n * @generated from field: optional string message = 2;\n */\n message?: string;\n\n /**\n * `expression` is the actual CEL expression that will be evaluated for\n * validation. This string must resolve to either a boolean or a string\n * value. If the expression evaluates to false or a non-empty string, the\n * validation is considered failed, and the message is rejected.\n *\n * @generated from field: optional string expression = 3;\n */\n expression?: string;\n};\n\n/**\n * Describes the message buf.validate.Rule.\n * Use `create(RuleSchema)` to create a new message.\n */\nexport const RuleSchema: GenMessage<Rule, {jsonType: RuleJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 0);\n\n/**\n * MessageRules represents validation rules that are applied to the entire message.\n * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.\n *\n * @generated from message buf.validate.MessageRules\n */\nexport type MessageRules = Message<\"buf.validate.MessageRules\"> & {\n /**\n * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n *\n * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n * be same as the `expression`.\n *\n * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel_expression = \"this.foo > 42\";\n * // The field `foo` must be less than 84.\n * option (buf.validate.message).cel_expression = \"this.foo < 84\";\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated string cel_expression = 5;\n */\n celExpression: string[];\n\n /**\n * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.\n * These rules are written in Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this.foo > 42\",\n * };\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 3;\n */\n cel: Rule[];\n\n /**\n * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields\n * of which at most one can be present. If `required` is also specified, then exactly one\n * of the specified fields _must_ be present.\n *\n * This will enforce oneof-like constraints with a few features not provided by\n * actual Protobuf oneof declarations:\n * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,\n * only scalar fields are allowed.\n * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member\n * fields have explicit presence. This means that, for the purpose of determining\n * how many fields are set, explicitly setting such a field to its zero value is\n * effectively the same as not setting it at all.\n * 3. This will always generate validation errors for a message unmarshalled from\n * serialized data that sets more than one field. With a Protobuf oneof, when\n * multiple fields are present in the serialized form, earlier values are usually\n * silently ignored when unmarshalling, with only the last field being set when\n * unmarshalling completes.\n *\n * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means\n * only the field that is set will be validated and the unset fields are not validated according to the field rules.\n * This behavior can be overridden by setting `ignore` against a field.\n *\n * ```proto\n * message MyMessage {\n * // Only one of `field1` or `field2` _can_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field1\", \"field2\"] };\n * // Exactly one of `field3` or `field4` _must_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field3\", \"field4\"], required: true };\n * string field1 = 1;\n * bytes field2 = 2;\n * bool field3 = 3;\n * int32 field4 = 4;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;\n */\n oneof: MessageOneofRule[];\n};\n\n/**\n * MessageRules represents validation rules that are applied to the entire message.\n * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.\n *\n * @generated from message buf.validate.MessageRules\n */\nexport type MessageRulesJson = {\n /**\n * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n *\n * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n * be same as the `expression`.\n *\n * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel_expression = \"this.foo > 42\";\n * // The field `foo` must be less than 84.\n * option (buf.validate.message).cel_expression = \"this.foo < 84\";\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated string cel_expression = 5;\n */\n celExpression?: string[];\n\n /**\n * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.\n * These rules are written in Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n *\n * ```proto\n * message MyMessage {\n * // The field `foo` must be greater than 42.\n * option (buf.validate.message).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this.foo > 42\",\n * };\n * optional int32 foo = 1;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 3;\n */\n cel?: RuleJson[];\n\n /**\n * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields\n * of which at most one can be present. If `required` is also specified, then exactly one\n * of the specified fields _must_ be present.\n *\n * This will enforce oneof-like constraints with a few features not provided by\n * actual Protobuf oneof declarations:\n * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,\n * only scalar fields are allowed.\n * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member\n * fields have explicit presence. This means that, for the purpose of determining\n * how many fields are set, explicitly setting such a field to its zero value is\n * effectively the same as not setting it at all.\n * 3. This will always generate validation errors for a message unmarshalled from\n * serialized data that sets more than one field. With a Protobuf oneof, when\n * multiple fields are present in the serialized form, earlier values are usually\n * silently ignored when unmarshalling, with only the last field being set when\n * unmarshalling completes.\n *\n * Note that adding a field to a `oneof` will also set the IGNORE_IF_ZERO_VALUE on the fields. This means\n * only the field that is set will be validated and the unset fields are not validated according to the field rules.\n * This behavior can be overridden by setting `ignore` against a field.\n *\n * ```proto\n * message MyMessage {\n * // Only one of `field1` or `field2` _can_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field1\", \"field2\"] };\n * // Exactly one of `field3` or `field4` _must_ be present in this message.\n * option (buf.validate.message).oneof = { fields: [\"field3\", \"field4\"], required: true };\n * string field1 = 1;\n * bytes field2 = 2;\n * bool field3 = 3;\n * int32 field4 = 4;\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;\n */\n oneof?: MessageOneofRuleJson[];\n};\n\n/**\n * Describes the message buf.validate.MessageRules.\n * Use `create(MessageRulesSchema)` to create a new message.\n */\nexport const MessageRulesSchema: GenMessage<MessageRules, {jsonType: MessageRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 1);\n\n/**\n * @generated from message buf.validate.MessageOneofRule\n */\nexport type MessageOneofRule = Message<\"buf.validate.MessageOneofRule\"> & {\n /**\n * A list of field names to include in the oneof. All field names must be\n * defined in the message. At least one field must be specified, and\n * duplicates are not permitted.\n *\n * @generated from field: repeated string fields = 1;\n */\n fields: string[];\n\n /**\n * If true, one of the fields specified _must_ be set.\n *\n * @generated from field: optional bool required = 2;\n */\n required: boolean;\n};\n\n/**\n * @generated from message buf.validate.MessageOneofRule\n */\nexport type MessageOneofRuleJson = {\n /**\n * A list of field names to include in the oneof. All field names must be\n * defined in the message. At least one field must be specified, and\n * duplicates are not permitted.\n *\n * @generated from field: repeated string fields = 1;\n */\n fields?: string[];\n\n /**\n * If true, one of the fields specified _must_ be set.\n *\n * @generated from field: optional bool required = 2;\n */\n required?: boolean;\n};\n\n/**\n * Describes the message buf.validate.MessageOneofRule.\n * Use `create(MessageOneofRuleSchema)` to create a new message.\n */\nexport const MessageOneofRuleSchema: GenMessage<MessageOneofRule, {jsonType: MessageOneofRuleJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 2);\n\n/**\n * The `OneofRules` message type enables you to manage rules for\n * oneof fields in your protobuf messages.\n *\n * @generated from message buf.validate.OneofRules\n */\nexport type OneofRules = Message<\"buf.validate.OneofRules\"> & {\n /**\n * If `required` is true, exactly one field of the oneof must be set. A\n * validation error is returned if no fields in the oneof are set. Further rules\n * should be placed on the fields themselves to ensure they are valid values,\n * such as `min_len` or `gt`.\n *\n * ```proto\n * message MyMessage {\n * oneof value {\n * // Either `a` or `b` must be set. If `a` is set, it must also be\n * // non-empty; whereas if `b` is set, it can still be an empty string.\n * option (buf.validate.oneof).required = true;\n * string a = 1 [(buf.validate.field).string.min_len = 1];\n * string b = 2;\n * }\n * }\n * ```\n *\n * @generated from field: optional bool required = 1;\n */\n required: boolean;\n};\n\n/**\n * The `OneofRules` message type enables you to manage rules for\n * oneof fields in your protobuf messages.\n *\n * @generated from message buf.validate.OneofRules\n */\nexport type OneofRulesJson = {\n /**\n * If `required` is true, exactly one field of the oneof must be set. A\n * validation error is returned if no fields in the oneof are set. Further rules\n * should be placed on the fields themselves to ensure they are valid values,\n * such as `min_len` or `gt`.\n *\n * ```proto\n * message MyMessage {\n * oneof value {\n * // Either `a` or `b` must be set. If `a` is set, it must also be\n * // non-empty; whereas if `b` is set, it can still be an empty string.\n * option (buf.validate.oneof).required = true;\n * string a = 1 [(buf.validate.field).string.min_len = 1];\n * string b = 2;\n * }\n * }\n * ```\n *\n * @generated from field: optional bool required = 1;\n */\n required?: boolean;\n};\n\n/**\n * Describes the message buf.validate.OneofRules.\n * Use `create(OneofRulesSchema)` to create a new message.\n */\nexport const OneofRulesSchema: GenMessage<OneofRules, {jsonType: OneofRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 3);\n\n/**\n * FieldRules encapsulates the rules for each type of field. Depending on\n * the field, the correct set should be used to ensure proper validations.\n *\n * @generated from message buf.validate.FieldRules\n */\nexport type FieldRules = Message<\"buf.validate.FieldRules\"> & {\n /**\n * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n *\n * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n * be same as the `expression`.\n *\n * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel_expression = \"this > 42\"];\n * }\n * ```\n *\n * @generated from field: repeated string cel_expression = 29;\n */\n celExpression: string[];\n\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 23;\n */\n cel: Rule[];\n\n /**\n * If `required` is true, the field must be set. A validation error is returned\n * if the field is not set.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithPresence {\n * // Requires any string to be set, including the empty string.\n * optional string link = 1 [\n * (buf.validate.field).required = true\n * ];\n * // Requires true or false to be set.\n * optional bool disabled = 2 [\n * (buf.validate.field).required = true\n * ];\n * // Requires a message to be set, including the empty message.\n * SomeMessage msg = 4 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * All fields in the example above track presence. By default, Protovalidate\n * ignores rules on those fields if no value is set. `required` ensures that\n * the fields are set and valid.\n *\n * Fields that don't track presence are always validated by Protovalidate,\n * whether they are set or not. It is not necessary to add `required`. It\n * can be added to indicate that the field cannot be the zero value.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithoutPresence {\n * // `string.email` always applies, even to an empty string.\n * string link = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * // `repeated.min_items` always applies, even to an empty list.\n * repeated string labels = 2 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * // `required`, for fields that don't track presence, indicates\n * // the value of the field can't be the zero value.\n * int32 zero_value_not_allowed = 3 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * Note: While field rules can be applied to repeated items, map keys, and map\n * values, the elements are always considered to be set. Consequently,\n * specifying `repeated.items.required` is redundant.\n *\n * @generated from field: optional bool required = 25;\n */\n required: boolean;\n\n /**\n * Ignore validation rules on the field if its value matches the specified\n * criteria. See the `Ignore` enum for details.\n *\n * ```proto\n * message UpdateRequest {\n * // The uri rule only applies if the field is not an empty string.\n * string url = 1 [\n * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,\n * (buf.validate.field).string.uri = true\n * ];\n * }\n * ```\n *\n * @generated from field: optional buf.validate.Ignore ignore = 27;\n */\n ignore: Ignore;\n\n /**\n * @generated from oneof buf.validate.FieldRules.type\n */\n type: {\n /**\n * Scalar Field Types\n *\n * @generated from field: buf.validate.FloatRules float = 1;\n */\n value: FloatRules;\n case: \"float\";\n } | {\n /**\n * @generated from field: buf.validate.DoubleRules double = 2;\n */\n value: DoubleRules;\n case: \"double\";\n } | {\n /**\n * @generated from field: buf.validate.Int32Rules int32 = 3;\n */\n value: Int32Rules;\n case: \"int32\";\n } | {\n /**\n * @generated from field: buf.validate.Int64Rules int64 = 4;\n */\n value: Int64Rules;\n case: \"int64\";\n } | {\n /**\n * @generated from field: buf.validate.UInt32Rules uint32 = 5;\n */\n value: UInt32Rules;\n case: \"uint32\";\n } | {\n /**\n * @generated from field: buf.validate.UInt64Rules uint64 = 6;\n */\n value: UInt64Rules;\n case: \"uint64\";\n } | {\n /**\n * @generated from field: buf.validate.SInt32Rules sint32 = 7;\n */\n value: SInt32Rules;\n case: \"sint32\";\n } | {\n /**\n * @generated from field: buf.validate.SInt64Rules sint64 = 8;\n */\n value: SInt64Rules;\n case: \"sint64\";\n } | {\n /**\n * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;\n */\n value: Fixed32Rules;\n case: \"fixed32\";\n } | {\n /**\n * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;\n */\n value: Fixed64Rules;\n case: \"fixed64\";\n } | {\n /**\n * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;\n */\n value: SFixed32Rules;\n case: \"sfixed32\";\n } | {\n /**\n * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;\n */\n value: SFixed64Rules;\n case: \"sfixed64\";\n } | {\n /**\n * @generated from field: buf.validate.BoolRules bool = 13;\n */\n value: BoolRules;\n case: \"bool\";\n } | {\n /**\n * @generated from field: buf.validate.StringRules string = 14;\n */\n value: StringRules;\n case: \"string\";\n } | {\n /**\n * @generated from field: buf.validate.BytesRules bytes = 15;\n */\n value: BytesRules;\n case: \"bytes\";\n } | {\n /**\n * Complex Field Types\n *\n * @generated from field: buf.validate.EnumRules enum = 16;\n */\n value: EnumRules;\n case: \"enum\";\n } | {\n /**\n * @generated from field: buf.validate.RepeatedRules repeated = 18;\n */\n value: RepeatedRules;\n case: \"repeated\";\n } | {\n /**\n * @generated from field: buf.validate.MapRules map = 19;\n */\n value: MapRules;\n case: \"map\";\n } | {\n /**\n * Well-Known Field Types\n *\n * @generated from field: buf.validate.AnyRules any = 20;\n */\n value: AnyRules;\n case: \"any\";\n } | {\n /**\n * @generated from field: buf.validate.DurationRules duration = 21;\n */\n value: DurationRules;\n case: \"duration\";\n } | {\n /**\n * @generated from field: buf.validate.FieldMaskRules field_mask = 28;\n */\n value: FieldMaskRules;\n case: \"fieldMask\";\n } | {\n /**\n * @generated from field: buf.validate.TimestampRules timestamp = 22;\n */\n value: TimestampRules;\n case: \"timestamp\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * FieldRules encapsulates the rules for each type of field. Depending on\n * the field, the correct set should be used to ensure proper validations.\n *\n * @generated from message buf.validate.FieldRules\n */\nexport type FieldRulesJson = {\n /**\n * `cel_expression` is a repeated field CEL expressions. Each expression specifies a validation\n * rule to be applied to this message. These rules are written in Common Expression Language (CEL) syntax.\n *\n * This is a simplified form of the `cel` Rule field, where only `expression` is set. This allows for\n * simpler syntax when defining CEL Rules where `id` and `message` derived from the `expression`. `id` will\n * be same as the `expression`.\n *\n * For more information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel_expression = \"this > 42\"];\n * }\n * ```\n *\n * @generated from field: repeated string cel_expression = 29;\n */\n celExpression?: string[];\n\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.field).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 23;\n */\n cel?: RuleJson[];\n\n /**\n * If `required` is true, the field must be set. A validation error is returned\n * if the field is not set.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithPresence {\n * // Requires any string to be set, including the empty string.\n * optional string link = 1 [\n * (buf.validate.field).required = true\n * ];\n * // Requires true or false to be set.\n * optional bool disabled = 2 [\n * (buf.validate.field).required = true\n * ];\n * // Requires a message to be set, including the empty message.\n * SomeMessage msg = 4 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * All fields in the example above track presence. By default, Protovalidate\n * ignores rules on those fields if no value is set. `required` ensures that\n * the fields are set and valid.\n *\n * Fields that don't track presence are always validated by Protovalidate,\n * whether they are set or not. It is not necessary to add `required`. It\n * can be added to indicate that the field cannot be the zero value.\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message FieldsWithoutPresence {\n * // `string.email` always applies, even to an empty string.\n * string link = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * // `repeated.min_items` always applies, even to an empty list.\n * repeated string labels = 2 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * // `required`, for fields that don't track presence, indicates\n * // the value of the field can't be the zero value.\n * int32 zero_value_not_allowed = 3 [\n * (buf.validate.field).required = true\n * ];\n * }\n * ```\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * Note: While field rules can be applied to repeated items, map keys, and map\n * values, the elements are always considered to be set. Consequently,\n * specifying `repeated.items.required` is redundant.\n *\n * @generated from field: optional bool required = 25;\n */\n required?: boolean;\n\n /**\n * Ignore validation rules on the field if its value matches the specified\n * criteria. See the `Ignore` enum for details.\n *\n * ```proto\n * message UpdateRequest {\n * // The uri rule only applies if the field is not an empty string.\n * string url = 1 [\n * (buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,\n * (buf.validate.field).string.uri = true\n * ];\n * }\n * ```\n *\n * @generated from field: optional buf.validate.Ignore ignore = 27;\n */\n ignore?: IgnoreJson;\n\n /**\n * Scalar Field Types\n *\n * @generated from field: buf.validate.FloatRules float = 1;\n */\n float?: FloatRulesJson;\n\n /**\n * @generated from field: buf.validate.DoubleRules double = 2;\n */\n double?: DoubleRulesJson;\n\n /**\n * @generated from field: buf.validate.Int32Rules int32 = 3;\n */\n int32?: Int32RulesJson;\n\n /**\n * @generated from field: buf.validate.Int64Rules int64 = 4;\n */\n int64?: Int64RulesJson;\n\n /**\n * @generated from field: buf.validate.UInt32Rules uint32 = 5;\n */\n uint32?: UInt32RulesJson;\n\n /**\n * @generated from field: buf.validate.UInt64Rules uint64 = 6;\n */\n uint64?: UInt64RulesJson;\n\n /**\n * @generated from field: buf.validate.SInt32Rules sint32 = 7;\n */\n sint32?: SInt32RulesJson;\n\n /**\n * @generated from field: buf.validate.SInt64Rules sint64 = 8;\n */\n sint64?: SInt64RulesJson;\n\n /**\n * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;\n */\n fixed32?: Fixed32RulesJson;\n\n /**\n * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;\n */\n fixed64?: Fixed64RulesJson;\n\n /**\n * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;\n */\n sfixed32?: SFixed32RulesJson;\n\n /**\n * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;\n */\n sfixed64?: SFixed64RulesJson;\n\n /**\n * @generated from field: buf.validate.BoolRules bool = 13;\n */\n bool?: BoolRulesJson;\n\n /**\n * @generated from field: buf.validate.StringRules string = 14;\n */\n string?: StringRulesJson;\n\n /**\n * @generated from field: buf.validate.BytesRules bytes = 15;\n */\n bytes?: BytesRulesJson;\n\n /**\n * Complex Field Types\n *\n * @generated from field: buf.validate.EnumRules enum = 16;\n */\n enum?: EnumRulesJson;\n\n /**\n * @generated from field: buf.validate.RepeatedRules repeated = 18;\n */\n repeated?: RepeatedRulesJson;\n\n /**\n * @generated from field: buf.validate.MapRules map = 19;\n */\n map?: MapRulesJson;\n\n /**\n * Well-Known Field Types\n *\n * @generated from field: buf.validate.AnyRules any = 20;\n */\n any?: AnyRulesJson;\n\n /**\n * @generated from field: buf.validate.DurationRules duration = 21;\n */\n duration?: DurationRulesJson;\n\n /**\n * @generated from field: buf.validate.FieldMaskRules field_mask = 28;\n */\n fieldMask?: FieldMaskRulesJson;\n\n /**\n * @generated from field: buf.validate.TimestampRules timestamp = 22;\n */\n timestamp?: TimestampRulesJson;\n};\n\n/**\n * Describes the message buf.validate.FieldRules.\n * Use `create(FieldRulesSchema)` to create a new message.\n */\nexport const FieldRulesSchema: GenMessage<FieldRules, {jsonType: FieldRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 4);\n\n/**\n * PredefinedRules are custom rules that can be re-used with\n * multiple fields.\n *\n * @generated from message buf.validate.PredefinedRules\n */\nexport type PredefinedRules = Message<\"buf.validate.PredefinedRules\"> & {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.predefined).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 1;\n */\n cel: Rule[];\n};\n\n/**\n * PredefinedRules are custom rules that can be re-used with\n * multiple fields.\n *\n * @generated from message buf.validate.PredefinedRules\n */\nexport type PredefinedRulesJson = {\n /**\n * `cel` is a repeated field used to represent a textual expression\n * in the Common Expression Language (CEL) syntax. For more information,\n * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).\n *\n * ```proto\n * message MyMessage {\n * // The field `value` must be greater than 42.\n * optional int32 value = 1 [(buf.validate.predefined).cel = {\n * id: \"my_message.value\",\n * message: \"value must be greater than 42\",\n * expression: \"this > 42\",\n * }];\n * }\n * ```\n *\n * @generated from field: repeated buf.validate.Rule cel = 1;\n */\n cel?: RuleJson[];\n};\n\n/**\n * Describes the message buf.validate.PredefinedRules.\n * Use `create(PredefinedRulesSchema)` to create a new message.\n */\nexport const PredefinedRulesSchema: GenMessage<PredefinedRules, {jsonType: PredefinedRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 5);\n\n/**\n * FloatRules describes the rules applied to `float` values. These\n * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.\n *\n * @generated from message buf.validate.FloatRules\n */\nexport type FloatRules = Message<\"buf.validate.FloatRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must equal 42.0\n * float value = 1 [(buf.validate.field).float.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional float const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.FloatRules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than 10.0\n * float value = 1 [(buf.validate.field).float.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: float lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than or equal to 10.0\n * float value = 1 [(buf.validate.field).float.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: float lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.FloatRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than 5.0 [float.gt]\n * float value = 1 [(buf.validate.field).float.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [float.gt_lt]\n * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than or equal to 5.0 [float.gte]\n * float value = 1 [(buf.validate.field).float.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]\n * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float in = 6;\n */\n in: number[];\n\n /**\n * `in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must not be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float not_in = 7;\n */\n notIn: number[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFloat {\n * float value = 1 [\n * (buf.validate.field).float.example = 1.0,\n * (buf.validate.field).float.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated float example = 9;\n */\n example: number[];\n};\n\n/**\n * FloatRules describes the rules applied to `float` values. These\n * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.\n *\n * @generated from message buf.validate.FloatRules\n */\nexport type FloatRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must equal 42.0\n * float value = 1 [(buf.validate.field).float.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional float const = 1;\n */\n const?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than 10.0\n * float value = 1 [(buf.validate.field).float.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: float lt = 2;\n */\n lt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be less than or equal to 10.0\n * float value = 1 [(buf.validate.field).float.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: float lte = 3;\n */\n lte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than 5.0 [float.gt]\n * float value = 1 [(buf.validate.field).float.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [float.gt_lt]\n * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gt = 4;\n */\n gt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be greater than or equal to 5.0 [float.gte]\n * float value = 1 [(buf.validate.field).float.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]\n * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]\n * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: float gte = 5;\n */\n gte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float in = 6;\n */\n in?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFloat {\n * // value must not be in list [1.0, 2.0, 3.0]\n * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated float not_in = 7;\n */\n notIn?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFloat {\n * float value = 1 [\n * (buf.validate.field).float.example = 1.0,\n * (buf.validate.field).float.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated float example = 9;\n */\n example?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n};\n\n/**\n * Describes the message buf.validate.FloatRules.\n * Use `create(FloatRulesSchema)` to create a new message.\n */\nexport const FloatRulesSchema: GenMessage<FloatRules, {jsonType: FloatRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 6);\n\n/**\n * DoubleRules describes the rules applied to `double` values. These\n * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.\n *\n * @generated from message buf.validate.DoubleRules\n */\nexport type DoubleRules = Message<\"buf.validate.DoubleRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must equal 42.0\n * double value = 1 [(buf.validate.field).double.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional double const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.DoubleRules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than 10.0\n * double value = 1 [(buf.validate.field).double.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: double lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified value\n * (field <= value). If the field value is greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than or equal to 10.0\n * double value = 1 [(buf.validate.field).double.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: double lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.DoubleRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,\n * the range is reversed, and the field value must be outside the specified\n * range. If the field value doesn't meet the required conditions, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than 5.0 [double.gt]\n * double value = 1 [(buf.validate.field).double.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [double.gt_lt]\n * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than or equal to 5.0 [double.gte]\n * double value = 1 [(buf.validate.field).double.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]\n * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must not be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double not_in = 7;\n */\n notIn: number[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDouble {\n * double value = 1 [\n * (buf.validate.field).double.example = 1.0,\n * (buf.validate.field).double.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated double example = 9;\n */\n example: number[];\n};\n\n/**\n * DoubleRules describes the rules applied to `double` values. These\n * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.\n *\n * @generated from message buf.validate.DoubleRules\n */\nexport type DoubleRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must equal 42.0\n * double value = 1 [(buf.validate.field).double.const = 42.0];\n * }\n * ```\n *\n * @generated from field: optional double const = 1;\n */\n const?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than 10.0\n * double value = 1 [(buf.validate.field).double.lt = 10.0];\n * }\n * ```\n *\n * @generated from field: double lt = 2;\n */\n lt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `lte` requires the field value to be less than or equal to the specified value\n * (field <= value). If the field value is greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be less than or equal to 10.0\n * double value = 1 [(buf.validate.field).double.lte = 10.0];\n * }\n * ```\n *\n * @generated from field: double lte = 3;\n */\n lte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,\n * the range is reversed, and the field value must be outside the specified\n * range. If the field value doesn't meet the required conditions, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than 5.0 [double.gt]\n * double value = 1 [(buf.validate.field).double.gt = 5.0];\n *\n * // value must be greater than 5 and less than 10.0 [double.gt_lt]\n * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];\n *\n * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gt = 4;\n */\n gt?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be greater than or equal to 5.0 [double.gte]\n * double value = 1 [(buf.validate.field).double.gte = 5.0];\n *\n * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]\n * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];\n *\n * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]\n * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];\n * }\n * ```\n *\n * @generated from field: double gte = 5;\n */\n gte?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyDouble {\n * // value must be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double in = 6;\n */\n in?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyDouble {\n * // value must not be in list [1.0, 2.0, 3.0]\n * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];\n * }\n * ```\n *\n * @generated from field: repeated double not_in = 7;\n */\n notIn?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n\n /**\n * `finite` requires the field value to be finite. If the field value is\n * infinite or NaN, an error message is generated.\n *\n * @generated from field: optional bool finite = 8;\n */\n finite?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDouble {\n * double value = 1 [\n * (buf.validate.field).double.example = 1.0,\n * (buf.validate.field).double.example = inf\n * ];\n * }\n * ```\n *\n * @generated from field: repeated double example = 9;\n */\n example?: (number | \"NaN\" | \"Infinity\" | \"-Infinity\")[];\n};\n\n/**\n * Describes the message buf.validate.DoubleRules.\n * Use `create(DoubleRulesSchema)` to create a new message.\n */\nexport const DoubleRulesSchema: GenMessage<DoubleRules, {jsonType: DoubleRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 7);\n\n/**\n * Int32Rules describes the rules applied to `int32` values. These\n * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int32Rules\n */\nexport type Int32Rules = Message<\"buf.validate.Int32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must equal 42\n * int32 value = 1 [(buf.validate.field).int32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.Int32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than 10\n * int32 value = 1 [(buf.validate.field).int32.lt = 10];\n * }\n * ```\n *\n * @generated from field: int32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than or equal to 10\n * int32 value = 1 [(buf.validate.field).int32.lte = 10];\n * }\n * ```\n *\n * @generated from field: int32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Int32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than 5 [int32.gt]\n * int32 value = 1 [(buf.validate.field).int32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int32.gt_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified value\n * (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than or equal to 5 [int32.gte]\n * int32 value = 1 [(buf.validate.field).int32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must not be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt32 {\n * int32 value = 1 [\n * (buf.validate.field).int32.example = 1,\n * (buf.validate.field).int32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Int32Rules describes the rules applied to `int32` values. These\n * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int32Rules\n */\nexport type Int32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must equal 42\n * int32 value = 1 [(buf.validate.field).int32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than 10\n * int32 value = 1 [(buf.validate.field).int32.lt = 10];\n * }\n * ```\n *\n * @generated from field: int32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be less than or equal to 10\n * int32 value = 1 [(buf.validate.field).int32.lte = 10];\n * }\n * ```\n *\n * @generated from field: int32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than 5 [int32.gt]\n * int32 value = 1 [(buf.validate.field).int32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int32.gt_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified value\n * (exclusive). If the value of `gte` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be greater than or equal to 5 [int32.gte]\n * int32 value = 1 [(buf.validate.field).int32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]\n * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]\n * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyInt32 {\n * // value must not be in list [1, 2, 3]\n * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt32 {\n * int32 value = 1 [\n * (buf.validate.field).int32.example = 1,\n * (buf.validate.field).int32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.Int32Rules.\n * Use `create(Int32RulesSchema)` to create a new message.\n */\nexport const Int32RulesSchema: GenMessage<Int32Rules, {jsonType: Int32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 8);\n\n/**\n * Int64Rules describes the rules applied to `int64` values. These\n * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int64Rules\n */\nexport type Int64Rules = Message<\"buf.validate.Int64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must equal 42\n * int64 value = 1 [(buf.validate.field).int64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.Int64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than 10\n * int64 value = 1 [(buf.validate.field).int64.lt = 10];\n * }\n * ```\n *\n * @generated from field: int64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than or equal to 10\n * int64 value = 1 [(buf.validate.field).int64.lte = 10];\n * }\n * ```\n *\n * @generated from field: int64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Int64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than 5 [int64.gt]\n * int64 value = 1 [(buf.validate.field).int64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int64.gt_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than or equal to 5 [int64.gte]\n * int64 value = 1 [(buf.validate.field).int64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must not be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt64 {\n * int64 value = 1 [\n * (buf.validate.field).int64.example = 1,\n * (buf.validate.field).int64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int64 example = 9;\n */\n example: bigint[];\n};\n\n/**\n * Int64Rules describes the rules applied to `int64` values. These\n * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.Int64Rules\n */\nexport type Int64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must equal 42\n * int64 value = 1 [(buf.validate.field).int64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional int64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than 10\n * int64 value = 1 [(buf.validate.field).int64.lt = 10];\n * }\n * ```\n *\n * @generated from field: int64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be less than or equal to 10\n * int64 value = 1 [(buf.validate.field).int64.lte = 10];\n * }\n * ```\n *\n * @generated from field: int64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than 5 [int64.gt]\n * int64 value = 1 [(buf.validate.field).int64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [int64.gt_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be greater than or equal to 5 [int64.gte]\n * int64 value = 1 [(buf.validate.field).int64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]\n * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]\n * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: int64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyInt64 {\n * // value must not be in list [1, 2, 3]\n * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated int64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyInt64 {\n * int64 value = 1 [\n * (buf.validate.field).int64.example = 1,\n * (buf.validate.field).int64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated int64 example = 9;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.Int64Rules.\n * Use `create(Int64RulesSchema)` to create a new message.\n */\nexport const Int64RulesSchema: GenMessage<Int64Rules, {jsonType: Int64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 9);\n\n/**\n * UInt32Rules describes the rules applied to `uint32` values. These\n * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt32Rules\n */\nexport type UInt32Rules = Message<\"buf.validate.UInt32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must equal 42\n * uint32 value = 1 [(buf.validate.field).uint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.UInt32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than 10\n * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than or equal to 10\n * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.UInt32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than 5 [uint32.gt]\n * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint32.gt_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than or equal to 5 [uint32.gte]\n * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must not be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt32 {\n * uint32 value = 1 [\n * (buf.validate.field).uint32.example = 1,\n * (buf.validate.field).uint32.example = 10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint32 example = 8;\n */\n example: number[];\n};\n\n/**\n * UInt32Rules describes the rules applied to `uint32` values. These\n * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt32Rules\n */\nexport type UInt32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must equal 42\n * uint32 value = 1 [(buf.validate.field).uint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than 10\n * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be less than or equal to 10\n * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than 5 [uint32.gt]\n * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint32.gt_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be greater than or equal to 5 [uint32.gte]\n * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]\n * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]\n * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt32 {\n * // value must not be in list [1, 2, 3]\n * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt32 {\n * uint32 value = 1 [\n * (buf.validate.field).uint32.example = 1,\n * (buf.validate.field).uint32.example = 10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.UInt32Rules.\n * Use `create(UInt32RulesSchema)` to create a new message.\n */\nexport const UInt32RulesSchema: GenMessage<UInt32Rules, {jsonType: UInt32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 10);\n\n/**\n * UInt64Rules describes the rules applied to `uint64` values. These\n * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt64Rules\n */\nexport type UInt64Rules = Message<\"buf.validate.UInt64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must equal 42\n * uint64 value = 1 [(buf.validate.field).uint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.UInt64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than 10\n * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than or equal to 10\n * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.UInt64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than 5 [uint64.gt]\n * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint64.gt_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than or equal to 5 [uint64.gte]\n * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must not be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt64 {\n * uint64 value = 1 [\n * (buf.validate.field).uint64.example = 1,\n * (buf.validate.field).uint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * UInt64Rules describes the rules applied to `uint64` values. These\n * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.\n *\n * @generated from message buf.validate.UInt64Rules\n */\nexport type UInt64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must equal 42\n * uint64 value = 1 [(buf.validate.field).uint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional uint64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than 10\n * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be less than or equal to 10\n * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: uint64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than 5 [uint64.gt]\n * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [uint64.gt_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be greater than or equal to 5 [uint64.gte]\n * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]\n * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]\n * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: uint64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyUInt64 {\n * // value must not be in list [1, 2, 3]\n * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated uint64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyUInt64 {\n * uint64 value = 1 [\n * (buf.validate.field).uint64.example = 1,\n * (buf.validate.field).uint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated uint64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.UInt64Rules.\n * Use `create(UInt64RulesSchema)` to create a new message.\n */\nexport const UInt64RulesSchema: GenMessage<UInt64Rules, {jsonType: UInt64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 11);\n\n/**\n * SInt32Rules describes the rules applied to `sint32` values.\n *\n * @generated from message buf.validate.SInt32Rules\n */\nexport type SInt32Rules = Message<\"buf.validate.SInt32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must equal 42\n * sint32 value = 1 [(buf.validate.field).sint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.SInt32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than 10\n * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than or equal to 10\n * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SInt32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than 5 [sint32.gt]\n * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint32.gt_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than or equal to 5 [sint32.gte]\n * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must not be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt32 {\n * sint32 value = 1 [\n * (buf.validate.field).sint32.example = 1,\n * (buf.validate.field).sint32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint32 example = 8;\n */\n example: number[];\n};\n\n/**\n * SInt32Rules describes the rules applied to `sint32` values.\n *\n * @generated from message buf.validate.SInt32Rules\n */\nexport type SInt32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must equal 42\n * sint32 value = 1 [(buf.validate.field).sint32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than 10\n * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be less than or equal to 10\n * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than 5 [sint32.gt]\n * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint32.gt_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be greater than or equal to 5 [sint32.gte]\n * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]\n * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]\n * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt32 {\n * // value must not be in list [1, 2, 3]\n * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt32 {\n * sint32 value = 1 [\n * (buf.validate.field).sint32.example = 1,\n * (buf.validate.field).sint32.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.SInt32Rules.\n * Use `create(SInt32RulesSchema)` to create a new message.\n */\nexport const SInt32RulesSchema: GenMessage<SInt32Rules, {jsonType: SInt32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 12);\n\n/**\n * SInt64Rules describes the rules applied to `sint64` values.\n *\n * @generated from message buf.validate.SInt64Rules\n */\nexport type SInt64Rules = Message<\"buf.validate.SInt64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must equal 42\n * sint64 value = 1 [(buf.validate.field).sint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.SInt64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than 10\n * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than or equal to 10\n * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SInt64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than 5 [sint64.gt]\n * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint64.gt_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than or equal to 5 [sint64.gte]\n * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must not be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt64 {\n * sint64 value = 1 [\n * (buf.validate.field).sint64.example = 1,\n * (buf.validate.field).sint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * SInt64Rules describes the rules applied to `sint64` values.\n *\n * @generated from message buf.validate.SInt64Rules\n */\nexport type SInt64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must equal 42\n * sint64 value = 1 [(buf.validate.field).sint64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sint64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field\n * < value). If the field value is equal to or greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than 10\n * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be less than or equal to 10\n * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sint64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than 5 [sint64.gt]\n * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sint64.gt_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be greater than or equal to 5 [sint64.gte]\n * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]\n * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]\n * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sint64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySInt64 {\n * // value must not be in list [1, 2, 3]\n * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sint64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySInt64 {\n * sint64 value = 1 [\n * (buf.validate.field).sint64.example = 1,\n * (buf.validate.field).sint64.example = -10\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sint64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.SInt64Rules.\n * Use `create(SInt64RulesSchema)` to create a new message.\n */\nexport const SInt64RulesSchema: GenMessage<SInt64Rules, {jsonType: SInt64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 13);\n\n/**\n * Fixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.Fixed32Rules\n */\nexport type Fixed32Rules = Message<\"buf.validate.Fixed32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must equal 42\n * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.Fixed32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than or equal to 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Fixed32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than 5 [fixed32.gt]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed32.gt_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than or equal to 5 [fixed32.gte]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must not be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed32 {\n * fixed32 value = 1 [\n * (buf.validate.field).fixed32.example = 1,\n * (buf.validate.field).fixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 example = 8;\n */\n example: number[];\n};\n\n/**\n * Fixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.Fixed32Rules\n */\nexport type Fixed32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must equal 42\n * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be less than or equal to 10\n * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than 5 [fixed32.gt]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed32.gt_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be greater than or equal to 5 [fixed32.gte]\n * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]\n * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]\n * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message\n * is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed32 {\n * // value must not be in list [1, 2, 3]\n * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed32 {\n * fixed32 value = 1 [\n * (buf.validate.field).fixed32.example = 1,\n * (buf.validate.field).fixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.Fixed32Rules.\n * Use `create(Fixed32RulesSchema)` to create a new message.\n */\nexport const Fixed32RulesSchema: GenMessage<Fixed32Rules, {jsonType: Fixed32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 14);\n\n/**\n * Fixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.Fixed64Rules\n */\nexport type Fixed64Rules = Message<\"buf.validate.Fixed64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must equal 42\n * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.Fixed64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than or equal to 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.Fixed64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than 5 [fixed64.gt]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed64.gt_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than or equal to 5 [fixed64.gte]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must not be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed64 {\n * fixed64 value = 1 [\n * (buf.validate.field).fixed64.example = 1,\n * (buf.validate.field).fixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * Fixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.Fixed64Rules\n */\nexport type Fixed64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must equal 42\n * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional fixed64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be less than or equal to 10\n * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: fixed64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than 5 [fixed64.gt]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [fixed64.gt_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be greater than or equal to 5 [fixed64.gte]\n * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]\n * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]\n * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: fixed64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyFixed64 {\n * // value must not be in list [1, 2, 3]\n * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFixed64 {\n * fixed64 value = 1 [\n * (buf.validate.field).fixed64.example = 1,\n * (buf.validate.field).fixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated fixed64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.Fixed64Rules.\n * Use `create(Fixed64RulesSchema)` to create a new message.\n */\nexport const Fixed64RulesSchema: GenMessage<Fixed64Rules, {jsonType: Fixed64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 15);\n\n/**\n * SFixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.SFixed32Rules\n */\nexport type SFixed32Rules = Message<\"buf.validate.SFixed32Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must equal 42\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed32 const = 1;\n */\n const: number;\n\n /**\n * @generated from oneof buf.validate.SFixed32Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lt = 2;\n */\n value: number;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than or equal to 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lte = 3;\n */\n value: number;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SFixed32Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than 5 [sfixed32.gt]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gt = 4;\n */\n value: number;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than or equal to 5 [sfixed32.gte]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gte = 5;\n */\n value: number;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 in = 6;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must not be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 not_in = 7;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed32 {\n * sfixed32 value = 1 [\n * (buf.validate.field).sfixed32.example = 1,\n * (buf.validate.field).sfixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 example = 8;\n */\n example: number[];\n};\n\n/**\n * SFixed32Rules describes the rules applied to `fixed32` values.\n *\n * @generated from message buf.validate.SFixed32Rules\n */\nexport type SFixed32RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must equal 42\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed32 const = 1;\n */\n const?: number;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lt = 2;\n */\n lt?: number;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be less than or equal to 10\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed32 lte = 3;\n */\n lte?: number;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than 5 [sfixed32.gt]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gt = 4;\n */\n gt?: number;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be greater than or equal to 5 [sfixed32.gte]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]\n * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]\n * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed32 gte = 5;\n */\n gte?: number;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 in = 6;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed32 {\n * // value must not be in list [1, 2, 3]\n * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 not_in = 7;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed32 {\n * sfixed32 value = 1 [\n * (buf.validate.field).sfixed32.example = 1,\n * (buf.validate.field).sfixed32.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed32 example = 8;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.SFixed32Rules.\n * Use `create(SFixed32RulesSchema)` to create a new message.\n */\nexport const SFixed32RulesSchema: GenMessage<SFixed32Rules, {jsonType: SFixed32RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 16);\n\n/**\n * SFixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.SFixed64Rules\n */\nexport type SFixed64Rules = Message<\"buf.validate.SFixed64Rules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must equal 42\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed64 const = 1;\n */\n const: bigint;\n\n /**\n * @generated from oneof buf.validate.SFixed64Rules.less_than\n */\n lessThan: {\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lt = 2;\n */\n value: bigint;\n case: \"lt\";\n } | {\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than or equal to 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lte = 3;\n */\n value: bigint;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.SFixed64Rules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than 5 [sfixed64.gt]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gt = 4;\n */\n value: bigint;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than or equal to 5 [sfixed64.gte]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gte = 5;\n */\n value: bigint;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 in = 6;\n */\n in: bigint[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must not be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 not_in = 7;\n */\n notIn: bigint[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed64 {\n * sfixed64 value = 1 [\n * (buf.validate.field).sfixed64.example = 1,\n * (buf.validate.field).sfixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 example = 8;\n */\n example: bigint[];\n};\n\n/**\n * SFixed64Rules describes the rules applied to `fixed64` values.\n *\n * @generated from message buf.validate.SFixed64Rules\n */\nexport type SFixed64RulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must equal 42\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];\n * }\n * ```\n *\n * @generated from field: optional sfixed64 const = 1;\n */\n const?: string;\n\n /**\n * `lt` requires the field value to be less than the specified value (field <\n * value). If the field value is equal to or greater than the specified value,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lt = 2;\n */\n lt?: string;\n\n /**\n * `lte` requires the field value to be less than or equal to the specified\n * value (field <= value). If the field value is greater than the specified\n * value, an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be less than or equal to 10\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];\n * }\n * ```\n *\n * @generated from field: sfixed64 lte = 3;\n */\n lte?: string;\n\n /**\n * `gt` requires the field value to be greater than the specified value\n * (exclusive). If the value of `gt` is larger than a specified `lt` or\n * `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than 5 [sfixed64.gt]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];\n *\n * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];\n *\n * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gt = 4;\n */\n gt?: string;\n\n /**\n * `gte` requires the field value to be greater than or equal to the specified\n * value (exclusive). If the value of `gte` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be greater than or equal to 5 [sfixed64.gte]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];\n *\n * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]\n * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];\n *\n * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]\n * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];\n * }\n * ```\n *\n * @generated from field: sfixed64 gte = 5;\n */\n gte?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified values.\n * If the field value isn't one of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 in = 6;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not be equal to any of the specified\n * values. If the field value is one of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MySFixed64 {\n * // value must not be in list [1, 2, 3]\n * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 not_in = 7;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MySFixed64 {\n * sfixed64 value = 1 [\n * (buf.validate.field).sfixed64.example = 1,\n * (buf.validate.field).sfixed64.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated sfixed64 example = 8;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.SFixed64Rules.\n * Use `create(SFixed64RulesSchema)` to create a new message.\n */\nexport const SFixed64RulesSchema: GenMessage<SFixed64Rules, {jsonType: SFixed64RulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 17);\n\n/**\n * BoolRules describes the rules applied to `bool` values. These rules\n * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BoolRules\n */\nexport type BoolRules = Message<\"buf.validate.BoolRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified boolean value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBool {\n * // value must equal true\n * bool value = 1 [(buf.validate.field).bool.const = true];\n * }\n * ```\n *\n * @generated from field: optional bool const = 1;\n */\n const: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBool {\n * bool value = 1 [\n * (buf.validate.field).bool.example = 1,\n * (buf.validate.field).bool.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bool example = 2;\n */\n example: boolean[];\n};\n\n/**\n * BoolRules describes the rules applied to `bool` values. These rules\n * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BoolRules\n */\nexport type BoolRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified boolean value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBool {\n * // value must equal true\n * bool value = 1 [(buf.validate.field).bool.const = true];\n * }\n * ```\n *\n * @generated from field: optional bool const = 1;\n */\n const?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBool {\n * bool value = 1 [\n * (buf.validate.field).bool.example = 1,\n * (buf.validate.field).bool.example = 2\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bool example = 2;\n */\n example?: boolean[];\n};\n\n/**\n * Describes the message buf.validate.BoolRules.\n * Use `create(BoolRulesSchema)` to create a new message.\n */\nexport const BoolRulesSchema: GenMessage<BoolRules, {jsonType: BoolRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 18);\n\n/**\n * StringRules describes the rules applied to `string` values These\n * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.\n *\n * @generated from message buf.validate.StringRules\n */\nexport type StringRules = Message<\"buf.validate.StringRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyString {\n * // value must equal `hello`\n * string value = 1 [(buf.validate.field).string.const = \"hello\"];\n * }\n * ```\n *\n * @generated from field: optional string const = 1;\n */\n const: string;\n\n /**\n * `len` dictates that the field value must have the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value does not meet the specified\n * length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 5 characters\n * string value = 1 [(buf.validate.field).string.len = 5];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 19;\n */\n len: bigint;\n\n /**\n * `min_len` specifies that the field value must have at least the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value contains fewer characters, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 3 characters\n * string value = 1 [(buf.validate.field).string.min_len = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen: bigint;\n\n /**\n * `max_len` specifies that the field value must have no more than the specified\n * number of characters (Unicode code points), which may differ from the\n * number of bytes in the string. If the field value contains more characters,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 10 characters\n * string value = 1 [(buf.validate.field).string.max_len = 10];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen: bigint;\n\n /**\n * `len_bytes` dictates that the field value must have the specified number of\n * bytes. If the field value does not match the specified length in bytes,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 6 bytes\n * string value = 1 [(buf.validate.field).string.len_bytes = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 len_bytes = 20;\n */\n lenBytes: bigint;\n\n /**\n * `min_bytes` specifies that the field value must have at least the specified\n * number of bytes. If the field value contains fewer bytes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 4 bytes\n * string value = 1 [(buf.validate.field).string.min_bytes = 4];\n * }\n *\n * ```\n *\n * @generated from field: optional uint64 min_bytes = 4;\n */\n minBytes: bigint;\n\n /**\n * `max_bytes` specifies that the field value must have no more than the\n * specified number of bytes. If the field value contains more bytes, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 8 bytes\n * string value = 1 [(buf.validate.field).string.max_bytes = 8];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_bytes = 5;\n */\n maxBytes: bigint;\n\n /**\n * `pattern` specifies that the field value must match the specified\n * regular expression (RE2 syntax), with the expression provided without any\n * delimiters. If the field value doesn't match the regular expression, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not match regex pattern `^[a-zA-Z]//$`\n * string value = 1 [(buf.validate.field).string.pattern = \"^[a-zA-Z]//$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 6;\n */\n pattern: string;\n\n /**\n * `prefix` specifies that the field value must have the\n * specified substring at the beginning of the string. If the field value\n * doesn't start with the specified prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value does not have prefix `pre`\n * string value = 1 [(buf.validate.field).string.prefix = \"pre\"];\n * }\n * ```\n *\n * @generated from field: optional string prefix = 7;\n */\n prefix: string;\n\n /**\n * `suffix` specifies that the field value must have the\n * specified substring at the end of the string. If the field value doesn't\n * end with the specified suffix, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not have suffix `post`\n * string value = 1 [(buf.validate.field).string.suffix = \"post\"];\n * }\n * ```\n *\n * @generated from field: optional string suffix = 8;\n */\n suffix: string;\n\n /**\n * `contains` specifies that the field value must have the\n * specified substring anywhere in the string. If the field value doesn't\n * contain the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not contain substring `inside`.\n * string value = 1 [(buf.validate.field).string.contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string contains = 9;\n */\n contains: string;\n\n /**\n * `not_contains` specifies that the field value must not have the\n * specified substring anywhere in the string. If the field value contains\n * the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value contains substring `inside`.\n * string value = 1 [(buf.validate.field).string.not_contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string not_contains = 23;\n */\n notContains: string;\n\n /**\n * `in` specifies that the field value must be equal to one of the specified\n * values. If the field value isn't one of the specified values, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be in list [\"apple\", \"banana\"]\n * string value = 1 [(buf.validate.field).string.in = \"apple\", (buf.validate.field).string.in = \"banana\"];\n * }\n * ```\n *\n * @generated from field: repeated string in = 10;\n */\n in: string[];\n\n /**\n * `not_in` specifies that the field value cannot be equal to any\n * of the specified values. If the field value is one of the specified values,\n * an error message will be generated.\n * ```proto\n * message MyString {\n * // value must not be in list [\"orange\", \"grape\"]\n * string value = 1 [(buf.validate.field).string.not_in = \"orange\", (buf.validate.field).string.not_in = \"grape\"];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 11;\n */\n notIn: string[];\n\n /**\n * `WellKnown` rules provide advanced rules against common string\n * patterns.\n *\n * @generated from oneof buf.validate.StringRules.well_known\n */\n wellKnown: {\n /**\n * `email` specifies that the field value must be a valid email address, for\n * example \"foo@example.com\".\n *\n * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).\n * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),\n * which allows many unexpected forms of email addresses and will easily match\n * a typographical error.\n *\n * If the field value isn't a valid email address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid email address\n * string value = 1 [(buf.validate.field).string.email = true];\n * }\n * ```\n *\n * @generated from field: bool email = 12;\n */\n value: boolean;\n case: \"email\";\n } | {\n /**\n * `hostname` specifies that the field value must be a valid hostname, for\n * example \"foo.example.com\".\n *\n * A valid hostname follows the rules below:\n * - The name consists of one or more labels, separated by a dot (\".\").\n * - Each label can be 1 to 63 alphanumeric characters.\n * - A label can contain hyphens (\"-\"), but must not start or end with a hyphen.\n * - The right-most label must not be digits only.\n * - The name can have a trailing dot\u2014for example, \"foo.example.com.\".\n * - The name can be 253 characters at most, excluding the optional trailing dot.\n *\n * If the field value isn't a valid hostname, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname\n * string value = 1 [(buf.validate.field).string.hostname = true];\n * }\n * ```\n *\n * @generated from field: bool hostname = 13;\n */\n value: boolean;\n case: \"hostname\";\n } | {\n /**\n * `ip` specifies that the field value must be a valid IP (v4 or v6) address.\n *\n * IPv4 addresses are expected in the dotted decimal format\u2014for example, \"192.168.5.21\".\n * IPv6 addresses are expected in their text representation\u2014for example, \"::1\",\n * or \"2001:0DB8:ABCD:0012::0\".\n *\n * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone identifiers for IPv6 addresses (for example, \"fe80::a%en1\") are supported.\n *\n * If the field value isn't a valid IP address, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP address\n * string value = 1 [(buf.validate.field).string.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 14;\n */\n value: boolean;\n case: \"ip\";\n } | {\n /**\n * `ipv4` specifies that the field value must be a valid IPv4 address\u2014for\n * example \"192.168.5.21\". If the field value isn't a valid IPv4 address, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address\n * string value = 1 [(buf.validate.field).string.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 15;\n */\n value: boolean;\n case: \"ipv4\";\n } | {\n /**\n * `ipv6` specifies that the field value must be a valid IPv6 address\u2014for\n * example \"::1\", or \"d7a:115c:a1e0:ab12:4843:cd96:626b:430b\". If the field\n * value is not a valid IPv6 address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address\n * string value = 1 [(buf.validate.field).string.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 16;\n */\n value: boolean;\n case: \"ipv6\";\n } | {\n /**\n * `uri` specifies that the field value must be a valid URI, for example\n * \"https://example.com/foo/bar?baz=quux#frag\".\n *\n * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI\n * string value = 1 [(buf.validate.field).string.uri = true];\n * }\n * ```\n *\n * @generated from field: bool uri = 17;\n */\n value: boolean;\n case: \"uri\";\n } | {\n /**\n * `uri_ref` specifies that the field value must be a valid URI Reference\u2014either\n * a URI such as \"https://example.com/foo/bar?baz=quux#frag\", or a Relative\n * Reference such as \"./foo/bar?query\".\n *\n * URI, URI Reference, and Relative Reference are defined in the internet\n * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone\n * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI Reference, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI Reference\n * string value = 1 [(buf.validate.field).string.uri_ref = true];\n * }\n * ```\n *\n * @generated from field: bool uri_ref = 18;\n */\n value: boolean;\n case: \"uriRef\";\n } | {\n /**\n * `address` specifies that the field value must be either a valid hostname\n * (for example, \"example.com\"), or a valid IP (v4 or v6) address (for example,\n * \"192.168.0.1\", or \"::1\"). If the field value isn't a valid hostname or IP,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname, or ip address\n * string value = 1 [(buf.validate.field).string.address = true];\n * }\n * ```\n *\n * @generated from field: bool address = 21;\n */\n value: boolean;\n case: \"address\";\n } | {\n /**\n * `uuid` specifies that the field value must be a valid UUID as defined by\n * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the\n * field value isn't a valid UUID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid UUID\n * string value = 1 [(buf.validate.field).string.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 22;\n */\n value: boolean;\n case: \"uuid\";\n } | {\n /**\n * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes\n * omitted. If the field value isn't a valid UUID without dashes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid trimmed UUID\n * string value = 1 [(buf.validate.field).string.tuuid = true];\n * }\n * ```\n *\n * @generated from field: bool tuuid = 33;\n */\n value: boolean;\n case: \"tuuid\";\n } | {\n /**\n * `ip_with_prefixlen` specifies that the field value must be a valid IP\n * (v4 or v6) address with prefix length\u2014for example, \"192.168.5.21/16\" or\n * \"2001:0DB8:ABCD:0012::F1/64\". If the field value isn't a valid IP with\n * prefix length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP with prefix length\n * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ip_with_prefixlen = 26;\n */\n value: boolean;\n case: \"ipWithPrefixlen\";\n } | {\n /**\n * `ipv4_with_prefixlen` specifies that the field value must be a valid\n * IPv4 address with prefix length\u2014for example, \"192.168.5.21/16\". If the\n * field value isn't a valid IPv4 address with prefix length, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address with prefix length\n * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_with_prefixlen = 27;\n */\n value: boolean;\n case: \"ipv4WithPrefixlen\";\n } | {\n /**\n * `ipv6_with_prefixlen` specifies that the field value must be a valid\n * IPv6 address with prefix length\u2014for example, \"2001:0DB8:ABCD:0012::F1/64\".\n * If the field value is not a valid IPv6 address with prefix length,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address prefix length\n * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_with_prefixlen = 28;\n */\n value: boolean;\n case: \"ipv6WithPrefixlen\";\n } | {\n /**\n * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)\n * prefix\u2014for example, \"192.168.0.0/16\" or \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value isn't a valid IP prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP prefix\n * string value = 1 [(buf.validate.field).string.ip_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ip_prefix = 29;\n */\n value: boolean;\n case: \"ipPrefix\";\n } | {\n /**\n * `ipv4_prefix` specifies that the field value must be a valid IPv4\n * prefix, for example \"192.168.0.0/16\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"192.168.0.0/16\" designates the left-most 16 bits for the prefix,\n * and the remaining 16 bits must be zero.\n *\n * If the field value isn't a valid IPv4 prefix, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 prefix\n * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_prefix = 30;\n */\n value: boolean;\n case: \"ipv4Prefix\";\n } | {\n /**\n * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix\u2014for\n * example, \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value is not a valid IPv6 prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 prefix\n * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_prefix = 31;\n */\n value: boolean;\n case: \"ipv6Prefix\";\n } | {\n /**\n * `host_and_port` specifies that the field value must be valid host/port\n * pair\u2014for example, \"example.com:8080\".\n *\n * The host can be one of:\n * - An IPv4 address in dotted decimal format\u2014for example, \"192.168.5.21\".\n * - An IPv6 address enclosed in square brackets\u2014for example, \"[2001:0DB8:ABCD:0012::F1]\".\n * - A hostname\u2014for example, \"example.com\".\n *\n * The port is separated by a colon. It must be non-empty, with a decimal number\n * in the range of 0-65535, inclusive.\n *\n * @generated from field: bool host_and_port = 32;\n */\n value: boolean;\n case: \"hostAndPort\";\n } | {\n /**\n * `ulid` specifies that the field value must be a valid ULID (Universally Unique\n * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).\n * If the field value isn't a valid ULID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid ULID\n * string value = 1 [(buf.validate.field).string.ulid = true];\n * }\n * ```\n *\n * @generated from field: bool ulid = 35;\n */\n value: boolean;\n case: \"ulid\";\n } | {\n /**\n * `well_known_regex` specifies a common well-known pattern\n * defined as a regex. If the field value doesn't match the well-known\n * regex, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid HTTP header value\n * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];\n * }\n * ```\n *\n * #### KnownRegex\n *\n * `well_known_regex` contains some well-known patterns.\n *\n * | Name | Number | Description |\n * |-------------------------------|--------|-------------------------------------------|\n * | KNOWN_REGEX_UNSPECIFIED | 0 | |\n * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |\n * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |\n *\n * @generated from field: buf.validate.KnownRegex well_known_regex = 24;\n */\n value: KnownRegex;\n case: \"wellKnownRegex\";\n } | { case: undefined; value?: undefined };\n\n /**\n * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to\n * enable strict header validation. By default, this is true, and HTTP header\n * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser\n * validations that only disallow `\\r\\n\\0` characters, which can be used to\n * bypass header matching rules.\n *\n * ```proto\n * message MyString {\n * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.\n * string value = 1 [(buf.validate.field).string.strict = false];\n * }\n * ```\n *\n * @generated from field: optional bool strict = 25;\n */\n strict: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyString {\n * string value = 1 [\n * (buf.validate.field).string.example = \"hello\",\n * (buf.validate.field).string.example = \"world\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated string example = 34;\n */\n example: string[];\n};\n\n/**\n * StringRules describes the rules applied to `string` values These\n * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.\n *\n * @generated from message buf.validate.StringRules\n */\nexport type StringRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified value. If\n * the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyString {\n * // value must equal `hello`\n * string value = 1 [(buf.validate.field).string.const = \"hello\"];\n * }\n * ```\n *\n * @generated from field: optional string const = 1;\n */\n const?: string;\n\n /**\n * `len` dictates that the field value must have the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value does not meet the specified\n * length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 5 characters\n * string value = 1 [(buf.validate.field).string.len = 5];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 19;\n */\n len?: string;\n\n /**\n * `min_len` specifies that the field value must have at least the specified\n * number of characters (Unicode code points), which may differ from the number\n * of bytes in the string. If the field value contains fewer characters, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 3 characters\n * string value = 1 [(buf.validate.field).string.min_len = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen?: string;\n\n /**\n * `max_len` specifies that the field value must have no more than the specified\n * number of characters (Unicode code points), which may differ from the\n * number of bytes in the string. If the field value contains more characters,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 10 characters\n * string value = 1 [(buf.validate.field).string.max_len = 10];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen?: string;\n\n /**\n * `len_bytes` dictates that the field value must have the specified number of\n * bytes. If the field value does not match the specified length in bytes,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be 6 bytes\n * string value = 1 [(buf.validate.field).string.len_bytes = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 len_bytes = 20;\n */\n lenBytes?: string;\n\n /**\n * `min_bytes` specifies that the field value must have at least the specified\n * number of bytes. If the field value contains fewer bytes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at least 4 bytes\n * string value = 1 [(buf.validate.field).string.min_bytes = 4];\n * }\n *\n * ```\n *\n * @generated from field: optional uint64 min_bytes = 4;\n */\n minBytes?: string;\n\n /**\n * `max_bytes` specifies that the field value must have no more than the\n * specified number of bytes. If the field value contains more bytes, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value length must be at most 8 bytes\n * string value = 1 [(buf.validate.field).string.max_bytes = 8];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_bytes = 5;\n */\n maxBytes?: string;\n\n /**\n * `pattern` specifies that the field value must match the specified\n * regular expression (RE2 syntax), with the expression provided without any\n * delimiters. If the field value doesn't match the regular expression, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not match regex pattern `^[a-zA-Z]//$`\n * string value = 1 [(buf.validate.field).string.pattern = \"^[a-zA-Z]//$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 6;\n */\n pattern?: string;\n\n /**\n * `prefix` specifies that the field value must have the\n * specified substring at the beginning of the string. If the field value\n * doesn't start with the specified prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value does not have prefix `pre`\n * string value = 1 [(buf.validate.field).string.prefix = \"pre\"];\n * }\n * ```\n *\n * @generated from field: optional string prefix = 7;\n */\n prefix?: string;\n\n /**\n * `suffix` specifies that the field value must have the\n * specified substring at the end of the string. If the field value doesn't\n * end with the specified suffix, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not have suffix `post`\n * string value = 1 [(buf.validate.field).string.suffix = \"post\"];\n * }\n * ```\n *\n * @generated from field: optional string suffix = 8;\n */\n suffix?: string;\n\n /**\n * `contains` specifies that the field value must have the\n * specified substring anywhere in the string. If the field value doesn't\n * contain the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value does not contain substring `inside`.\n * string value = 1 [(buf.validate.field).string.contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string contains = 9;\n */\n contains?: string;\n\n /**\n * `not_contains` specifies that the field value must not have the\n * specified substring anywhere in the string. If the field value contains\n * the specified substring, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value contains substring `inside`.\n * string value = 1 [(buf.validate.field).string.not_contains = \"inside\"];\n * }\n * ```\n *\n * @generated from field: optional string not_contains = 23;\n */\n notContains?: string;\n\n /**\n * `in` specifies that the field value must be equal to one of the specified\n * values. If the field value isn't one of the specified values, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be in list [\"apple\", \"banana\"]\n * string value = 1 [(buf.validate.field).string.in = \"apple\", (buf.validate.field).string.in = \"banana\"];\n * }\n * ```\n *\n * @generated from field: repeated string in = 10;\n */\n in?: string[];\n\n /**\n * `not_in` specifies that the field value cannot be equal to any\n * of the specified values. If the field value is one of the specified values,\n * an error message will be generated.\n * ```proto\n * message MyString {\n * // value must not be in list [\"orange\", \"grape\"]\n * string value = 1 [(buf.validate.field).string.not_in = \"orange\", (buf.validate.field).string.not_in = \"grape\"];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 11;\n */\n notIn?: string[];\n\n /**\n * `email` specifies that the field value must be a valid email address, for\n * example \"foo@example.com\".\n *\n * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).\n * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),\n * which allows many unexpected forms of email addresses and will easily match\n * a typographical error.\n *\n * If the field value isn't a valid email address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid email address\n * string value = 1 [(buf.validate.field).string.email = true];\n * }\n * ```\n *\n * @generated from field: bool email = 12;\n */\n email?: boolean;\n\n /**\n * `hostname` specifies that the field value must be a valid hostname, for\n * example \"foo.example.com\".\n *\n * A valid hostname follows the rules below:\n * - The name consists of one or more labels, separated by a dot (\".\").\n * - Each label can be 1 to 63 alphanumeric characters.\n * - A label can contain hyphens (\"-\"), but must not start or end with a hyphen.\n * - The right-most label must not be digits only.\n * - The name can have a trailing dot\u2014for example, \"foo.example.com.\".\n * - The name can be 253 characters at most, excluding the optional trailing dot.\n *\n * If the field value isn't a valid hostname, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname\n * string value = 1 [(buf.validate.field).string.hostname = true];\n * }\n * ```\n *\n * @generated from field: bool hostname = 13;\n */\n hostname?: boolean;\n\n /**\n * `ip` specifies that the field value must be a valid IP (v4 or v6) address.\n *\n * IPv4 addresses are expected in the dotted decimal format\u2014for example, \"192.168.5.21\".\n * IPv6 addresses are expected in their text representation\u2014for example, \"::1\",\n * or \"2001:0DB8:ABCD:0012::0\".\n *\n * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone identifiers for IPv6 addresses (for example, \"fe80::a%en1\") are supported.\n *\n * If the field value isn't a valid IP address, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP address\n * string value = 1 [(buf.validate.field).string.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 14;\n */\n ip?: boolean;\n\n /**\n * `ipv4` specifies that the field value must be a valid IPv4 address\u2014for\n * example \"192.168.5.21\". If the field value isn't a valid IPv4 address, an\n * error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address\n * string value = 1 [(buf.validate.field).string.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 15;\n */\n ipv4?: boolean;\n\n /**\n * `ipv6` specifies that the field value must be a valid IPv6 address\u2014for\n * example \"::1\", or \"d7a:115c:a1e0:ab12:4843:cd96:626b:430b\". If the field\n * value is not a valid IPv6 address, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address\n * string value = 1 [(buf.validate.field).string.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 16;\n */\n ipv6?: boolean;\n\n /**\n * `uri` specifies that the field value must be a valid URI, for example\n * \"https://example.com/foo/bar?baz=quux#frag\".\n *\n * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).\n * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI\n * string value = 1 [(buf.validate.field).string.uri = true];\n * }\n * ```\n *\n * @generated from field: bool uri = 17;\n */\n uri?: boolean;\n\n /**\n * `uri_ref` specifies that the field value must be a valid URI Reference\u2014either\n * a URI such as \"https://example.com/foo/bar?baz=quux#frag\", or a Relative\n * Reference such as \"./foo/bar?query\".\n *\n * URI, URI Reference, and Relative Reference are defined in the internet\n * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone\n * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).\n *\n * If the field value isn't a valid URI Reference, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid URI Reference\n * string value = 1 [(buf.validate.field).string.uri_ref = true];\n * }\n * ```\n *\n * @generated from field: bool uri_ref = 18;\n */\n uriRef?: boolean;\n\n /**\n * `address` specifies that the field value must be either a valid hostname\n * (for example, \"example.com\"), or a valid IP (v4 or v6) address (for example,\n * \"192.168.0.1\", or \"::1\"). If the field value isn't a valid hostname or IP,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid hostname, or ip address\n * string value = 1 [(buf.validate.field).string.address = true];\n * }\n * ```\n *\n * @generated from field: bool address = 21;\n */\n address?: boolean;\n\n /**\n * `uuid` specifies that the field value must be a valid UUID as defined by\n * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the\n * field value isn't a valid UUID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid UUID\n * string value = 1 [(buf.validate.field).string.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 22;\n */\n uuid?: boolean;\n\n /**\n * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes\n * omitted. If the field value isn't a valid UUID without dashes, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid trimmed UUID\n * string value = 1 [(buf.validate.field).string.tuuid = true];\n * }\n * ```\n *\n * @generated from field: bool tuuid = 33;\n */\n tuuid?: boolean;\n\n /**\n * `ip_with_prefixlen` specifies that the field value must be a valid IP\n * (v4 or v6) address with prefix length\u2014for example, \"192.168.5.21/16\" or\n * \"2001:0DB8:ABCD:0012::F1/64\". If the field value isn't a valid IP with\n * prefix length, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP with prefix length\n * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ip_with_prefixlen = 26;\n */\n ipWithPrefixlen?: boolean;\n\n /**\n * `ipv4_with_prefixlen` specifies that the field value must be a valid\n * IPv4 address with prefix length\u2014for example, \"192.168.5.21/16\". If the\n * field value isn't a valid IPv4 address with prefix length, an error\n * message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 address with prefix length\n * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_with_prefixlen = 27;\n */\n ipv4WithPrefixlen?: boolean;\n\n /**\n * `ipv6_with_prefixlen` specifies that the field value must be a valid\n * IPv6 address with prefix length\u2014for example, \"2001:0DB8:ABCD:0012::F1/64\".\n * If the field value is not a valid IPv6 address with prefix length,\n * an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 address prefix length\n * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_with_prefixlen = 28;\n */\n ipv6WithPrefixlen?: boolean;\n\n /**\n * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)\n * prefix\u2014for example, \"192.168.0.0/16\" or \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value isn't a valid IP prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IP prefix\n * string value = 1 [(buf.validate.field).string.ip_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ip_prefix = 29;\n */\n ipPrefix?: boolean;\n\n /**\n * `ipv4_prefix` specifies that the field value must be a valid IPv4\n * prefix, for example \"192.168.0.0/16\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"192.168.0.0/16\" designates the left-most 16 bits for the prefix,\n * and the remaining 16 bits must be zero.\n *\n * If the field value isn't a valid IPv4 prefix, an error message\n * will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv4 prefix\n * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4_prefix = 30;\n */\n ipv4Prefix?: boolean;\n\n /**\n * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix\u2014for\n * example, \"2001:0DB8:ABCD:0012::0/64\".\n *\n * The prefix must have all zeros for the unmasked bits. For example,\n * \"2001:0DB8:ABCD:0012::0/64\" designates the left-most 64 bits for the\n * prefix, and the remaining 64 bits must be zero.\n *\n * If the field value is not a valid IPv6 prefix, an error message will be\n * generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid IPv6 prefix\n * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6_prefix = 31;\n */\n ipv6Prefix?: boolean;\n\n /**\n * `host_and_port` specifies that the field value must be valid host/port\n * pair\u2014for example, \"example.com:8080\".\n *\n * The host can be one of:\n * - An IPv4 address in dotted decimal format\u2014for example, \"192.168.5.21\".\n * - An IPv6 address enclosed in square brackets\u2014for example, \"[2001:0DB8:ABCD:0012::F1]\".\n * - A hostname\u2014for example, \"example.com\".\n *\n * The port is separated by a colon. It must be non-empty, with a decimal number\n * in the range of 0-65535, inclusive.\n *\n * @generated from field: bool host_and_port = 32;\n */\n hostAndPort?: boolean;\n\n /**\n * `ulid` specifies that the field value must be a valid ULID (Universally Unique\n * Lexicographically Sortable Identifier) as defined by the [ULID specification](https://github.com/ulid/spec).\n * If the field value isn't a valid ULID, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid ULID\n * string value = 1 [(buf.validate.field).string.ulid = true];\n * }\n * ```\n *\n * @generated from field: bool ulid = 35;\n */\n ulid?: boolean;\n\n /**\n * `well_known_regex` specifies a common well-known pattern\n * defined as a regex. If the field value doesn't match the well-known\n * regex, an error message will be generated.\n *\n * ```proto\n * message MyString {\n * // value must be a valid HTTP header value\n * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];\n * }\n * ```\n *\n * #### KnownRegex\n *\n * `well_known_regex` contains some well-known patterns.\n *\n * | Name | Number | Description |\n * |-------------------------------|--------|-------------------------------------------|\n * | KNOWN_REGEX_UNSPECIFIED | 0 | |\n * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |\n * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |\n *\n * @generated from field: buf.validate.KnownRegex well_known_regex = 24;\n */\n wellKnownRegex?: KnownRegexJson;\n\n /**\n * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to\n * enable strict header validation. By default, this is true, and HTTP header\n * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser\n * validations that only disallow `\\r\\n\\0` characters, which can be used to\n * bypass header matching rules.\n *\n * ```proto\n * message MyString {\n * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.\n * string value = 1 [(buf.validate.field).string.strict = false];\n * }\n * ```\n *\n * @generated from field: optional bool strict = 25;\n */\n strict?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyString {\n * string value = 1 [\n * (buf.validate.field).string.example = \"hello\",\n * (buf.validate.field).string.example = \"world\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated string example = 34;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.StringRules.\n * Use `create(StringRulesSchema)` to create a new message.\n */\nexport const StringRulesSchema: GenMessage<StringRules, {jsonType: StringRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 19);\n\n/**\n * BytesRules describe the rules applied to `bytes` values. These rules\n * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BytesRules\n */\nexport type BytesRules = Message<\"buf.validate.BytesRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified bytes\n * value. If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be \"\\x01\\x02\\x03\\x04\"\n * bytes value = 1 [(buf.validate.field).bytes.const = \"\\x01\\x02\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes const = 1;\n */\n const: Uint8Array;\n\n /**\n * `len` requires the field value to have the specified length in bytes.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be 4 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 13;\n */\n len: bigint;\n\n /**\n * `min_len` requires the field value to have at least the specified minimum\n * length in bytes.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be at least 2 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen: bigint;\n\n /**\n * `max_len` requires the field value to have at most the specified maximum\n * length in bytes.\n * If the field value exceeds the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be at most 6 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen: bigint;\n\n /**\n * `pattern` requires the field value to match the specified regular\n * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).\n * The value of the field must be valid UTF-8 or validation will fail with a\n * runtime error.\n * If the field value doesn't match the pattern, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must match regex pattern \"^[a-zA-Z0-9]+$\".\n * optional bytes value = 1 [(buf.validate.field).bytes.pattern = \"^[a-zA-Z0-9]+$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 4;\n */\n pattern: string;\n\n /**\n * `prefix` requires the field value to have the specified bytes at the\n * beginning of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have prefix \\x01\\x02\n * optional bytes value = 1 [(buf.validate.field).bytes.prefix = \"\\x01\\x02\"];\n * }\n * ```\n *\n * @generated from field: optional bytes prefix = 5;\n */\n prefix: Uint8Array;\n\n /**\n * `suffix` requires the field value to have the specified bytes at the end\n * of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have suffix \\x03\\x04\n * optional bytes value = 1 [(buf.validate.field).bytes.suffix = \"\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes suffix = 6;\n */\n suffix: Uint8Array;\n\n /**\n * `contains` requires the field value to have the specified bytes anywhere in\n * the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not contain \\x02\\x03\n * optional bytes value = 1 [(buf.validate.field).bytes.contains = \"\\x02\\x03\"];\n * }\n * ```\n *\n * @generated from field: optional bytes contains = 7;\n */\n contains: Uint8Array;\n\n /**\n * `in` requires the field value to be equal to one of the specified\n * values. If the field value doesn't match any of the specified values, an\n * error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes in = 8;\n */\n in: Uint8Array[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the specified\n * values.\n * If the field value matches any of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyBytes {\n * // value must not in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes not_in = 9;\n */\n notIn: Uint8Array[];\n\n /**\n * WellKnown rules provide advanced rules against common byte\n * patterns\n *\n * @generated from oneof buf.validate.BytesRules.well_known\n */\n wellKnown: {\n /**\n * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IP address\n * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 10;\n */\n value: boolean;\n case: \"ip\";\n } | {\n /**\n * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv4 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 11;\n */\n value: boolean;\n case: \"ipv4\";\n } | {\n /**\n * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv6 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 12;\n */\n value: boolean;\n case: \"ipv6\";\n } | {\n /**\n * `uuid` ensures that the field `value` encodes the 128-bit UUID data as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).\n * The field must contain exactly 16 bytes\n * representing the UUID. If the field value isn't a valid UUID, an error\n * message will be generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid UUID\n * optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 15;\n */\n value: boolean;\n case: \"uuid\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBytes {\n * bytes value = 1 [\n * (buf.validate.field).bytes.example = \"\\x01\\x02\",\n * (buf.validate.field).bytes.example = \"\\x02\\x03\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bytes example = 14;\n */\n example: Uint8Array[];\n};\n\n/**\n * BytesRules describe the rules applied to `bytes` values. These rules\n * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.\n *\n * @generated from message buf.validate.BytesRules\n */\nexport type BytesRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified bytes\n * value. If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be \"\\x01\\x02\\x03\\x04\"\n * bytes value = 1 [(buf.validate.field).bytes.const = \"\\x01\\x02\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes const = 1;\n */\n const?: string;\n\n /**\n * `len` requires the field value to have the specified length in bytes.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be 4 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];\n * }\n * ```\n *\n * @generated from field: optional uint64 len = 13;\n */\n len?: string;\n\n /**\n * `min_len` requires the field value to have at least the specified minimum\n * length in bytes.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value length must be at least 2 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_len = 2;\n */\n minLen?: string;\n\n /**\n * `max_len` requires the field value to have at most the specified maximum\n * length in bytes.\n * If the field value exceeds the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be at most 6 bytes.\n * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_len = 3;\n */\n maxLen?: string;\n\n /**\n * `pattern` requires the field value to match the specified regular\n * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).\n * The value of the field must be valid UTF-8 or validation will fail with a\n * runtime error.\n * If the field value doesn't match the pattern, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must match regex pattern \"^[a-zA-Z0-9]+$\".\n * optional bytes value = 1 [(buf.validate.field).bytes.pattern = \"^[a-zA-Z0-9]+$\"];\n * }\n * ```\n *\n * @generated from field: optional string pattern = 4;\n */\n pattern?: string;\n\n /**\n * `prefix` requires the field value to have the specified bytes at the\n * beginning of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have prefix \\x01\\x02\n * optional bytes value = 1 [(buf.validate.field).bytes.prefix = \"\\x01\\x02\"];\n * }\n * ```\n *\n * @generated from field: optional bytes prefix = 5;\n */\n prefix?: string;\n\n /**\n * `suffix` requires the field value to have the specified bytes at the end\n * of the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not have suffix \\x03\\x04\n * optional bytes value = 1 [(buf.validate.field).bytes.suffix = \"\\x03\\x04\"];\n * }\n * ```\n *\n * @generated from field: optional bytes suffix = 6;\n */\n suffix?: string;\n\n /**\n * `contains` requires the field value to have the specified bytes anywhere in\n * the string.\n * If the field value doesn't meet the requirement, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value does not contain \\x02\\x03\n * optional bytes value = 1 [(buf.validate.field).bytes.contains = \"\\x02\\x03\"];\n * }\n * ```\n *\n * @generated from field: optional bytes contains = 7;\n */\n contains?: string;\n\n /**\n * `in` requires the field value to be equal to one of the specified\n * values. If the field value doesn't match any of the specified values, an\n * error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes in = 8;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the specified\n * values.\n * If the field value matches any of the specified values, an error message is\n * generated.\n *\n * ```proto\n * message MyBytes {\n * // value must not in [\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"]\n * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {\"\\x01\\x02\", \"\\x02\\x03\", \"\\x03\\x04\"}];\n * }\n * ```\n *\n * @generated from field: repeated bytes not_in = 9;\n */\n notIn?: string[];\n\n /**\n * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IP address\n * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];\n * }\n * ```\n *\n * @generated from field: bool ip = 10;\n */\n ip?: boolean;\n\n /**\n * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv4 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv4 = 11;\n */\n ipv4?: boolean;\n\n /**\n * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.\n * If the field value doesn't meet this rule, an error message is generated.\n * ```proto\n * message MyBytes {\n * // value must be a valid IPv6 address\n * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];\n * }\n * ```\n *\n * @generated from field: bool ipv6 = 12;\n */\n ipv6?: boolean;\n\n /**\n * `uuid` ensures that the field `value` encodes the 128-bit UUID data as\n * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2).\n * The field must contain exactly 16 bytes\n * representing the UUID. If the field value isn't a valid UUID, an error\n * message will be generated.\n *\n * ```proto\n * message MyBytes {\n * // value must be a valid UUID\n * optional bytes value = 1 [(buf.validate.field).bytes.uuid = true];\n * }\n * ```\n *\n * @generated from field: bool uuid = 15;\n */\n uuid?: boolean;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyBytes {\n * bytes value = 1 [\n * (buf.validate.field).bytes.example = \"\\x01\\x02\",\n * (buf.validate.field).bytes.example = \"\\x02\\x03\"\n * ];\n * }\n * ```\n *\n * @generated from field: repeated bytes example = 14;\n */\n example?: string[];\n};\n\n/**\n * Describes the message buf.validate.BytesRules.\n * Use `create(BytesRulesSchema)` to create a new message.\n */\nexport const BytesRulesSchema: GenMessage<BytesRules, {jsonType: BytesRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 20);\n\n/**\n * EnumRules describe the rules applied to `enum` values.\n *\n * @generated from message buf.validate.EnumRules\n */\nexport type EnumRules = Message<\"buf.validate.EnumRules\"> & {\n /**\n * `const` requires the field value to exactly match the specified enum value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be exactly MY_ENUM_VALUE1.\n * MyEnum value = 1 [(buf.validate.field).enum.const = 1];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const: number;\n\n /**\n * `defined_only` requires the field value to be one of the defined values for\n * this enum, failing on any undefined value.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be a defined value of MyEnum.\n * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];\n * }\n * ```\n *\n * @generated from field: optional bool defined_only = 2;\n */\n definedOnly: boolean;\n\n /**\n * `in` requires the field value to be equal to one of the\n * specified enum values. If the field value doesn't match any of the\n * specified values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be equal to one of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 3;\n */\n in: number[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the\n * specified enum values. If the field value matches one of the specified\n * values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must not be equal to any of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 4;\n */\n notIn: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * (buf.validate.field).enum.example = 1,\n * (buf.validate.field).enum.example = 2\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 5;\n */\n example: number[];\n};\n\n/**\n * EnumRules describe the rules applied to `enum` values.\n *\n * @generated from message buf.validate.EnumRules\n */\nexport type EnumRulesJson = {\n /**\n * `const` requires the field value to exactly match the specified enum value.\n * If the field value doesn't match, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be exactly MY_ENUM_VALUE1.\n * MyEnum value = 1 [(buf.validate.field).enum.const = 1];\n * }\n * ```\n *\n * @generated from field: optional int32 const = 1;\n */\n const?: number;\n\n /**\n * `defined_only` requires the field value to be one of the defined values for\n * this enum, failing on any undefined value.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be a defined value of MyEnum.\n * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];\n * }\n * ```\n *\n * @generated from field: optional bool defined_only = 2;\n */\n definedOnly?: boolean;\n\n /**\n * `in` requires the field value to be equal to one of the\n * specified enum values. If the field value doesn't match any of the\n * specified values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must be equal to one of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 in = 3;\n */\n in?: number[];\n\n /**\n * `not_in` requires the field value to be not equal to any of the\n * specified enum values. If the field value matches one of the specified\n * values, an error message is generated.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * // The field `value` must not be equal to any of the specified values.\n * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];\n * }\n * ```\n *\n * @generated from field: repeated int32 not_in = 4;\n */\n notIn?: number[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * enum MyEnum {\n * MY_ENUM_UNSPECIFIED = 0;\n * MY_ENUM_VALUE1 = 1;\n * MY_ENUM_VALUE2 = 2;\n * }\n *\n * message MyMessage {\n * (buf.validate.field).enum.example = 1,\n * (buf.validate.field).enum.example = 2\n * }\n * ```\n *\n * @generated from field: repeated int32 example = 5;\n */\n example?: number[];\n};\n\n/**\n * Describes the message buf.validate.EnumRules.\n * Use `create(EnumRulesSchema)` to create a new message.\n */\nexport const EnumRulesSchema: GenMessage<EnumRules, {jsonType: EnumRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 21);\n\n/**\n * RepeatedRules describe the rules applied to `repeated` values.\n *\n * @generated from message buf.validate.RepeatedRules\n */\nexport type RepeatedRules = Message<\"buf.validate.RepeatedRules\"> & {\n /**\n * `min_items` requires that this field must contain at least the specified\n * minimum number of items.\n *\n * Note that `min_items = 1` is equivalent to setting a field as `required`.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain at least 2 items\n * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_items = 1;\n */\n minItems: bigint;\n\n /**\n * `max_items` denotes that this field must not exceed a\n * certain number of items as the upper limit. If the field contains more\n * items than specified, an error message will be generated, requiring the\n * field to maintain no more than the specified number of items.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain no more than 3 item(s)\n * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_items = 2;\n */\n maxItems: bigint;\n\n /**\n * `unique` indicates that all elements in this field must\n * be unique. This rule is strictly applicable to scalar and enum\n * types, with message types not being supported.\n *\n * ```proto\n * message MyRepeated {\n * // repeated value must contain unique items\n * repeated string value = 1 [(buf.validate.field).repeated.unique = true];\n * }\n * ```\n *\n * @generated from field: optional bool unique = 3;\n */\n unique: boolean;\n\n /**\n * `items` details the rules to be applied to each item\n * in the field. Even for repeated message fields, validation is executed\n * against each item unless `ignore` is specified.\n *\n * ```proto\n * message MyRepeated {\n * // The items in the field `value` must follow the specified rules.\n * repeated string value = 1 [(buf.validate.field).repeated.items = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Repeated items\n * cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules items = 4;\n */\n items?: FieldRules;\n};\n\n/**\n * RepeatedRules describe the rules applied to `repeated` values.\n *\n * @generated from message buf.validate.RepeatedRules\n */\nexport type RepeatedRulesJson = {\n /**\n * `min_items` requires that this field must contain at least the specified\n * minimum number of items.\n *\n * Note that `min_items = 1` is equivalent to setting a field as `required`.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain at least 2 items\n * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_items = 1;\n */\n minItems?: string;\n\n /**\n * `max_items` denotes that this field must not exceed a\n * certain number of items as the upper limit. If the field contains more\n * items than specified, an error message will be generated, requiring the\n * field to maintain no more than the specified number of items.\n *\n * ```proto\n * message MyRepeated {\n * // value must contain no more than 3 item(s)\n * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_items = 2;\n */\n maxItems?: string;\n\n /**\n * `unique` indicates that all elements in this field must\n * be unique. This rule is strictly applicable to scalar and enum\n * types, with message types not being supported.\n *\n * ```proto\n * message MyRepeated {\n * // repeated value must contain unique items\n * repeated string value = 1 [(buf.validate.field).repeated.unique = true];\n * }\n * ```\n *\n * @generated from field: optional bool unique = 3;\n */\n unique?: boolean;\n\n /**\n * `items` details the rules to be applied to each item\n * in the field. Even for repeated message fields, validation is executed\n * against each item unless `ignore` is specified.\n *\n * ```proto\n * message MyRepeated {\n * // The items in the field `value` must follow the specified rules.\n * repeated string value = 1 [(buf.validate.field).repeated.items = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Repeated items\n * cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules items = 4;\n */\n items?: FieldRulesJson;\n};\n\n/**\n * Describes the message buf.validate.RepeatedRules.\n * Use `create(RepeatedRulesSchema)` to create a new message.\n */\nexport const RepeatedRulesSchema: GenMessage<RepeatedRules, {jsonType: RepeatedRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 22);\n\n/**\n * MapRules describe the rules applied to `map` values.\n *\n * @generated from message buf.validate.MapRules\n */\nexport type MapRules = Message<\"buf.validate.MapRules\"> & {\n /**\n * Specifies the minimum number of key-value pairs allowed. If the field has\n * fewer key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at least 2 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_pairs = 1;\n */\n minPairs: bigint;\n\n /**\n * Specifies the maximum number of key-value pairs allowed. If the field has\n * more key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at most 3 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_pairs = 2;\n */\n maxPairs: bigint;\n\n /**\n * Specifies the rules to be applied to each key in the field.\n *\n * ```proto\n * message MyMap {\n * // The keys in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.keys = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Map keys cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules keys = 4;\n */\n keys?: FieldRules;\n\n /**\n * Specifies the rules to be applied to the value of each key in the\n * field. Message values will still have their validations evaluated unless\n * `ignore` is specified.\n *\n * ```proto\n * message MyMap {\n * // The values in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.values = {\n * string: {\n * min_len: 5\n * max_len: 20\n * }\n * }];\n * }\n * ```\n * Note that the `required` rule does not apply. Map values cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules values = 5;\n */\n values?: FieldRules;\n};\n\n/**\n * MapRules describe the rules applied to `map` values.\n *\n * @generated from message buf.validate.MapRules\n */\nexport type MapRulesJson = {\n /**\n * Specifies the minimum number of key-value pairs allowed. If the field has\n * fewer key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at least 2 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];\n * }\n * ```\n *\n * @generated from field: optional uint64 min_pairs = 1;\n */\n minPairs?: string;\n\n /**\n * Specifies the maximum number of key-value pairs allowed. If the field has\n * more key-value pairs than specified, an error message is generated.\n *\n * ```proto\n * message MyMap {\n * // The field `value` must have at most 3 key-value pairs.\n * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];\n * }\n * ```\n *\n * @generated from field: optional uint64 max_pairs = 2;\n */\n maxPairs?: string;\n\n /**\n * Specifies the rules to be applied to each key in the field.\n *\n * ```proto\n * message MyMap {\n * // The keys in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.keys = {\n * string: {\n * min_len: 3\n * max_len: 10\n * }\n * }];\n * }\n * ```\n *\n * Note that the `required` rule does not apply. Map keys cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules keys = 4;\n */\n keys?: FieldRulesJson;\n\n /**\n * Specifies the rules to be applied to the value of each key in the\n * field. Message values will still have their validations evaluated unless\n * `ignore` is specified.\n *\n * ```proto\n * message MyMap {\n * // The values in the field `value` must follow the specified rules.\n * map<string, string> value = 1 [(buf.validate.field).map.values = {\n * string: {\n * min_len: 5\n * max_len: 20\n * }\n * }];\n * }\n * ```\n * Note that the `required` rule does not apply. Map values cannot be unset.\n *\n * @generated from field: optional buf.validate.FieldRules values = 5;\n */\n values?: FieldRulesJson;\n};\n\n/**\n * Describes the message buf.validate.MapRules.\n * Use `create(MapRulesSchema)` to create a new message.\n */\nexport const MapRulesSchema: GenMessage<MapRules, {jsonType: MapRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 23);\n\n/**\n * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.\n *\n * @generated from message buf.validate.AnyRules\n */\nexport type AnyRules = Message<\"buf.validate.AnyRules\"> & {\n /**\n * `in` requires the field's `type_url` to be equal to one of the\n * specified values. If it doesn't match any of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must have a `type_url` equal to one of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * in: [\"type.googleapis.com/MyType1\", \"type.googleapis.com/MyType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in: string[];\n\n /**\n * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must not have a `type_url` equal to any of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * not_in: [\"type.googleapis.com/ForbiddenType1\", \"type.googleapis.com/ForbiddenType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn: string[];\n};\n\n/**\n * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.\n *\n * @generated from message buf.validate.AnyRules\n */\nexport type AnyRulesJson = {\n /**\n * `in` requires the field's `type_url` to be equal to one of the\n * specified values. If it doesn't match any of the specified values, an error\n * message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must have a `type_url` equal to one of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * in: [\"type.googleapis.com/MyType1\", \"type.googleapis.com/MyType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in?: string[];\n\n /**\n * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.\n *\n * ```proto\n * message MyAny {\n * // The `value` field must not have a `type_url` equal to any of the specified values.\n * google.protobuf.Any value = 1 [(buf.validate.field).any = {\n * not_in: [\"type.googleapis.com/ForbiddenType1\", \"type.googleapis.com/ForbiddenType2\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn?: string[];\n};\n\n/**\n * Describes the message buf.validate.AnyRules.\n * Use `create(AnyRulesSchema)` to create a new message.\n */\nexport const AnyRulesSchema: GenMessage<AnyRules, {jsonType: AnyRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 24);\n\n/**\n * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.\n *\n * @generated from message buf.validate.DurationRules\n */\nexport type DurationRules = Message<\"buf.validate.DurationRules\"> & {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must equal 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = \"5s\"];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration const = 2;\n */\n const?: Duration;\n\n /**\n * @generated from oneof buf.validate.DurationRules.less_than\n */\n lessThan: {\n /**\n * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,\n * exclusive. If the field's value is greater than or equal to the specified\n * value, an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = \"5s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lt = 3;\n */\n value: Duration;\n case: \"lt\";\n } | {\n /**\n * `lte` indicates that the field must be less than or equal to the specified\n * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than or equal to 10s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = \"10s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lte = 4;\n */\n value: Duration;\n case: \"lte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.DurationRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the duration field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than 5s [duration.gt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];\n *\n * // duration must be greater than 5s and less than 10s [duration.gt_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gt = 5;\n */\n value: Duration;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the duration field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value must\n * be outside the specified range. If the field value doesn't meet the\n * required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than or equal to 5s [duration.gte]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];\n *\n * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gte = 6;\n */\n value: Duration;\n case: \"gte\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.\n * If the field's value doesn't correspond to any of the specified values,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration in = 7;\n */\n in: Duration[];\n\n /**\n * `not_in` denotes that the field must not be equal to\n * any of the specified values of the `google.protobuf.Duration` type.\n * If the field's value matches any of these values, an error message will be\n * generated.\n *\n * ```proto\n * message MyDuration {\n * // value must not be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration not_in = 8;\n */\n notIn: Duration[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDuration {\n * google.protobuf.Duration value = 1 [\n * (buf.validate.field).duration.example = { seconds: 1 },\n * (buf.validate.field).duration.example = { seconds: 2 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration example = 9;\n */\n example: Duration[];\n};\n\n/**\n * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.\n *\n * @generated from message buf.validate.DurationRules\n */\nexport type DurationRulesJson = {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must equal 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = \"5s\"];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration const = 2;\n */\n const?: DurationJson;\n\n /**\n * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,\n * exclusive. If the field's value is greater than or equal to the specified\n * value, an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than 5s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = \"5s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lt = 3;\n */\n lt?: DurationJson;\n\n /**\n * `lte` indicates that the field must be less than or equal to the specified\n * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be less than or equal to 10s\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = \"10s\"];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration lte = 4;\n */\n lte?: DurationJson;\n\n /**\n * `gt` requires the duration field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than 5s [duration.gt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];\n *\n * // duration must be greater than 5s and less than 10s [duration.gt_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gt = 5;\n */\n gt?: DurationJson;\n\n /**\n * `gte` requires the duration field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value must\n * be outside the specified range. If the field value doesn't meet the\n * required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be greater than or equal to 5s [duration.gte]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];\n *\n * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]\n * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];\n *\n * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]\n * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Duration gte = 6;\n */\n gte?: DurationJson;\n\n /**\n * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.\n * If the field's value doesn't correspond to any of the specified values,\n * an error message will be generated.\n *\n * ```proto\n * message MyDuration {\n * // value must be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration in = 7;\n */\n in?: DurationJson[];\n\n /**\n * `not_in` denotes that the field must not be equal to\n * any of the specified values of the `google.protobuf.Duration` type.\n * If the field's value matches any of these values, an error message will be\n * generated.\n *\n * ```proto\n * message MyDuration {\n * // value must not be in list [1s, 2s, 3s]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = [\"1s\", \"2s\", \"3s\"]];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration not_in = 8;\n */\n notIn?: DurationJson[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyDuration {\n * google.protobuf.Duration value = 1 [\n * (buf.validate.field).duration.example = { seconds: 1 },\n * (buf.validate.field).duration.example = { seconds: 2 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Duration example = 9;\n */\n example?: DurationJson[];\n};\n\n/**\n * Describes the message buf.validate.DurationRules.\n * Use `create(DurationRulesSchema)` to create a new message.\n */\nexport const DurationRulesSchema: GenMessage<DurationRules, {jsonType: DurationRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 25);\n\n/**\n * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.\n *\n * @generated from message buf.validate.FieldMaskRules\n */\nexport type FieldMaskRules = Message<\"buf.validate.FieldMaskRules\"> & {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyFieldMask {\n * // value must equal [\"a\"]\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {\n * paths: [\"a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.FieldMask const = 1;\n */\n const?: FieldMask;\n\n /**\n * `in` requires the field value to only contain paths matching specified\n * values or their subpaths.\n * If any of the field value's paths doesn't match the rule,\n * an error message is generated.\n * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n *\n * ```proto\n * message MyFieldMask {\n * // The `value` FieldMask must only contain paths listed in `in`.\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n * in: [\"a\", \"b\", \"c.a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in: string[];\n\n /**\n * `not_in` requires the field value to not contain paths matching specified\n * values or their subpaths.\n * If any of the field value's paths matches the rule,\n * an error message is generated.\n * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n *\n * ```proto\n * message MyFieldMask {\n * // The `value` FieldMask shall not contain paths listed in `not_in`.\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n * not_in: [\"forbidden\", \"immutable\", \"c.a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFieldMask {\n * google.protobuf.FieldMask value = 1 [\n * (buf.validate.field).field_mask.example = { paths: [\"a\", \"b\"] },\n * (buf.validate.field).field_mask.example = { paths: [\"c.a\", \"d\"] },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.FieldMask example = 4;\n */\n example: FieldMask[];\n};\n\n/**\n * FieldMaskRules describe rules applied exclusively to the `google.protobuf.FieldMask` well-known type.\n *\n * @generated from message buf.validate.FieldMaskRules\n */\nexport type FieldMaskRulesJson = {\n /**\n * `const` dictates that the field must match the specified value of the `google.protobuf.FieldMask` type exactly.\n * If the field's value deviates from the specified value, an error message\n * will be generated.\n *\n * ```proto\n * message MyFieldMask {\n * // value must equal [\"a\"]\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask.const = {\n * paths: [\"a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.FieldMask const = 1;\n */\n const?: FieldMaskJson;\n\n /**\n * `in` requires the field value to only contain paths matching specified\n * values or their subpaths.\n * If any of the field value's paths doesn't match the rule,\n * an error message is generated.\n * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n *\n * ```proto\n * message MyFieldMask {\n * // The `value` FieldMask must only contain paths listed in `in`.\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n * in: [\"a\", \"b\", \"c.a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string in = 2;\n */\n in?: string[];\n\n /**\n * `not_in` requires the field value to not contain paths matching specified\n * values or their subpaths.\n * If any of the field value's paths matches the rule,\n * an error message is generated.\n * See: https://protobuf.dev/reference/protobuf/google.protobuf/#field-mask\n *\n * ```proto\n * message MyFieldMask {\n * // The `value` FieldMask shall not contain paths listed in `not_in`.\n * google.protobuf.FieldMask value = 1 [(buf.validate.field).field_mask = {\n * not_in: [\"forbidden\", \"immutable\", \"c.a\"]\n * }];\n * }\n * ```\n *\n * @generated from field: repeated string not_in = 3;\n */\n notIn?: string[];\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyFieldMask {\n * google.protobuf.FieldMask value = 1 [\n * (buf.validate.field).field_mask.example = { paths: [\"a\", \"b\"] },\n * (buf.validate.field).field_mask.example = { paths: [\"c.a\", \"d\"] },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.FieldMask example = 4;\n */\n example?: FieldMaskJson[];\n};\n\n/**\n * Describes the message buf.validate.FieldMaskRules.\n * Use `create(FieldMaskRulesSchema)` to create a new message.\n */\nexport const FieldMaskRulesSchema: GenMessage<FieldMaskRules, {jsonType: FieldMaskRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 26);\n\n/**\n * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.\n *\n * @generated from message buf.validate.TimestampRules\n */\nexport type TimestampRules = Message<\"buf.validate.TimestampRules\"> & {\n /**\n * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must equal 2023-05-03T10:00:00Z\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Timestamp const = 2;\n */\n const?: Timestamp;\n\n /**\n * @generated from oneof buf.validate.TimestampRules.less_than\n */\n lessThan: {\n /**\n * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be less than 'P3D' [duration.lt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lt = 3;\n */\n value: Timestamp;\n case: \"lt\";\n } | {\n /**\n * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lte = 4;\n */\n value: Timestamp;\n case: \"lte\";\n } | {\n /**\n * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be less than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];\n * }\n * ```\n *\n * @generated from field: bool lt_now = 7;\n */\n value: boolean;\n case: \"ltNow\";\n } | { case: undefined; value?: undefined };\n\n /**\n * @generated from oneof buf.validate.TimestampRules.greater_than\n */\n greaterThan: {\n /**\n * `gt` requires the timestamp field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gt = 5;\n */\n value: Timestamp;\n case: \"gt\";\n } | {\n /**\n * `gte` requires the timestamp field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value\n * must be outside the specified range. If the field value doesn't meet\n * the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gte = 6;\n */\n value: Timestamp;\n case: \"gte\";\n } | {\n /**\n * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be greater than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];\n * }\n * ```\n *\n * @generated from field: bool gt_now = 8;\n */\n value: boolean;\n case: \"gtNow\";\n } | { case: undefined; value?: undefined };\n\n /**\n * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be within 1 hour of now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration within = 9;\n */\n within?: Duration;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyTimestamp {\n * google.protobuf.Timestamp value = 1 [\n * (buf.validate.field).timestamp.example = { seconds: 1672444800 },\n * (buf.validate.field).timestamp.example = { seconds: 1672531200 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Timestamp example = 10;\n */\n example: Timestamp[];\n};\n\n/**\n * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.\n *\n * @generated from message buf.validate.TimestampRules\n */\nexport type TimestampRulesJson = {\n /**\n * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must equal 2023-05-03T10:00:00Z\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Timestamp const = 2;\n */\n const?: TimestampJson;\n\n /**\n * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyDuration {\n * // duration must be less than 'P3D' [duration.lt]\n * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lt = 3;\n */\n lt?: TimestampJson;\n\n /**\n * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp lte = 4;\n */\n lte?: TimestampJson;\n\n /**\n * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be less than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];\n * }\n * ```\n *\n * @generated from field: bool lt_now = 7;\n */\n ltNow?: boolean;\n\n /**\n * `gt` requires the timestamp field value to be greater than the specified\n * value (exclusive). If the value of `gt` is larger than a specified `lt`\n * or `lte`, the range is reversed, and the field value must be outside the\n * specified range. If the field value doesn't meet the required conditions,\n * an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gt = 5;\n */\n gt?: TimestampJson;\n\n /**\n * `gte` requires the timestamp field value to be greater than or equal to the\n * specified value (exclusive). If the value of `gte` is larger than a\n * specified `lt` or `lte`, the range is reversed, and the field value\n * must be outside the specified range. If the field value doesn't meet\n * the required conditions, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]\n * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];\n *\n * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]\n * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];\n *\n * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]\n * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];\n * }\n * ```\n *\n * @generated from field: google.protobuf.Timestamp gte = 6;\n */\n gte?: TimestampJson;\n\n /**\n * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be greater than now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];\n * }\n * ```\n *\n * @generated from field: bool gt_now = 8;\n */\n gtNow?: boolean;\n\n /**\n * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.\n *\n * ```proto\n * message MyTimestamp {\n * // value must be within 1 hour of now\n * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];\n * }\n * ```\n *\n * @generated from field: optional google.protobuf.Duration within = 9;\n */\n within?: DurationJson;\n\n /**\n * `example` specifies values that the field may have. These values SHOULD\n * conform to other rules. `example` values will not impact validation\n * but may be used as helpful guidance on how to populate the given field.\n *\n * ```proto\n * message MyTimestamp {\n * google.protobuf.Timestamp value = 1 [\n * (buf.validate.field).timestamp.example = { seconds: 1672444800 },\n * (buf.validate.field).timestamp.example = { seconds: 1672531200 },\n * ];\n * }\n * ```\n *\n * @generated from field: repeated google.protobuf.Timestamp example = 10;\n */\n example?: TimestampJson[];\n};\n\n/**\n * Describes the message buf.validate.TimestampRules.\n * Use `create(TimestampRulesSchema)` to create a new message.\n */\nexport const TimestampRulesSchema: GenMessage<TimestampRules, {jsonType: TimestampRulesJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 27);\n\n/**\n * `Violations` is a collection of `Violation` messages. This message type is returned by\n * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.\n * Each individual violation is represented by a `Violation` message.\n *\n * @generated from message buf.validate.Violations\n */\nexport type Violations = Message<\"buf.validate.Violations\"> & {\n /**\n * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.\n *\n * @generated from field: repeated buf.validate.Violation violations = 1;\n */\n violations: Violation[];\n};\n\n/**\n * `Violations` is a collection of `Violation` messages. This message type is returned by\n * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.\n * Each individual violation is represented by a `Violation` message.\n *\n * @generated from message buf.validate.Violations\n */\nexport type ViolationsJson = {\n /**\n * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.\n *\n * @generated from field: repeated buf.validate.Violation violations = 1;\n */\n violations?: ViolationJson[];\n};\n\n/**\n * Describes the message buf.validate.Violations.\n * Use `create(ViolationsSchema)` to create a new message.\n */\nexport const ViolationsSchema: GenMessage<Violations, {jsonType: ViolationsJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 28);\n\n/**\n * `Violation` represents a single instance where a validation rule, expressed\n * as a `Rule`, was not met. It provides information about the field that\n * caused the violation, the specific rule that wasn't fulfilled, and a\n * human-readable error message.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message User {\n * int32 age = 1 [(buf.validate.field).cel = {\n * id: \"user.age\",\n * expression: \"this < 18 ? 'User must be at least 18 years old' : ''\",\n * }];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```json\n * {\n * \"ruleId\": \"user.age\",\n * \"message\": \"User must be at least 18 years old\",\n * \"field\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 1,\n * \"fieldName\": \"age\",\n * \"fieldType\": \"TYPE_INT32\"\n * }\n * ]\n * },\n * \"rule\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 23,\n * \"fieldName\": \"cel\",\n * \"fieldType\": \"TYPE_MESSAGE\",\n * \"index\": \"0\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * @generated from message buf.validate.Violation\n */\nexport type Violation = Message<\"buf.validate.Violation\"> & {\n /**\n * `field` is a machine-readable path to the field that failed validation.\n * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```textproto\n * violation {\n * field { element { field_number: 1, field_name: \"a\", field_type: 8 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath field = 5;\n */\n field?: FieldPath;\n\n /**\n * `rule` is a machine-readable path that points to the specific rule that failed validation.\n * This will be a nested field starting from the FieldRules of the field that failed validation.\n * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * bool b = 2 [(buf.validate.field).cel = {\n * id: \"custom_rule\",\n * expression: \"!this ? 'b must be true': ''\"\n * }]\n * }\n * ```\n *\n * It could produce the following violations:\n *\n * ```textproto\n * violation {\n * rule { element { field_number: 25, field_name: \"required\", field_type: 8 } }\n * ...\n * }\n * violation {\n * rule { element { field_number: 23, field_name: \"cel\", field_type: 11, index: 0 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath rule = 6;\n */\n rule?: FieldPath;\n\n /**\n * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.\n * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.\n *\n * @generated from field: optional string rule_id = 2;\n */\n ruleId: string;\n\n /**\n * `message` is a human-readable error message that describes the nature of the violation.\n * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.\n *\n * @generated from field: optional string message = 3;\n */\n message: string;\n\n /**\n * `for_key` indicates whether the violation was caused by a map key, rather than a value.\n *\n * @generated from field: optional bool for_key = 4;\n */\n forKey: boolean;\n};\n\n/**\n * `Violation` represents a single instance where a validation rule, expressed\n * as a `Rule`, was not met. It provides information about the field that\n * caused the violation, the specific rule that wasn't fulfilled, and a\n * human-readable error message.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message User {\n * int32 age = 1 [(buf.validate.field).cel = {\n * id: \"user.age\",\n * expression: \"this < 18 ? 'User must be at least 18 years old' : ''\",\n * }];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```json\n * {\n * \"ruleId\": \"user.age\",\n * \"message\": \"User must be at least 18 years old\",\n * \"field\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 1,\n * \"fieldName\": \"age\",\n * \"fieldType\": \"TYPE_INT32\"\n * }\n * ]\n * },\n * \"rule\": {\n * \"elements\": [\n * {\n * \"fieldNumber\": 23,\n * \"fieldName\": \"cel\",\n * \"fieldType\": \"TYPE_MESSAGE\",\n * \"index\": \"0\"\n * }\n * ]\n * }\n * }\n * ```\n *\n * @generated from message buf.validate.Violation\n */\nexport type ViolationJson = {\n /**\n * `field` is a machine-readable path to the field that failed validation.\n * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * }\n * ```\n *\n * It could produce the following violation:\n *\n * ```textproto\n * violation {\n * field { element { field_number: 1, field_name: \"a\", field_type: 8 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath field = 5;\n */\n field?: FieldPathJson;\n\n /**\n * `rule` is a machine-readable path that points to the specific rule that failed validation.\n * This will be a nested field starting from the FieldRules of the field that failed validation.\n * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.\n *\n * For example, consider the following message:\n *\n * ```proto\n * message Message {\n * bool a = 1 [(buf.validate.field).required = true];\n * bool b = 2 [(buf.validate.field).cel = {\n * id: \"custom_rule\",\n * expression: \"!this ? 'b must be true': ''\"\n * }]\n * }\n * ```\n *\n * It could produce the following violations:\n *\n * ```textproto\n * violation {\n * rule { element { field_number: 25, field_name: \"required\", field_type: 8 } }\n * ...\n * }\n * violation {\n * rule { element { field_number: 23, field_name: \"cel\", field_type: 11, index: 0 } }\n * ...\n * }\n * ```\n *\n * @generated from field: optional buf.validate.FieldPath rule = 6;\n */\n rule?: FieldPathJson;\n\n /**\n * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.\n * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.\n *\n * @generated from field: optional string rule_id = 2;\n */\n ruleId?: string;\n\n /**\n * `message` is a human-readable error message that describes the nature of the violation.\n * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.\n *\n * @generated from field: optional string message = 3;\n */\n message?: string;\n\n /**\n * `for_key` indicates whether the violation was caused by a map key, rather than a value.\n *\n * @generated from field: optional bool for_key = 4;\n */\n forKey?: boolean;\n};\n\n/**\n * Describes the message buf.validate.Violation.\n * Use `create(ViolationSchema)` to create a new message.\n */\nexport const ViolationSchema: GenMessage<Violation, {jsonType: ViolationJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 29);\n\n/**\n * `FieldPath` provides a path to a nested protobuf field.\n *\n * This message provides enough information to render a dotted field path even without protobuf descriptors.\n * It also provides enough information to resolve a nested field through unknown wire data.\n *\n * @generated from message buf.validate.FieldPath\n */\nexport type FieldPath = Message<\"buf.validate.FieldPath\"> & {\n /**\n * `elements` contains each element of the path, starting from the root and recursing downward.\n *\n * @generated from field: repeated buf.validate.FieldPathElement elements = 1;\n */\n elements: FieldPathElement[];\n};\n\n/**\n * `FieldPath` provides a path to a nested protobuf field.\n *\n * This message provides enough information to render a dotted field path even without protobuf descriptors.\n * It also provides enough information to resolve a nested field through unknown wire data.\n *\n * @generated from message buf.validate.FieldPath\n */\nexport type FieldPathJson = {\n /**\n * `elements` contains each element of the path, starting from the root and recursing downward.\n *\n * @generated from field: repeated buf.validate.FieldPathElement elements = 1;\n */\n elements?: FieldPathElementJson[];\n};\n\n/**\n * Describes the message buf.validate.FieldPath.\n * Use `create(FieldPathSchema)` to create a new message.\n */\nexport const FieldPathSchema: GenMessage<FieldPath, {jsonType: FieldPathJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 30);\n\n/**\n * `FieldPathElement` provides enough information to nest through a single protobuf field.\n *\n * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.\n * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.\n * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.\n *\n * @generated from message buf.validate.FieldPathElement\n */\nexport type FieldPathElement = Message<\"buf.validate.FieldPathElement\"> & {\n /**\n * `field_number` is the field number this path element refers to.\n *\n * @generated from field: optional int32 field_number = 1;\n */\n fieldNumber: number;\n\n /**\n * `field_name` contains the field name this path element refers to.\n * This can be used to display a human-readable path even if the field number is unknown.\n *\n * @generated from field: optional string field_name = 2;\n */\n fieldName: string;\n\n /**\n * `field_type` specifies the type of this field. When using reflection, this value is not needed.\n *\n * This value is provided to make it possible to traverse unknown fields through wire data.\n * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.\n *\n * [1]: https://protobuf.dev/programming-guides/encoding/#packed\n * [2]: https://protobuf.dev/programming-guides/encoding/#groups\n *\n * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and\n * can be explicitly used in Protocol Buffers 2023 Edition.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;\n */\n fieldType: FieldDescriptorProto_Type;\n\n /**\n * `key_type` specifies the map key type of this field. This value is useful when traversing\n * unknown fields through wire data: specifically, it allows handling the differences between\n * different integer encodings.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;\n */\n keyType: FieldDescriptorProto_Type;\n\n /**\n * `value_type` specifies map value type of this field. This is useful if you want to display a\n * value inside unknown fields through wire data.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;\n */\n valueType: FieldDescriptorProto_Type;\n\n /**\n * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.\n *\n * @generated from oneof buf.validate.FieldPathElement.subscript\n */\n subscript: {\n /**\n * `index` specifies a 0-based index into a repeated field.\n *\n * @generated from field: uint64 index = 6;\n */\n value: bigint;\n case: \"index\";\n } | {\n /**\n * `bool_key` specifies a map key of type bool.\n *\n * @generated from field: bool bool_key = 7;\n */\n value: boolean;\n case: \"boolKey\";\n } | {\n /**\n * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.\n *\n * @generated from field: int64 int_key = 8;\n */\n value: bigint;\n case: \"intKey\";\n } | {\n /**\n * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.\n *\n * @generated from field: uint64 uint_key = 9;\n */\n value: bigint;\n case: \"uintKey\";\n } | {\n /**\n * `string_key` specifies a map key of type string.\n *\n * @generated from field: string string_key = 10;\n */\n value: string;\n case: \"stringKey\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * `FieldPathElement` provides enough information to nest through a single protobuf field.\n *\n * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.\n * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.\n * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.\n *\n * @generated from message buf.validate.FieldPathElement\n */\nexport type FieldPathElementJson = {\n /**\n * `field_number` is the field number this path element refers to.\n *\n * @generated from field: optional int32 field_number = 1;\n */\n fieldNumber?: number;\n\n /**\n * `field_name` contains the field name this path element refers to.\n * This can be used to display a human-readable path even if the field number is unknown.\n *\n * @generated from field: optional string field_name = 2;\n */\n fieldName?: string;\n\n /**\n * `field_type` specifies the type of this field. When using reflection, this value is not needed.\n *\n * This value is provided to make it possible to traverse unknown fields through wire data.\n * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.\n *\n * [1]: https://protobuf.dev/programming-guides/encoding/#packed\n * [2]: https://protobuf.dev/programming-guides/encoding/#groups\n *\n * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and\n * can be explicitly used in Protocol Buffers 2023 Edition.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;\n */\n fieldType?: FieldDescriptorProto_TypeJson;\n\n /**\n * `key_type` specifies the map key type of this field. This value is useful when traversing\n * unknown fields through wire data: specifically, it allows handling the differences between\n * different integer encodings.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;\n */\n keyType?: FieldDescriptorProto_TypeJson;\n\n /**\n * `value_type` specifies map value type of this field. This is useful if you want to display a\n * value inside unknown fields through wire data.\n *\n * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;\n */\n valueType?: FieldDescriptorProto_TypeJson;\n\n /**\n * `index` specifies a 0-based index into a repeated field.\n *\n * @generated from field: uint64 index = 6;\n */\n index?: string;\n\n /**\n * `bool_key` specifies a map key of type bool.\n *\n * @generated from field: bool bool_key = 7;\n */\n boolKey?: boolean;\n\n /**\n * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.\n *\n * @generated from field: int64 int_key = 8;\n */\n intKey?: string;\n\n /**\n * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.\n *\n * @generated from field: uint64 uint_key = 9;\n */\n uintKey?: string;\n\n /**\n * `string_key` specifies a map key of type string.\n *\n * @generated from field: string string_key = 10;\n */\n stringKey?: string;\n};\n\n/**\n * Describes the message buf.validate.FieldPathElement.\n * Use `create(FieldPathElementSchema)` to create a new message.\n */\nexport const FieldPathElementSchema: GenMessage<FieldPathElement, {jsonType: FieldPathElementJson}> = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 31);\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport enum Ignore {\n /**\n * Ignore rules if the field tracks presence and is unset. This is the default\n * behavior.\n *\n * In proto3, only message fields, members of a Protobuf `oneof`, and fields\n * with the `optional` label track presence. Consequently, the following fields\n * are always validated, whether a value is set or not:\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message RulesApply {\n * string email = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * int32 age = 2 [\n * (buf.validate.field).int32.gt = 0\n * ];\n * repeated string labels = 3 [\n * (buf.validate.field).repeated.min_items = 1\n * ];\n * }\n * ```\n *\n * In contrast, the following fields track presence, and are only validated if\n * a value is set:\n *\n * ```proto\n * syntax=\"proto3\";\n *\n * message RulesApplyIfSet {\n * optional string email = 1 [\n * (buf.validate.field).string.email = true\n * ];\n * oneof ref {\n * string reference = 2 [\n * (buf.validate.field).string.uuid = true\n * ];\n * string name = 3 [\n * (buf.validate.field).string.min_len = 4\n * ];\n * }\n * SomeMessage msg = 4 [\n * (buf.validate.field).cel = {/* ... *\\/}\n * ];\n * }\n * ```\n *\n * To ensure that such a field is set, add the `required` rule.\n *\n * To learn which fields track presence, see the\n * [Field Presence cheat sheet](https://protobuf.dev/programming-guides/field_presence/#cheat).\n *\n * @generated from enum value: IGNORE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * Ignore rules if the field is unset, or set to the zero value.\n *\n * The zero value depends on the field type:\n * - For strings, the zero value is the empty string.\n * - For bytes, the zero value is empty bytes.\n * - For bool, the zero value is false.\n * - For numeric types, the zero value is zero.\n * - For enums, the zero value is the first defined enum value.\n * - For repeated fields, the zero is an empty list.\n * - For map fields, the zero is an empty map.\n * - For message fields, absence of the message (typically a null-value) is considered zero value.\n *\n * For fields that track presence (e.g. adding the `optional` label in proto3),\n * this a no-op and behavior is the same as the default `IGNORE_UNSPECIFIED`.\n *\n * @generated from enum value: IGNORE_IF_ZERO_VALUE = 1;\n */\n IF_ZERO_VALUE = 1,\n\n /**\n * Always ignore rules, including the `required` rule.\n *\n * This is useful for ignoring the rules of a referenced message, or to\n * temporarily ignore rules during development.\n *\n * ```proto\n * message MyMessage {\n * // The field's rules will always be ignored, including any validations\n * // on value's fields.\n * MyOtherMessage value = 1 [\n * (buf.validate.field).ignore = IGNORE_ALWAYS\n * ];\n * }\n * ```\n *\n * @generated from enum value: IGNORE_ALWAYS = 3;\n */\n ALWAYS = 3,\n}\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport type IgnoreJson = \"IGNORE_UNSPECIFIED\" | \"IGNORE_IF_ZERO_VALUE\" | \"IGNORE_ALWAYS\";\n\n/**\n * Describes the enum buf.validate.Ignore.\n */\nexport const IgnoreSchema: GenEnum<Ignore, IgnoreJson> = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 0);\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport enum KnownRegex {\n /**\n * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).\n *\n * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;\n */\n HTTP_HEADER_NAME = 1,\n\n /**\n * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).\n *\n * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;\n */\n HTTP_HEADER_VALUE = 2,\n}\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport type KnownRegexJson = \"KNOWN_REGEX_UNSPECIFIED\" | \"KNOWN_REGEX_HTTP_HEADER_NAME\" | \"KNOWN_REGEX_HTTP_HEADER_VALUE\";\n\n/**\n * Describes the enum buf.validate.KnownRegex.\n */\nexport const KnownRegexSchema: GenEnum<KnownRegex, KnownRegexJson> = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this message. By default,\n * no validation is performed against a message.\n *\n * @generated from extension: optional buf.validate.MessageRules message = 1159;\n */\nexport const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 0);\n\n/**\n * Rules specify the validations to be performed on this oneof. By default,\n * no validation is performed against a oneof.\n *\n * @generated from extension: optional buf.validate.OneofRules oneof = 1159;\n */\nexport const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this field. By default,\n * no validation is performed against a field.\n *\n * @generated from extension: optional buf.validate.FieldRules field = 1159;\n */\nexport const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 2);\n\n/**\n * Specifies predefined rules. When extending a standard rule message,\n * this adds additional CEL expressions that apply when the extension is used.\n *\n * ```proto\n * extend buf.validate.Int32Rules {\n * bool is_zero [(buf.validate.predefined).cel = {\n * id: \"int32.is_zero\",\n * message: \"value must be zero\",\n * expression: \"!rule || this == 0\",\n * }];\n * }\n *\n * message Foo {\n * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];\n * }\n * ```\n *\n * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;\n */\nexport const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 3);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_format.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { JTDSchema, JTDSchemaJson } from \"./jtd_schema_pb\";\nimport { file_mochabugapis_adapt_graph_jtd_schema } from \"./jtd_schema_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_format.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_format: GenFile = /*@__PURE__*/\n fileDesc(\"Cixtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2Zvcm1hdC5wcm90bxIYbW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoIo8FCgxTaWduYWxGb3JtYXQSOQoKanRkX3NjaGVtYRgBIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFIABKyBAoJbWltZV90eXBlGAIgASgJQpwEukiYBLoBmwIKMG1pbWVfdHlwZS5ub190eXBlX3dpbGRjYXJkX3dpdGhfY29uY3JldGVfc3VidHlwZRK7AVR5cGUgd2lsZGNhcmQgd2l0aCBjb25jcmV0ZSBzdWJ0eXBlIChlLmcuLCAnKi9wbmcnLCAnKi9qc29uJykgaXMgbm90IGFsbG93ZWQuIFVzZSBjb25jcmV0ZSB0eXBlIChlLmcuLCAnaW1hZ2UvcG5nJyksIHR5cGUtZmFtaWx5IHdpbGRjYXJkIChlLmcuLCAnaW1hZ2UvKicpLCBvciB1bml2ZXJzYWwgd2lsZGNhcmQgKCcqLyonKS4aKSEodGhpcy5zdGFydHNXaXRoKCcqLycpICYmIHRoaXMgIT0gJyovKicpugGRAQodbWltZV90eXBlLm5vX2FwcGxpY2F0aW9uX2pzb24SR2dlbmVyaWMganNvbiBpcyBqdGQtc2NoZW1hIHdpdGggZW1wdHkgc2NoZW1hLCB0aGlzIHdpbGwgYWNjZXB0IGFueSBKU09OGid0aGlzLmxvd2VyQXNjaWkoKSAhPSAnYXBwbGljYXRpb24vanNvbidyYhADGP8BMlteKFthLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fXxcKikvKFthLXpBLVowLTldW2EtekEtWjAtOSEjJCZcLV5fLitdezAsMTI2fXxcKikkSABCDwoGZm9ybWF0EgW6SAIIAWIGcHJvdG8z\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_jtd_schema]);\n\n/**\n * SignalFormat defines how signal data is structured and should be interpreted.\n * All signals are binary at the transport level; this message determines the interpretation.\n *\n * This message is designed to be reusable across both signal descriptors (which produce\n * one specific format or format family) and signal bindings (which may accept multiple formats).\n *\n * Format matching semantics:\n * - JTD schemas use structural subsumption (handled by existing JTD subsume algorithm)\n * - MIME types use pattern matching with optional wildcards\n * - JTD and MIME formats are incompatible - a JTD signal cannot bind to a MIME-accepting\n * binding and vice versa, even if semantically similar (e.g., application/json vs JTD)\n *\n * @generated from message mochabugapis.adapt.graph.SignalFormat\n */\nexport type SignalFormat = Message<\"mochabugapis.adapt.graph.SignalFormat\"> & {\n /**\n * The format specification is mutually exclusive - a signal format is either:\n * - jtd_schema: Structured JSON with schema validation (enables automatic validation,\n * type inference, and platform-level tooling support)\n * - mime_type: Generic binary format identification for non-JSON data\n *\n * Design note: While JSON data is technically \"application/json\" as a MIME type,\n * using jtd_schema instead provides platform-level schema validation, automatic\n * type checking, and better developer tooling support.\n *\n * @generated from oneof mochabugapis.adapt.graph.SignalFormat.format\n */\n format: {\n /**\n * Schema definition for JSON-structured signals.\n * Must follow the JSON Type Definition (JTD) specification: https://www.rfc-editor.org/rfc/rfc8927\n *\n * The empty schema {} validates any JSON value.\n *\n * Common JTD primitive types:\n * - \"string\": JSON string values\n * - \"float32\", \"float64\": JSON numbers with specific precision\n * - \"int8\", \"int16\", \"int32\": JSON numbers representing integers\n * - \"boolean\": JSON boolean values (true/false)\n * - \"timestamp\": ISO 8601 datetime strings (RFC 3339 format)\n *\n * JTD also supports complex types:\n * - elements: { elements: { type: \"string\" } } for arrays\n * - properties: { properties: { id: { type: \"int32\" } } } for objects\n * - discriminator: For tagged unions\n * - enum: For enumerated string values\n * - nullable: Wraps any type to allow null\n *\n * Compatibility checking:\n * JTD schemas are checked for structural compatibility using subsumption rules.\n * A producer schema is compatible with a consumer schema if every valid value\n * under the producer schema is also valid under the consumer schema.\n *\n * Example usage for text display binding (accepts primitive types):\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * @generated from field: mochabugapis.adapt.graph.JTDSchema jtd_schema = 1;\n */\n value: JTDSchema;\n case: \"jtdSchema\";\n } | {\n /**\n * MIME type for binary format signals.\n * Must be a concrete MIME type or a type-family wildcard, conforming to RFC 6838\n * media type specifications (without parameters).\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"image/*\")\n * - Type must be concrete (alphanumeric start + allowed characters)\n * - Subtype can be concrete OR wildcard \"*\"\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * Wildcard rules:\n * Wildcards are allowed in two forms:\n * \u2705 \"*\\/*\" - Universal wildcard (accepts/produces any format)\n * \u2705 \"image/*\" - Type-family wildcard (accepts/produces any image format)\n * \u2705 \"text/*\" - Type-family wildcard (accepts/produces any text format)\n * \u2705 \"application/*\" - Type-family wildcard (accepts/produces any application format)\n * \u2705 \"image/png\" - Concrete type (no wildcard)\n * \u274C \"*\\/png\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n * \u274C \"*\\/json\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n *\n * Why no parameters?\n * Parameters like charset, boundary, and encoding are transport-level concerns\n * in this system. All data is transmitted as binary/JSON, and character encoding\n * is handled at the serialization layer, not the graph validation layer.\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. This is a platform-wide convention that ensures\n * consistent text handling across all signal processing. When specifying text MIME\n * types, charset parameters are forbidden and UTF-8 is always assumed.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (redundant - UTF-8 is assumed)\n * \u274C \"text/plain; charset=iso-8859-1\" (non-UTF-8 encodings not supported)\n * \u274C \"application/json; format=compact\"\n * Instead use: \"text/plain\" or \"application/json\"\n *\n *\n * Semantic meaning for producers vs consumers:\n * - In SignalDescriptor (producer):\n * - \"*\\/*\" means \"this signal's format is completely dynamic\"\n * - \"image/*\" means \"this signal produces an image, format depends on runtime\"\n * - In SignalBinding (consumer):\n * - \"*\\/*\" means \"this binding accepts any format universally\"\n * - \"image/*\" means \"this binding accepts any image format\"\n *\n * MIME type compatibility checking (subsumption rules):\n * Subsumption hierarchy: Concrete \u2286 Type-family \u2286 Universal\n * Example: image/png \u2286 image/* \u2286 *\\/*\n *\n * A producer format is compatible with a consumer format if:\n * - Both are concrete and equal: \"image/png\" \u2286 \"image/png\" \u2705\n * - Producer is concrete, consumer is type-family: \"image/png\" \u2286 \"image/*\" \u2705\n * - Producer is concrete, consumer is universal: \"image/png\" \u2286 \"*\\/*\" \u2705\n * - Both are type-family of same type: \"image/*\" \u2286 \"image/*\" \u2705\n * - Producer is type-family, consumer is universal: \"image/*\" \u2286 \"*\\/*\" \u2705\n * - Both are universal: \"*\\/*\" \u2286 \"*\\/*\" \u2705\n * - Producer is type-family, consumer is concrete: \"image/*\" \u2286 \"image/png\" \u274C\n * - Producer is universal, consumer is type-family: \"*\\/*\" \u2286 \"image/*\" \u274C\n * - Producer is universal, consumer is concrete: \"*\\/*\" \u2286 \"image/png\" \u274C\n * - Different types: \"image/png\" \u2286 \"text/*\" \u274C\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n * - Text: \"text/plain\", \"text/csv\"\n *\n * Common wildcard examples:\n * - \"image/*\": Any raster or vector image format\n * - \"text/*\": Any text-based format\n * - \"application/*\": Any application-specific binary format\n * - \"audio/*\": Any audio format\n * - \"video/*\": Any video format\n *\n * @generated from field: string mime_type = 2;\n */\n value: string;\n case: \"mimeType\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * SignalFormat defines how signal data is structured and should be interpreted.\n * All signals are binary at the transport level; this message determines the interpretation.\n *\n * This message is designed to be reusable across both signal descriptors (which produce\n * one specific format or format family) and signal bindings (which may accept multiple formats).\n *\n * Format matching semantics:\n * - JTD schemas use structural subsumption (handled by existing JTD subsume algorithm)\n * - MIME types use pattern matching with optional wildcards\n * - JTD and MIME formats are incompatible - a JTD signal cannot bind to a MIME-accepting\n * binding and vice versa, even if semantically similar (e.g., application/json vs JTD)\n *\n * @generated from message mochabugapis.adapt.graph.SignalFormat\n */\nexport type SignalFormatJson = {\n /**\n * Schema definition for JSON-structured signals.\n * Must follow the JSON Type Definition (JTD) specification: https://www.rfc-editor.org/rfc/rfc8927\n *\n * The empty schema {} validates any JSON value.\n *\n * Common JTD primitive types:\n * - \"string\": JSON string values\n * - \"float32\", \"float64\": JSON numbers with specific precision\n * - \"int8\", \"int16\", \"int32\": JSON numbers representing integers\n * - \"boolean\": JSON boolean values (true/false)\n * - \"timestamp\": ISO 8601 datetime strings (RFC 3339 format)\n *\n * JTD also supports complex types:\n * - elements: { elements: { type: \"string\" } } for arrays\n * - properties: { properties: { id: { type: \"int32\" } } } for objects\n * - discriminator: For tagged unions\n * - enum: For enumerated string values\n * - nullable: Wraps any type to allow null\n *\n * Compatibility checking:\n * JTD schemas are checked for structural compatibility using subsumption rules.\n * A producer schema is compatible with a consumer schema if every valid value\n * under the producer schema is also valid under the consumer schema.\n *\n * Example usage for text display binding (accepts primitive types):\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * @generated from field: mochabugapis.adapt.graph.JTDSchema jtd_schema = 1;\n */\n jtdSchema?: JTDSchemaJson;\n\n /**\n * MIME type for binary format signals.\n * Must be a concrete MIME type or a type-family wildcard, conforming to RFC 6838\n * media type specifications (without parameters).\n *\n * Format requirements:\n * - Structure: type/subtype (e.g., \"image/png\", \"image/*\")\n * - Type must be concrete (alphanumeric start + allowed characters)\n * - Subtype can be concrete OR wildcard \"*\"\n * - NO parameters allowed (no semicolons or charset specifications)\n * - Case-insensitive but conventionally lowercase\n * - Maximum length: 255 characters (127 for type + \"/\" + 127 for subtype)\n *\n * Wildcard rules:\n * Wildcards are allowed in two forms:\n * \u2705 \"*\\/*\" - Universal wildcard (accepts/produces any format)\n * \u2705 \"image/*\" - Type-family wildcard (accepts/produces any image format)\n * \u2705 \"text/*\" - Type-family wildcard (accepts/produces any text format)\n * \u2705 \"application/*\" - Type-family wildcard (accepts/produces any application format)\n * \u2705 \"image/png\" - Concrete type (no wildcard)\n * \u274C \"*\\/png\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n * \u274C \"*\\/json\" - Type wildcard with concrete subtype forbidden (semantically invalid)\n *\n * Why no parameters?\n * Parameters like charset, boundary, and encoding are transport-level concerns\n * in this system. All data is transmitted as binary/JSON, and character encoding\n * is handled at the serialization layer, not the graph validation layer.\n *\n * **Character Encoding Assumption**:\n * All text-based formats (text/*, application/json, application/xml, etc.) are\n * assumed to use UTF-8 encoding. This is a platform-wide convention that ensures\n * consistent text handling across all signal processing. When specifying text MIME\n * types, charset parameters are forbidden and UTF-8 is always assumed.\n *\n * Examples of forbidden formats:\n * \u274C \"text/plain; charset=utf-8\" (redundant - UTF-8 is assumed)\n * \u274C \"text/plain; charset=iso-8859-1\" (non-UTF-8 encodings not supported)\n * \u274C \"application/json; format=compact\"\n * Instead use: \"text/plain\" or \"application/json\"\n *\n *\n * Semantic meaning for producers vs consumers:\n * - In SignalDescriptor (producer):\n * - \"*\\/*\" means \"this signal's format is completely dynamic\"\n * - \"image/*\" means \"this signal produces an image, format depends on runtime\"\n * - In SignalBinding (consumer):\n * - \"*\\/*\" means \"this binding accepts any format universally\"\n * - \"image/*\" means \"this binding accepts any image format\"\n *\n * MIME type compatibility checking (subsumption rules):\n * Subsumption hierarchy: Concrete \u2286 Type-family \u2286 Universal\n * Example: image/png \u2286 image/* \u2286 *\\/*\n *\n * A producer format is compatible with a consumer format if:\n * - Both are concrete and equal: \"image/png\" \u2286 \"image/png\" \u2705\n * - Producer is concrete, consumer is type-family: \"image/png\" \u2286 \"image/*\" \u2705\n * - Producer is concrete, consumer is universal: \"image/png\" \u2286 \"*\\/*\" \u2705\n * - Both are type-family of same type: \"image/*\" \u2286 \"image/*\" \u2705\n * - Producer is type-family, consumer is universal: \"image/*\" \u2286 \"*\\/*\" \u2705\n * - Both are universal: \"*\\/*\" \u2286 \"*\\/*\" \u2705\n * - Producer is type-family, consumer is concrete: \"image/*\" \u2286 \"image/png\" \u274C\n * - Producer is universal, consumer is type-family: \"*\\/*\" \u2286 \"image/*\" \u274C\n * - Producer is universal, consumer is concrete: \"*\\/*\" \u2286 \"image/png\" \u274C\n * - Different types: \"image/png\" \u2286 \"text/*\" \u274C\n *\n * Common concrete examples:\n * - Images: \"image/png\", \"image/jpeg\", \"image/webp\", \"image/gif\", \"image/svg+xml\"\n * - Documents: \"application/pdf\", \"text/html\", \"text/markdown\"\n * - Binary: \"application/octet-stream\", \"application/zip\"\n * - Text: \"text/plain\", \"text/csv\"\n *\n * Common wildcard examples:\n * - \"image/*\": Any raster or vector image format\n * - \"text/*\": Any text-based format\n * - \"application/*\": Any application-specific binary format\n * - \"audio/*\": Any audio format\n * - \"video/*\": Any video format\n *\n * @generated from field: string mime_type = 2;\n */\n mimeType?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalFormat.\n * Use `create(SignalFormatSchema)` to create a new message.\n */\nexport const SignalFormatSchema: GenMessage<SignalFormat, {jsonType: SignalFormatJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_format, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/jtd_schema.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { StructJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\nimport type { JsonObject, Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/jtd_schema.proto.\n */\nexport const file_mochabugapis_adapt_graph_jtd_schema: GenFile = /*@__PURE__*/\n fileDesc(\"Ciltb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvanRkX3NjaGVtYS5wcm90bxIYbW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoIsEcCglKVERTY2hlbWESegoLZGVmaW5pdGlvbnMYASADKAsyNC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hLkRlZmluaXRpb25zRW50cnlCL7pILJoBKQgAEOgHIiJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEi4KCG1ldGFkYXRhGAIgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAiAEBEhUKCG51bGxhYmxlGAMgASgISAGIAQESNwoDcmVmGAQgASgJQiW6SCJyIBABGGQyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokSAKIAQEScQoEdHlwZRgFIAEoCUJeukhbcllSB2Jvb2xlYW5SB2Zsb2F0MzJSB2Zsb2F0NjRSBGludDhSBXVpbnQ4UgVpbnQxNlIGdWludDE2UgVpbnQzMlIGdWludDMyUgZzdHJpbmdSCXRpbWVzdGFtcEgDiAEBEiQKBGVudW0YBiADKAlCFrpIE5IBEAgAEOgHGAEiB3IFEAEY6AcSOgoIZWxlbWVudHMYByABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hSASIAQESXAoKcHJvcGVydGllcxgIIAMoCzIzLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWEuUHJvcGVydGllc0VudHJ5QhO6SBCaAQ0IABDoByIGcgQQARhkEm0KE29wdGlvbmFsX3Byb3BlcnRpZXMYCSADKAsyOy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hLk9wdGlvbmFsUHJvcGVydGllc0VudHJ5QhO6SBCaAQ0IABDoByIGcgQQARhkEiIKFWFkZGl0aW9uYWxfcHJvcGVydGllcxgKIAEoCEgFiAEBEjgKBnZhbHVlcxgLIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWFIBogBARIlCg1kaXNjcmltaW5hdG9yGAwgASgJQgm6SAZyBBABGGRIB4gBARJWCgdtYXBwaW5nGA0gAygLMjAubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYS5NYXBwaW5nRW50cnlCE7pIEJoBDQgAEOgHIgZyBBABGGQaVwoQRGVmaW5pdGlvbnNFbnRyeRILCgNrZXkYASABKAkSMgoFdmFsdWUYAiABKAsyIy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguSlREU2NoZW1hOgI4ARpWCg9Qcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYToCOAEaXgoXT3B0aW9uYWxQcm9wZXJ0aWVzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkpURFNjaGVtYToCOAEaUwoMTWFwcGluZ0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5KVERTY2hlbWE6AjgBOuMRukjfERqTAwocanRkLm11dHVhbGx5X2V4Y2x1c2l2ZV9mb3JtcxKIAVNjaGVtYSBtdXN0IHVzZSBleGFjdGx5IG9uZSBmb3JtIChlbXB0eSwgcmVmLCB0eXBlLCBlbnVtLCBlbGVtZW50cywgcHJvcGVydGllcywgdmFsdWVzLCBvciBkaXNjcmltaW5hdG9yKS4gTXVsdGlwbGUgZm9ybSBrZXl3b3JkcyBmb3VuZC4a5wFbaGFzKHRoaXMucmVmKSwgaGFzKHRoaXMudHlwZSksIHNpemUodGhpcy5lbnVtKSA+IDAsIGhhcyh0aGlzLmVsZW1lbnRzKSwgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMub3B0aW9uYWxfcHJvcGVydGllcykgPiAwLCBoYXModGhpcy52YWx1ZXMpLCBoYXModGhpcy5kaXNjcmltaW5hdG9yKSAmJiBzaXplKHRoaXMubWFwcGluZykgPiAwXS5maWx0ZXIoeCwgeCkuc2l6ZSgpIDw9IDEa+AEKGWp0ZC5wcm9wZXJ0aWVzX25vX292ZXJsYXASWFByb3BlcnRpZXMgYW5kIG9wdGlvbmFsX3Byb3BlcnRpZXMgY2Fubm90IGhhdmUgb3ZlcmxhcHBpbmcga2V5cyAoUkZDIDg5MjcgU2VjdGlvbiAyLjIuNikagAEhKHNpemUodGhpcy5wcm9wZXJ0aWVzKSA+IDAgJiYgc2l6ZSh0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpID4gMCkgfHwgdGhpcy5wcm9wZXJ0aWVzLmFsbChwaywgIShwayBpbiB0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpKRqQAgoxanRkLmFkZGl0aW9uYWxfcHJvcGVydGllc19vbmx5X29uX3Byb3BlcnRpZXNfZm9ybRJ2YWRkaXRpb25hbF9wcm9wZXJ0aWVzIGNhbiBvbmx5IGJlIHNldCB3aGVuIHVzaW5nIHRoZSBwcm9wZXJ0aWVzIGZvcm0gKGhhcyBub24tZW1wdHkgcHJvcGVydGllcyBvciBvcHRpb25hbF9wcm9wZXJ0aWVzKRpjIWhhcyh0aGlzLmFkZGl0aW9uYWxfcHJvcGVydGllcykgfHwgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMub3B0aW9uYWxfcHJvcGVydGllcykgPiAwGsIBCiJqdGQuZGlzY3JpbWluYXRvcl9yZXF1aXJlc19tYXBwaW5nEmdkaXNjcmltaW5hdG9yIGFuZCBtYXBwaW5nIG11c3QgYXBwZWFyIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3Qgb25lIG1hcHBpbmcgZW50cnkgKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjgpGjNoYXModGhpcy5kaXNjcmltaW5hdG9yKSA9PSAoc2l6ZSh0aGlzLm1hcHBpbmcpID4gMCka/QEKI2p0ZC5tYXBwaW5nX211c3RfYmVfcHJvcGVydGllc19mb3JtEk5BbGwgc2NoZW1hcyBpbiBtYXBwaW5nIG11c3QgYmUgb2YgdGhlIHByb3BlcnRpZXMgZm9ybSAoUkZDIDg5MjcgU2VjdGlvbiAyLjIuOCkahQFzaXplKHRoaXMubWFwcGluZykgPT0gMCB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sIHNpemUodGhpcy5tYXBwaW5nW21dLnByb3BlcnRpZXMpID4gMCB8fCBzaXplKHRoaXMubWFwcGluZ1ttXS5vcHRpb25hbF9wcm9wZXJ0aWVzKSA+IDApGuIBCh5qdGQubWFwcGluZ19jYW5ub3RfYmVfbnVsbGFibGUSU1NjaGVtYXMgaW4gZGlzY3JpbWluYXRvciBtYXBwaW5nIGNhbm5vdCBoYXZlIG51bGxhYmxlPXRydWUgKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjgpGmtzaXplKHRoaXMubWFwcGluZykgPT0gMCB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sICFoYXModGhpcy5tYXBwaW5nW21dLm51bGxhYmxlKSB8fCAhdGhpcy5tYXBwaW5nW21dLm51bGxhYmxlKRrGAgoranRkLmRpc2NyaW1pbmF0b3Jfbm90X2luX21hcHBpbmdfcHJvcGVydGllcxJwRGlzY3JpbWluYXRvciB0YWcgY2Fubm90IGFwcGVhciBpbiBwcm9wZXJ0aWVzIG9yIG9wdGlvbmFsX3Byb3BlcnRpZXMgb2YgbWFwcGluZyBzY2hlbWFzIChSRkMgODkyNyBTZWN0aW9uIDIuMi44KRqkASFoYXModGhpcy5kaXNjcmltaW5hdG9yKSB8fCB0aGlzLm1hcHBpbmcuYWxsKG0sICEodGhpcy5kaXNjcmltaW5hdG9yIGluIHRoaXMubWFwcGluZ1ttXS5wcm9wZXJ0aWVzKSAmJiAhKHRoaXMuZGlzY3JpbWluYXRvciBpbiB0aGlzLm1hcHBpbmdbbV0ub3B0aW9uYWxfcHJvcGVydGllcykpGsUCChJqdGQuZW51bV9ub25fZW1wdHkSSmVudW0gYXJyYXkgbXVzdCBiZSBub24tZW1wdHkgd2hlbiB1c2luZyBlbnVtIGZvcm0gKFJGQyA4OTI3IFNlY3Rpb24gMi4yLjQpGuIBc2l6ZSh0aGlzLmVudW0pID4gMCAmJiAhaGFzKHRoaXMudHlwZSkgJiYgIWhhcyh0aGlzLnJlZikgJiYgIWhhcyh0aGlzLmVsZW1lbnRzKSAmJiAhaGFzKHRoaXMudmFsdWVzKSAmJiAhaGFzKHRoaXMuZGlzY3JpbWluYXRvcikgJiYgc2l6ZSh0aGlzLnByb3BlcnRpZXMpID09IDAgJiYgc2l6ZSh0aGlzLm9wdGlvbmFsX3Byb3BlcnRpZXMpID09IDAgPyBzaXplKHRoaXMuZW51bSkgPiAwIDogdHJ1ZUILCglfbWV0YWRhdGFCCwoJX251bGxhYmxlQgYKBF9yZWZCBwoFX3R5cGVCCwoJX2VsZW1lbnRzQhgKFl9hZGRpdGlvbmFsX3Byb3BlcnRpZXNCCQoHX3ZhbHVlc0IQCg5fZGlzY3JpbWluYXRvcmIGcHJvdG8z\", [file_buf_validate_validate, file_google_protobuf_struct]);\n\n/**\n * Schema represents a JSON Typedef Schema (RFC 8927).\n *\n * ## Eight Mutually Exclusive Forms\n *\n * A JTD schema must take exactly ONE of these forms:\n * 1. **Empty**: No form-specific keywords (accepts anything)\n * 2. **Ref**: Has `ref` keyword\n * 3. **Type**: Has `type` keyword\n * 4. **Enum**: Has `enum` keyword (non-empty array)\n * 5. **Elements**: Has `elements` keyword\n * 6. **Properties**: Has `properties` and/or `optional_properties`\n * 7. **Values**: Has `values` keyword\n * 8. **Discriminator**: Has `discriminator` and `mapping` keywords\n *\n * ## Shared Keywords\n *\n * These can appear on ANY form:\n * - `nullable`: Allows null values in addition to the schema's type\n * - `metadata`: Arbitrary information (ignored during validation)\n *\n * ## Root-Level Keyword\n *\n * - `definitions`: Per RFC 8927 Section 2.1, this should only appear on root schemas.\n * While this cannot be enforced at the protobuf schema level, application code should\n * only populate this field on root schemas, not on nested schemas within definitions,\n * elements, properties, etc.\n *\n * @generated from message mochabugapis.adapt.graph.JTDSchema\n */\nexport type JTDSchema = Message<\"mochabugapis.adapt.graph.JTDSchema\"> & {\n /**\n * The definitions keyword MUST be an object where each value is a schema.\n * This object defines a collection of schema definitions that can be referenced via the ref keyword.\n *\n * RFC 8927 Section 2.1: definitions should only appear on root schemas, not on nested schemas.\n * Application code is responsible for enforcing this constraint.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1;\n */\n definitions: { [key: string]: JTDSchema };\n\n /**\n * The metadata keyword MUST be an object.\n * This object is ignored during validation and can store custom information about the schema.\n * Examples: descriptions, UI hints, code generation directives.\n *\n * @generated from field: optional google.protobuf.Struct metadata = 2;\n */\n metadata?: JsonObject;\n\n /**\n * The nullable keyword MUST be a boolean.\n * If true, the schema matches the value null as well as any value matched by the rest of the schema.\n *\n * RFC 8927: nullable can appear on any schema form.\n * Exception: Cannot be true on schemas within discriminator mappings (validated via CEL).\n *\n * @generated from field: optional bool nullable = 3;\n */\n nullable?: boolean;\n\n /**\n * The ref keyword MUST be a string.\n * It is a reference to a schema defined in the definitions object of the root schema.\n *\n * RFC 8927 Section 2.2.2: The value must refer to a definition in the root schema's definitions.\n * The referenced definition must exist (validated at runtime, not enforceable in protobuf schema).\n *\n * @generated from field: optional string ref = 4;\n */\n ref?: string;\n\n /**\n * The type keyword MUST be one of the predefined strings specifying the type of the value.\n * Valid values per RFC 8927 Section 2.2.3:\n * - \"boolean\": JSON true or false\n * - \"float32\", \"float64\": JSON numbers (IEEE 754 single/double precision intent)\n * - \"int8\": -128 to 127\n * - \"uint8\": 0 to 255\n * - \"int16\": -32,768 to 32,767\n * - \"uint16\": 0 to 65,535\n * - \"int32\": -2,147,483,648 to 2,147,483,647\n * - \"uint32\": 0 to 4,294,967,295\n * - \"string\": JSON string\n * - \"timestamp\": RFC 3339 timestamp string\n *\n * Note: RFC 8927 intentionally omits int64/uint64 due to JSON interoperability concerns.\n *\n * @generated from field: optional string type = 5;\n */\n type?: string;\n\n /**\n * The enum keyword MUST be a non-empty array of strings.\n * The schema matches any value that is equal to one of the elements in the array.\n *\n * RFC 8927 Section 2.2.4:\n * - When using enum form, this array MUST be non-empty\n * - The array MUST NOT contain duplicate values (enforced via unique constraint)\n * - Only string enums are supported (no numeric enums)\n *\n * @generated from field: repeated string enum = 6;\n */\n enum: string[];\n\n /**\n * The elements keyword MUST be a schema.\n * It is used to validate elements in an array.\n *\n * RFC 8927 Section 2.2.5: Describes homogeneous arrays where all elements match the same schema.\n * Empty arrays are valid. Each element is validated against this schema.\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema elements = 7;\n */\n elements?: JTDSchema;\n\n /**\n * The properties keyword MUST be an object where each value is a schema.\n * Each key is a required property that must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are REQUIRED\n * - For optional properties, use optional_properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8;\n */\n properties: { [key: string]: JTDSchema };\n\n /**\n * The optional_properties keyword MUST be an object where each value is a schema.\n * Each key is an optional property that, if present, must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are OPTIONAL\n * - For required properties, use properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9;\n */\n optionalProperties: { [key: string]: JTDSchema };\n\n /**\n * The additional_properties keyword MUST be a boolean.\n * If true, the object may have properties other than those specified in properties and optional_properties.\n *\n * RFC 8927 Section 3.1:\n * - Only valid on schemas of the \"properties\" form\n * - Controls \"allow additional properties\" mode during validation\n * - Does not get inherited by subschemas\n * - If false or absent, unknown properties cause validation errors\n *\n * @generated from field: optional bool additional_properties = 10;\n */\n additionalProperties?: boolean;\n\n /**\n * The values keyword MUST be a schema.\n * It is used to validate the values in an object (dictionary/map/associative array pattern).\n *\n * RFC 8927 Section 2.2.7: Values form describes JSON objects used as dictionaries.\n * - Keys can be any string\n * - All values must match this schema\n * - Empty objects are valid\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema values = 11;\n */\n values?: JTDSchema;\n\n /**\n * The discriminator keyword MUST be a string.\n * It is used with mapping to represent tagged unions (discriminated unions, sum types).\n *\n * RFC 8927 Section 2.2.8: Discriminator form describes tagged unions.\n * - The discriminator is a property name that acts as the \"tag\"\n * - The tag value determines which schema from mapping is used\n * - Must be used together with mapping (validated via CEL)\n *\n * @generated from field: optional string discriminator = 12;\n */\n discriminator?: string;\n\n /**\n * The mapping keyword MUST be an object where each value is a schema.\n * Used with discriminator for tagged unions, mapping discriminator tag values to schemas.\n *\n * RFC 8927 Section 2.2.8: Each schema in mapping:\n * - MUST be of the \"properties\" form (have properties and/or optional_properties)\n * - MUST NOT have nullable=true\n * - MUST NOT include the discriminator tag in properties or optional_properties\n * These constraints are validated via CEL rules below.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13;\n */\n mapping: { [key: string]: JTDSchema };\n};\n\n/**\n * Schema represents a JSON Typedef Schema (RFC 8927).\n *\n * ## Eight Mutually Exclusive Forms\n *\n * A JTD schema must take exactly ONE of these forms:\n * 1. **Empty**: No form-specific keywords (accepts anything)\n * 2. **Ref**: Has `ref` keyword\n * 3. **Type**: Has `type` keyword\n * 4. **Enum**: Has `enum` keyword (non-empty array)\n * 5. **Elements**: Has `elements` keyword\n * 6. **Properties**: Has `properties` and/or `optional_properties`\n * 7. **Values**: Has `values` keyword\n * 8. **Discriminator**: Has `discriminator` and `mapping` keywords\n *\n * ## Shared Keywords\n *\n * These can appear on ANY form:\n * - `nullable`: Allows null values in addition to the schema's type\n * - `metadata`: Arbitrary information (ignored during validation)\n *\n * ## Root-Level Keyword\n *\n * - `definitions`: Per RFC 8927 Section 2.1, this should only appear on root schemas.\n * While this cannot be enforced at the protobuf schema level, application code should\n * only populate this field on root schemas, not on nested schemas within definitions,\n * elements, properties, etc.\n *\n * @generated from message mochabugapis.adapt.graph.JTDSchema\n */\nexport type JTDSchemaJson = {\n /**\n * The definitions keyword MUST be an object where each value is a schema.\n * This object defines a collection of schema definitions that can be referenced via the ref keyword.\n *\n * RFC 8927 Section 2.1: definitions should only appear on root schemas, not on nested schemas.\n * Application code is responsible for enforcing this constraint.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> definitions = 1;\n */\n definitions?: { [key: string]: JTDSchemaJson };\n\n /**\n * The metadata keyword MUST be an object.\n * This object is ignored during validation and can store custom information about the schema.\n * Examples: descriptions, UI hints, code generation directives.\n *\n * @generated from field: optional google.protobuf.Struct metadata = 2;\n */\n metadata?: StructJson;\n\n /**\n * The nullable keyword MUST be a boolean.\n * If true, the schema matches the value null as well as any value matched by the rest of the schema.\n *\n * RFC 8927: nullable can appear on any schema form.\n * Exception: Cannot be true on schemas within discriminator mappings (validated via CEL).\n *\n * @generated from field: optional bool nullable = 3;\n */\n nullable?: boolean;\n\n /**\n * The ref keyword MUST be a string.\n * It is a reference to a schema defined in the definitions object of the root schema.\n *\n * RFC 8927 Section 2.2.2: The value must refer to a definition in the root schema's definitions.\n * The referenced definition must exist (validated at runtime, not enforceable in protobuf schema).\n *\n * @generated from field: optional string ref = 4;\n */\n ref?: string;\n\n /**\n * The type keyword MUST be one of the predefined strings specifying the type of the value.\n * Valid values per RFC 8927 Section 2.2.3:\n * - \"boolean\": JSON true or false\n * - \"float32\", \"float64\": JSON numbers (IEEE 754 single/double precision intent)\n * - \"int8\": -128 to 127\n * - \"uint8\": 0 to 255\n * - \"int16\": -32,768 to 32,767\n * - \"uint16\": 0 to 65,535\n * - \"int32\": -2,147,483,648 to 2,147,483,647\n * - \"uint32\": 0 to 4,294,967,295\n * - \"string\": JSON string\n * - \"timestamp\": RFC 3339 timestamp string\n *\n * Note: RFC 8927 intentionally omits int64/uint64 due to JSON interoperability concerns.\n *\n * @generated from field: optional string type = 5;\n */\n type?: string;\n\n /**\n * The enum keyword MUST be a non-empty array of strings.\n * The schema matches any value that is equal to one of the elements in the array.\n *\n * RFC 8927 Section 2.2.4:\n * - When using enum form, this array MUST be non-empty\n * - The array MUST NOT contain duplicate values (enforced via unique constraint)\n * - Only string enums are supported (no numeric enums)\n *\n * @generated from field: repeated string enum = 6;\n */\n enum?: string[];\n\n /**\n * The elements keyword MUST be a schema.\n * It is used to validate elements in an array.\n *\n * RFC 8927 Section 2.2.5: Describes homogeneous arrays where all elements match the same schema.\n * Empty arrays are valid. Each element is validated against this schema.\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema elements = 7;\n */\n elements?: JTDSchemaJson;\n\n /**\n * The properties keyword MUST be an object where each value is a schema.\n * Each key is a required property that must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are REQUIRED\n * - For optional properties, use optional_properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> properties = 8;\n */\n properties?: { [key: string]: JTDSchemaJson };\n\n /**\n * The optional_properties keyword MUST be an object where each value is a schema.\n * Each key is an optional property that, if present, must match the corresponding schema.\n *\n * RFC 8927 Section 2.2.6: Properties form describes JSON objects used as structs.\n * - All properties listed here are OPTIONAL\n * - For required properties, use properties\n * - Keys cannot overlap between properties and optional_properties (validated via CEL)\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> optional_properties = 9;\n */\n optionalProperties?: { [key: string]: JTDSchemaJson };\n\n /**\n * The additional_properties keyword MUST be a boolean.\n * If true, the object may have properties other than those specified in properties and optional_properties.\n *\n * RFC 8927 Section 3.1:\n * - Only valid on schemas of the \"properties\" form\n * - Controls \"allow additional properties\" mode during validation\n * - Does not get inherited by subschemas\n * - If false or absent, unknown properties cause validation errors\n *\n * @generated from field: optional bool additional_properties = 10;\n */\n additionalProperties?: boolean;\n\n /**\n * The values keyword MUST be a schema.\n * It is used to validate the values in an object (dictionary/map/associative array pattern).\n *\n * RFC 8927 Section 2.2.7: Values form describes JSON objects used as dictionaries.\n * - Keys can be any string\n * - All values must match this schema\n * - Empty objects are valid\n *\n * @generated from field: optional mochabugapis.adapt.graph.JTDSchema values = 11;\n */\n values?: JTDSchemaJson;\n\n /**\n * The discriminator keyword MUST be a string.\n * It is used with mapping to represent tagged unions (discriminated unions, sum types).\n *\n * RFC 8927 Section 2.2.8: Discriminator form describes tagged unions.\n * - The discriminator is a property name that acts as the \"tag\"\n * - The tag value determines which schema from mapping is used\n * - Must be used together with mapping (validated via CEL)\n *\n * @generated from field: optional string discriminator = 12;\n */\n discriminator?: string;\n\n /**\n * The mapping keyword MUST be an object where each value is a schema.\n * Used with discriminator for tagged unions, mapping discriminator tag values to schemas.\n *\n * RFC 8927 Section 2.2.8: Each schema in mapping:\n * - MUST be of the \"properties\" form (have properties and/or optional_properties)\n * - MUST NOT have nullable=true\n * - MUST NOT include the discriminator tag in properties or optional_properties\n * These constraints are validated via CEL rules below.\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.JTDSchema> mapping = 13;\n */\n mapping?: { [key: string]: JTDSchemaJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.JTDSchema.\n * Use `create(JTDSchemaSchema)` to create a new message.\n */\nexport const JTDSchemaSchema: GenMessage<JTDSchema, {jsonType: JTDSchemaJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_jtd_schema, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/vertex_metadata.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { Exchange, ExchangeJson } from \"./exchange_pb\";\nimport { file_mochabugapis_adapt_graph_exchange } from \"./exchange_pb\";\nimport type { Receiver, ReceiverJson } from \"./receiver_pb\";\nimport { file_mochabugapis_adapt_graph_receiver } from \"./receiver_pb\";\nimport type { Transmitter, TransmitterJson } from \"./transmitter_pb\";\nimport { file_mochabugapis_adapt_graph_transmitter } from \"./transmitter_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/vertex_metadata.proto.\n */\nexport const file_mochabugapis_adapt_graph_vertex_metadata: GenFile = /*@__PURE__*/\n fileDesc(\"Ci5tb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdmVydGV4X21ldGFkYXRhLnByb3RvEhhtb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGgihAUKDlZlcnRleE1ldGFkYXRhEhAKCGNvbXBsZXRlGAEgASgIErABCglyZWNlaXZlcnMYAiADKAsyIi5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguUmVjZWl2ZXJCebpIdroBbAoWcmVjZWl2ZXJzX3VuaXF1ZV9uYW1lcxImRWFjaCByZWNlaXZlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKnRoaXMubWFwKHJlY2VpdmVyLCByZWNlaXZlci5uYW1lKS51bmlxdWUoKZIBBAgBEDISwgEKDHRyYW5zbWl0dGVycxgDIAMoCzIlLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5UcmFuc21pdHRlckKEAbpIgAG6AXgKGXRyYW5zbWl0dGVyc191bmlxdWVfbmFtZXMSKUVhY2ggdHJhbnNtaXR0ZXIgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuGjB0aGlzLm1hcCh0cmFuc21pdHRlciwgdHJhbnNtaXR0ZXIubmFtZSkudW5pcXVlKCmSAQIQMhKuAQoJZXhjaGFuZ2VzGAQgAygLMiIubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLkV4Y2hhbmdlQne6SHS6AWwKFmV4Y2hhbmdlc191bmlxdWVfbmFtZXMSJkVhY2ggZXhjaGFuZ2UgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWUuGip0aGlzLm1hcChleGNoYW5nZSwgZXhjaGFuZ2UubmFtZSkudW5pcXVlKCmSAQIQChIlCg1jcm9uX3NjaGVkdWxlGAYgASgJQgm6SAZyBBABGGRIAIgBAUIQCg5fY3Jvbl9zY2hlZHVsZWIGcHJvdG8z\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_exchange, file_mochabugapis_adapt_graph_receiver, file_mochabugapis_adapt_graph_transmitter]);\n\n/**\n * VertexMetadata represents the configuration for a vertex, detailing its inputs,\n * outputs, and processes (such as procedures and streams).\n *\n * @generated from message mochabugapis.adapt.graph.VertexMetadata\n */\nexport type VertexMetadata = Message<\"mochabugapis.adapt.graph.VertexMetadata\"> & {\n /**\n * Indicates if the vertex configuration is complete. Defaults to 'false'.\n *\n * @generated from field: bool complete = 1;\n */\n complete: boolean;\n\n /**\n * Input points for the vertex. Must contain between 1 and 50 receivers,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Receiver receivers = 2;\n */\n receivers: Receiver[];\n\n /**\n * Output points for the vertex. Can contain up to 50 transmitters,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 3;\n */\n transmitters: Transmitter[];\n\n /**\n * Processes initiated by transmitters and responded to by receivers.\n * Limited to 10 unique procedures.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Exchange exchanges = 4;\n */\n exchanges: Exchange[];\n\n /**\n * A unix cron expression to determine when the task should run.\n *\n * @generated from field: optional string cron_schedule = 6;\n */\n cronSchedule?: string;\n};\n\n/**\n * VertexMetadata represents the configuration for a vertex, detailing its inputs,\n * outputs, and processes (such as procedures and streams).\n *\n * @generated from message mochabugapis.adapt.graph.VertexMetadata\n */\nexport type VertexMetadataJson = {\n /**\n * Indicates if the vertex configuration is complete. Defaults to 'false'.\n *\n * @generated from field: bool complete = 1;\n */\n complete?: boolean;\n\n /**\n * Input points for the vertex. Must contain between 1 and 50 receivers,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Receiver receivers = 2;\n */\n receivers?: ReceiverJson[];\n\n /**\n * Output points for the vertex. Can contain up to 50 transmitters,\n * each with a unique name.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 3;\n */\n transmitters?: TransmitterJson[];\n\n /**\n * Processes initiated by transmitters and responded to by receivers.\n * Limited to 10 unique procedures.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Exchange exchanges = 4;\n */\n exchanges?: ExchangeJson[];\n\n /**\n * A unix cron expression to determine when the task should run.\n *\n * @generated from field: optional string cron_schedule = 6;\n */\n cronSchedule?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.VertexMetadata.\n * Use `create(VertexMetadataSchema)` to create a new message.\n */\nexport const VertexMetadataSchema: GenMessage<VertexMetadata, {jsonType: VertexMetadataJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_vertex_metadata, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/exchange.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { Transceiver, TransceiverJson } from \"./transceiver_pb\";\nimport { file_mochabugapis_adapt_graph_transceiver } from \"./transceiver_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/exchange.proto.\n */\nexport const file_mochabugapis_adapt_graph_exchange: GenFile = /*@__PURE__*/\n fileDesc(\"Cidtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvZXhjaGFuZ2UucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLuAwoIRXhjaGFuZ2USMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARLCAQoMdHJhbnNtaXR0ZXJzGAMgAygLMiUubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlRyYW5zY2VpdmVyQoQBukiAAboBeAoZdHJhbnNtaXR0ZXJzX3VuaXF1ZV9uYW1lcxIpRWFjaCB0cmFuc21pdHRlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aMHRoaXMubWFwKHRyYW5zbWl0dGVyLCB0cmFuc21pdHRlci5uYW1lKS51bmlxdWUoKZIBAhAKErMBCglyZWNlaXZlcnMYBCADKAsyJS5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguVHJhbnNjZWl2ZXJCebpIdroBbAoWcmVjZWl2ZXJzX3VuaXF1ZV9uYW1lcxImRWFjaCByZWNlaXZlciBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKnRoaXMubWFwKHJlY2VpdmVyLCByZWNlaXZlci5uYW1lKS51bmlxdWUoKZIBBAgBEApCDgoMX2Rlc2NyaXB0aW9uYgZwcm90bzM\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_transceiver]);\n\n/**\n * Exchange represents a communication setup involving both transmitters and receivers.\n *\n * @generated from message mochabugapis.adapt.graph.Exchange\n */\nexport type Exchange = Message<\"mochabugapis.adapt.graph.Exchange\"> & {\n /**\n * Identifier for the exchange, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the exchange, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * Outputs involved in the exchange, limited to 10 unique transmitters.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver transmitters = 3;\n */\n transmitters: Transceiver[];\n\n /**\n * Inputs involved in the exchange, requiring between 1 and 10 unique receivers.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver receivers = 4;\n */\n receivers: Transceiver[];\n};\n\n/**\n * Exchange represents a communication setup involving both transmitters and receivers.\n *\n * @generated from message mochabugapis.adapt.graph.Exchange\n */\nexport type ExchangeJson = {\n /**\n * Identifier for the exchange, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the exchange, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * Outputs involved in the exchange, limited to 10 unique transmitters.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver transmitters = 3;\n */\n transmitters?: TransceiverJson[];\n\n /**\n * Inputs involved in the exchange, requiring between 1 and 10 unique receivers.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transceiver receivers = 4;\n */\n receivers?: TransceiverJson[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Exchange.\n * Use `create(ExchangeSchema)` to create a new message.\n */\nexport const ExchangeSchema: GenMessage<Exchange, {jsonType: ExchangeJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_exchange, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/transceiver.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalDescriptor, SignalDescriptorJson } from \"./signal_descriptor_pb\";\nimport { file_mochabugapis_adapt_graph_signal_descriptor } from \"./signal_descriptor_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/transceiver.proto.\n */\nexport const file_mochabugapis_adapt_graph_transceiver: GenFile = /*@__PURE__*/\n fileDesc(\"Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdHJhbnNjZWl2ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLMAgoLVHJhbnNjZWl2ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKtAQoHc2lnbmFscxgDIAMoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEZXNjcmlwdG9yQnC6SG26AWQKFHNpZ25hbHNfdW5pcXVlX25hbWVzEiRFYWNoIHNpZ25hbCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aJnRoaXMubWFwKHNpZ25hbCwgc2lnbmFsLm5hbWUpLnVuaXF1ZSgpkgEDEIAEEhYKCXN0cmVhbWluZxgEIAEoCEgBiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfc3RyZWFtaW5nYgZwcm90bzM\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_descriptor]);\n\n/**\n * Transceiver is a dual-purpose entity capable of both emitting and receiving signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transceiver\n */\nexport type Transceiver = Message<\"mochabugapis.adapt.graph.Transceiver\"> & {\n /**\n * Identifier for the transceiver, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the transceiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transceiver handles. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n\n /**\n * Wheter or not the transceiver is a streaming transceiver.\n *\n * @generated from field: optional bool streaming = 4;\n */\n streaming?: boolean;\n};\n\n/**\n * Transceiver is a dual-purpose entity capable of both emitting and receiving signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transceiver\n */\nexport type TransceiverJson = {\n /**\n * Identifier for the transceiver, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the transceiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transceiver handles. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals?: SignalDescriptorJson[];\n\n /**\n * Wheter or not the transceiver is a streaming transceiver.\n *\n * @generated from field: optional bool streaming = 4;\n */\n streaming?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Transceiver.\n * Use `create(TransceiverSchema)` to create a new message.\n */\nexport const TransceiverSchema: GenMessage<Transceiver, {jsonType: TransceiverJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_transceiver, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_descriptor.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalFormat, SignalFormatJson } from \"./signal_format_pb\";\nimport { file_mochabugapis_adapt_graph_signal_format } from \"./signal_format_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_descriptor.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_descriptor: GenFile = /*@__PURE__*/\n fileDesc(\"CjBtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2Rlc2NyaXB0b3IucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKMAgoQU2lnbmFsRGVzY3JpcHRvchIzCgRuYW1lGAEgASgJQiW6SCJyIBABGDIyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhwKBWxhYmVsGAIgASgJQgi6SAVyAxj6AUgAiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxjoB0gBiAEBEhUKCG9wdGlvbmFsGAQgASgISAKIAQESQwoHZm9ybWF0cxgFIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxGb3JtYXRCCrpIB5IBBAgBEDJCCAoGX2xhYmVsQg4KDF9kZXNjcmlwdGlvbkILCglfb3B0aW9uYWxiBnByb3RvMw\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_format]);\n\n/**\n * SignalDescriptor defines the complete specification of a signal, including its identity\n * and data format, without containing the actual signal data.\n *\n * A signal descriptor represents what a signal IS - its name, documentation, and the\n * single, specific format it produces. This is distinct from SignalBinding, which\n * represents what formats a binding point ACCEPTS.\n *\n * @generated from message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport type SignalDescriptor = Message<\"mochabugapis.adapt.graph.SignalDescriptor\"> & {\n /**\n * Identifier for the signal, following ECMAScript identifier naming conventions.\n * Must be a valid JavaScript/TypeScript identifier to ensure compatibility with\n * code generation and scripting environments.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"temperature\", \"user_id\", \"$internal\", \"_privateSignal\"\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Human-readable label for the signal, suitable for display in user interfaces.\n * Should be brief and descriptive.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Room Temperature\", \"User ID\", \"Processing Status\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the signal's purpose, behavior, and usage.\n * Should provide context for developers and users.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the signal represents\n * - When it's emitted\n * - Expected value ranges or formats\n * - Usage examples or constraints\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this signal must be provided.\n *\n * When false or unset: Signal is required and must be present\n * When true: Signal is optional and may be omitted\n *\n * Optional signals provide flexibility in graph construction, allowing\n * vertices to function with or without certain inputs.\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats that this signal produces. The signal will produce any signal whose\n * format matches at least one entry in this list.\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly complicated signals and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 5;\n */\n formats: SignalFormat[];\n};\n\n/**\n * SignalDescriptor defines the complete specification of a signal, including its identity\n * and data format, without containing the actual signal data.\n *\n * A signal descriptor represents what a signal IS - its name, documentation, and the\n * single, specific format it produces. This is distinct from SignalBinding, which\n * represents what formats a binding point ACCEPTS.\n *\n * @generated from message mochabugapis.adapt.graph.SignalDescriptor\n */\nexport type SignalDescriptorJson = {\n /**\n * Identifier for the signal, following ECMAScript identifier naming conventions.\n * Must be a valid JavaScript/TypeScript identifier to ensure compatibility with\n * code generation and scripting environments.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"temperature\", \"user_id\", \"$internal\", \"_privateSignal\"\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Human-readable label for the signal, suitable for display in user interfaces.\n * Should be brief and descriptive.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Room Temperature\", \"User ID\", \"Processing Status\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the signal's purpose, behavior, and usage.\n * Should provide context for developers and users.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the signal represents\n * - When it's emitted\n * - Expected value ranges or formats\n * - Usage examples or constraints\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this signal must be provided.\n *\n * When false or unset: Signal is required and must be present\n * When true: Signal is optional and may be omitted\n *\n * Optional signals provide flexibility in graph construction, allowing\n * vertices to function with or without certain inputs.\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats that this signal produces. The signal will produce any signal whose\n * format matches at least one entry in this list.\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly complicated signals and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 5;\n */\n formats?: SignalFormatJson[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalDescriptor.\n * Use `create(SignalDescriptorSchema)` to create a new message.\n */\nexport const SignalDescriptorSchema: GenMessage<SignalDescriptor, {jsonType: SignalDescriptorJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_descriptor, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/receiver.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalBinding, SignalBindingJson } from \"./signal_binding_pb\";\nimport { file_mochabugapis_adapt_graph_signal_binding } from \"./signal_binding_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/receiver.proto.\n */\nexport const file_mochabugapis_adapt_graph_receiver: GenFile = /*@__PURE__*/\n fileDesc(\"Cidtb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvcmVjZWl2ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKlAgoIUmVjZWl2ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKvAQoIYmluZGluZ3MYAyADKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsQmluZGluZ0J0ukhxugFoChViaW5kaW5nc191bmlxdWVfbmFtZXMSJUVhY2ggYmluZGluZyBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aKHRoaXMubWFwKGJpbmRpbmcsIGJpbmRpbmcubmFtZSkudW5pcXVlKCmSAQMQgARCDgoMX2Rlc2NyaXB0aW9uYgZwcm90bzM\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_binding]);\n\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Receiver\n */\nexport type Receiver = Message<\"mochabugapis.adapt.graph.Receiver\"> & {\n /**\n * Identifier for the receiver, conforming to the ECMA naming pattern\n * and limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the receiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the receiver listens for. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalBinding bindings = 3;\n */\n bindings: SignalBinding[];\n};\n\n/**\n * Receiver represents an input point for a vertex, which can bind\n * to multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Receiver\n */\nexport type ReceiverJson = {\n /**\n * Identifier for the receiver, conforming to the ECMA naming pattern\n * and limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the receiver's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the receiver listens for. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalBinding bindings = 3;\n */\n bindings?: SignalBindingJson[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Receiver.\n * Use `create(ReceiverSchema)` to create a new message.\n */\nexport const ReceiverSchema: GenMessage<Receiver, {jsonType: ReceiverJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_receiver, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/signal_binding.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalData, SignalDataJson } from \"./signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"./signal_data_pb\";\nimport type { SignalFormat, SignalFormatJson } from \"./signal_format_pb\";\nimport { file_mochabugapis_adapt_graph_signal_format } from \"./signal_format_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/signal_binding.proto.\n */\nexport const file_mochabugapis_adapt_graph_signal_binding: GenFile = /*@__PURE__*/\n fileDesc(\"Ci1tb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvc2lnbmFsX2JpbmRpbmcucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCKWBgoNU2lnbmFsQmluZGluZxIzCgRuYW1lGAEgASgJQiW6SCJyIBABGDIyGl5bXyRhLXpBLVpdW18kYS16QS1aMC05XSokEhwKBWxhYmVsGAIgASgJQgi6SAVyAxj6AUgBiAEBEiIKC2Rlc2NyaXB0aW9uGAMgASgJQgi6SAVyAxjoB0gCiAEBEhUKCG9wdGlvbmFsGAQgASgISAOIAQESQwoHYWNjZXB0cxgFIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxGb3JtYXRCCrpIB5IBBAgBEDISXgoJcmVmZXJlbmNlGAYgASgJQkm6SEZyRBj6ATI/XlswLTlhLXpdezR9L1tfJGEtekEtWl1bXyRhLXpBLVowLTldKi9bXyRhLXpBLVpdW18kYS16QS1aMC05XSokSAAS4AEKCGNvbnN0YW50GAcgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGFCpQG6SKEBugGdAQoZY29uc3RhbnQubWF4X3BheWxvYWRfc2l6ZRJmQ29uc3RhbnQgc2lnbmFsIGRhdGEgY2Fubm90IGV4Y2VlZCA1MEtCICg1MTIwMCBieXRlcykuIEZvciBsYXJnZXIgZGF0YSwgdXNlIHNpZ25hbCByZWZlcmVuY2VzIGluc3RlYWQuGhhzaXplKHRoaXMuZGF0YSkgPD0gNTEyMDBIABJLCgVlcnJvchgIIAEoDjItLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxCaW5kaW5nLkVycm9yQgi6SAWCAQIgAEgEiAEBImYKBUVycm9yEhUKEUVSUk9SX1VOU1BFQ0lGSUVEEAASEQoNRVJST1JfVU5CT1VORBABEhgKFEVSUk9SX0lOVkFMSURfU09VUkNFEAISGQoVRVJST1JfU0NIRU1BX01JU01BVENIEANCCQoHYmluZGluZ0IICgZfbGFiZWxCDgoMX2Rlc2NyaXB0aW9uQgsKCV9vcHRpb25hbEIICgZfZXJyb3JiBnByb3RvMw\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_graph_signal_format]);\n\n/**\n * SignalBinding represents an input point for a vertex in the computation graph.\n * Unlike SignalDescriptor which describes what a signal IS (producing one specific format),\n * a binding describes what formats an input ACCEPTS (potentially accepting multiple formats).\n *\n * Bindings enable flexible graph construction by allowing vertices to accept data in\n * various compatible formats. For example, a text display component might accept strings,\n * numbers, dates, and booleans, while an image viewer might accept image/* MIME types.\n *\n * The binding can be connected to a signal reference or assigned a constant value.\n * Runtime validation ensures the bound signal's format matches one of the accepted formats.\n *\n * @generated from message mochabugapis.adapt.graph.SignalBinding\n */\nexport type SignalBinding = Message<\"mochabugapis.adapt.graph.SignalBinding\"> & {\n /**\n * Identifier for this binding point, following ECMAScript identifier conventions.\n * Must be unique within the vertex's binding collection.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"inputText\", \"image_data\", \"$config\", \"_internalParam\"\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Human-readable label for the binding, suitable for display in user interfaces.\n * Describes what this input represents in the context of the vertex.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Text to Display\", \"Source Image\", \"Configuration Object\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the binding's purpose and accepted data.\n * Should document what the vertex does with this input and any constraints.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the binding represents in the vertex's operation\n * - How the data is used or transformed\n * - Constraints on values or formats\n * - Examples of valid inputs\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this binding must be connected.\n *\n * When false or unset: Binding is required and must be connected\n * When true: Binding is optional and may be left unbound\n *\n * Optional bindings provide flexibility, allowing vertices to function\n * with or without certain inputs (e.g., optional configuration parameters).\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats this binding accepts. The binding will accept any signal whose\n * format matches at least one entry in this list.\n *\n * Format matching rules:\n * - JTD schemas: Structural compatibility according to JTD specification\n * - MIME types (exact): Exact string match (case-insensitive)\n * - MIME types (wildcard): Pattern matching with * wildcards\n * - \"image/*\" matches \"image/png\", \"image/jpeg\", \"image/webp\", etc.\n * - \"text/*\" matches \"text/plain\", \"text/html\", \"text/csv\", etc.\n * - \"application/*\" matches any application type\n *\n * Common patterns:\n *\n * Example 1: Text display (accepts primitive types for display as text)\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float32\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * Example 2: Image viewer (accepts displayable image formats)\n * accepts = [\n * { mime_type: \"image/*\" } // Accepts any image type\n * ]\n *\n * Example 3: Document viewer (accepts specific document types)\n * accepts = [\n * { mime_type: \"application/pdf\" },\n * { mime_type: \"text/html\" },\n * { mime_type: \"text/plain\" }\n * ]\n *\n * Example 4: Data processor (accepts structured data)\n * accepts = [\n * { jtd_schema: { elements: { type: \"string\" } } }, // Array of strings\n * { jtd_schema: { properties: { id: { type: \"string\" } } } } // Object with id\n * ]\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly permissive bindings and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat accepts = 5;\n */\n accepts: SignalFormat[];\n\n /**\n * The actual binding - either a reference to another signal or a constant value.\n * Not required if the binding is marked as optional.\n *\n * When required (optional = false):\n * - Exactly one of 'reference' or 'constant' must be set\n * - If neither is set, ERROR_UNBOUND will be raised\n *\n * When optional (optional = true):\n * - May be unset (neither reference nor constant)\n * - Vertex must handle the unbound case gracefully\n *\n * @generated from oneof mochabugapis.adapt.graph.SignalBinding.binding\n */\n binding: {\n /**\n * Reference to another signal in the graph.\n *\n * Format: <vertex_id>/<transmitter_name>/<signal_name>\n * - vertex_id: 4-character alphanumeric identifier (lowercase)\n * - transmitter_name: ECMAScript identifier for the output transmitter\n * - signal_name: ECMAScript identifier for the specific signal\n *\n * Examples:\n * - \"a1b2/output/temperature\"\n * - \"xyz9/results/processedData\"\n * - \"0123/$internal/_debug\"\n *\n * The referenced signal's format must match one of the accepted formats.\n * Validation occurs at graph construction time.\n *\n * @generated from field: string reference = 6;\n */\n value: string;\n case: \"reference\";\n } | {\n /**\n * Constant value to bind to this input.\n * The constant must be serialized in a format matching one of the accepted formats.\n *\n * For JTD schemas:\n * - Value must be JSON-serialized and encoded as bytes\n * - Must validate against at least one accepted JTD schema\n *\n * For MIME types:\n * - Value must be in the binary format specified by the MIME type\n * - Must match at least one accepted MIME type (considering wildcards)\n *\n * Validation occurs at graph construction time.\n *\n * @generated from field: mochabugapis.adapt.graph.SignalData constant = 7;\n */\n value: SignalData;\n case: \"constant\";\n } | { case: undefined; value?: undefined };\n\n /**\n * Error state of this binding, if any.\n * Set by the graph validation system when issues are detected.\n * Should not be set to ERROR_UNSPECIFIED (value 0).\n *\n * When unset: Binding is valid\n * When set: Binding has the specified error and requires correction\n *\n * Applications should check this field and provide appropriate user feedback\n * for bindings in error states.\n *\n * @generated from field: optional mochabugapis.adapt.graph.SignalBinding.Error error = 8;\n */\n error?: SignalBinding_Error;\n};\n\n/**\n * SignalBinding represents an input point for a vertex in the computation graph.\n * Unlike SignalDescriptor which describes what a signal IS (producing one specific format),\n * a binding describes what formats an input ACCEPTS (potentially accepting multiple formats).\n *\n * Bindings enable flexible graph construction by allowing vertices to accept data in\n * various compatible formats. For example, a text display component might accept strings,\n * numbers, dates, and booleans, while an image viewer might accept image/* MIME types.\n *\n * The binding can be connected to a signal reference or assigned a constant value.\n * Runtime validation ensures the bound signal's format matches one of the accepted formats.\n *\n * @generated from message mochabugapis.adapt.graph.SignalBinding\n */\nexport type SignalBindingJson = {\n /**\n * Identifier for this binding point, following ECMAScript identifier conventions.\n * Must be unique within the vertex's binding collection.\n *\n * Pattern: Must start with letter, $, or _, followed by letters, digits, $, or _\n * Length: 1-50 characters\n *\n * Examples: \"inputText\", \"image_data\", \"$config\", \"_internalParam\"\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Human-readable label for the binding, suitable for display in user interfaces.\n * Describes what this input represents in the context of the vertex.\n *\n * Length: Up to 250 characters\n *\n * Examples: \"Text to Display\", \"Source Image\", \"Configuration Object\"\n *\n * @generated from field: optional string label = 2;\n */\n label?: string;\n\n /**\n * Detailed description of the binding's purpose and accepted data.\n * Should document what the vertex does with this input and any constraints.\n *\n * Length: Up to 1000 characters\n *\n * May include:\n * - What the binding represents in the vertex's operation\n * - How the data is used or transformed\n * - Constraints on values or formats\n * - Examples of valid inputs\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * Indicates whether this binding must be connected.\n *\n * When false or unset: Binding is required and must be connected\n * When true: Binding is optional and may be left unbound\n *\n * Optional bindings provide flexibility, allowing vertices to function\n * with or without certain inputs (e.g., optional configuration parameters).\n *\n * @generated from field: optional bool optional = 4;\n */\n optional?: boolean;\n\n /**\n * List of formats this binding accepts. The binding will accept any signal whose\n * format matches at least one entry in this list.\n *\n * Format matching rules:\n * - JTD schemas: Structural compatibility according to JTD specification\n * - MIME types (exact): Exact string match (case-insensitive)\n * - MIME types (wildcard): Pattern matching with * wildcards\n * - \"image/*\" matches \"image/png\", \"image/jpeg\", \"image/webp\", etc.\n * - \"text/*\" matches \"text/plain\", \"text/html\", \"text/csv\", etc.\n * - \"application/*\" matches any application type\n *\n * Common patterns:\n *\n * Example 1: Text display (accepts primitive types for display as text)\n * accepts = [\n * { jtd_schema: { type: \"string\" } },\n * { jtd_schema: { type: \"float32\" } },\n * { jtd_schema: { type: \"float64\" } },\n * { jtd_schema: { type: \"int32\" } },\n * { jtd_schema: { type: \"boolean\" } },\n * { jtd_schema: { type: \"timestamp\" } }\n * ]\n *\n * Example 2: Image viewer (accepts displayable image formats)\n * accepts = [\n * { mime_type: \"image/*\" } // Accepts any image type\n * ]\n *\n * Example 3: Document viewer (accepts specific document types)\n * accepts = [\n * { mime_type: \"application/pdf\" },\n * { mime_type: \"text/html\" },\n * { mime_type: \"text/plain\" }\n * ]\n *\n * Example 4: Data processor (accepts structured data)\n * accepts = [\n * { jtd_schema: { elements: { type: \"string\" } } }, // Array of strings\n * { jtd_schema: { properties: { id: { type: \"string\" } } } } // Object with id\n * ]\n *\n * Validation: At least one format must be specified. Maximum 50 formats to prevent\n * overly permissive bindings and ensure reasonable validation performance.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat accepts = 5;\n */\n accepts?: SignalFormatJson[];\n\n /**\n * Reference to another signal in the graph.\n *\n * Format: <vertex_id>/<transmitter_name>/<signal_name>\n * - vertex_id: 4-character alphanumeric identifier (lowercase)\n * - transmitter_name: ECMAScript identifier for the output transmitter\n * - signal_name: ECMAScript identifier for the specific signal\n *\n * Examples:\n * - \"a1b2/output/temperature\"\n * - \"xyz9/results/processedData\"\n * - \"0123/$internal/_debug\"\n *\n * The referenced signal's format must match one of the accepted formats.\n * Validation occurs at graph construction time.\n *\n * @generated from field: string reference = 6;\n */\n reference?: string;\n\n /**\n * Constant value to bind to this input.\n * The constant must be serialized in a format matching one of the accepted formats.\n *\n * For JTD schemas:\n * - Value must be JSON-serialized and encoded as bytes\n * - Must validate against at least one accepted JTD schema\n *\n * For MIME types:\n * - Value must be in the binary format specified by the MIME type\n * - Must match at least one accepted MIME type (considering wildcards)\n *\n * Validation occurs at graph construction time.\n *\n * @generated from field: mochabugapis.adapt.graph.SignalData constant = 7;\n */\n constant?: SignalDataJson;\n\n /**\n * Error state of this binding, if any.\n * Set by the graph validation system when issues are detected.\n * Should not be set to ERROR_UNSPECIFIED (value 0).\n *\n * When unset: Binding is valid\n * When set: Binding has the specified error and requires correction\n *\n * Applications should check this field and provide appropriate user feedback\n * for bindings in error states.\n *\n * @generated from field: optional mochabugapis.adapt.graph.SignalBinding.Error error = 8;\n */\n error?: SignalBinding_ErrorJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.SignalBinding.\n * Use `create(SignalBindingSchema)` to create a new message.\n */\nexport const SignalBindingSchema: GenMessage<SignalBinding, {jsonType: SignalBindingJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_signal_binding, 0);\n\n/**\n * Error codes that can occur during binding validation or resolution.\n * These errors are typically set by the graph validation system.\n *\n * @generated from enum mochabugapis.adapt.graph.SignalBinding.Error\n */\nexport enum SignalBinding_Error {\n /**\n * No error specified. This value should never be explicitly set as it indicates\n * the absence of an error. The error field should be unset for valid bindings.\n *\n * @generated from enum value: ERROR_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The binding is unbound (no reference or constant provided) despite being required.\n * This occurs when:\n * - The binding is not marked as optional\n * - Neither 'reference' nor 'constant' is set in the binding oneof\n *\n * Resolution: Provide either a signal reference or a constant value.\n *\n * @generated from enum value: ERROR_UNBOUND = 1;\n */\n UNBOUND = 1,\n\n /**\n * The referenced signal source does not exist in the graph.\n * This occurs when:\n * - The reference points to a non-existent vertex ID\n * - The transmitter name doesn't exist on the referenced vertex\n * - The signal name doesn't exist on the specified transmitter\n *\n * Resolution: Verify the signal reference path and ensure the source vertex,\n * transmitter, and signal all exist.\n *\n * @generated from enum value: ERROR_INVALID_SOURCE = 2;\n */\n INVALID_SOURCE = 2,\n\n /**\n * The signal format doesn't match any of the accepted formats.\n * This occurs when:\n * - The source signal's format (from SignalDescriptor) doesn't match any\n * format in the 'accepts' list\n * - JTD schema validation fails\n * - MIME type mismatch (including wildcard matching failures)\n *\n * Resolution: Either change the binding to accept the source signal's format,\n * or use a different signal source with a compatible format.\n *\n * @generated from enum value: ERROR_SCHEMA_MISMATCH = 3;\n */\n SCHEMA_MISMATCH = 3,\n}\n\n/**\n * Error codes that can occur during binding validation or resolution.\n * These errors are typically set by the graph validation system.\n *\n * @generated from enum mochabugapis.adapt.graph.SignalBinding.Error\n */\nexport type SignalBinding_ErrorJson = \"ERROR_UNSPECIFIED\" | \"ERROR_UNBOUND\" | \"ERROR_INVALID_SOURCE\" | \"ERROR_SCHEMA_MISMATCH\";\n\n/**\n * Describes the enum mochabugapis.adapt.graph.SignalBinding.Error.\n */\nexport const SignalBinding_ErrorSchema: GenEnum<SignalBinding_Error, SignalBinding_ErrorJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_graph_signal_binding, 0, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/graph/transmitter.proto (package mochabugapis.adapt.graph, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../buf/validate/validate_pb\";\nimport type { SignalDescriptor, SignalDescriptorJson } from \"./signal_descriptor_pb\";\nimport { file_mochabugapis_adapt_graph_signal_descriptor } from \"./signal_descriptor_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/graph/transmitter.proto.\n */\nexport const file_mochabugapis_adapt_graph_transmitter: GenFile = /*@__PURE__*/\n fileDesc(\"Ciptb2NoYWJ1Z2FwaXMvYWRhcHQvZ3JhcGgvdHJhbnNtaXR0ZXIucHJvdG8SGG1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaCLCAwoLVHJhbnNtaXR0ZXISMwoEbmFtZRgBIAEoCUIlukgiciAQARgyMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBIiCgtkZXNjcmlwdGlvbhgCIAEoCUIIukgFcgMY+gFIAIgBARKtAQoHc2lnbmFscxgDIAMoCzIqLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEZXNjcmlwdG9yQnC6SG26AWQKFHNpZ25hbHNfdW5pcXVlX25hbWVzEiRFYWNoIHNpZ25hbCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZS4aJnRoaXMubWFwKHNpZ25hbCwgc2lnbmFsLm5hbWUpLnVuaXF1ZSgpkgEDEIAEEj0KBG1vZGUYBCABKA4yKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguVHJhbnNtaXR0ZXIuTW9kZUgBiAEBIlIKBE1vZGUSFAoQTU9ERV9VTlNQRUNJRklFRBAAEhEKDU1PREVfU1RBTkRBUkQQARIPCgtNT0RFX1NUUkVBTRACEhAKDE1PREVfRkFJTFVSRRADQg4KDF9kZXNjcmlwdGlvbkIHCgVfbW9kZWIGcHJvdG8z\", [file_buf_validate_validate, file_mochabugapis_adapt_graph_signal_descriptor]);\n\n/**\n * Transmitter represents an output point for a vertex, emitting multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transmitter\n */\nexport type Transmitter = Message<\"mochabugapis.adapt.graph.Transmitter\"> & {\n /**\n * Identifier for the transmitter, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * Optional descriptive text for the transmitter's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transmitter can emit. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals: SignalDescriptor[];\n\n /**\n * An optional mode for the transmitter, indicating its operational context.\n * If not set, it defaults to the standard mode\n *\n * @generated from field: optional mochabugapis.adapt.graph.Transmitter.Mode mode = 4;\n */\n mode?: Transmitter_Mode;\n};\n\n/**\n * Transmitter represents an output point for a vertex, emitting multiple signals.\n *\n * @generated from message mochabugapis.adapt.graph.Transmitter\n */\nexport type TransmitterJson = {\n /**\n * Identifier for the transmitter, following the ECMA naming pattern, limited to 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * Optional descriptive text for the transmitter's purpose, up to 250 characters.\n *\n * @generated from field: optional string description = 2;\n */\n description?: string;\n\n /**\n * List of signals the transmitter can emit. Can contain up to 512 unique signals.\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalDescriptor signals = 3;\n */\n signals?: SignalDescriptorJson[];\n\n /**\n * An optional mode for the transmitter, indicating its operational context.\n * If not set, it defaults to the standard mode\n *\n * @generated from field: optional mochabugapis.adapt.graph.Transmitter.Mode mode = 4;\n */\n mode?: Transmitter_ModeJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.graph.Transmitter.\n * Use `create(TransmitterSchema)` to create a new message.\n */\nexport const TransmitterSchema: GenMessage<Transmitter, {jsonType: TransmitterJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_graph_transmitter, 0);\n\n/**\n * The type of the transmitter.\n *\n * @generated from enum mochabugapis.adapt.graph.Transmitter.Mode\n */\nexport enum Transmitter_Mode {\n /**\n * Default value indicating the mode is not explicitly set.\n *\n * @generated from enum value: MODE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * Transmitter is transmitting with the standard mode. I.e. a single transmission\n *\n * @generated from enum value: MODE_STANDARD = 1;\n */\n STANDARD = 1,\n\n /**\n * Transmitter is transmitter with stream. I.e. multiple transmissions\n *\n * @generated from enum value: MODE_STREAM = 2;\n */\n STREAM = 2,\n\n /**\n * Transmitter is transmitting a failure. I.e. a single transmission with a failure flag\n *\n * @generated from enum value: MODE_FAILURE = 3;\n */\n FAILURE = 3,\n}\n\n/**\n * The type of the transmitter.\n *\n * @generated from enum mochabugapis.adapt.graph.Transmitter.Mode\n */\nexport type Transmitter_ModeJson = \"MODE_UNSPECIFIED\" | \"MODE_STANDARD\" | \"MODE_STREAM\" | \"MODE_FAILURE\";\n\n/**\n * Describes the enum mochabugapis.adapt.graph.Transmitter.Mode.\n */\nexport const Transmitter_ModeSchema: GenEnum<Transmitter_Mode, Transmitter_ModeJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_graph_transmitter, 0, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/runtime/v1/runtime.proto (package mochabugapis.adapt.runtime.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../../buf/validate/validate_pb\";\nimport type { FieldMask, FieldMaskJson, Timestamp, TimestampJson, Value, ValueJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_field_mask, file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Status, StatusJson } from \"../../automations/v1/automations_pb\";\nimport { file_mochabugapis_adapt_automations_v1_automations } from \"../../automations/v1/automations_pb\";\nimport type { SignalData, SignalDataJson } from \"../../graph/signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"../../graph/signal_data_pb\";\nimport type { SignalFormat, SignalFormatJson } from \"../../graph/signal_format_pb\";\nimport { file_mochabugapis_adapt_graph_signal_format } from \"../../graph/signal_format_pb\";\nimport type { Transmitter, TransmitterJson } from \"../../graph/transmitter_pb\";\nimport { file_mochabugapis_adapt_graph_transmitter } from \"../../graph/transmitter_pb\";\nimport type { VertexMetadata, VertexMetadataJson } from \"../../graph/vertex_metadata_pb\";\nimport { file_mochabugapis_adapt_graph_vertex_metadata } from \"../../graph/vertex_metadata_pb\";\nimport type { ConditionalWriteOperation, ConditionalWriteOperationJson, GetValue, GetValueJson, SelectOp, SelectOpJson, ValueMetadata, ValueMetadataJson, WriteOperation, WriteOperationJson } from \"./store_pb\";\nimport { file_mochabugapis_adapt_runtime_v1_store } from \"./store_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/runtime/v1/runtime.proto.\n */\nexport const file_mochabugapis_adapt_runtime_v1_runtime: GenFile = /*@__PURE__*/\n fileDesc(\"Cittb2NoYWJ1Z2FwaXMvYWRhcHQvcnVudGltZS92MS9ydW50aW1lLnByb3RvEh1tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MSK+AQolRXhlY3V0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVxdWVzdBJOCgpvcGVyYXRpb25zGAEgAygLMi0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuV3JpdGVPcGVyYXRpb25CC7pICJIBBQgBEPQDEkUKCW5hbWVzcGFjZRgCIAEoDjIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLk5hbWVzcGFjZUIIukgFggECIAAi7gEKJkV4ZWN1dG9yU2VydmljZUJhdGNoV3JpdGVTdG9yZVJlc3BvbnNlEmUKCG1ldGFkYXRhGAEgAygLMlMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVzcG9uc2UuTWV0YWRhdGFFbnRyeRpdCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRI7CgV2YWx1ZRgCIAEoCzIsLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlZhbHVlTWV0YWRhdGE6AjgBIrYBCiBFeGVjdXRvclNlcnZpY2VXcml0ZVN0b3JlUmVxdWVzdBJLCglvcGVyYXRpb24YASABKAsyOC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25kaXRpb25hbFdyaXRlT3BlcmF0aW9uEkUKCW5hbWVzcGFjZRgCIAEoDjIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLk5hbWVzcGFjZUIIukgFggECIAAidQohRXhlY3V0b3JTZXJ2aWNlV3JpdGVTdG9yZVJlc3BvbnNlEkMKCG1ldGFkYXRhGAEgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuVmFsdWVNZXRhZGF0YUgAiAEBQgsKCV9tZXRhZGF0YSKPAQokRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXF1ZXN0EiAKBGtleXMYASADKAlCErpID5IBDAgBEJBOIgVyAxiAIBJFCgluYW1lc3BhY2UYAiABKA4yKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5OYW1lc3BhY2VCCLpIBYIBAiAAIt4BCiVFeGVjdXRvclNlcnZpY2VCYXRjaFJlYWRTdG9yZVJlc3BvbnNlEl4KBWl0ZW1zGAEgAygLMk8ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXNwb25zZS5JdGVtc0VudHJ5GlUKCkl0ZW1zRW50cnkSCwoDa2V5GAEgASgJEjYKBXZhbHVlGAIgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuR2V0VmFsdWU6AjgBIq4BCiFFeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlcXVlc3QSQgoJb3BlcmF0aW9uGAEgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuU2VsZWN0T3BCBrpIA8gBARJFCgluYW1lc3BhY2UYAiABKA4yKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5OYW1lc3BhY2VCCLpIBYIBAiAAIoACCiJFeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlc3BvbnNlElsKBWl0ZW1zGAEgAygLMkwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlU2VsZWN0U3RvcmVSZXNwb25zZS5JdGVtc0VudHJ5EhcKCm5leHRfdG9rZW4YAiABKAlIAIgBARpVCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRI2CgV2YWx1ZRgCIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkdldFZhbHVlOgI4AUINCgtfbmV4dF90b2tlbiI2Ch5DYW5jZWxFeGNoYW5nZU9wZXJhdGlvblJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIiEKH0NhbmNlbEV4Y2hhbmdlT3BlcmF0aW9uUmVzcG9uc2UiMwobR2V0RXhjaGFuZ2VPcGVyYXRpb25SZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJeChxHZXRFeGNoYW5nZU9wZXJhdGlvblJlc3BvbnNlEj4KBGl0ZW0YASABKAsyMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGNoYW5nZU9wZXJhdGlvbiL3AgoXRGlzcGF0Y2hFeGNoYW5nZVJlcXVlc3QSMwoEbmFtZRgBIAEoCUIlukgiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBI8CghyZWNlaXZlchgCIAEoCUIlukgiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJEgAiAEBEoUBCgdzaWduYWxzGAMgAygLMkMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRGlzcGF0Y2hFeGNoYW5nZVJlcXVlc3QuU2lnbmFsc0VudHJ5Qi+6SCyaASkIABAyIiNyIRABGIAEMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBpUCgxTaWduYWxzRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGE6AjgBQgsKCV9yZWNlaXZlciJfChhEaXNwYXRjaEV4Y2hhbmdlUmVzcG9uc2USQwoJb3BlcmF0aW9uGAEgASgLMjAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhjaGFuZ2VPcGVyYXRpb24iaAoRRXhjaGFuZ2VPcGVyYXRpb24SDAoEbmFtZRgBIAEoCRIKCgJpZBgCIAEoCRI5CgZzdGF0dXMYAyABKA4yKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhdHVzIq0CCgtTZW5kUmVxdWVzdBI9Cgt0cmFuc21pdHRlchgBIAEoCUIjukggch4YZDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiRIAIgBARJ5CgdzaWduYWxzGAIgAygLMjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuU2VuZFJlcXVlc3QuU2lnbmFsc0VudHJ5Qi+6SCyaASkIABAyIiNyIRABGIAEMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJBpUCgxTaWduYWxzRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGE6AjgBQg4KDF90cmFuc21pdHRlciIOCgxTZW5kUmVzcG9uc2UiYQocQmF0Y2hHZXRBY3RpdmVTaWduYWxzUmVxdWVzdBJBCgVuYW1lcxgBIAMoCUIyukgvkgEsCAEQ9AMYASIjciEQARiABDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiQi3QEKHUJhdGNoR2V0QWN0aXZlU2lnbmFsc1Jlc3BvbnNlElYKBWl0ZW1zGAEgAygLMkcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRBY3RpdmVTaWduYWxzUmVzcG9uc2UuSXRlbXNFbnRyeRIQCghyZWNlaXZlchgCIAEoCRpSCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRIzCgV2YWx1ZRgCIAEoCzIkLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5TaWduYWxEYXRhOgI4ASKoAQoYTGlzdEFjdGl2ZVNpZ25hbHNSZXF1ZXN0EiAKCXBhZ2Vfc2l6ZRgBIAEoBUIIukgFGgMY9ANIAIgBARIdCgZjdXJzb3IYAiABKAlCCLpIBXIDGPQDSAGIAQESHQoQb3JkZXJfZGVzY2VuZGluZxgDIAEoCEgCiAEBQgwKCl9wYWdlX3NpemVCCQoHX2N1cnNvckITChFfb3JkZXJfZGVzY2VuZGluZyKFAgoZTGlzdEFjdGl2ZVNpZ25hbHNSZXNwb25zZRJWCgdzaWduYWxzGAEgAygLMkUubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEFjdGl2ZVNpZ25hbHNSZXNwb25zZS5TaWduYWxzRW50cnkSEAoIcmVjZWl2ZXIYAiABKAkSGAoLbmV4dF9jdXJzb3IYAyABKAlIAIgBARpUCgxTaWduYWxzRW50cnkSCwoDa2V5GAEgASgJEjMKBXZhbHVlGAIgASgLMiQubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbERhdGE6AjgBQg4KDF9uZXh0X2N1cnNvciJrCiVFeGVjdXRvclNlcnZpY2VHZXRWZXJ0ZXhDb25maWdSZXF1ZXN0EjMKCmZpZWxkX21hc2sYASABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrSACIAQFCDQoLX2ZpZWxkX21hc2siqwIKJkV4ZWN1dG9yU2VydmljZUdldFZlcnRleENvbmZpZ1Jlc3BvbnNlEg4KBmNvbmZpZxgBIAEoDBI6CghtZXRhZGF0YRgCIAEoCzIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5WZXJ0ZXhNZXRhZGF0YRJ6ChNjb25maWd1cmVkX3NlcnZpY2VzGAMgAygLMl0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlR2V0VmVydGV4Q29uZmlnUmVzcG9uc2UuQ29uZmlndXJlZFNlcnZpY2VzRW50cnkaOQoXQ29uZmlndXJlZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgIOgI4ASLkAQoaTGlzdEluY29taW5nU2lnbmFsc1JlcXVlc3QSPAoIcmVjZWl2ZXIYASABKAlCJbpIInIgEAEYZDIaXltfJGEtekEtWl1bXyRhLXpBLVowLTldKiRIAIgBARI3Cgdmb3JtYXRzGAIgAygLMiYubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlNpZ25hbEZvcm1hdBIzCgpmaWVsZF9tYXNrGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0gBiAEBQgsKCV9yZWNlaXZlckINCgtfZmllbGRfbWFzayL2AQoQSW5jb21pbmdWZXJ0aWNlcxIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEjsKDHRyYW5zbWl0dGVycxgEIAMoCzIlLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5UcmFuc21pdHRlchI+Cgt2ZXJ0ZXhfdHlwZRgFIAEoDjIpLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlZlcnRleFR5cGUSFAoHbG9nb19pZBgGIAEoCUgBiAEBQg4KDF9kZXNjcmlwdGlvbkIKCghfbG9nb19pZCKJAgobTGlzdEluY29taW5nU2lnbmFsc1Jlc3BvbnNlEkEKCHZlcnRpY2VzGAEgAygLMi8ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuSW5jb21pbmdWZXJ0aWNlcxJhCgx2ZXJ0ZXhfbG9nb3MYAiADKAsySy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5MaXN0SW5jb21pbmdTaWduYWxzUmVzcG9uc2UuVmVydGV4TG9nb3NFbnRyeRIQCghyZWNlaXZlchgDIAEoCRoyChBWZXJ0ZXhMb2dvc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEixgEKKUNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXF1ZXN0Ek4KCm9wZXJhdGlvbnMYASADKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Xcml0ZU9wZXJhdGlvbkILukgIkgEFCAEQ9AMSSQoJbmFtZXNwYWNlGAIgASgOMigubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTmFtZXNwYWNlQgy6SAmCAQYgACABIAIi9gEKKkNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXNwb25zZRJpCghtZXRhZGF0YRgBIAMoCzJXLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXNwb25zZS5NZXRhZGF0YUVudHJ5Gl0KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEjsKBXZhbHVlGAIgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuVmFsdWVNZXRhZGF0YToCOAEivgEKJENvbmZpZ3VyYXRvclNlcnZpY2VXcml0ZVN0b3JlUmVxdWVzdBJLCglvcGVyYXRpb24YASABKAsyOC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25kaXRpb25hbFdyaXRlT3BlcmF0aW9uEkkKCW5hbWVzcGFjZRgCIAEoDjIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLk5hbWVzcGFjZUIMukgJggEGIAAgASACInkKJUNvbmZpZ3VyYXRvclNlcnZpY2VXcml0ZVN0b3JlUmVzcG9uc2USQwoIbWV0YWRhdGEYASABKAsyLC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5WYWx1ZU1ldGFkYXRhSACIAQFCCwoJX21ldGFkYXRhIpcBCihDb25maWd1cmF0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXF1ZXN0EiAKBGtleXMYASADKAlCErpID5IBDAgBEJBOIgVyAxiAIBJJCgluYW1lc3BhY2UYAiABKA4yKC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5OYW1lc3BhY2VCDLpICYIBBiAAIAEgAiLmAQopQ29uZmlndXJhdG9yU2VydmljZUJhdGNoUmVhZFN0b3JlUmVzcG9uc2USYgoFaXRlbXMYASADKAsyUy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXNwb25zZS5JdGVtc0VudHJ5GlUKCkl0ZW1zRW50cnkSCwoDa2V5GAEgASgJEjYKBXZhbHVlGAIgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuR2V0VmFsdWU6AjgBIrYBCiVDb25maWd1cmF0b3JTZXJ2aWNlU2VsZWN0U3RvcmVSZXF1ZXN0EkIKCW9wZXJhdGlvbhgBIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlNlbGVjdE9wQga6SAPIAQESSQoJbmFtZXNwYWNlGAIgASgOMigubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTmFtZXNwYWNlQgy6SAmCAQYgACABIAIiiAIKJkNvbmZpZ3VyYXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlc3BvbnNlEl8KBWl0ZW1zGAEgAygLMlAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZVNlbGVjdFN0b3JlUmVzcG9uc2UuSXRlbXNFbnRyeRIXCgpuZXh0X3Rva2VuGAIgASgJSACIAQEaVQoKSXRlbXNFbnRyeRILCgNrZXkYASABKAkSNgoFdmFsdWUYAiABKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5HZXRWYWx1ZToCOAFCDQoLX25leHRfdG9rZW4ibwopQ29uZmlndXJhdG9yU2VydmljZUdldFZlcnRleENvbmZpZ1JlcXVlc3QSMwoKZmllbGRfbWFzaxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2tIAIgBAUINCgtfZmllbGRfbWFzayKzAgoqQ29uZmlndXJhdG9yU2VydmljZUdldFZlcnRleENvbmZpZ1Jlc3BvbnNlEg4KBmNvbmZpZxgBIAEoDBI6CghtZXRhZGF0YRgCIAEoCzIoLm1vY2hhYnVnYXBpcy5hZGFwdC5ncmFwaC5WZXJ0ZXhNZXRhZGF0YRJ+ChNjb25maWd1cmVkX3NlcnZpY2VzGAMgAygLMmEubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZUdldFZlcnRleENvbmZpZ1Jlc3BvbnNlLkNvbmZpZ3VyZWRTZXJ2aWNlc0VudHJ5GjkKF0NvbmZpZ3VyZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCDoCOAEitQIKF1Bvc3RWZXJ0ZXhDb25maWdSZXF1ZXN0EhMKBmNvbmZpZxgBIAEoDEgAiAEBEj8KCG1ldGFkYXRhGAIgASgLMigubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlZlcnRleE1ldGFkYXRhSAGIAQESHgoRb3ZlcnJpZGVfYmluZGluZ3MYAyABKAhIAogBATp2ukhzGnEKG2NvbmZpZ19vcl9tZXRhZGF0YV9yZXF1aXJlZBIqRWl0aGVyIGNvbmZpZyBvciBtZXRhZGF0YSBtdXN0IGJlIHByb3ZpZGVkGiZoYXModGhpcy5jb25maWcpIHx8IGhhcyh0aGlzLm1ldGFkYXRhKUIJCgdfY29uZmlnQgsKCV9tZXRhZGF0YUIUChJfb3ZlcnJpZGVfYmluZGluZ3MiVgoYUG9zdFZlcnRleENvbmZpZ1Jlc3BvbnNlEjoKCG1ldGFkYXRhGAEgASgLMigubW9jaGFidWdhcGlzLmFkYXB0LmdyYXBoLlZlcnRleE1ldGFkYXRhIhoKGEdldFN5c3RlbVNlcnZpY2VzUmVxdWVzdCLFAQoZR2V0U3lzdGVtU2VydmljZXNSZXNwb25zZRJtChNjb25maWd1cmVkX3NlcnZpY2VzGAEgAygLMlAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuR2V0U3lzdGVtU2VydmljZXNSZXNwb25zZS5Db25maWd1cmVkU2VydmljZXNFbnRyeRo5ChdDb25maWd1cmVkU2VydmljZXNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAg6AjgBIjIKEEF1dGhvcml6ZVJlcXVlc3QSHgoMYWNjZXNzX3Rva2VuGAEgASgJQgi6SAVyAxiQTiITChFBdXRob3JpemVSZXNwb25zZSKAAQoeQmF0Y2hHZXRTeXN0ZW1WYXJpYWJsZXNSZXF1ZXN0El4KBW5hbWVzGAEgAygJQk+6SEySAUkIARBkGAEiQXI/EAEYZDI5XltfJGEtekEtWl1bXyRhLXpBLVowLTldKig/OlwuW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKSokIsEBCh9CYXRjaEdldFN5c3RlbVZhcmlhYmxlc1Jlc3BvbnNlElgKBWl0ZW1zGAEgAygLMkkubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRTeXN0ZW1WYXJpYWJsZXNSZXNwb25zZS5JdGVtc0VudHJ5GkQKCkl0ZW1zRW50cnkSCwoDa2V5GAEgASgJEiUKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlOgI4ASJ+ChxCYXRjaEdldFVzZXJWYXJpYWJsZXNSZXF1ZXN0El4KBW5hbWVzGAEgAygJQk+6SEySAUkIARBkGAEiQXI/EAEYZDI5XltfJGEtekEtWl1bXyRhLXpBLVowLTldKig/OlwuW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKSokIr0BCh1CYXRjaEdldFVzZXJWYXJpYWJsZXNSZXNwb25zZRJWCgVpdGVtcxgBIAMoCzJHLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0VXNlclZhcmlhYmxlc1Jlc3BvbnNlLkl0ZW1zRW50cnkaRAoKSXRlbXNFbnRyeRILCgNrZXkYASABKAkSJQoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWU6AjgBInsKGUJhdGNoR2V0VXNlclRva2Vuc1JlcXVlc3QSXgoFbmFtZXMYASADKAlCT7pITJIBSQgBEGQYASJBcj8QARhkMjleW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKD86XC5bXyRhLXpBLVpdW18kYS16QS1aMC05XSopKiQixQEKGkJhdGNoR2V0VXNlclRva2Vuc1Jlc3BvbnNlElMKBWl0ZW1zGAEgAygLMkQubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRVc2VyVG9rZW5zUmVzcG9uc2UuSXRlbXNFbnRyeRpSCgpJdGVtc0VudHJ5EgsKA2tleRgBIAEoCRIzCgV2YWx1ZRgCIAEoCzIkLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlRva2VuOgI4ASJ9ChtCYXRjaEdldFN5c3RlbVRva2Vuc1JlcXVlc3QSXgoFbmFtZXMYASADKAlCT7pITJIBSQgBEGQYASJBcj8QARhkMjleW18kYS16QS1aXVtfJGEtekEtWjAtOV0qKD86XC5bXyRhLXpBLVpdW18kYS16QS1aMC05XSopKiQiyQEKHEJhdGNoR2V0U3lzdGVtVG9rZW5zUmVzcG9uc2USVQoFaXRlbXMYASADKAsyRi5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5CYXRjaEdldFN5c3RlbVRva2Vuc1Jlc3BvbnNlLkl0ZW1zRW50cnkaUgoKSXRlbXNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ub2tlbjoCOAEiXwoFVG9rZW4SDAoEbmFtZRgBIAEoCRINCgV0b2tlbhgCIAEoCRIMCgR0eXBlGAMgASgJEisKB2V4cGlyZXMYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wKpABCglOYW1lc3BhY2USGQoVTkFNRVNQQUNFX1VOU1BFQ0lGSUVEEAASHQoZTkFNRVNQQUNFX1ZFUlRFWF9JTlNUQU5DRRABEh0KGU5BTUVTUEFDRV9QTFVHSU5fSU5TVEFOQ0UQAhIUChBOQU1FU1BBQ0VfVkVSVEVYEAMSFAoQTkFNRVNQQUNFX1BMVUdJThAEKsEBCgpWZXJ0ZXhUeXBlEhsKF1ZFUlRFWF9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRVkVSVEVYX1RZUEVfU1RBUlQQARIWChJWRVJURVhfVFlQRV9QTFVHSU4QAhIWChJWRVJURVhfVFlQRV9PVVRQVVQQAxIYChRWRVJURVhfVFlQRV9ERUxFR0FURRAEEhcKE1ZFUlRFWF9UWVBFX0JBUlJJRVIQBRIcChhWRVJURVhfVFlQRV9FWENIQU5HRV9PVVQQBjLKDAoPRXhlY3V0b3JTZXJ2aWNlEp4BCg9HZXRWZXJ0ZXhDb25maWcSRC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VHZXRWZXJ0ZXhDb25maWdSZXF1ZXN0GkUubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlR2V0VmVydGV4Q29uZmlnUmVzcG9uc2UShgEKEUxpc3RBY3RpdmVTaWduYWxzEjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEFjdGl2ZVNpZ25hbHNSZXF1ZXN0GjgubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEFjdGl2ZVNpZ25hbHNSZXNwb25zZRKSAQoVQmF0Y2hHZXRBY3RpdmVTaWduYWxzEjsubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRBY3RpdmVTaWduYWxzUmVxdWVzdBo8Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0QWN0aXZlU2lnbmFsc1Jlc3BvbnNlEl8KBFNlbmQSKi5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5TZW5kUmVxdWVzdBorLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlNlbmRSZXNwb25zZRKDAQoQRGlzcGF0Y2hFeGNoYW5nZRI2Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkRpc3BhdGNoRXhjaGFuZ2VSZXF1ZXN0GjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRGlzcGF0Y2hFeGNoYW5nZVJlc3BvbnNlEo8BChRHZXRFeGNoYW5nZU9wZXJhdGlvbhI6Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkdldEV4Y2hhbmdlT3BlcmF0aW9uUmVxdWVzdBo7Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkdldEV4Y2hhbmdlT3BlcmF0aW9uUmVzcG9uc2USmAEKF0NhbmNlbEV4Y2hhbmdlT3BlcmF0aW9uEj0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ2FuY2VsRXhjaGFuZ2VPcGVyYXRpb25SZXF1ZXN0Gj4ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ2FuY2VsRXhjaGFuZ2VPcGVyYXRpb25SZXNwb25zZRKPAQoKV3JpdGVTdG9yZRI/Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkV4ZWN1dG9yU2VydmljZVdyaXRlU3RvcmVSZXF1ZXN0GkAubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlV3JpdGVTdG9yZVJlc3BvbnNlEp4BCg9CYXRjaFdyaXRlU3RvcmUSRC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VCYXRjaFdyaXRlU3RvcmVSZXF1ZXN0GkUubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVzcG9uc2USmwEKDkJhdGNoUmVhZFN0b3JlEkMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXF1ZXN0GkQubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhlY3V0b3JTZXJ2aWNlQmF0Y2hSZWFkU3RvcmVSZXNwb25zZRKSAQoLU2VsZWN0U3RvcmUSQC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlcXVlc3QaQS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGVjdXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlc3BvbnNlMtkIChNDb25maWd1cmF0b3JTZXJ2aWNlEqYBCg9HZXRWZXJ0ZXhDb25maWcSSC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlR2V0VmVydGV4Q29uZmlnUmVxdWVzdBpJLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VHZXRWZXJ0ZXhDb25maWdSZXNwb25zZRKDAQoQUG9zdFZlcnRleENvbmZpZxI2Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlBvc3RWZXJ0ZXhDb25maWdSZXF1ZXN0GjcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuUG9zdFZlcnRleENvbmZpZ1Jlc3BvbnNlEpcBCgpXcml0ZVN0b3JlEkMubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZVdyaXRlU3RvcmVSZXF1ZXN0GkQubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZVdyaXRlU3RvcmVSZXNwb25zZRKmAQoPQmF0Y2hXcml0ZVN0b3JlEkgubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZUJhdGNoV3JpdGVTdG9yZVJlcXVlc3QaSS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlQmF0Y2hXcml0ZVN0b3JlUmVzcG9uc2USowEKDkJhdGNoUmVhZFN0b3JlEkcubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZmlndXJhdG9yU2VydmljZUJhdGNoUmVhZFN0b3JlUmVxdWVzdBpILm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VCYXRjaFJlYWRTdG9yZVJlc3BvbnNlEpoBCgtTZWxlY3RTdG9yZRJELm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmZpZ3VyYXRvclNlcnZpY2VTZWxlY3RTdG9yZVJlcXVlc3QaRS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25maWd1cmF0b3JTZXJ2aWNlU2VsZWN0U3RvcmVSZXNwb25zZRKMAQoTTGlzdEluY29taW5nU2lnbmFscxI5Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkxpc3RJbmNvbWluZ1NpZ25hbHNSZXF1ZXN0GjoubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuTGlzdEluY29taW5nU2lnbmFsc1Jlc3BvbnNlMtYGCg1QbHVnaW5TZXJ2aWNlEm4KCUF1dGhvcml6ZRIvLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkF1dGhvcml6ZVJlcXVlc3QaMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5BdXRob3JpemVSZXNwb25zZRKGAQoRR2V0U3lzdGVtU2VydmljZXMSNy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5HZXRTeXN0ZW1TZXJ2aWNlc1JlcXVlc3QaOC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5HZXRTeXN0ZW1TZXJ2aWNlc1Jlc3BvbnNlEpgBChdCYXRjaEdldFN5c3RlbVZhcmlhYmxlcxI9Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVmFyaWFibGVzUmVxdWVzdBo+Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVmFyaWFibGVzUmVzcG9uc2USkgEKFUJhdGNoR2V0VXNlclZhcmlhYmxlcxI7Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0VXNlclZhcmlhYmxlc1JlcXVlc3QaPC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5CYXRjaEdldFVzZXJWYXJpYWJsZXNSZXNwb25zZRKJAQoSQmF0Y2hHZXRVc2VyVG9rZW5zEjgubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQmF0Y2hHZXRVc2VyVG9rZW5zUmVxdWVzdBo5Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0VXNlclRva2Vuc1Jlc3BvbnNlEo8BChRCYXRjaEdldFN5c3RlbVRva2VucxI6Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVG9rZW5zUmVxdWVzdBo7Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkJhdGNoR2V0U3lzdGVtVG9rZW5zUmVzcG9uc2ViBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_google_protobuf_struct, file_google_protobuf_timestamp, file_mochabugapis_adapt_automations_v1_automations, file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_graph_signal_format, file_mochabugapis_adapt_graph_transmitter, file_mochabugapis_adapt_graph_vertex_metadata, file_mochabugapis_adapt_runtime_v1_store]);\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest\n */\nexport type ExecutorServiceBatchWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest\"> & {\n /**\n * A batch of operations to perform in the executor store.\n * Refer to the comments on the `Namespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations: WriteOperation[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest\n */\nexport type ExecutorServiceBatchWriteStoreRequestJson = {\n /**\n * A batch of operations to perform in the executor store.\n * Refer to the comments on the `Namespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations?: WriteOperationJson[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreRequest.\n * Use `create(ExecutorServiceBatchWriteStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchWriteStoreRequestSchema: GenMessage<ExecutorServiceBatchWriteStoreRequest, {jsonType: ExecutorServiceBatchWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 0);\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse\n */\nexport type ExecutorServiceBatchWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse\"> & {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata: { [key: string]: ValueMetadata };\n};\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse\n */\nexport type ExecutorServiceBatchWriteStoreResponseJson = {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata?: { [key: string]: ValueMetadataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchWriteStoreResponse.\n * Use `create(ExecutorServiceBatchWriteStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchWriteStoreResponseSchema: GenMessage<ExecutorServiceBatchWriteStoreResponse, {jsonType: ExecutorServiceBatchWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 1);\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest\n */\nexport type ExecutorServiceWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest\"> & {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperation;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest\n */\nexport type ExecutorServiceWriteStoreRequestJson = {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperationJson;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreRequest.\n * Use `create(ExecutorServiceWriteStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceWriteStoreRequestSchema: GenMessage<ExecutorServiceWriteStoreRequest, {jsonType: ExecutorServiceWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 2);\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse\n */\nexport type ExecutorServiceWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse\"> & {\n /**\n * Metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadata;\n};\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse\n */\nexport type ExecutorServiceWriteStoreResponseJson = {\n /**\n * Metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceWriteStoreResponse.\n * Use `create(ExecutorServiceWriteStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceWriteStoreResponseSchema: GenMessage<ExecutorServiceWriteStoreResponse, {jsonType: ExecutorServiceWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 3);\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest\n */\nexport type ExecutorServiceBatchReadStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest\"> & {\n /**\n * Keys to fetch from the executor store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys: string[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to apply operations to the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest\n */\nexport type ExecutorServiceBatchReadStoreRequestJson = {\n /**\n * Keys to fetch from the executor store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys?: string[];\n\n /**\n * The namespace whee the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreRequest.\n * Use `create(ExecutorServiceBatchReadStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchReadStoreRequestSchema: GenMessage<ExecutorServiceBatchReadStoreRequest, {jsonType: ExecutorServiceBatchReadStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 4);\n\n/**\n * The response of the batch store, any keys not found are ignored\n * i.e. not present in the map\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse\n */\nexport type ExecutorServiceBatchReadStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse\"> & {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n};\n\n/**\n * The response of the batch store, any keys not found are ignored\n * i.e. not present in the map\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse\n */\nexport type ExecutorServiceBatchReadStoreResponseJson = {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceBatchReadStoreResponse.\n * Use `create(ExecutorServiceBatchReadStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceBatchReadStoreResponseSchema: GenMessage<ExecutorServiceBatchReadStoreResponse, {jsonType: ExecutorServiceBatchReadStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 5);\n\n/**\n * The request to select from the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest\n */\nexport type ExecutorServiceSelectStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest\"> & {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOp;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to select from the execution store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest\n */\nexport type ExecutorServiceSelectStoreRequestJson = {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOpJson;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreRequest.\n * Use `create(ExecutorServiceSelectStoreRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceSelectStoreRequestSchema: GenMessage<ExecutorServiceSelectStoreRequest, {jsonType: ExecutorServiceSelectStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 6);\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse\n */\nexport type ExecutorServiceSelectStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse\"> & {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse\n */\nexport type ExecutorServiceSelectStoreResponseJson = {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceSelectStoreResponse.\n * Use `create(ExecutorServiceSelectStoreResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceSelectStoreResponseSchema: GenMessage<ExecutorServiceSelectStoreResponse, {jsonType: ExecutorServiceSelectStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 7);\n\n/**\n * A request to cancel a running exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest\n */\nexport type CancelExchangeOperationRequest = Message<\"mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest\"> & {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * A request to cancel a running exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest\n */\nexport type CancelExchangeOperationRequestJson = {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CancelExchangeOperationRequest.\n * Use `create(CancelExchangeOperationRequestSchema)` to create a new message.\n */\nexport const CancelExchangeOperationRequestSchema: GenMessage<CancelExchangeOperationRequest, {jsonType: CancelExchangeOperationRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 8);\n\n/**\n * The response of cancelling the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse\n */\nexport type CancelExchangeOperationResponse = Message<\"mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse\"> & {\n};\n\n/**\n * The response of cancelling the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse\n */\nexport type CancelExchangeOperationResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CancelExchangeOperationResponse.\n * Use `create(CancelExchangeOperationResponseSchema)` to create a new message.\n */\nexport const CancelExchangeOperationResponseSchema: GenMessage<CancelExchangeOperationResponse, {jsonType: CancelExchangeOperationResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 9);\n\n/**\n * A request to check the status of an operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest\n */\nexport type GetExchangeOperationRequest = Message<\"mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest\"> & {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * A request to check the status of an operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest\n */\nexport type GetExchangeOperationRequestJson = {\n /**\n * The id of the operation\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetExchangeOperationRequest.\n * Use `create(GetExchangeOperationRequestSchema)` to create a new message.\n */\nexport const GetExchangeOperationRequestSchema: GenMessage<GetExchangeOperationRequest, {jsonType: GetExchangeOperationRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 10);\n\n/**\n * The get operation response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse\n */\nexport type GetExchangeOperationResponse = Message<\"mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse\"> & {\n /**\n * The actual operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation item = 1;\n */\n item?: ExchangeOperation;\n};\n\n/**\n * The get operation response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse\n */\nexport type GetExchangeOperationResponseJson = {\n /**\n * The actual operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation item = 1;\n */\n item?: ExchangeOperationJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetExchangeOperationResponse.\n * Use `create(GetExchangeOperationResponseSchema)` to create a new message.\n */\nexport const GetExchangeOperationResponseSchema: GenMessage<GetExchangeOperationResponse, {jsonType: GetExchangeOperationResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 11);\n\n/**\n * A request to start execute an exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeRequest\n */\nexport type DispatchExchangeRequest = Message<\"mochabugapis.adapt.runtime.v1.DispatchExchangeRequest\"> & {\n /**\n * The name of the exchange to dispatch\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * The receiver to send the signals on (on the exchange, mapps to transmitter on the subgraph)\n *\n * @generated from field: optional string receiver = 2;\n */\n receiver?: string;\n\n /**\n * The signals to send over the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * A request to start execute an exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeRequest\n */\nexport type DispatchExchangeRequestJson = {\n /**\n * The name of the exchange to dispatch\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * The receiver to send the signals on (on the exchange, mapps to transmitter on the subgraph)\n *\n * @generated from field: optional string receiver = 2;\n */\n receiver?: string;\n\n /**\n * The signals to send over the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.DispatchExchangeRequest.\n * Use `create(DispatchExchangeRequestSchema)` to create a new message.\n */\nexport const DispatchExchangeRequestSchema: GenMessage<DispatchExchangeRequest, {jsonType: DispatchExchangeRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 12);\n\n/**\n * The response of the exchange execution\n * Just like streams, this is an async operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeResponse\n */\nexport type DispatchExchangeResponse = Message<\"mochabugapis.adapt.runtime.v1.DispatchExchangeResponse\"> & {\n /**\n * The id of the operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperation;\n};\n\n/**\n * The response of the exchange execution\n * Just like streams, this is an async operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DispatchExchangeResponse\n */\nexport type DispatchExchangeResponseJson = {\n /**\n * The id of the operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperationJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.DispatchExchangeResponse.\n * Use `create(DispatchExchangeResponseSchema)` to create a new message.\n */\nexport const DispatchExchangeResponseSchema: GenMessage<DispatchExchangeResponse, {jsonType: DispatchExchangeResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 13);\n\n/**\n * A representation of an exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeOperation\n */\nexport type ExchangeOperation = Message<\"mochabugapis.adapt.runtime.v1.ExchangeOperation\"> & {\n /**\n * The name of the exchange\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * The id of the fork\n *\n * @generated from field: string id = 2;\n */\n id: string;\n\n /**\n * The status of the operation\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 3;\n */\n status: Status;\n};\n\n/**\n * A representation of an exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeOperation\n */\nexport type ExchangeOperationJson = {\n /**\n * The name of the exchange\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * The id of the fork\n *\n * @generated from field: string id = 2;\n */\n id?: string;\n\n /**\n * The status of the operation\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 3;\n */\n status?: StatusJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeOperation.\n * Use `create(ExchangeOperationSchema)` to create a new message.\n */\nexport const ExchangeOperationSchema: GenMessage<ExchangeOperation, {jsonType: ExchangeOperationJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 14);\n\n/**\n * The complete execution request message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendRequest\n */\nexport type SendRequest = Message<\"mochabugapis.adapt.runtime.v1.SendRequest\"> & {\n /**\n * The transmitter to send the signals on\n *\n * @generated from field: optional string transmitter = 1;\n */\n transmitter?: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * The complete execution request message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendRequest\n */\nexport type SendRequestJson = {\n /**\n * The transmitter to send the signals on\n *\n * @generated from field: optional string transmitter = 1;\n */\n transmitter?: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.SendRequest.\n * Use `create(SendRequestSchema)` to create a new message.\n */\nexport const SendRequestSchema: GenMessage<SendRequest, {jsonType: SendRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 15);\n\n/**\n * The complete execution response message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendResponse\n */\nexport type SendResponse = Message<\"mochabugapis.adapt.runtime.v1.SendResponse\"> & {\n};\n\n/**\n * The complete execution response message\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SendResponse\n */\nexport type SendResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.SendResponse.\n * Use `create(SendResponseSchema)` to create a new message.\n */\nexport const SendResponseSchema: GenMessage<SendResponse, {jsonType: SendResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 16);\n\n/**\n * The request to fetch multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest\n */\nexport type BatchGetActiveSignalsRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest\"> & {\n /**\n * The names of the signals to fetch\n * An empty array will result in only fetching the connected receiver\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to fetch multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest\n */\nexport type BatchGetActiveSignalsRequestJson = {\n /**\n * The names of the signals to fetch\n * An empty array will result in only fetching the connected receiver\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsRequest.\n * Use `create(BatchGetActiveSignalsRequestSchema)` to create a new message.\n */\nexport const BatchGetActiveSignalsRequestSchema: GenMessage<BatchGetActiveSignalsRequest, {jsonType: BatchGetActiveSignalsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 17);\n\n/**\n * The response of getting multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse\n */\nexport type BatchGetActiveSignalsResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse\"> & {\n /**\n * The returned items, items not found are ignored\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> items = 1;\n */\n items: { [key: string]: SignalData };\n\n /**\n * The connected receiver\n *\n * @generated from field: string receiver = 2;\n */\n receiver: string;\n};\n\n/**\n * The response of getting multiple signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse\n */\nexport type BatchGetActiveSignalsResponseJson = {\n /**\n * The returned items, items not found are ignored\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> items = 1;\n */\n items?: { [key: string]: SignalDataJson };\n\n /**\n * The connected receiver\n *\n * @generated from field: string receiver = 2;\n */\n receiver?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetActiveSignalsResponse.\n * Use `create(BatchGetActiveSignalsResponseSchema)` to create a new message.\n */\nexport const BatchGetActiveSignalsResponseSchema: GenMessage<BatchGetActiveSignalsResponse, {jsonType: BatchGetActiveSignalsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 18);\n\n/**\n * A request to fetch the signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest\n */\nexport type ListActiveSignalsRequest = Message<\"mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest\"> & {\n /**\n * The page size, defaults to 50\n *\n * @generated from field: optional int32 page_size = 1;\n */\n pageSize?: number;\n\n /**\n * The cursor where to start the listing, defaults to beginning\n * If the cursor is set, filter and order_by are ignored\n *\n * @generated from field: optional string cursor = 2;\n */\n cursor?: string;\n\n /**\n * True if you want the result in descending order\n *\n * @generated from field: optional bool order_descending = 3;\n */\n orderDescending?: boolean;\n};\n\n/**\n * A request to fetch the signals on the connected receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest\n */\nexport type ListActiveSignalsRequestJson = {\n /**\n * The page size, defaults to 50\n *\n * @generated from field: optional int32 page_size = 1;\n */\n pageSize?: number;\n\n /**\n * The cursor where to start the listing, defaults to beginning\n * If the cursor is set, filter and order_by are ignored\n *\n * @generated from field: optional string cursor = 2;\n */\n cursor?: string;\n\n /**\n * True if you want the result in descending order\n *\n * @generated from field: optional bool order_descending = 3;\n */\n orderDescending?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListActiveSignalsRequest.\n * Use `create(ListActiveSignalsRequestSchema)` to create a new message.\n */\nexport const ListActiveSignalsRequestSchema: GenMessage<ListActiveSignalsRequest, {jsonType: ListActiveSignalsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 19);\n\n/**\n * The response of fetching the recieved signals\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a next_cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse\n */\nexport type ListActiveSignalsResponse = Message<\"mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse\"> & {\n /**\n * The actual signals on the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 1;\n */\n signals: { [key: string]: SignalData };\n\n /**\n * The receiver the signals are fetched on\n * The receiver must always be set, otherwise we cannot be inside a executor\n *\n * @generated from field: string receiver = 2;\n */\n receiver: string;\n\n /**\n * Use this cursor in the next request to go through the collection\n * Set if there's more data or if the 16MB payload limit was reached\n *\n * @generated from field: optional string next_cursor = 3;\n */\n nextCursor?: string;\n};\n\n/**\n * The response of fetching the recieved signals\n *\n * IMPORTANT: The response payload is limited to a maximum of 16MB.\n * If the total size of all signals would exceed this limit, the response\n * will be truncated and a next_cursor will be provided to continue fetching\n * the remaining signals in subsequent requests.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse\n */\nexport type ListActiveSignalsResponseJson = {\n /**\n * The actual signals on the receiver\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 1;\n */\n signals?: { [key: string]: SignalDataJson };\n\n /**\n * The receiver the signals are fetched on\n * The receiver must always be set, otherwise we cannot be inside a executor\n *\n * @generated from field: string receiver = 2;\n */\n receiver?: string;\n\n /**\n * Use this cursor in the next request to go through the collection\n * Set if there's more data or if the 16MB payload limit was reached\n *\n * @generated from field: optional string next_cursor = 3;\n */\n nextCursor?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListActiveSignalsResponse.\n * Use `create(ListActiveSignalsResponseSchema)` to create a new message.\n */\nexport const ListActiveSignalsResponseSchema: GenMessage<ListActiveSignalsResponse, {jsonType: ListActiveSignalsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 20);\n\n/**\n * The vertex config request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest\n */\nexport type ExecutorServiceGetVertexConfigRequest = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest\"> & {\n /**\n * An optional field mask\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMask;\n};\n\n/**\n * The vertex config request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest\n */\nexport type ExecutorServiceGetVertexConfigRequestJson = {\n /**\n * An optional field mask\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMaskJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigRequest.\n * Use `create(ExecutorServiceGetVertexConfigRequestSchema)` to create a new message.\n */\nexport const ExecutorServiceGetVertexConfigRequestSchema: GenMessage<ExecutorServiceGetVertexConfigRequest, {jsonType: ExecutorServiceGetVertexConfigRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 21);\n\n/**\n * The vertex config response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse\n */\nexport type ExecutorServiceGetVertexConfigResponse = Message<\"mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse\"> & {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config: Uint8Array;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadata;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices: { [key: string]: boolean };\n};\n\n/**\n * The vertex config response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse\n */\nexport type ExecutorServiceGetVertexConfigResponseJson = {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config?: string;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadataJson;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices?: { [key: string]: boolean };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExecutorServiceGetVertexConfigResponse.\n * Use `create(ExecutorServiceGetVertexConfigResponseSchema)` to create a new message.\n */\nexport const ExecutorServiceGetVertexConfigResponseSchema: GenMessage<ExecutorServiceGetVertexConfigResponse, {jsonType: ExecutorServiceGetVertexConfigResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 22);\n\n/**\n * The ListIncomingSignalsRequest is used to list the signals on the receiver you query\n * If you have multiple receivers you should call this endpoint multiple times\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest\n */\nexport type ListIncomingSignalsRequest = Message<\"mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest\"> & {\n /**\n * The receiver you want to check for signals, if not set, the first connected receiver is used\n *\n * @generated from field: optional string receiver = 1;\n */\n receiver?: string;\n\n /**\n * Optional formats to filter the signals by. I.e. only return signals that subsumes to at least one schema in the array\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 2;\n */\n formats: SignalFormat[];\n\n /**\n * A fieldmaks to apply to the returned schema\n * I.e. if you want to omit logos you should set this to \"vertices\" + additional info\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 3;\n */\n fieldMask?: FieldMask;\n};\n\n/**\n * The ListIncomingSignalsRequest is used to list the signals on the receiver you query\n * If you have multiple receivers you should call this endpoint multiple times\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest\n */\nexport type ListIncomingSignalsRequestJson = {\n /**\n * The receiver you want to check for signals, if not set, the first connected receiver is used\n *\n * @generated from field: optional string receiver = 1;\n */\n receiver?: string;\n\n /**\n * Optional formats to filter the signals by. I.e. only return signals that subsumes to at least one schema in the array\n *\n * @generated from field: repeated mochabugapis.adapt.graph.SignalFormat formats = 2;\n */\n formats?: SignalFormatJson[];\n\n /**\n * A fieldmaks to apply to the returned schema\n * I.e. if you want to omit logos you should set this to \"vertices\" + additional info\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 3;\n */\n fieldMask?: FieldMaskJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListIncomingSignalsRequest.\n * Use `create(ListIncomingSignalsRequestSchema)` to create a new message.\n */\nexport const ListIncomingSignalsRequestSchema: GenMessage<ListIncomingSignalsRequest, {jsonType: ListIncomingSignalsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 23);\n\n/**\n * A representation of a signal on a receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.IncomingVertices\n */\nexport type IncomingVertices = Message<\"mochabugapis.adapt.runtime.v1.IncomingVertices\"> & {\n /**\n * The vertex id\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The label\n *\n * @generated from field: string label = 2;\n */\n label: string;\n\n /**\n * The description\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * The transmitters on the vertex\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 4;\n */\n transmitters: Transmitter[];\n\n /**\n * We also need to know the vertex type\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.VertexType vertex_type = 5;\n */\n vertexType: VertexType;\n\n /**\n * Optional logo for the vertex, use it to get the logo from the map\n *\n * @generated from field: optional string logo_id = 6;\n */\n logoId?: string;\n};\n\n/**\n * A representation of a signal on a receiver\n *\n * @generated from message mochabugapis.adapt.runtime.v1.IncomingVertices\n */\nexport type IncomingVerticesJson = {\n /**\n * The vertex id\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * The label\n *\n * @generated from field: string label = 2;\n */\n label?: string;\n\n /**\n * The description\n *\n * @generated from field: optional string description = 3;\n */\n description?: string;\n\n /**\n * The transmitters on the vertex\n *\n * @generated from field: repeated mochabugapis.adapt.graph.Transmitter transmitters = 4;\n */\n transmitters?: TransmitterJson[];\n\n /**\n * We also need to know the vertex type\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.VertexType vertex_type = 5;\n */\n vertexType?: VertexTypeJson;\n\n /**\n * Optional logo for the vertex, use it to get the logo from the map\n *\n * @generated from field: optional string logo_id = 6;\n */\n logoId?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.IncomingVertices.\n * Use `create(IncomingVerticesSchema)` to create a new message.\n */\nexport const IncomingVerticesSchema: GenMessage<IncomingVertices, {jsonType: IncomingVerticesJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 24);\n\n/**\n * The ListIncomingSignalsResponse is used to return the signals on the receiver you query\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse\n */\nexport type ListIncomingSignalsResponse = Message<\"mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse\"> & {\n /**\n * The incoming vertices\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.IncomingVertices vertices = 1;\n */\n vertices: IncomingVertices[];\n\n /**\n * A map that maps vertex logo ids to logo\n *\n * @generated from field: map<string, string> vertex_logos = 2;\n */\n vertexLogos: { [key: string]: string };\n\n /**\n * The receiver the signals are fetched on\n * This is set, since otherwise the request would return not found\n *\n * @generated from field: string receiver = 3;\n */\n receiver: string;\n};\n\n/**\n * The ListIncomingSignalsResponse is used to return the signals on the receiver you query\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse\n */\nexport type ListIncomingSignalsResponseJson = {\n /**\n * The incoming vertices\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.IncomingVertices vertices = 1;\n */\n vertices?: IncomingVerticesJson[];\n\n /**\n * A map that maps vertex logo ids to logo\n *\n * @generated from field: map<string, string> vertex_logos = 2;\n */\n vertexLogos?: { [key: string]: string };\n\n /**\n * The receiver the signals are fetched on\n * This is set, since otherwise the request would return not found\n *\n * @generated from field: string receiver = 3;\n */\n receiver?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ListIncomingSignalsResponse.\n * Use `create(ListIncomingSignalsResponseSchema)` to create a new message.\n */\nexport const ListIncomingSignalsResponseSchema: GenMessage<ListIncomingSignalsResponse, {jsonType: ListIncomingSignalsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 25);\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest\n */\nexport type ConfiguratorServiceBatchWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest\"> & {\n /**\n * A batch of operations to perform in the configurator store.\n * Refer to the comments on the `StoreNamespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations: WriteOperation[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest\n */\nexport type ConfiguratorServiceBatchWriteStoreRequestJson = {\n /**\n * A batch of operations to perform in the configurator store.\n * Refer to the comments on the `StoreNamespace` enum for details on scope requirements.\n *\n * @generated from field: repeated mochabugapis.adapt.runtime.v1.WriteOperation operations = 1;\n */\n operations?: WriteOperationJson[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreRequest.\n * Use `create(ConfiguratorServiceBatchWriteStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchWriteStoreRequestSchema: GenMessage<ConfiguratorServiceBatchWriteStoreRequest, {jsonType: ConfiguratorServiceBatchWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 26);\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse\n */\nexport type ConfiguratorServiceBatchWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse\"> & {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata: { [key: string]: ValueMetadata };\n};\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse\n */\nexport type ConfiguratorServiceBatchWriteStoreResponseJson = {\n /**\n * Metadata for each written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.ValueMetadata> metadata = 1;\n */\n metadata?: { [key: string]: ValueMetadataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchWriteStoreResponse.\n * Use `create(ConfiguratorServiceBatchWriteStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchWriteStoreResponseSchema: GenMessage<ConfiguratorServiceBatchWriteStoreResponse, {jsonType: ConfiguratorServiceBatchWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 27);\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest\n */\nexport type ConfiguratorServiceWriteStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest\"> & {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperation;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The write store request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest\n */\nexport type ConfiguratorServiceWriteStoreRequestJson = {\n /**\n * The difference in the single write request is that we support conditional\n * write operations here. These are useful for implementing locks etc.\n * Conditional write operations behaves strangely inside a batch operation since\n * the entire batch becomes conditional and they do not follow timestamps\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalWriteOperation operation = 1;\n */\n operation?: ConditionalWriteOperationJson;\n\n /**\n * The namespace where the operation is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreRequest.\n * Use `create(ConfiguratorServiceWriteStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceWriteStoreRequestSchema: GenMessage<ConfiguratorServiceWriteStoreRequest, {jsonType: ConfiguratorServiceWriteStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 28);\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse\n */\nexport type ConfiguratorServiceWriteStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse\"> & {\n /**\n * The metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadata;\n};\n\n/**\n * The response of the single write store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse\n */\nexport type ConfiguratorServiceWriteStoreResponseJson = {\n /**\n * The metadata for the written key.\n * Note: Metadata is only returned for insert operations, not for delete operations.\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 1;\n */\n metadata?: ValueMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceWriteStoreResponse.\n * Use `create(ConfiguratorServiceWriteStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceWriteStoreResponseSchema: GenMessage<ConfiguratorServiceWriteStoreResponse, {jsonType: ConfiguratorServiceWriteStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 29);\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest\n */\nexport type ConfiguratorServiceBatchReadStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest\"> & {\n /**\n * Keys to fetch from the configurator store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys: string[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The batch store operation for the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest\n */\nexport type ConfiguratorServiceBatchReadStoreRequestJson = {\n /**\n * Keys to fetch from the configurator store\n * Refer to the comments on the `Namespace` enum for details on scope requirements\n *\n * @generated from field: repeated string keys = 1;\n */\n keys?: string[];\n\n /**\n * The namespace where the batch is applied.\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreRequest.\n * Use `create(ConfiguratorServiceBatchReadStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchReadStoreRequestSchema: GenMessage<ConfiguratorServiceBatchReadStoreRequest, {jsonType: ConfiguratorServiceBatchReadStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 30);\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse\n */\nexport type ConfiguratorServiceBatchReadStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse\"> & {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n};\n\n/**\n * The response of the batch store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse\n */\nexport type ConfiguratorServiceBatchReadStoreResponseJson = {\n /**\n * Map of key to value\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceBatchReadStoreResponse.\n * Use `create(ConfiguratorServiceBatchReadStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceBatchReadStoreResponseSchema: GenMessage<ConfiguratorServiceBatchReadStoreResponse, {jsonType: ConfiguratorServiceBatchReadStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 31);\n\n/**\n * The request to select from the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest\n */\nexport type ConfiguratorServiceSelectStoreRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest\"> & {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOp;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace: Namespace;\n};\n\n/**\n * The request to select from the configuration store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest\n */\nexport type ConfiguratorServiceSelectStoreRequestJson = {\n /**\n * The select operation to perform\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.SelectOp operation = 1;\n */\n operation?: SelectOpJson;\n\n /**\n * The namespace where the operation is applied\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.Namespace namespace = 2;\n */\n namespace?: NamespaceJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreRequest.\n * Use `create(ConfiguratorServiceSelectStoreRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceSelectStoreRequestSchema: GenMessage<ConfiguratorServiceSelectStoreRequest, {jsonType: ConfiguratorServiceSelectStoreRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 32);\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse\n */\nexport type ConfiguratorServiceSelectStoreResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse\"> & {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items: { [key: string]: GetValue };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * The response of the select store\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse\n */\nexport type ConfiguratorServiceSelectStoreResponseJson = {\n /**\n * Results\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.GetValue> items = 1;\n */\n items?: { [key: string]: GetValueJson };\n\n /**\n * Next page token\n *\n * @generated from field: optional string next_token = 2;\n */\n nextToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceSelectStoreResponse.\n * Use `create(ConfiguratorServiceSelectStoreResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceSelectStoreResponseSchema: GenMessage<ConfiguratorServiceSelectStoreResponse, {jsonType: ConfiguratorServiceSelectStoreResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 33);\n\n/**\n * The get vertex request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest\n */\nexport type ConfiguratorServiceGetVertexConfigRequest = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest\"> & {\n /**\n * A field mask to apply to the item\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMask;\n};\n\n/**\n * The get vertex request\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest\n */\nexport type ConfiguratorServiceGetVertexConfigRequestJson = {\n /**\n * A field mask to apply to the item\n *\n * @generated from field: optional google.protobuf.FieldMask field_mask = 1;\n */\n fieldMask?: FieldMaskJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigRequest.\n * Use `create(ConfiguratorServiceGetVertexConfigRequestSchema)` to create a new message.\n */\nexport const ConfiguratorServiceGetVertexConfigRequestSchema: GenMessage<ConfiguratorServiceGetVertexConfigRequest, {jsonType: ConfiguratorServiceGetVertexConfigRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 34);\n\n/**\n * The get vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse\n */\nexport type ConfiguratorServiceGetVertexConfigResponse = Message<\"mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse\"> & {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config: Uint8Array;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadata;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices: { [key: string]: boolean };\n};\n\n/**\n * The get vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse\n */\nexport type ConfiguratorServiceGetVertexConfigResponseJson = {\n /**\n * The vertex config\n *\n * @generated from field: bytes config = 1;\n */\n config?: string;\n\n /**\n * The metadata of the config\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadataJson;\n\n /**\n * The services that are actually configured on this vertex\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 3;\n */\n configuredServices?: { [key: string]: boolean };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConfiguratorServiceGetVertexConfigResponse.\n * Use `create(ConfiguratorServiceGetVertexConfigResponseSchema)` to create a new message.\n */\nexport const ConfiguratorServiceGetVertexConfigResponseSchema: GenMessage<ConfiguratorServiceGetVertexConfigResponse, {jsonType: ConfiguratorServiceGetVertexConfigResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 35);\n\n/**\n * The post vertex request\n *\n * This request updates the vertex configuration and/or metadata.\n * At least one of config or metadata must be provided in the request.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigRequest\n */\nexport type PostVertexConfigRequest = Message<\"mochabugapis.adapt.runtime.v1.PostVertexConfigRequest\"> & {\n /**\n * The vertex config\n * - Set to empty bytes to clear the config\n * - Omit (nil) to keep existing config unchanged\n * - Set to non-empty bytes to update the config\n *\n * @generated from field: optional bytes config = 1;\n */\n config?: Uint8Array;\n\n /**\n * The metadata of the config\n * - Cannot be cleared (setting to nil will be ignored)\n * - Omit (nil) to keep existing metadata unchanged\n * - Set to update the metadata\n *\n * @generated from field: optional mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadata;\n\n /**\n * You can override bindings directly in the request by setting this flag\n *\n * @generated from field: optional bool override_bindings = 3;\n */\n overrideBindings?: boolean;\n};\n\n/**\n * The post vertex request\n *\n * This request updates the vertex configuration and/or metadata.\n * At least one of config or metadata must be provided in the request.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigRequest\n */\nexport type PostVertexConfigRequestJson = {\n /**\n * The vertex config\n * - Set to empty bytes to clear the config\n * - Omit (nil) to keep existing config unchanged\n * - Set to non-empty bytes to update the config\n *\n * @generated from field: optional bytes config = 1;\n */\n config?: string;\n\n /**\n * The metadata of the config\n * - Cannot be cleared (setting to nil will be ignored)\n * - Omit (nil) to keep existing metadata unchanged\n * - Set to update the metadata\n *\n * @generated from field: optional mochabugapis.adapt.graph.VertexMetadata metadata = 2;\n */\n metadata?: VertexMetadataJson;\n\n /**\n * You can override bindings directly in the request by setting this flag\n *\n * @generated from field: optional bool override_bindings = 3;\n */\n overrideBindings?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.PostVertexConfigRequest.\n * Use `create(PostVertexConfigRequestSchema)` to create a new message.\n */\nexport const PostVertexConfigRequestSchema: GenMessage<PostVertexConfigRequest, {jsonType: PostVertexConfigRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 36);\n\n/**\n * The post vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigResponse\n */\nexport type PostVertexConfigResponse = Message<\"mochabugapis.adapt.runtime.v1.PostVertexConfigResponse\"> & {\n /**\n * The metadata for the config. This is relevant if you wish to study error codes after setting bindings for example\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 1;\n */\n metadata?: VertexMetadata;\n};\n\n/**\n * The post vertex response\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PostVertexConfigResponse\n */\nexport type PostVertexConfigResponseJson = {\n /**\n * The metadata for the config. This is relevant if you wish to study error codes after setting bindings for example\n *\n * @generated from field: mochabugapis.adapt.graph.VertexMetadata metadata = 1;\n */\n metadata?: VertexMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.PostVertexConfigResponse.\n * Use `create(PostVertexConfigResponseSchema)` to create a new message.\n */\nexport const PostVertexConfigResponseSchema: GenMessage<PostVertexConfigResponse, {jsonType: PostVertexConfigResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 37);\n\n/**\n * The request to get the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesRequest\n */\nexport type GetSystemServicesRequest = Message<\"mochabugapis.adapt.runtime.v1.GetSystemServicesRequest\"> & {\n};\n\n/**\n * The request to get the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesRequest\n */\nexport type GetSystemServicesRequestJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetSystemServicesRequest.\n * Use `create(GetSystemServicesRequestSchema)` to create a new message.\n */\nexport const GetSystemServicesRequestSchema: GenMessage<GetSystemServicesRequest, {jsonType: GetSystemServicesRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 38);\n\n/**\n * The response of getting the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesResponse\n */\nexport type GetSystemServicesResponse = Message<\"mochabugapis.adapt.runtime.v1.GetSystemServicesResponse\"> & {\n /**\n * The services that are configured for the system\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 1;\n */\n configuredServices: { [key: string]: boolean };\n};\n\n/**\n * The response of getting the services\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetSystemServicesResponse\n */\nexport type GetSystemServicesResponseJson = {\n /**\n * The services that are configured for the system\n * For nested services you query with a dot notation path\n * Services that are not configured will not appear in this map\n * For example, oneOf service with the selection option will appear as: \"oneof_service.selected_option\"\n * Any grouped services will appear as normal, i.e. \"grouped_service.nested_service\"\n * If the service is not configured (i.e. optional) it will not appear in this map\n *\n * @generated from field: map<string, bool> configured_services = 1;\n */\n configuredServices?: { [key: string]: boolean };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetSystemServicesResponse.\n * Use `create(GetSystemServicesResponseSchema)` to create a new message.\n */\nexport const GetSystemServicesResponseSchema: GenMessage<GetSystemServicesResponse, {jsonType: GetSystemServicesResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 39);\n\n/**\n * Check if access token is ok\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeRequest\n */\nexport type AuthorizeRequest = Message<\"mochabugapis.adapt.runtime.v1.AuthorizeRequest\"> & {\n /**\n * The access token\n *\n * @generated from field: string access_token = 1;\n */\n accessToken: string;\n};\n\n/**\n * Check if access token is ok\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeRequest\n */\nexport type AuthorizeRequestJson = {\n /**\n * The access token\n *\n * @generated from field: string access_token = 1;\n */\n accessToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.AuthorizeRequest.\n * Use `create(AuthorizeRequestSchema)` to create a new message.\n */\nexport const AuthorizeRequestSchema: GenMessage<AuthorizeRequest, {jsonType: AuthorizeRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 40);\n\n/**\n * The response of authorizing\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeResponse\n */\nexport type AuthorizeResponse = Message<\"mochabugapis.adapt.runtime.v1.AuthorizeResponse\"> & {\n};\n\n/**\n * The response of authorizing\n *\n * @generated from message mochabugapis.adapt.runtime.v1.AuthorizeResponse\n */\nexport type AuthorizeResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.AuthorizeResponse.\n * Use `create(AuthorizeResponseSchema)` to create a new message.\n */\nexport const AuthorizeResponseSchema: GenMessage<AuthorizeResponse, {jsonType: AuthorizeResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 41);\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest\n */\nexport type BatchGetSystemVariablesRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest\"> & {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest\n */\nexport type BatchGetSystemVariablesRequestJson = {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesRequest.\n * Use `create(BatchGetSystemVariablesRequestSchema)` to create a new message.\n */\nexport const BatchGetSystemVariablesRequestSchema: GenMessage<BatchGetSystemVariablesRequest, {jsonType: BatchGetSystemVariablesRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 42);\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse\n */\nexport type BatchGetSystemVariablesResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse\"> & {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items: { [key: string]: Value };\n};\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse\n */\nexport type BatchGetSystemVariablesResponseJson = {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items?: { [key: string]: ValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemVariablesResponse.\n * Use `create(BatchGetSystemVariablesResponseSchema)` to create a new message.\n */\nexport const BatchGetSystemVariablesResponseSchema: GenMessage<BatchGetSystemVariablesResponse, {jsonType: BatchGetSystemVariablesResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 43);\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest\n */\nexport type BatchGetUserVariablesRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest\"> & {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest\n */\nexport type BatchGetUserVariablesRequestJson = {\n /**\n * The names of the variables to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesRequest.\n * Use `create(BatchGetUserVariablesRequestSchema)` to create a new message.\n */\nexport const BatchGetUserVariablesRequestSchema: GenMessage<BatchGetUserVariablesRequest, {jsonType: BatchGetUserVariablesRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 44);\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse\n */\nexport type BatchGetUserVariablesResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse\"> & {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items: { [key: string]: Value };\n};\n\n/**\n * The response of getting multiple environmental variabes\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse\n */\nexport type BatchGetUserVariablesResponseJson = {\n /**\n * name, value pairs\n *\n * @generated from field: map<string, google.protobuf.Value> items = 1;\n */\n items?: { [key: string]: ValueJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserVariablesResponse.\n * Use `create(BatchGetUserVariablesResponseSchema)` to create a new message.\n */\nexport const BatchGetUserVariablesResponseSchema: GenMessage<BatchGetUserVariablesResponse, {jsonType: BatchGetUserVariablesResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 45);\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest\n */\nexport type BatchGetUserTokensRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest\"> & {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest\n */\nexport type BatchGetUserTokensRequestJson = {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserTokensRequest.\n * Use `create(BatchGetUserTokensRequestSchema)` to create a new message.\n */\nexport const BatchGetUserTokensRequestSchema: GenMessage<BatchGetUserTokensRequest, {jsonType: BatchGetUserTokensRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 46);\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse\n */\nexport type BatchGetUserTokensResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse\"> & {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items: { [key: string]: Token };\n};\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse\n */\nexport type BatchGetUserTokensResponseJson = {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items?: { [key: string]: TokenJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetUserTokensResponse.\n * Use `create(BatchGetUserTokensResponseSchema)` to create a new message.\n */\nexport const BatchGetUserTokensResponseSchema: GenMessage<BatchGetUserTokensResponse, {jsonType: BatchGetUserTokensResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 47);\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest\n */\nexport type BatchGetSystemTokensRequest = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest\"> & {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names: string[];\n};\n\n/**\n * The request to get multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest\n */\nexport type BatchGetSystemTokensRequestJson = {\n /**\n * The names of the tokens to fetch\n *\n * @generated from field: repeated string names = 1;\n */\n names?: string[];\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensRequest.\n * Use `create(BatchGetSystemTokensRequestSchema)` to create a new message.\n */\nexport const BatchGetSystemTokensRequestSchema: GenMessage<BatchGetSystemTokensRequest, {jsonType: BatchGetSystemTokensRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 48);\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse\n */\nexport type BatchGetSystemTokensResponse = Message<\"mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse\"> & {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items: { [key: string]: Token };\n};\n\n/**\n * The response of getting multiple oauth2 tokens\n *\n * @generated from message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse\n */\nexport type BatchGetSystemTokensResponseJson = {\n /**\n * Name, token pairs\n *\n * @generated from field: map<string, mochabugapis.adapt.runtime.v1.Token> items = 1;\n */\n items?: { [key: string]: TokenJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.BatchGetSystemTokensResponse.\n * Use `create(BatchGetSystemTokensResponseSchema)` to create a new message.\n */\nexport const BatchGetSystemTokensResponseSchema: GenMessage<BatchGetSystemTokensResponse, {jsonType: BatchGetSystemTokensResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 49);\n\n/**\n * A representation of a OAuth2 token\n *\n * @generated from message mochabugapis.adapt.runtime.v1.Token\n */\nexport type Token = Message<\"mochabugapis.adapt.runtime.v1.Token\"> & {\n /**\n * The name of the token\n * Restrictions:\n * - Must match the ECMA regex: ^[_$a-zA-Z][_$a-zA-Z0-9]*$\n * - Length must be greater than 0 and less than 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name: string;\n\n /**\n * The actual token\n *\n * @generated from field: string token = 2;\n */\n token: string;\n\n /**\n * The type of token (typically Bearer)\n *\n * @generated from field: string type = 3;\n */\n type: string;\n\n /**\n * When the token expires\n *\n * @generated from field: google.protobuf.Timestamp expires = 4;\n */\n expires?: Timestamp;\n};\n\n/**\n * A representation of a OAuth2 token\n *\n * @generated from message mochabugapis.adapt.runtime.v1.Token\n */\nexport type TokenJson = {\n /**\n * The name of the token\n * Restrictions:\n * - Must match the ECMA regex: ^[_$a-zA-Z][_$a-zA-Z0-9]*$\n * - Length must be greater than 0 and less than 50 characters.\n *\n * @generated from field: string name = 1;\n */\n name?: string;\n\n /**\n * The actual token\n *\n * @generated from field: string token = 2;\n */\n token?: string;\n\n /**\n * The type of token (typically Bearer)\n *\n * @generated from field: string type = 3;\n */\n type?: string;\n\n /**\n * When the token expires\n *\n * @generated from field: google.protobuf.Timestamp expires = 4;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.Token.\n * Use `create(TokenSchema)` to create a new message.\n */\nexport const TokenSchema: GenMessage<Token, {jsonType: TokenJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_runtime, 50);\n\n/**\n * The namespace where the key should be used\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.Namespace\n */\nexport enum Namespace {\n /**\n * If the namespace has not been specified\n *\n * @generated from enum value: NAMESPACE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The key is applied on a vertex scope and lives as longest as the instance\n * Access scopes for reading values when the namespace is NAMESPACE_VERTEX_INSTANCE:\n * - 'runtimeapi/executor.store.vertex.instance'\n * - 'runtimeapi/executor.store.vertex.instance:read'\n * Access scope for writing values when the namespace is NAMESPACE_VERTEX_INSTANCE:\n * - 'runtimeapi/executor.store.vertex.instance'\n *\n * @generated from enum value: NAMESPACE_VERTEX_INSTANCE = 1;\n */\n VERTEX_INSTANCE = 1,\n\n /**\n * The key is applied on a plugin wide scope and lives as longest as the\n * instance\n * Access scopes for reading values when the namespace is NAMESPACE_PLUGIN_INSTANCE:\n * - 'runtimeapi/executor.store.plugin.instance'\n * - 'runtimeapi/executor.store.plugin.instance:read'\n * Access scope for writing values when the namespace is NAMESPACE_PLUGIN_INSTANCE:\n * - 'runtimeapi/executor.store.plugin.instance'\n *\n * @generated from enum value: NAMESPACE_PLUGIN_INSTANCE = 2;\n */\n PLUGIN_INSTANCE = 2,\n\n /**\n * The key is applied on a vertex scope and lives as longest as the app\n * Access scopes for reading values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/executor.store.vertex.app'\n * - 'runtimeapi/executor.store.vertex.app:read'\n * Access scope for writing values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/executor.store.vertex.app'\n * -----------------------------------------------\n * The key is applied on a vertex scope and lives as long as the plugin in the project\n * Access scopes for reading values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/configurator.store.vertex:read'\n * - 'runtimeapi/configurator.store.vertex'\n * Access scope for writing values when the namespace is NAMESPACE_VERTEX:\n * - 'runtimeapi/configurator.store.vertex'\n *\n * @generated from enum value: NAMESPACE_VERTEX = 3;\n */\n VERTEX = 3,\n\n /**\n * The key is applied on a plugin wide scope and lives as longest as the\n * app\n * Access scopes for reading values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/executor.store.plugin.app'\n * - 'runtimeapi/executor.store.plugin.app:read'\n * Access scope for writing values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/executor.store.plugin.app'\n * -----------------------------------------------\n * The key is applied on a plugin wide scope and lives as long as the plugin in the project\n * Access scopes for reading values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/configurator.store.plugin:read'\n * - 'runtimeapi/configurator.store.plugin'\n * Access scope for writing values when the namespace is NAMESPACE_PLUGIN:\n * - 'runtimeapi/configurator.store.plugin'\n *\n * @generated from enum value: NAMESPACE_PLUGIN = 4;\n */\n PLUGIN = 4,\n}\n\n/**\n * The namespace where the key should be used\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.Namespace\n */\nexport type NamespaceJson = \"NAMESPACE_UNSPECIFIED\" | \"NAMESPACE_VERTEX_INSTANCE\" | \"NAMESPACE_PLUGIN_INSTANCE\" | \"NAMESPACE_VERTEX\" | \"NAMESPACE_PLUGIN\";\n\n/**\n * Describes the enum mochabugapis.adapt.runtime.v1.Namespace.\n */\nexport const NamespaceSchema: GenEnum<Namespace, NamespaceJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_runtime_v1_runtime, 0);\n\n/**\n * The different vertex types that can be incoming\n * The type of vertex to add\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.VertexType\n */\nexport enum VertexType {\n /**\n * Not specified\n *\n * @generated from enum value: VERTEX_TYPE_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The start vertex\n *\n * @generated from enum value: VERTEX_TYPE_START = 1;\n */\n START = 1,\n\n /**\n * The plugin vertex\n *\n * @generated from enum value: VERTEX_TYPE_PLUGIN = 2;\n */\n PLUGIN = 2,\n\n /**\n * The output vertex\n *\n * @generated from enum value: VERTEX_TYPE_OUTPUT = 3;\n */\n OUTPUT = 3,\n\n /**\n * The delegate vertex\n *\n * @generated from enum value: VERTEX_TYPE_DELEGATE = 4;\n */\n DELEGATE = 4,\n\n /**\n * The barrier vertex\n *\n * @generated from enum value: VERTEX_TYPE_BARRIER = 5;\n */\n BARRIER = 5,\n\n /**\n * The exchange output vertex\n *\n * @generated from enum value: VERTEX_TYPE_EXCHANGE_OUT = 6;\n */\n EXCHANGE_OUT = 6,\n}\n\n/**\n * The different vertex types that can be incoming\n * The type of vertex to add\n *\n * @generated from enum mochabugapis.adapt.runtime.v1.VertexType\n */\nexport type VertexTypeJson = \"VERTEX_TYPE_UNSPECIFIED\" | \"VERTEX_TYPE_START\" | \"VERTEX_TYPE_PLUGIN\" | \"VERTEX_TYPE_OUTPUT\" | \"VERTEX_TYPE_DELEGATE\" | \"VERTEX_TYPE_BARRIER\" | \"VERTEX_TYPE_EXCHANGE_OUT\";\n\n/**\n * Describes the enum mochabugapis.adapt.runtime.v1.VertexType.\n */\nexport const VertexTypeSchema: GenEnum<VertexType, VertexTypeJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_runtime_v1_runtime, 1);\n\n/**\n * Executor service is containg the complete API available to a executor of a\n * vertex. Every call on this service will require an Authoriation header\n *\n * @generated from service mochabugapis.adapt.runtime.v1.ExecutorService\n */\nexport const ExecutorService: GenService<{\n /**\n * Get the vertex config\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.vertexconfig:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.GetVertexConfig\n */\n getVertexConfig: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceGetVertexConfigRequestSchema;\n output: typeof ExecutorServiceGetVertexConfigResponseSchema;\n },\n /**\n * Get the signals defined by the connected receiver\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.receiversignals:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.ListActiveSignals\n */\n listActiveSignals: {\n methodKind: \"unary\";\n input: typeof ListActiveSignalsRequestSchema;\n output: typeof ListActiveSignalsResponseSchema;\n },\n /**\n * Get specific signals on the connected receiver\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.receiversignals:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.BatchGetActiveSignals\n */\n batchGetActiveSignals: {\n methodKind: \"unary\";\n input: typeof BatchGetActiveSignalsRequestSchema;\n output: typeof BatchGetActiveSignalsResponseSchema;\n },\n /**\n * Send data on the transmitter\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.send\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.Send\n */\n send: {\n methodKind: \"unary\";\n input: typeof SendRequestSchema;\n output: typeof SendResponseSchema;\n },\n /**\n * Dispatch an exchange\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.exchange\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.DispatchExchange\n */\n dispatchExchange: {\n methodKind: \"unary\";\n input: typeof DispatchExchangeRequestSchema;\n output: typeof DispatchExchangeResponseSchema;\n },\n /**\n * Get the information about the exchange instance with the id\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.exchange\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.GetExchangeOperation\n */\n getExchangeOperation: {\n methodKind: \"unary\";\n input: typeof GetExchangeOperationRequestSchema;\n output: typeof GetExchangeOperationResponseSchema;\n },\n /**\n * Cancel the execution of an exchange\n * Valid scopes: runtimeapi/executor, runtimeapi/executor.exchange\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.CancelExchangeOperation\n */\n cancelExchangeOperation: {\n methodKind: \"unary\";\n input: typeof CancelExchangeOperationRequestSchema;\n output: typeof CancelExchangeOperationResponseSchema;\n },\n /**\n * Signel write operations support a large set of operations than batch operations such\n * as conditional writes.\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.WriteStore\n */\n writeStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceWriteStoreRequestSchema;\n output: typeof ExecutorServiceWriteStoreResponseSchema;\n },\n /**\n * Batch write operations on the vertex session store\n * The scopes depends on the namespace and operation\n * The write operations are all-or-nothing. Either all of them are committed or none are\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.BatchWriteStore\n */\n batchWriteStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceBatchWriteStoreRequestSchema;\n output: typeof ExecutorServiceBatchWriteStoreResponseSchema;\n },\n /**\n * Batch read operations on the vertex session store\n * The scopes depends on the namespace and operation\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.BatchReadStore\n */\n batchReadStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceBatchReadStoreRequestSchema;\n output: typeof ExecutorServiceBatchReadStoreResponseSchema;\n },\n /**\n * Select operations for range queries on the vertex session store\n * The scopes depends on the namespace and operation\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ExecutorService.SelectStore\n */\n selectStore: {\n methodKind: \"unary\";\n input: typeof ExecutorServiceSelectStoreRequestSchema;\n output: typeof ExecutorServiceSelectStoreResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_runtime_v1_runtime, 0);\n\n/**\n * Configurator service is containing the complete API available to a\n * configurator of a vertex. Every call on this service will require an\n * Authoriation header\n * It's important to note that the Get / Post vertex config relates to reading the actual graph\n * and requires the runtimeapi/configurator scope. Whereas the batch store operations can be scoped to the plugin subject\n *\n * @generated from service mochabugapis.adapt.runtime.v1.ConfiguratorService\n */\nexport const ConfiguratorService: GenService<{\n /**\n * Get the vertex config\n * Valid scopes: runtimeapi/configurator, runtimeapi/configurator.vertexconfig, runtimeapi/configurator.vertexconfig:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.GetVertexConfig\n */\n getVertexConfig: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceGetVertexConfigRequestSchema;\n output: typeof ConfiguratorServiceGetVertexConfigResponseSchema;\n },\n /**\n * Replace the vertex config\n * Valid scopes: runtimeapi/configurator, runtimeapi/configurator.vertexconfig\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.PostVertexConfig\n */\n postVertexConfig: {\n methodKind: \"unary\";\n input: typeof PostVertexConfigRequestSchema;\n output: typeof PostVertexConfigResponseSchema;\n },\n /**\n * The single write operations support a larger set of operations than batch operations such\n * as conditional writes.\n * Valid scopes here are: runtimeapi/plugin runtimeapi/plugin.store.plugin runtimeapi/plugin.store.vertex\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.WriteStore\n */\n writeStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceWriteStoreRequestSchema;\n output: typeof ConfiguratorServiceWriteStoreResponseSchema;\n },\n /**\n * Batch write operations on the vertex session store\n * The scopes depends on the namespace and operation\n * The write operations are all-or-nothing. Either all of them are committed or none are\n * Valid scopes here are: runtimeapi/plugin runtimeapi/plugin.store.plugin runtimeapi/plugin.store.vertex\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.BatchWriteStore\n */\n batchWriteStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceBatchWriteStoreRequestSchema;\n output: typeof ConfiguratorServiceBatchWriteStoreResponseSchema;\n },\n /**\n * Batch read operations on the vertex session store\n * The scopes depends on the namespace and operation\n * Valid scopes here are \"runtimeapi/plugin\", \"runtimeapi/plugin.store.plugin\", \"runtimeapi/plugin.store.plugin:read\"\n * \"runtimeapi/plugin.store.vertex\", \"runtimeapi/plugin.store.vertex:read\"\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.BatchReadStore\n */\n batchReadStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceBatchReadStoreRequestSchema;\n output: typeof ConfiguratorServiceBatchReadStoreResponseSchema;\n },\n /**\n * Select operations for range queries on the vertex session store\n * The scopes depends on the namespace and operation\n * Valid scopes here are \"runtimeapi/plugin\", \"runtimeapi/plugin.store.plugin\", \"runtimeapi/plugin.store.plugin:read\"\n * \"runtimeapi/plugin.store.vertex\", \"runtimeapi/plugin.store.vertex:read\"\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.SelectStore\n */\n selectStore: {\n methodKind: \"unary\";\n input: typeof ConfiguratorServiceSelectStoreRequestSchema;\n output: typeof ConfiguratorServiceSelectStoreResponseSchema;\n },\n /**\n * This endpoint enables the configurator to get information about incoming signals\n * Valid scopes: runtimeapi/configurator, runtimeapi/configurator.receiversignals:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.ConfiguratorService.ListIncomingSignals\n */\n listIncomingSignals: {\n methodKind: \"unary\";\n input: typeof ListIncomingSignalsRequestSchema;\n output: typeof ListIncomingSignalsResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_runtime_v1_runtime, 1);\n\n/**\n * Accessible to both executor and configurator\n *\n * @generated from service mochabugapis.adapt.runtime.v1.PluginService\n */\nexport const PluginService: GenService<{\n /**\n * The authorization endpoint, make sure that the access token is OK\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.authorize\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.Authorize\n */\n authorize: {\n methodKind: \"unary\";\n input: typeof AuthorizeRequestSchema;\n output: typeof AuthorizeResponseSchema;\n },\n /**\n * Get information about configured system services\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.system.services:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.GetSystemServices\n */\n getSystemServices: {\n methodKind: \"unary\";\n input: typeof GetSystemServicesRequestSchema;\n output: typeof GetSystemServicesResponseSchema;\n },\n /**\n * Fetch the envionment variables configured by the plugin\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.variables:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetSystemVariables\n */\n batchGetSystemVariables: {\n methodKind: \"unary\";\n input: typeof BatchGetSystemVariablesRequestSchema;\n output: typeof BatchGetSystemVariablesResponseSchema;\n },\n /**\n * Fetch the envionment variables configured by the user\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.user.variables:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetUserVariables\n */\n batchGetUserVariables: {\n methodKind: \"unary\";\n input: typeof BatchGetUserVariablesRequestSchema;\n output: typeof BatchGetUserVariablesResponseSchema;\n },\n /**\n * Get oauth2 bearer token from a user's consent or a service account\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.user.tokens:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetUserTokens\n */\n batchGetUserTokens: {\n methodKind: \"unary\";\n input: typeof BatchGetUserTokensRequestSchema;\n output: typeof BatchGetUserTokensResponseSchema;\n },\n /**\n * Get oauth2 bearer token from a plugin's service account\n * Valid scopes: runtimeapi/plugin, runtimeapi/plugin.tokens:read\n *\n * @generated from rpc mochabugapis.adapt.runtime.v1.PluginService.BatchGetSystemTokens\n */\n batchGetSystemTokens: {\n methodKind: \"unary\";\n input: typeof BatchGetSystemTokensRequestSchema;\n output: typeof BatchGetSystemTokensResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_runtime_v1_runtime, 2);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/automations/v1/automations.proto (package mochabugapis.adapt.automations.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile, GenMessage, GenService } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../../buf/validate/validate_pb\";\nimport { file_google_api_annotations } from \"../../../../google/api/annotations_pb\";\nimport { file_google_api_client } from \"../../../../google/api/client_pb\";\nimport type { Timestamp, TimestampJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { SignalData, SignalDataJson } from \"../../graph/signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"../../graph/signal_data_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/automations/v1/automations.proto.\n */\nexport const file_mochabugapis_adapt_automations_v1_automations: GenFile = /*@__PURE__*/\n fileDesc(\"CjNtb2NoYWJ1Z2FwaXMvYWRhcHQvYXV0b21hdGlvbnMvdjEvYXV0b21hdGlvbnMucHJvdG8SIW1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MSIvChVJbmhlcml0U2Vzc2lvblJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAEY9AMiZQoWSW5oZXJpdFNlc3Npb25SZXNwb25zZRINCgV0b2tlbhgBIAEoCRIwCgdleHBpcmVzGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQgoKCF9leHBpcmVzIq8BChFSZWFkT3V0cHV0UmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AxIaCglwYWdlX3NpemUYAiABKA1CB7pIBCoCGGQSKQoGdmVydGV4GAMgASgJQhS6SBFyDzINXlswLTlhLXpdezR9JEgAiAEBEiEKCm5ld2VyX3RoYW4YBCABKAlCCLpIBXIDsAEBSAGIAQFCCQoHX3ZlcnRleEINCgtfbmV3ZXJfdGhhbiLLAQoSUmVhZE91dHB1dFJlc3BvbnNlEjsKB3Nlc3Npb24YASABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbhI6CgdvdXRwdXRzGAIgAygLMikubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLk91dHB1dBInChBuZXh0X3BhZ2VfY3Vyc29yGAMgASgJQgi6SAVyA7ABAUgAiAEBQhMKEV9uZXh0X3BhZ2VfY3Vyc29yIncKD1JlYWRVcmxzUmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AxIaCglwYWdlX3NpemUYAiABKA1CB7pIBCoCGGQSIQoKbmV3ZXJfdGhhbhgDIAEoCUIIukgFcgOwAQFIAIgBAUINCgtfbmV3ZXJfdGhhbiLDAQoQUmVhZFVybHNSZXNwb25zZRI7CgdzZXNzaW9uGAEgASgLMioubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlNlc3Npb24SNAoEdXJscxgCIAMoCzImLm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5VcmwSJwoQbmV4dF9wYWdlX2N1cnNvchgDIAEoCUIIukgFcgOwAQFIAIgBAUITChFfbmV4dF9wYWdlX2N1cnNvciLYAgoTU3RhcnRTZXNzaW9uUmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AxI7Cgt0cmFuc21pdHRlchgCIAEoCUIhukgechwQARhkMhZeW2EtekEtWjAtOV8tXXsxLDEwMH0kSACIAQEShQEKB3NpZ25hbHMYAyADKAsyQy5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhcnRTZXNzaW9uUmVxdWVzdC5TaWduYWxzRW50cnlCL7pILJoBKSIiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJCoDyAEBGlQKDFNpZ25hbHNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAFCDgoMX3RyYW5zbWl0dGVyImMKFFN0YXJ0U2Vzc2lvblJlc3BvbnNlEg0KBXRva2VuGAEgASgJEjAKB2V4cGlyZXMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQFCCgoIX2V4cGlyZXMiLAoSU3RvcFNlc3Npb25SZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRABGPQDIhUKE1N0b3BTZXNzaW9uUmVzcG9uc2UiKwoRR2V0U2Vzc2lvblJlcXVlc3QSFgoCaWQYASABKAlCCrpIB3IFEAEY9AMiWQoSR2V0U2Vzc2lvblJlc3BvbnNlEkMKB3Nlc3Npb24YASABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbkIGukgDyAEBIukBCgZPdXRwdXQSDgoGdmVydGV4GAEgASgJEgwKBGZvcmsYAiABKAkSQQoEZGF0YRgDIAMoCzIzLm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5PdXRwdXQuRGF0YUVudHJ5EisKB2NyZWF0ZWQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGlEKCURhdGFFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAEiegoDVXJsEgsKA3VybBgBIAEoCRIMCgRmb3JrGAIgASgJEg4KBnZlcnRleBgDIAEoCRIMCgRkb25lGAQgASgIEisKB2NyZWF0ZWQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXRva2VuGAYgASgJIlIKB1Nlc3Npb24SDAoEZm9yaxgBIAEoCRI5CgZzdGF0dXMYAiABKA4yKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhdHVzIi4KFFN0cmVhbVNlc3Npb25SZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRABGPQDIkkKEUFja01lc3NhZ2VSZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRABGPQDEhwKCm1lc3NhZ2VfaWQYAiABKAlCCLpIBXIDsAEBIhQKEkFja01lc3NhZ2VSZXNwb25zZSLrAQoVU3RyZWFtU2Vzc2lvblJlc3BvbnNlEhQKAmlkGAEgASgJQgi6SAVyA7ABARI7CgZvdXRwdXQYAiABKAsyKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuT3V0cHV0SAASNQoDdXJsGAMgASgLMiYubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlVybEgAEj0KB3Nlc3Npb24YBCABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbkgAQgkKB21lc3NhZ2Ui1AIKEVJ1blNlc3Npb25SZXF1ZXN0EhYKAmlkGAEgASgJQgq6SAdyBRABGPQDEjsKC3RyYW5zbWl0dGVyGAIgASgJQiG6SB5yHBABGGQyFl5bYS16QS1aMC05Xy1dezEsMTAwfSRIAIgBARKDAQoHc2lnbmFscxgDIAMoCzJBLm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SdW5TZXNzaW9uUmVxdWVzdC5TaWduYWxzRW50cnlCL7pILJoBKSIiciAQARhkMhpeW18kYS16QS1aXVtfJGEtekEtWjAtOV0qJCoDyAEBGlQKDFNpZ25hbHNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAFCDgoMX3RyYW5zbWl0dGVyIrECChJSdW5TZXNzaW9uUmVzcG9uc2USFAoCaWQYASABKAlCCLpIBXIDsAEBEkcKB3N0YXJ0ZWQYAiABKAsyNC5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuUnVuU2Vzc2lvblN0YXJ0ZWRIABI7CgZvdXRwdXQYAyABKAsyKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuT3V0cHV0SAASNQoDdXJsGAQgASgLMiYubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlVybEgAEj0KB3Nlc3Npb24YBSABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbkgAQgkKB21lc3NhZ2UiYAoRUnVuU2Vzc2lvblN0YXJ0ZWQSDQoFdG9rZW4YASABKAkSMAoHZXhwaXJlcxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUIKCghfZXhwaXJlcyIrChFSdW5Jbmhlcml0UmVxdWVzdBIWCgJpZBgBIAEoCUIKukgHcgUQARj0AyKzAgoSUnVuSW5oZXJpdFJlc3BvbnNlEhQKAmlkGAEgASgJQgi6SAVyA7ABARJJCglpbmhlcml0ZWQYAiABKAsyNC5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuUnVuSW5oZXJpdFN0YXJ0ZWRIABI7CgZvdXRwdXQYAyABKAsyKS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuT3V0cHV0SAASNQoDdXJsGAQgASgLMiYubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlVybEgAEj0KB3Nlc3Npb24YBSABKAsyKi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU2Vzc2lvbkgAQgkKB21lc3NhZ2UiYAoRUnVuSW5oZXJpdFN0YXJ0ZWQSDQoFdG9rZW4YASABKAkSMAoHZXhwaXJlcxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBAUIKCghfZXhwaXJlcyrIAQoGU3RhdHVzEhYKElNUQVRVU19VTlNQRUNJRklFRBAAEhIKDlNUQVRVU19SVU5OSU5HEAESEgoOU1RBVFVTX1NUT1BQRUQQAhITCg9TVEFUVVNfU1RPUFBJTkcQAxIUChBTVEFUVVNfQ09NUExFVEVEEAQSEgoOU1RBVFVTX0VYUElSRUQQBRISCg5TVEFUVVNfRVJST1JFRBAGEhUKEVNUQVRVU19ERUxFR0FUSU5HEAcSFAoQU1RBVFVTX0RFTEVHQVRFRBAIMtUOChFBdXRvbWF0aW9uU2VydmljZRKuAQoMU3RhcnRTZXNzaW9uEjYubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlN0YXJ0U2Vzc2lvblJlcXVlc3QaNy5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RhcnRTZXNzaW9uUmVzcG9uc2UiLYLT5JMCJzoBKiIiL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbi9zdGFydBKiAQoLU3RvcFNlc3Npb24SNS5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuU3RvcFNlc3Npb25SZXF1ZXN0GjYubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlN0b3BTZXNzaW9uUmVzcG9uc2UiJILT5JMCHiocL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbhK2AQoOSW5oZXJpdFNlc3Npb24SOC5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuSW5oZXJpdFNlc3Npb25SZXF1ZXN0GjkubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLkluaGVyaXRTZXNzaW9uUmVzcG9uc2UiL4LT5JMCKToBKiIkL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbi9pbmhlcml0Ep8BCgpHZXRTZXNzaW9uEjQubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLkdldFNlc3Npb25SZXF1ZXN0GjUubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLkdldFNlc3Npb25SZXNwb25zZSIkgtPkkwIeEhwvdjEvYXV0b21hdGlvbnMve2lkfS9zZXNzaW9uEqYBCgpSZWFkT3V0cHV0EjQubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlJlYWRPdXRwdXRSZXF1ZXN0GjUubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlJlYWRPdXRwdXRSZXNwb25zZSIrgtPkkwIlEiMvdjEvYXV0b21hdGlvbnMve2lkfS9zZXNzaW9uL291dHB1dBKeAQoIUmVhZFVybHMSMi5tb2NoYWJ1Z2FwaXMuYWRhcHQuYXV0b21hdGlvbnMudjEuUmVhZFVybHNSZXF1ZXN0GjMubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlJlYWRVcmxzUmVzcG9uc2UiKYLT5JMCIxIhL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbi91cmxzErEBCg1TdHJlYW1TZXNzaW9uEjcubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlN0cmVhbVNlc3Npb25SZXF1ZXN0GjgubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLlN0cmVhbVNlc3Npb25SZXNwb25zZSIrgtPkkwIlEiMvdjEvYXV0b21hdGlvbnMve2lkfS9zZXNzaW9uL3N0cmVhbTABEqYBCgpBY2tNZXNzYWdlEjQubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLkFja01lc3NhZ2VSZXF1ZXN0GjUubW9jaGFidWdhcGlzLmFkYXB0LmF1dG9tYXRpb25zLnYxLkFja01lc3NhZ2VSZXNwb25zZSIrgtPkkwIlOgEqIiAvdjEvYXV0b21hdGlvbnMve2lkfS9zZXNzaW9uL2FjaxKoAQoKUnVuU2Vzc2lvbhI0Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SdW5TZXNzaW9uUmVxdWVzdBo1Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SdW5TZXNzaW9uUmVzcG9uc2UiK4LT5JMCJToBKiIgL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbi9ydW4wARKwAQoKUnVuSW5oZXJpdBI0Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SdW5Jbmhlcml0UmVxdWVzdBo1Lm1vY2hhYnVnYXBpcy5hZGFwdC5hdXRvbWF0aW9ucy52MS5SdW5Jbmhlcml0UmVzcG9uc2UiM4LT5JMCLToBKiIoL3YxL2F1dG9tYXRpb25zL3tpZH0vc2Vzc2lvbi9ydW4taW5oZXJpdDABGokBykEWYWRhcHQubW9jaGFidWdhcGlzLmNvbdJBbWh0dHBzOi8vd3d3Lm1vY2hhYnVnYXBpcy5jb20vYXV0aC9hZGFwdC5hdXRvbWF0aW9ucyxodHRwczovL3d3dy5tb2NoYWJ1Z2FwaXMuY29tL2F1dGgvYWRhcHQuYXV0b21hdGlvbnMuc3RhcnRiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_annotations, file_google_api_client, file_google_protobuf_timestamp, file_mochabugapis_adapt_graph_signal_data]);\n\n/**\n * The inherit session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionRequest\n */\nexport type InheritSessionRequest = Message<\"mochabugapis.adapt.automations.v1.InheritSessionRequest\"> & {\n /**\n * The automation id you would like to inherit\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * The inherit session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionRequest\n */\nexport type InheritSessionRequestJson = {\n /**\n * The automation id you would like to inherit\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.InheritSessionRequest.\n * Use `create(InheritSessionRequestSchema)` to create a new message.\n */\nexport const InheritSessionRequestSchema: GenMessage<InheritSessionRequest, {jsonType: InheritSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 0);\n\n/**\n * The inherit session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionResponse\n */\nexport type InheritSessionResponse = Message<\"mochabugapis.adapt.automations.v1.InheritSessionResponse\"> & {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: Timestamp;\n};\n\n/**\n * The inherit session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.InheritSessionResponse\n */\nexport type InheritSessionResponseJson = {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token?: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.InheritSessionResponse.\n * Use `create(InheritSessionResponseSchema)` to create a new message.\n */\nexport const InheritSessionResponseSchema: GenMessage<InheritSessionResponse, {jsonType: InheritSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 1);\n\n/**\n * The read output request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputRequest\n */\nexport type ReadOutputRequest = Message<\"mochabugapis.adapt.automations.v1.ReadOutputRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize: number;\n\n /**\n * You can specify a specific node you wan to read the output from as well\n * If not set, it will return all outputs\n *\n * @generated from field: optional string vertex = 3;\n */\n vertex?: string;\n\n /**\n * A sortable time uuid to indicate that that the outputs need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 4;\n */\n newerThan?: string;\n};\n\n/**\n * The read output request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputRequest\n */\nexport type ReadOutputRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize?: number;\n\n /**\n * You can specify a specific node you wan to read the output from as well\n * If not set, it will return all outputs\n *\n * @generated from field: optional string vertex = 3;\n */\n vertex?: string;\n\n /**\n * A sortable time uuid to indicate that that the outputs need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 4;\n */\n newerThan?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadOutputRequest.\n * Use `create(ReadOutputRequestSchema)` to create a new message.\n */\nexport const ReadOutputRequestSchema: GenMessage<ReadOutputRequest, {jsonType: ReadOutputRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 2);\n\n/**\n * The read output response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputResponse\n */\nexport type ReadOutputResponse = Message<\"mochabugapis.adapt.automations.v1.ReadOutputResponse\"> & {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: Session;\n\n /**\n * The outputs from the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Output outputs = 2;\n */\n outputs: Output[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * The read output response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadOutputResponse\n */\nexport type ReadOutputResponseJson = {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: SessionJson;\n\n /**\n * The outputs from the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Output outputs = 2;\n */\n outputs?: OutputJson[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadOutputResponse.\n * Use `create(ReadOutputResponseSchema)` to create a new message.\n */\nexport const ReadOutputResponseSchema: GenMessage<ReadOutputResponse, {jsonType: ReadOutputResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 3);\n\n/**\n * The read URLs request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsRequest\n */\nexport type ReadUrlsRequest = Message<\"mochabugapis.adapt.automations.v1.ReadUrlsRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize: number;\n\n /**\n * A sortable time uuid to indicate that that the urls need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 3;\n */\n newerThan?: string;\n};\n\n/**\n * The read URLs request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsRequest\n */\nexport type ReadUrlsRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * An optional page size, if not set, it will default to 100\n *\n * @generated from field: uint32 page_size = 2;\n */\n pageSize?: number;\n\n /**\n * A sortable time uuid to indicate that that the urls need to be newer than\n * Unset returns everything\n *\n * @generated from field: optional string newer_than = 3;\n */\n newerThan?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadUrlsRequest.\n * Use `create(ReadUrlsRequestSchema)` to create a new message.\n */\nexport const ReadUrlsRequestSchema: GenMessage<ReadUrlsRequest, {jsonType: ReadUrlsRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 4);\n\n/**\n * The read URLs response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsResponse\n */\nexport type ReadUrlsResponse = Message<\"mochabugapis.adapt.automations.v1.ReadUrlsResponse\"> & {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: Session;\n\n /**\n * The URLs for the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Url urls = 2;\n */\n urls: Url[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * The read URLs response\n *\n * @generated from message mochabugapis.adapt.automations.v1.ReadUrlsResponse\n */\nexport type ReadUrlsResponseJson = {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: SessionJson;\n\n /**\n * The URLs for the session, sorted with oldest first and newest last\n *\n * @generated from field: repeated mochabugapis.adapt.automations.v1.Url urls = 2;\n */\n urls?: UrlJson[];\n\n /**\n * A optional next-page cursor equivalent to the id of the last output\n *\n * @generated from field: optional string next_page_cursor = 3;\n */\n nextPageCursor?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.ReadUrlsResponse.\n * Use `create(ReadUrlsResponseSchema)` to create a new message.\n */\nexport const ReadUrlsResponseSchema: GenMessage<ReadUrlsResponse, {jsonType: ReadUrlsResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 5);\n\n/**\n * The start session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionRequest\n */\nexport type StartSessionRequest = Message<\"mochabugapis.adapt.automations.v1.StartSessionRequest\"> & {\n /**\n * The automation id to start\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The transmitter to start from (optional, it defaults to the first one, always)\n *\n * @generated from field: optional string transmitter = 2;\n */\n transmitter?: string;\n\n /**\n * The signals on the transmitter you wish to start with\n * Make sure that they align to the signals JTD schema\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * The start session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionRequest\n */\nexport type StartSessionRequestJson = {\n /**\n * The automation id to start\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * The transmitter to start from (optional, it defaults to the first one, always)\n *\n * @generated from field: optional string transmitter = 2;\n */\n transmitter?: string;\n\n /**\n * The signals on the transmitter you wish to start with\n * Make sure that they align to the signals JTD schema\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StartSessionRequest.\n * Use `create(StartSessionRequestSchema)` to create a new message.\n */\nexport const StartSessionRequestSchema: GenMessage<StartSessionRequest, {jsonType: StartSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 6);\n\n/**\n * The start session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionResponse\n */\nexport type StartSessionResponse = Message<\"mochabugapis.adapt.automations.v1.StartSessionResponse\"> & {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: Timestamp;\n};\n\n/**\n * The start session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StartSessionResponse\n */\nexport type StartSessionResponseJson = {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token?: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires (typically the case for long-running stream vertices)\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StartSessionResponse.\n * Use `create(StartSessionResponseSchema)` to create a new message.\n */\nexport const StartSessionResponseSchema: GenMessage<StartSessionResponse, {jsonType: StartSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 7);\n\n/**\n * The stop session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionRequest\n */\nexport type StopSessionRequest = Message<\"mochabugapis.adapt.automations.v1.StopSessionRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * The stop session request\n * The actual token determines which release it will utilize\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionRequest\n */\nexport type StopSessionRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StopSessionRequest.\n * Use `create(StopSessionRequestSchema)` to create a new message.\n */\nexport const StopSessionRequestSchema: GenMessage<StopSessionRequest, {jsonType: StopSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 8);\n\n/**\n * The stop session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionResponse\n */\nexport type StopSessionResponse = Message<\"mochabugapis.adapt.automations.v1.StopSessionResponse\"> & {\n};\n\n/**\n * The stop session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.StopSessionResponse\n */\nexport type StopSessionResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StopSessionResponse.\n * Use `create(StopSessionResponseSchema)` to create a new message.\n */\nexport const StopSessionResponseSchema: GenMessage<StopSessionResponse, {jsonType: StopSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 9);\n\n/**\n * The get session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionRequest\n */\nexport type GetSessionRequest = Message<\"mochabugapis.adapt.automations.v1.GetSessionRequest\"> & {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * The get session request\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionRequest\n */\nexport type GetSessionRequestJson = {\n /**\n * The automation id you would like to fetch a session for\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.GetSessionRequest.\n * Use `create(GetSessionRequestSchema)` to create a new message.\n */\nexport const GetSessionRequestSchema: GenMessage<GetSessionRequest, {jsonType: GetSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 10);\n\n/**\n * The get session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionResponse\n */\nexport type GetSessionResponse = Message<\"mochabugapis.adapt.automations.v1.GetSessionResponse\"> & {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: Session;\n};\n\n/**\n * The get session response\n *\n * @generated from message mochabugapis.adapt.automations.v1.GetSessionResponse\n */\nexport type GetSessionResponseJson = {\n /**\n * The session information\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 1;\n */\n session?: SessionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.GetSessionResponse.\n * Use `create(GetSessionResponseSchema)` to create a new message.\n */\nexport const GetSessionResponseSchema: GenMessage<GetSessionResponse, {jsonType: GetSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 11);\n\n/**\n * Output data from the automation (corresponds to an output vertex instance)\n *\n * @generated from message mochabugapis.adapt.automations.v1.Output\n */\nexport type Output = Message<\"mochabugapis.adapt.automations.v1.Output\"> & {\n /**\n * The vertex id\n *\n * @generated from field: string vertex = 1;\n */\n vertex: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork: string;\n\n /**\n * The actual data that has been output from the vertex\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> data = 3;\n */\n data: { [key: string]: SignalData };\n\n /**\n * The timestamp when the output was created\n *\n * @generated from field: google.protobuf.Timestamp created = 4;\n */\n created?: Timestamp;\n};\n\n/**\n * Output data from the automation (corresponds to an output vertex instance)\n *\n * @generated from message mochabugapis.adapt.automations.v1.Output\n */\nexport type OutputJson = {\n /**\n * The vertex id\n *\n * @generated from field: string vertex = 1;\n */\n vertex?: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork?: string;\n\n /**\n * The actual data that has been output from the vertex\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> data = 3;\n */\n data?: { [key: string]: SignalDataJson };\n\n /**\n * The timestamp when the output was created\n *\n * @generated from field: google.protobuf.Timestamp created = 4;\n */\n created?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.Output.\n * Use `create(OutputSchema)` to create a new message.\n */\nexport const OutputSchema: GenMessage<Output, {jsonType: OutputJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 12);\n\n/**\n * A representation of a URL\n *\n * @generated from message mochabugapis.adapt.automations.v1.Url\n */\nexport type Url = Message<\"mochabugapis.adapt.automations.v1.Url\"> & {\n /**\n * The URL\n *\n * @generated from field: string url = 1;\n */\n url: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork: string;\n\n /**\n * The vertex id that generated the URL\n *\n * @generated from field: string vertex = 3;\n */\n vertex: string;\n\n /**\n * Whether or not the URL is done executing\n * The client should only open URLs that are not done\n * Since the processes are generic, it's possible that a process generates multiple URLs in parallel\n * and the client should only open the ones that are not done\n *\n * @generated from field: bool done = 4;\n */\n done: boolean;\n\n /**\n * The timestamp when the URL was created\n *\n * @generated from field: google.protobuf.Timestamp created = 5;\n */\n created?: Timestamp;\n\n /**\n * The access token to access the node session\n *\n * @generated from field: string token = 6;\n */\n token: string;\n};\n\n/**\n * A representation of a URL\n *\n * @generated from message mochabugapis.adapt.automations.v1.Url\n */\nexport type UrlJson = {\n /**\n * The URL\n *\n * @generated from field: string url = 1;\n */\n url?: string;\n\n /**\n * The fork id, empty if running on the main path\n *\n * @generated from field: string fork = 2;\n */\n fork?: string;\n\n /**\n * The vertex id that generated the URL\n *\n * @generated from field: string vertex = 3;\n */\n vertex?: string;\n\n /**\n * Whether or not the URL is done executing\n * The client should only open URLs that are not done\n * Since the processes are generic, it's possible that a process generates multiple URLs in parallel\n * and the client should only open the ones that are not done\n *\n * @generated from field: bool done = 4;\n */\n done?: boolean;\n\n /**\n * The timestamp when the URL was created\n *\n * @generated from field: google.protobuf.Timestamp created = 5;\n */\n created?: TimestampJson;\n\n /**\n * The access token to access the node session\n *\n * @generated from field: string token = 6;\n */\n token?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.Url.\n * Use `create(UrlSchema)` to create a new message.\n */\nexport const UrlSchema: GenMessage<Url, {jsonType: UrlJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 13);\n\n/**\n * The session information\n *\n * @generated from message mochabugapis.adapt.automations.v1.Session\n */\nexport type Session = Message<\"mochabugapis.adapt.automations.v1.Session\"> & {\n /**\n * This is the owner's fork id, this can be different than the forks emitting outputs and urls\n *\n * @generated from field: string fork = 1;\n */\n fork: string;\n\n /**\n * The status of the session\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 2;\n */\n status: Status;\n};\n\n/**\n * The session information\n *\n * @generated from message mochabugapis.adapt.automations.v1.Session\n */\nexport type SessionJson = {\n /**\n * This is the owner's fork id, this can be different than the forks emitting outputs and urls\n *\n * @generated from field: string fork = 1;\n */\n fork?: string;\n\n /**\n * The status of the session\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Status status = 2;\n */\n status?: StatusJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.Session.\n * Use `create(SessionSchema)` to create a new message.\n */\nexport const SessionSchema: GenMessage<Session, {jsonType: SessionJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 14);\n\n/**\n * StreamSessionRequest to start streaming session messages\n *\n * @generated from message mochabugapis.adapt.automations.v1.StreamSessionRequest\n */\nexport type StreamSessionRequest = Message<\"mochabugapis.adapt.automations.v1.StreamSessionRequest\"> & {\n /**\n * The automation id to stream\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * StreamSessionRequest to start streaming session messages\n *\n * @generated from message mochabugapis.adapt.automations.v1.StreamSessionRequest\n */\nexport type StreamSessionRequestJson = {\n /**\n * The automation id to stream\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StreamSessionRequest.\n * Use `create(StreamSessionRequestSchema)` to create a new message.\n */\nexport const StreamSessionRequestSchema: GenMessage<StreamSessionRequest, {jsonType: StreamSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 15);\n\n/**\n * AckMessageRequest to acknowledge receipt of a streamed message\n *\n * @generated from message mochabugapis.adapt.automations.v1.AckMessageRequest\n */\nexport type AckMessageRequest = Message<\"mochabugapis.adapt.automations.v1.AckMessageRequest\"> & {\n /**\n * The automation id\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The message id to acknowledge (UUID)\n *\n * @generated from field: string message_id = 2;\n */\n messageId: string;\n};\n\n/**\n * AckMessageRequest to acknowledge receipt of a streamed message\n *\n * @generated from message mochabugapis.adapt.automations.v1.AckMessageRequest\n */\nexport type AckMessageRequestJson = {\n /**\n * The automation id\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * The message id to acknowledge (UUID)\n *\n * @generated from field: string message_id = 2;\n */\n messageId?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.AckMessageRequest.\n * Use `create(AckMessageRequestSchema)` to create a new message.\n */\nexport const AckMessageRequestSchema: GenMessage<AckMessageRequest, {jsonType: AckMessageRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 16);\n\n/**\n * AckMessageResponse is empty on success\n *\n * @generated from message mochabugapis.adapt.automations.v1.AckMessageResponse\n */\nexport type AckMessageResponse = Message<\"mochabugapis.adapt.automations.v1.AckMessageResponse\"> & {\n};\n\n/**\n * AckMessageResponse is empty on success\n *\n * @generated from message mochabugapis.adapt.automations.v1.AckMessageResponse\n */\nexport type AckMessageResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.AckMessageResponse.\n * Use `create(AckMessageResponseSchema)` to create a new message.\n */\nexport const AckMessageResponseSchema: GenMessage<AckMessageResponse, {jsonType: AckMessageResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 17);\n\n/**\n * StreamSessionResponse wraps all possible message types sent via streaming\n *\n * @generated from message mochabugapis.adapt.automations.v1.StreamSessionResponse\n */\nexport type StreamSessionResponse = Message<\"mochabugapis.adapt.automations.v1.StreamSessionResponse\"> & {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The actual message, one of the following types\n *\n * @generated from oneof mochabugapis.adapt.automations.v1.StreamSessionResponse.message\n */\n message: {\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 2;\n */\n value: Output;\n case: \"output\";\n } | {\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 3;\n */\n value: Url;\n case: \"url\";\n } | {\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 4;\n */\n value: Session;\n case: \"session\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * StreamSessionResponse wraps all possible message types sent via streaming\n *\n * @generated from message mochabugapis.adapt.automations.v1.StreamSessionResponse\n */\nexport type StreamSessionResponseJson = {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 2;\n */\n output?: OutputJson;\n\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 3;\n */\n url?: UrlJson;\n\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 4;\n */\n session?: SessionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.StreamSessionResponse.\n * Use `create(StreamSessionResponseSchema)` to create a new message.\n */\nexport const StreamSessionResponseSchema: GenMessage<StreamSessionResponse, {jsonType: StreamSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 18);\n\n/**\n * RunSessionRequest to start and stream a session in one request\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunSessionRequest\n */\nexport type RunSessionRequest = Message<\"mochabugapis.adapt.automations.v1.RunSessionRequest\"> & {\n /**\n * The automation id to run\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The transmitter to start from (optional, it defaults to the first one, always)\n *\n * @generated from field: optional string transmitter = 2;\n */\n transmitter?: string;\n\n /**\n * The signals on the transmitter you wish to start with\n * Make sure that they align to the signals JTD schema\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * RunSessionRequest to start and stream a session in one request\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunSessionRequest\n */\nexport type RunSessionRequestJson = {\n /**\n * The automation id to run\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * The transmitter to start from (optional, it defaults to the first one, always)\n *\n * @generated from field: optional string transmitter = 2;\n */\n transmitter?: string;\n\n /**\n * The signals on the transmitter you wish to start with\n * Make sure that they align to the signals JTD schema\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 3;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.RunSessionRequest.\n * Use `create(RunSessionRequestSchema)` to create a new message.\n */\nexport const RunSessionRequestSchema: GenMessage<RunSessionRequest, {jsonType: RunSessionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 19);\n\n/**\n * RunSessionResponse wraps all possible message types sent via streaming\n * The first message will always be a started message containing the session token\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunSessionResponse\n */\nexport type RunSessionResponse = Message<\"mochabugapis.adapt.automations.v1.RunSessionResponse\"> & {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The actual message, one of the following types\n *\n * @generated from oneof mochabugapis.adapt.automations.v1.RunSessionResponse.message\n */\n message: {\n /**\n * Session started message (always first)\n *\n * @generated from field: mochabugapis.adapt.automations.v1.RunSessionStarted started = 2;\n */\n value: RunSessionStarted;\n case: \"started\";\n } | {\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 3;\n */\n value: Output;\n case: \"output\";\n } | {\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 4;\n */\n value: Url;\n case: \"url\";\n } | {\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 5;\n */\n value: Session;\n case: \"session\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * RunSessionResponse wraps all possible message types sent via streaming\n * The first message will always be a started message containing the session token\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunSessionResponse\n */\nexport type RunSessionResponseJson = {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * Session started message (always first)\n *\n * @generated from field: mochabugapis.adapt.automations.v1.RunSessionStarted started = 2;\n */\n started?: RunSessionStartedJson;\n\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 3;\n */\n output?: OutputJson;\n\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 4;\n */\n url?: UrlJson;\n\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 5;\n */\n session?: SessionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.RunSessionResponse.\n * Use `create(RunSessionResponseSchema)` to create a new message.\n */\nexport const RunSessionResponseSchema: GenMessage<RunSessionResponse, {jsonType: RunSessionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 20);\n\n/**\n * RunSessionStarted is sent as the first message when a session starts\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunSessionStarted\n */\nexport type RunSessionStarted = Message<\"mochabugapis.adapt.automations.v1.RunSessionStarted\"> & {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: Timestamp;\n};\n\n/**\n * RunSessionStarted is sent as the first message when a session starts\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunSessionStarted\n */\nexport type RunSessionStartedJson = {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token?: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.RunSessionStarted.\n * Use `create(RunSessionStartedSchema)` to create a new message.\n */\nexport const RunSessionStartedSchema: GenMessage<RunSessionStarted, {jsonType: RunSessionStartedJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 21);\n\n/**\n * RunInheritRequest to inherit and stream a session in one request\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunInheritRequest\n */\nexport type RunInheritRequest = Message<\"mochabugapis.adapt.automations.v1.RunInheritRequest\"> & {\n /**\n * The automation id to inherit\n *\n * @generated from field: string id = 1;\n */\n id: string;\n};\n\n/**\n * RunInheritRequest to inherit and stream a session in one request\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunInheritRequest\n */\nexport type RunInheritRequestJson = {\n /**\n * The automation id to inherit\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.RunInheritRequest.\n * Use `create(RunInheritRequestSchema)` to create a new message.\n */\nexport const RunInheritRequestSchema: GenMessage<RunInheritRequest, {jsonType: RunInheritRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 22);\n\n/**\n * RunInheritResponse wraps all possible message types sent via streaming\n * The first message will always be an inherited message containing the session token\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunInheritResponse\n */\nexport type RunInheritResponse = Message<\"mochabugapis.adapt.automations.v1.RunInheritResponse\"> & {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id: string;\n\n /**\n * The actual message, one of the following types\n *\n * @generated from oneof mochabugapis.adapt.automations.v1.RunInheritResponse.message\n */\n message: {\n /**\n * Session inherited message (always first)\n *\n * @generated from field: mochabugapis.adapt.automations.v1.RunInheritStarted inherited = 2;\n */\n value: RunInheritStarted;\n case: \"inherited\";\n } | {\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 3;\n */\n value: Output;\n case: \"output\";\n } | {\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 4;\n */\n value: Url;\n case: \"url\";\n } | {\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 5;\n */\n value: Session;\n case: \"session\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * RunInheritResponse wraps all possible message types sent via streaming\n * The first message will always be an inherited message containing the session token\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunInheritResponse\n */\nexport type RunInheritResponseJson = {\n /**\n * A timesortable uuid for the message\n *\n * @generated from field: string id = 1;\n */\n id?: string;\n\n /**\n * Session inherited message (always first)\n *\n * @generated from field: mochabugapis.adapt.automations.v1.RunInheritStarted inherited = 2;\n */\n inherited?: RunInheritStartedJson;\n\n /**\n * Output message from a vertex\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Output output = 3;\n */\n output?: OutputJson;\n\n /**\n * URL message for browser interaction\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Url url = 4;\n */\n url?: UrlJson;\n\n /**\n * Session status update\n *\n * @generated from field: mochabugapis.adapt.automations.v1.Session session = 5;\n */\n session?: SessionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.RunInheritResponse.\n * Use `create(RunInheritResponseSchema)` to create a new message.\n */\nexport const RunInheritResponseSchema: GenMessage<RunInheritResponse, {jsonType: RunInheritResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 23);\n\n/**\n * RunInheritStarted is sent as the first message when a session is inherited\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunInheritStarted\n */\nexport type RunInheritStarted = Message<\"mochabugapis.adapt.automations.v1.RunInheritStarted\"> & {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: Timestamp;\n};\n\n/**\n * RunInheritStarted is sent as the first message when a session is inherited\n *\n * @generated from message mochabugapis.adapt.automations.v1.RunInheritStarted\n */\nexport type RunInheritStartedJson = {\n /**\n * The access token for the session\n *\n * @generated from field: string token = 1;\n */\n token?: string;\n\n /**\n * The timestamp when the session expires, if not set, the session never expires\n *\n * @generated from field: optional google.protobuf.Timestamp expires = 2;\n */\n expires?: TimestampJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.automations.v1.RunInheritStarted.\n * Use `create(RunInheritStartedSchema)` to create a new message.\n */\nexport const RunInheritStartedSchema: GenMessage<RunInheritStarted, {jsonType: RunInheritStartedJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_automations_v1_automations, 24);\n\n/**\n * The session enum status\n *\n * @generated from enum mochabugapis.adapt.automations.v1.Status\n */\nexport enum Status {\n /**\n * Unspecified\n *\n * @generated from enum value: STATUS_UNSPECIFIED = 0;\n */\n UNSPECIFIED = 0,\n\n /**\n * The session is running\n *\n * @generated from enum value: STATUS_RUNNING = 1;\n */\n RUNNING = 1,\n\n /**\n * The session has been stopped\n *\n * @generated from enum value: STATUS_STOPPED = 2;\n */\n STOPPED = 2,\n\n /**\n * The session is being stopped\n *\n * @generated from enum value: STATUS_STOPPING = 3;\n */\n STOPPING = 3,\n\n /**\n * The session has been completed\n *\n * @generated from enum value: STATUS_COMPLETED = 4;\n */\n COMPLETED = 4,\n\n /**\n * The session has expired\n *\n * @generated from enum value: STATUS_EXPIRED = 5;\n */\n EXPIRED = 5,\n\n /**\n * The session has been errored (errors during the runtime)\n *\n * @generated from enum value: STATUS_ERRORED = 6;\n */\n ERRORED = 6,\n\n /**\n * The owner is getting delegated to another owner\n *\n * @generated from enum value: STATUS_DELEGATING = 7;\n */\n DELEGATING = 7,\n\n /**\n * The delegation is complete, the owner of this session cannot access it anymore\n *\n * @generated from enum value: STATUS_DELEGATED = 8;\n */\n DELEGATED = 8,\n}\n\n/**\n * The session enum status\n *\n * @generated from enum mochabugapis.adapt.automations.v1.Status\n */\nexport type StatusJson = \"STATUS_UNSPECIFIED\" | \"STATUS_RUNNING\" | \"STATUS_STOPPED\" | \"STATUS_STOPPING\" | \"STATUS_COMPLETED\" | \"STATUS_EXPIRED\" | \"STATUS_ERRORED\" | \"STATUS_DELEGATING\" | \"STATUS_DELEGATED\";\n\n/**\n * Describes the enum mochabugapis.adapt.automations.v1.Status.\n */\nexport const StatusSchema: GenEnum<Status, StatusJson> = /*@__PURE__*/\n enumDesc(file_mochabugapis_adapt_automations_v1_automations, 0);\n\n/**\n * A service that provides automation functionality.\n *\n * @generated from service mochabugapis.adapt.automations.v1.AutomationService\n */\nexport const AutomationService: GenService<{\n /**\n * Start a session of the specified automation\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.StartSession\n */\n startSession: {\n methodKind: \"unary\";\n input: typeof StartSessionRequestSchema;\n output: typeof StartSessionResponseSchema;\n },\n /**\n * Stop a specific session\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.StopSession\n */\n stopSession: {\n methodKind: \"unary\";\n input: typeof StopSessionRequestSchema;\n output: typeof StopSessionResponseSchema;\n },\n /**\n * Inherit a session\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.InheritSession\n */\n inheritSession: {\n methodKind: \"unary\";\n input: typeof InheritSessionRequestSchema;\n output: typeof InheritSessionResponseSchema;\n },\n /**\n * Get session information\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.GetSession\n */\n getSession: {\n methodKind: \"unary\";\n input: typeof GetSessionRequestSchema;\n output: typeof GetSessionResponseSchema;\n },\n /**\n * Read the output from the session\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.ReadOutput\n */\n readOutput: {\n methodKind: \"unary\";\n input: typeof ReadOutputRequestSchema;\n output: typeof ReadOutputResponseSchema;\n },\n /**\n * Read URLs for the session for browser-based clients\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.ReadUrls\n */\n readUrls: {\n methodKind: \"unary\";\n input: typeof ReadUrlsRequestSchema;\n output: typeof ReadUrlsResponseSchema;\n },\n /**\n * Stream session messages in real-time (replaces WebSocket)\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.StreamSession\n */\n streamSession: {\n methodKind: \"server_streaming\";\n input: typeof StreamSessionRequestSchema;\n output: typeof StreamSessionResponseSchema;\n },\n /**\n * Acknowledge receipt of a streamed message\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.AckMessage\n */\n ackMessage: {\n methodKind: \"unary\";\n input: typeof AckMessageRequestSchema;\n output: typeof AckMessageResponseSchema;\n },\n /**\n * Run a session: starts the automation and streams messages until completion\n * This combines StartSession and StreamSession for lower latency\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.RunSession\n */\n runSession: {\n methodKind: \"server_streaming\";\n input: typeof RunSessionRequestSchema;\n output: typeof RunSessionResponseSchema;\n },\n /**\n * Run inherit: inherits ownership and streams messages until completion\n * This combines InheritSession and StreamSession for lower latency\n *\n * @generated from rpc mochabugapis.adapt.automations.v1.AutomationService.RunInherit\n */\n runInherit: {\n methodKind: \"server_streaming\";\n input: typeof RunInheritRequestSchema;\n output: typeof RunInheritResponseSchema;\n },\n}> = /*@__PURE__*/\n serviceDesc(file_mochabugapis_adapt_automations_v1_automations, 0);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/annotations.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenExtension, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { HttpRule } from \"./http_pb\";\nimport { file_google_api_http } from \"./http_pb\";\nimport type { MethodOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/annotations.proto.\n */\nexport const file_google_api_annotations: GenFile = /*@__PURE__*/\n fileDesc(\"Chxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvEgpnb29nbGUuYXBpOksKBGh0dHASHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxiwyrwiIAEoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBGh0dHBCbgoOY29tLmdvb2dsZS5hcGlCEEFubm90YXRpb25zUHJvdG9QAVpBZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvYW5ub3RhdGlvbnM7YW5ub3RhdGlvbnOiAgRHQVBJYgZwcm90bzM\", [file_google_api_http, file_google_protobuf_descriptor]);\n\n/**\n * See `HttpRule`.\n *\n * @generated from extension: google.api.HttpRule http = 72295728;\n */\nexport const http: GenExtension<MethodOptions, HttpRule> = /*@__PURE__*/\n extDesc(file_google_api_annotations, 0);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/http.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/http.proto.\n */\nexport const file_google_api_http: GenFile = /*@__PURE__*/\n fileDesc(\"ChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkiVAoESHR0cBIjCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGUSJwofZnVsbHlfZGVjb2RlX3Jlc2VydmVkX2V4cGFuc2lvbhgCIAEoCCKBAgoISHR0cFJ1bGUSEAoIc2VsZWN0b3IYASABKAkSDQoDZ2V0GAIgASgJSAASDQoDcHV0GAMgASgJSAASDgoEcG9zdBgEIAEoCUgAEhAKBmRlbGV0ZRgFIAEoCUgAEg8KBXBhdGNoGAYgASgJSAASLwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAEgwKBGJvZHkYByABKAkSFQoNcmVzcG9uc2VfYm9keRgMIAEoCRIxChNhZGRpdGlvbmFsX2JpbmRpbmdzGAsgAygLMhQuZ29vZ2xlLmFwaS5IdHRwUnVsZUIJCgdwYXR0ZXJuIi8KEUN1c3RvbUh0dHBQYXR0ZXJuEgwKBGtpbmQYASABKAkSDAoEcGF0aBgCIAEoCUJnCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIER0FQSWIGcHJvdG8z\");\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * @generated from message google.api.Http\n */\nexport type Http = Message<\"google.api.Http\"> & {\n /**\n * A list of HTTP configuration rules that apply to individual API methods.\n *\n * **NOTE:** All service configuration rules follow \"last one wins\" order.\n *\n * @generated from field: repeated google.api.HttpRule rules = 1;\n */\n rules: HttpRule[];\n\n /**\n * When set to true, URL path parameters will be fully URI-decoded except in\n * cases of single segment matches in reserved expansion, where \"%2F\" will be\n * left encoded.\n *\n * The default behavior is to not decode RFC 6570 reserved characters in multi\n * segment matches.\n *\n * @generated from field: bool fully_decode_reserved_expansion = 2;\n */\n fullyDecodeReservedExpansion: boolean;\n};\n\n/**\n * Defines the HTTP configuration for an API service. It contains a list of\n * [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method\n * to one or more HTTP REST API methods.\n *\n * @generated from message google.api.Http\n */\nexport type HttpJson = {\n /**\n * A list of HTTP configuration rules that apply to individual API methods.\n *\n * **NOTE:** All service configuration rules follow \"last one wins\" order.\n *\n * @generated from field: repeated google.api.HttpRule rules = 1;\n */\n rules?: HttpRuleJson[];\n\n /**\n * When set to true, URL path parameters will be fully URI-decoded except in\n * cases of single segment matches in reserved expansion, where \"%2F\" will be\n * left encoded.\n *\n * The default behavior is to not decode RFC 6570 reserved characters in multi\n * segment matches.\n *\n * @generated from field: bool fully_decode_reserved_expansion = 2;\n */\n fullyDecodeReservedExpansion?: boolean;\n};\n\n/**\n * Describes the message google.api.Http.\n * Use `create(HttpSchema)` to create a new message.\n */\nexport const HttpSchema: GenMessage<Http, {jsonType: HttpJson}> = /*@__PURE__*/\n messageDesc(file_google_api_http, 0);\n\n/**\n * gRPC Transcoding\n *\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n *\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n *\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n *\n * Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/{name=messages/*}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * string name = 1; // Mapped to URL path.\n * }\n * message Message {\n * string text = 1; // The resource content.\n * }\n *\n * This enables an HTTP REST to gRPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n *\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get:\"/v1/messages/{message_id}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * message SubMessage {\n * string subfield = 1;\n * }\n * string message_id = 1; // Mapped to URL path.\n * int64 revision = 2; // Mapped to URL query parameter `revision`.\n * SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`.\n * }\n *\n * This enables a HTTP JSON to RPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n *\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n *\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *\n * service Messaging {\n * rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"message\"\n * };\n * }\n * }\n * message UpdateMessageRequest {\n * string message_id = 1; // mapped to the URL\n * Message message = 2; // mapped to the body\n * }\n *\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n *\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body. This enables the following alternative definition of\n * the update method:\n *\n * service Messaging {\n * rpc UpdateMessage(Message) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"*\"\n * };\n * }\n * }\n * message Message {\n * string message_id = 1;\n * string text = 2;\n * }\n *\n *\n * The following HTTP JSON to RPC mapping is enabled:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n *\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n *\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/messages/{message_id}\"\n * additional_bindings {\n * get: \"/v1/users/{user_id}/messages/{message_id}\"\n * }\n * };\n * }\n * }\n * message GetMessageRequest {\n * string message_id = 1;\n * string user_id = 2;\n * }\n *\n * This enables the following two alternative HTTP JSON to RPC mappings:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n *\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n *\n * Rules for HTTP mapping\n *\n * 1. Leaf request fields (recursive expansion nested messages in the request\n * message) are classified into three categories:\n * - Fields referred by the path template. They are passed via the URL path.\n * - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n * are passed via the HTTP\n * request body.\n * - All other fields are passed via the URL query parameters, and the\n * parameter name is the field path in the request message. A repeated\n * field can be represented as multiple query parameters under the same\n * name.\n * 2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n * query parameter, all fields\n * are passed via URL path and HTTP request body.\n * 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n * request body, all\n * fields are passed via URL path and URL query parameters.\n *\n * Path template syntax\n *\n * Template = \"/\" Segments [ Verb ] ;\n * Segments = Segment { \"/\" Segment } ;\n * Segment = \"*\" | \"**\" | LITERAL | Variable ;\n * Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n * FieldPath = IDENT { \".\" IDENT } ;\n * Verb = \":\" LITERAL ;\n *\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n *\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n *\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n *\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n *\n * If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n *\n * Using gRPC API Service Configuration\n *\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n *\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n *\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *\n * http:\n * rules:\n * - selector: example.v1.Messaging.GetMessage\n * get: /v1/messages/{message_id}/{sub.subfield}\n *\n * Special notes\n *\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n *\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n *\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n *\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n *\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n *\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * @generated from message google.api.HttpRule\n */\nexport type HttpRule = Message<\"google.api.HttpRule\"> & {\n /**\n * Selects a method to which this rule applies.\n *\n * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n * details.\n *\n * @generated from field: string selector = 1;\n */\n selector: string;\n\n /**\n * Determines the URL pattern is matched by this rules. This pattern can be\n * used with any of the {get|put|post|delete|patch} methods. A custom method\n * can be defined using the 'custom' field.\n *\n * @generated from oneof google.api.HttpRule.pattern\n */\n pattern: {\n /**\n * Maps to HTTP GET. Used for listing and getting information about\n * resources.\n *\n * @generated from field: string get = 2;\n */\n value: string;\n case: \"get\";\n } | {\n /**\n * Maps to HTTP PUT. Used for replacing a resource.\n *\n * @generated from field: string put = 3;\n */\n value: string;\n case: \"put\";\n } | {\n /**\n * Maps to HTTP POST. Used for creating a resource or performing an action.\n *\n * @generated from field: string post = 4;\n */\n value: string;\n case: \"post\";\n } | {\n /**\n * Maps to HTTP DELETE. Used for deleting a resource.\n *\n * @generated from field: string delete = 5;\n */\n value: string;\n case: \"delete\";\n } | {\n /**\n * Maps to HTTP PATCH. Used for updating a resource.\n *\n * @generated from field: string patch = 6;\n */\n value: string;\n case: \"patch\";\n } | {\n /**\n * The custom pattern is used for specifying an HTTP method that is not\n * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n * HTTP method unspecified for this rule. The wild-card rule is useful\n * for services that provide content to Web (HTML) clients.\n *\n * @generated from field: google.api.CustomHttpPattern custom = 8;\n */\n value: CustomHttpPattern;\n case: \"custom\";\n } | { case: undefined; value?: undefined };\n\n /**\n * The name of the request field whose value is mapped to the HTTP request\n * body, or `*` for mapping all request fields not captured by the path\n * pattern to the HTTP body, or omitted for not having any HTTP request body.\n *\n * NOTE: the referred field must be present at the top-level of the request\n * message type.\n *\n * @generated from field: string body = 7;\n */\n body: string;\n\n /**\n * Optional. The name of the response field whose value is mapped to the HTTP\n * response body. When omitted, the entire response message will be used\n * as the HTTP response body.\n *\n * NOTE: The referred field must be present at the top-level of the response\n * message type.\n *\n * @generated from field: string response_body = 12;\n */\n responseBody: string;\n\n /**\n * Additional HTTP bindings for the selector. Nested bindings must\n * not contain an `additional_bindings` field themselves (that is,\n * the nesting may only be one level deep).\n *\n * @generated from field: repeated google.api.HttpRule additional_bindings = 11;\n */\n additionalBindings: HttpRule[];\n};\n\n/**\n * gRPC Transcoding\n *\n * gRPC Transcoding is a feature for mapping between a gRPC method and one or\n * more HTTP REST endpoints. It allows developers to build a single API service\n * that supports both gRPC APIs and REST APIs. Many systems, including [Google\n * APIs](https://github.com/googleapis/googleapis),\n * [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC\n * Gateway](https://github.com/grpc-ecosystem/grpc-gateway),\n * and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature\n * and use it for large scale production services.\n *\n * `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies\n * how different portions of the gRPC request message are mapped to the URL\n * path, URL query parameters, and HTTP request body. It also controls how the\n * gRPC response message is mapped to the HTTP response body. `HttpRule` is\n * typically specified as an `google.api.http` annotation on the gRPC method.\n *\n * Each mapping specifies a URL path template and an HTTP method. The path\n * template may refer to one or more fields in the gRPC request message, as long\n * as each field is a non-repeated field with a primitive (non-message) type.\n * The path template controls how fields of the request message are mapped to\n * the URL path.\n *\n * Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/{name=messages/*}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * string name = 1; // Mapped to URL path.\n * }\n * message Message {\n * string text = 1; // The resource content.\n * }\n *\n * This enables an HTTP REST to gRPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(name: \"messages/123456\")`\n *\n * Any fields in the request message which are not bound by the path template\n * automatically become HTTP query parameters if there is no HTTP request body.\n * For example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get:\"/v1/messages/{message_id}\"\n * };\n * }\n * }\n * message GetMessageRequest {\n * message SubMessage {\n * string subfield = 1;\n * }\n * string message_id = 1; // Mapped to URL path.\n * int64 revision = 2; // Mapped to URL query parameter `revision`.\n * SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`.\n * }\n *\n * This enables a HTTP JSON to RPC mapping as below:\n *\n * - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo`\n * - gRPC: `GetMessage(message_id: \"123456\" revision: 2 sub:\n * SubMessage(subfield: \"foo\"))`\n *\n * Note that fields which are mapped to URL query parameters must have a\n * primitive type or a repeated primitive type or a non-repeated message type.\n * In the case of a repeated type, the parameter can be repeated in the URL\n * as `...?param=A&param=B`. In the case of a message type, each field of the\n * message is mapped to a separate parameter, such as\n * `...?foo.a=A&foo.b=B&foo.c=C`.\n *\n * For HTTP methods that allow a request body, the `body` field\n * specifies the mapping. Consider a REST update method on the\n * message resource collection:\n *\n * service Messaging {\n * rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"message\"\n * };\n * }\n * }\n * message UpdateMessageRequest {\n * string message_id = 1; // mapped to the URL\n * Message message = 2; // mapped to the body\n * }\n *\n * The following HTTP JSON to RPC mapping is enabled, where the\n * representation of the JSON in the request body is determined by\n * protos JSON encoding:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n *\n * The special name `*` can be used in the body mapping to define that\n * every field not bound by the path template should be mapped to the\n * request body. This enables the following alternative definition of\n * the update method:\n *\n * service Messaging {\n * rpc UpdateMessage(Message) returns (Message) {\n * option (google.api.http) = {\n * patch: \"/v1/messages/{message_id}\"\n * body: \"*\"\n * };\n * }\n * }\n * message Message {\n * string message_id = 1;\n * string text = 2;\n * }\n *\n *\n * The following HTTP JSON to RPC mapping is enabled:\n *\n * - HTTP: `PATCH /v1/messages/123456 { \"text\": \"Hi!\" }`\n * - gRPC: `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n *\n * Note that when using `*` in the body mapping, it is not possible to\n * have HTTP parameters, as all fields not bound by the path end in\n * the body. This makes this option more rarely used in practice when\n * defining REST APIs. The common usage of `*` is in custom methods\n * which don't use the URL at all for transferring data.\n *\n * It is possible to define multiple HTTP methods for one RPC by using\n * the `additional_bindings` option. Example:\n *\n * service Messaging {\n * rpc GetMessage(GetMessageRequest) returns (Message) {\n * option (google.api.http) = {\n * get: \"/v1/messages/{message_id}\"\n * additional_bindings {\n * get: \"/v1/users/{user_id}/messages/{message_id}\"\n * }\n * };\n * }\n * }\n * message GetMessageRequest {\n * string message_id = 1;\n * string user_id = 2;\n * }\n *\n * This enables the following two alternative HTTP JSON to RPC mappings:\n *\n * - HTTP: `GET /v1/messages/123456`\n * - gRPC: `GetMessage(message_id: \"123456\")`\n *\n * - HTTP: `GET /v1/users/me/messages/123456`\n * - gRPC: `GetMessage(user_id: \"me\" message_id: \"123456\")`\n *\n * Rules for HTTP mapping\n *\n * 1. Leaf request fields (recursive expansion nested messages in the request\n * message) are classified into three categories:\n * - Fields referred by the path template. They are passed via the URL path.\n * - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They\n * are passed via the HTTP\n * request body.\n * - All other fields are passed via the URL query parameters, and the\n * parameter name is the field path in the request message. A repeated\n * field can be represented as multiple query parameters under the same\n * name.\n * 2. If [HttpRule.body][google.api.HttpRule.body] is \"*\", there is no URL\n * query parameter, all fields\n * are passed via URL path and HTTP request body.\n * 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP\n * request body, all\n * fields are passed via URL path and URL query parameters.\n *\n * Path template syntax\n *\n * Template = \"/\" Segments [ Verb ] ;\n * Segments = Segment { \"/\" Segment } ;\n * Segment = \"*\" | \"**\" | LITERAL | Variable ;\n * Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n * FieldPath = IDENT { \".\" IDENT } ;\n * Verb = \":\" LITERAL ;\n *\n * The syntax `*` matches a single URL path segment. The syntax `**` matches\n * zero or more URL path segments, which must be the last part of the URL path\n * except the `Verb`.\n *\n * The syntax `Variable` matches part of the URL path as specified by its\n * template. A variable template must not contain other variables. If a variable\n * matches a single path segment, its template may be omitted, e.g. `{var}`\n * is equivalent to `{var=*}`.\n *\n * The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL`\n * contains any reserved character, such characters should be percent-encoded\n * before the matching.\n *\n * If a variable contains exactly one path segment, such as `\"{var}\"` or\n * `\"{var=*}\"`, when such a variable is expanded into a URL path on the client\n * side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The\n * server side does the reverse decoding. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{var}`.\n *\n * If a variable contains multiple path segments, such as `\"{var=foo/*}\"`\n * or `\"{var=**}\"`, when such a variable is expanded into a URL path on the\n * client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded.\n * The server side does the reverse decoding, except \"%2F\" and \"%2f\" are left\n * unchanged. Such variables show up in the\n * [Discovery\n * Document](https://developers.google.com/discovery/v1/reference/apis) as\n * `{+var}`.\n *\n * Using gRPC API Service Configuration\n *\n * gRPC API Service Configuration (service config) is a configuration language\n * for configuring a gRPC service to become a user-facing product. The\n * service config is simply the YAML representation of the `google.api.Service`\n * proto message.\n *\n * As an alternative to annotating your proto file, you can configure gRPC\n * transcoding in your service config YAML files. You do this by specifying a\n * `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same\n * effect as the proto annotation. This can be particularly useful if you\n * have a proto that is reused in multiple services. Note that any transcoding\n * specified in the service config will override any matching transcoding\n * configuration in the proto.\n *\n * The following example selects a gRPC method and applies an `HttpRule` to it:\n *\n * http:\n * rules:\n * - selector: example.v1.Messaging.GetMessage\n * get: /v1/messages/{message_id}/{sub.subfield}\n *\n * Special notes\n *\n * When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the\n * proto to JSON conversion must follow the [proto3\n * specification](https://developers.google.com/protocol-buffers/docs/proto3#json).\n *\n * While the single segment variable follows the semantics of\n * [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\n * Expansion, the multi segment variable **does not** follow RFC 6570 Section\n * 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion\n * does not expand special characters like `?` and `#`, which would lead\n * to invalid URLs. As the result, gRPC Transcoding uses a custom encoding\n * for multi segment variables.\n *\n * The path variables **must not** refer to any repeated or mapped field,\n * because client libraries are not capable of handling such variable expansion.\n *\n * The path variables **must not** capture the leading \"/\" character. The reason\n * is that the most common use case \"{var}\" does not capture the leading \"/\"\n * character. For consistency, all path variables must share the same behavior.\n *\n * Repeated message fields must not be mapped to URL query parameters, because\n * no client library can support such complicated mapping.\n *\n * If an API needs to use a JSON array for request or response body, it can map\n * the request or response body to a repeated field. However, some gRPC\n * Transcoding implementations may not support this feature.\n *\n * @generated from message google.api.HttpRule\n */\nexport type HttpRuleJson = {\n /**\n * Selects a method to which this rule applies.\n *\n * Refer to [selector][google.api.DocumentationRule.selector] for syntax\n * details.\n *\n * @generated from field: string selector = 1;\n */\n selector?: string;\n\n /**\n * Maps to HTTP GET. Used for listing and getting information about\n * resources.\n *\n * @generated from field: string get = 2;\n */\n get?: string;\n\n /**\n * Maps to HTTP PUT. Used for replacing a resource.\n *\n * @generated from field: string put = 3;\n */\n put?: string;\n\n /**\n * Maps to HTTP POST. Used for creating a resource or performing an action.\n *\n * @generated from field: string post = 4;\n */\n post?: string;\n\n /**\n * Maps to HTTP DELETE. Used for deleting a resource.\n *\n * @generated from field: string delete = 5;\n */\n delete?: string;\n\n /**\n * Maps to HTTP PATCH. Used for updating a resource.\n *\n * @generated from field: string patch = 6;\n */\n patch?: string;\n\n /**\n * The custom pattern is used for specifying an HTTP method that is not\n * included in the `pattern` field, such as HEAD, or \"*\" to leave the\n * HTTP method unspecified for this rule. The wild-card rule is useful\n * for services that provide content to Web (HTML) clients.\n *\n * @generated from field: google.api.CustomHttpPattern custom = 8;\n */\n custom?: CustomHttpPatternJson;\n\n /**\n * The name of the request field whose value is mapped to the HTTP request\n * body, or `*` for mapping all request fields not captured by the path\n * pattern to the HTTP body, or omitted for not having any HTTP request body.\n *\n * NOTE: the referred field must be present at the top-level of the request\n * message type.\n *\n * @generated from field: string body = 7;\n */\n body?: string;\n\n /**\n * Optional. The name of the response field whose value is mapped to the HTTP\n * response body. When omitted, the entire response message will be used\n * as the HTTP response body.\n *\n * NOTE: The referred field must be present at the top-level of the response\n * message type.\n *\n * @generated from field: string response_body = 12;\n */\n responseBody?: string;\n\n /**\n * Additional HTTP bindings for the selector. Nested bindings must\n * not contain an `additional_bindings` field themselves (that is,\n * the nesting may only be one level deep).\n *\n * @generated from field: repeated google.api.HttpRule additional_bindings = 11;\n */\n additionalBindings?: HttpRuleJson[];\n};\n\n/**\n * Describes the message google.api.HttpRule.\n * Use `create(HttpRuleSchema)` to create a new message.\n */\nexport const HttpRuleSchema: GenMessage<HttpRule, {jsonType: HttpRuleJson}> = /*@__PURE__*/\n messageDesc(file_google_api_http, 1);\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * @generated from message google.api.CustomHttpPattern\n */\nexport type CustomHttpPattern = Message<\"google.api.CustomHttpPattern\"> & {\n /**\n * The name of this custom HTTP verb.\n *\n * @generated from field: string kind = 1;\n */\n kind: string;\n\n /**\n * The path matched by this custom verb.\n *\n * @generated from field: string path = 2;\n */\n path: string;\n};\n\n/**\n * A custom pattern is used for defining custom HTTP verb.\n *\n * @generated from message google.api.CustomHttpPattern\n */\nexport type CustomHttpPatternJson = {\n /**\n * The name of this custom HTTP verb.\n *\n * @generated from field: string kind = 1;\n */\n kind?: string;\n\n /**\n * The path matched by this custom verb.\n *\n * @generated from field: string path = 2;\n */\n path?: string;\n};\n\n/**\n * Describes the message google.api.CustomHttpPattern.\n * Use `create(CustomHttpPatternSchema)` to create a new message.\n */\nexport const CustomHttpPatternSchema: GenMessage<CustomHttpPattern, {jsonType: CustomHttpPatternJson}> = /*@__PURE__*/\n messageDesc(file_google_api_http, 2);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/client.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenExtension, GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, extDesc, fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { LaunchStage, LaunchStageJson } from \"./launch_stage_pb\";\nimport { file_google_api_launch_stage } from \"./launch_stage_pb\";\nimport type { Duration, DurationJson, MethodOptions, ServiceOptions } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file google/api/client.proto.\n */\nexport const file_google_api_client: GenFile = /*@__PURE__*/\n fileDesc(\"Chdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaSK+AQoWQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxIeChJyZWZlcmVuY2VfZG9jc191cmkYASABKAlCAhgBEjoKDGRlc3RpbmF0aW9ucxgCIAMoDjIkLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeURlc3RpbmF0aW9uEkgKGnNlbGVjdGl2ZV9nYXBpY19nZW5lcmF0aW9uGAMgASgLMiQuZ29vZ2xlLmFwaS5TZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24i+wMKFUNsaWVudExpYnJhcnlTZXR0aW5ncxIPCgd2ZXJzaW9uGAEgASgJEi0KDGxhdW5jaF9zdGFnZRgCIAEoDjIXLmdvb2dsZS5hcGkuTGF1bmNoU3RhZ2USGgoScmVzdF9udW1lcmljX2VudW1zGAMgASgIEi8KDWphdmFfc2V0dGluZ3MYFSABKAsyGC5nb29nbGUuYXBpLkphdmFTZXR0aW5ncxItCgxjcHBfc2V0dGluZ3MYFiABKAsyFy5nb29nbGUuYXBpLkNwcFNldHRpbmdzEi0KDHBocF9zZXR0aW5ncxgXIAEoCzIXLmdvb2dsZS5hcGkuUGhwU2V0dGluZ3MSMwoPcHl0aG9uX3NldHRpbmdzGBggASgLMhouZ29vZ2xlLmFwaS5QeXRob25TZXR0aW5ncxIvCg1ub2RlX3NldHRpbmdzGBkgASgLMhguZ29vZ2xlLmFwaS5Ob2RlU2V0dGluZ3MSMwoPZG90bmV0X3NldHRpbmdzGBogASgLMhouZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncxIvCg1ydWJ5X3NldHRpbmdzGBsgASgLMhguZ29vZ2xlLmFwaS5SdWJ5U2V0dGluZ3MSKwoLZ29fc2V0dGluZ3MYHCABKAsyFi5nb29nbGUuYXBpLkdvU2V0dGluZ3MiqAMKClB1Ymxpc2hpbmcSMwoPbWV0aG9kX3NldHRpbmdzGAIgAygLMhouZ29vZ2xlLmFwaS5NZXRob2RTZXR0aW5ncxIVCg1uZXdfaXNzdWVfdXJpGGUgASgJEhkKEWRvY3VtZW50YXRpb25fdXJpGGYgASgJEhYKDmFwaV9zaG9ydF9uYW1lGGcgASgJEhQKDGdpdGh1Yl9sYWJlbBhoIAEoCRIeChZjb2Rlb3duZXJfZ2l0aHViX3RlYW1zGGkgAygJEhYKDmRvY190YWdfcHJlZml4GGogASgJEjsKDG9yZ2FuaXphdGlvbhhrIAEoDjIlLmdvb2dsZS5hcGkuQ2xpZW50TGlicmFyeU9yZ2FuaXphdGlvbhI7ChBsaWJyYXJ5X3NldHRpbmdzGG0gAygLMiEuZ29vZ2xlLmFwaS5DbGllbnRMaWJyYXJ5U2V0dGluZ3MSKQohcHJvdG9fcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG4gASgJEigKIHJlc3RfcmVmZXJlbmNlX2RvY3VtZW50YXRpb25fdXJpGG8gASgJIuMBCgxKYXZhU2V0dGluZ3MSFwoPbGlicmFyeV9wYWNrYWdlGAEgASgJEkwKE3NlcnZpY2VfY2xhc3NfbmFtZXMYAiADKAsyLy5nb29nbGUuYXBpLkphdmFTZXR0aW5ncy5TZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EjIKBmNvbW1vbhgDIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxo4ChZTZXJ2aWNlQ2xhc3NOYW1lc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiQQoLQ3BwU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIkEKC1BocFNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKbAgoOUHl0aG9uU2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEk4KFWV4cGVyaW1lbnRhbF9mZWF0dXJlcxgCIAEoCzIvLmdvb2dsZS5hcGkuUHl0aG9uU2V0dGluZ3MuRXhwZXJpbWVudGFsRmVhdHVyZXMahAEKFEV4cGVyaW1lbnRhbEZlYXR1cmVzEh0KFXJlc3RfYXN5bmNfaW9fZW5hYmxlZBgBIAEoCBInCh9wcm90b2J1Zl9weXRob25pY190eXBlc19lbmFibGVkGAIgASgIEiQKHHVudmVyc2lvbmVkX3BhY2thZ2VfZGlzYWJsZWQYAyABKAgiQgoMTm9kZVNldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncyKqAwoORG90bmV0U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzEkkKEHJlbmFtZWRfc2VydmljZXMYAiADKAsyLy5nb29nbGUuYXBpLkRvdG5ldFNldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5EksKEXJlbmFtZWRfcmVzb3VyY2VzGAMgAygLMjAuZ29vZ2xlLmFwaS5Eb3RuZXRTZXR0aW5ncy5SZW5hbWVkUmVzb3VyY2VzRW50cnkSGQoRaWdub3JlZF9yZXNvdXJjZXMYBCADKAkSIAoYZm9yY2VkX25hbWVzcGFjZV9hbGlhc2VzGAUgAygJEh4KFmhhbmR3cml0dGVuX3NpZ25hdHVyZXMYBiADKAkaNgoUUmVuYW1lZFNlcnZpY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo3ChVSZW5hbWVkUmVzb3VyY2VzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJCCgxSdWJ5U2V0dGluZ3MSMgoGY29tbW9uGAEgASgLMiIuZ29vZ2xlLmFwaS5Db21tb25MYW5ndWFnZVNldHRpbmdzIr8BCgpHb1NldHRpbmdzEjIKBmNvbW1vbhgBIAEoCzIiLmdvb2dsZS5hcGkuQ29tbW9uTGFuZ3VhZ2VTZXR0aW5ncxJFChByZW5hbWVkX3NlcnZpY2VzGAIgAygLMisuZ29vZ2xlLmFwaS5Hb1NldHRpbmdzLlJlbmFtZWRTZXJ2aWNlc0VudHJ5GjYKFFJlbmFtZWRTZXJ2aWNlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEizwIKDk1ldGhvZFNldHRpbmdzEhAKCHNlbGVjdG9yGAEgASgJEjwKDGxvbmdfcnVubmluZxgCIAEoCzImLmdvb2dsZS5hcGkuTWV0aG9kU2V0dGluZ3MuTG9uZ1J1bm5pbmcSHQoVYXV0b19wb3B1bGF0ZWRfZmllbGRzGAMgAygJGs0BCgtMb25nUnVubmluZxI1ChJpbml0aWFsX3BvbGxfZGVsYXkYASABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SHQoVcG9sbF9kZWxheV9tdWx0aXBsaWVyGAIgASgCEjEKDm1heF9wb2xsX2RlbGF5GAMgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjUKEnRvdGFsX3BvbGxfdGltZW91dBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiJRChhTZWxlY3RpdmVHYXBpY0dlbmVyYXRpb24SDwoHbWV0aG9kcxgBIAMoCRIkChxnZW5lcmF0ZV9vbWl0dGVkX2FzX2ludGVybmFsGAIgASgIKqMBChlDbGllbnRMaWJyYXJ5T3JnYW5pemF0aW9uEisKJ0NMSUVOVF9MSUJSQVJZX09SR0FOSVpBVElPTl9VTlNQRUNJRklFRBAAEgkKBUNMT1VEEAESBwoDQURTEAISCgoGUEhPVE9TEAMSDwoLU1RSRUVUX1ZJRVcQBBIMCghTSE9QUElORxAFEgcKA0dFTxAGEhEKDUdFTkVSQVRJVkVfQUkQBypnChhDbGllbnRMaWJyYXJ5RGVzdGluYXRpb24SKgomQ0xJRU5UX0xJQlJBUllfREVTVElOQVRJT05fVU5TUEVDSUZJRUQQABIKCgZHSVRIVUIQChITCg9QQUNLQUdFX01BTkFHRVIQFDpKChBtZXRob2Rfc2lnbmF0dXJlEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYmwggAygJUg9tZXRob2RTaWduYXR1cmU6QwoMZGVmYXVsdF9ob3N0Eh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJkIIAEoCVILZGVmYXVsdEhvc3Q6QwoMb2F1dGhfc2NvcGVzEh8uZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VPcHRpb25zGJoIIAEoCVILb2F1dGhTY29wZXM6RAoLYXBpX3ZlcnNpb24SHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMYwbqr+gEgASgJUgphcGlWZXJzaW9uQmkKDmNvbS5nb29nbGUuYXBpQgtDbGllbnRQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMw\", [file_google_api_launch_stage, file_google_protobuf_descriptor, file_google_protobuf_duration]);\n\n/**\n * Required information for every language.\n *\n * @generated from message google.api.CommonLanguageSettings\n */\nexport type CommonLanguageSettings = Message<\"google.api.CommonLanguageSettings\"> & {\n /**\n * Link to automatically generated reference documentation. Example:\n * https://cloud.google.com/nodejs/docs/reference/asset/latest\n *\n * @generated from field: string reference_docs_uri = 1 [deprecated = true];\n * @deprecated\n */\n referenceDocsUri: string;\n\n /**\n * The destination where API teams want this client library to be published.\n *\n * @generated from field: repeated google.api.ClientLibraryDestination destinations = 2;\n */\n destinations: ClientLibraryDestination[];\n\n /**\n * Configuration for which RPCs should be generated in the GAPIC client.\n *\n * @generated from field: google.api.SelectiveGapicGeneration selective_gapic_generation = 3;\n */\n selectiveGapicGeneration?: SelectiveGapicGeneration;\n};\n\n/**\n * Required information for every language.\n *\n * @generated from message google.api.CommonLanguageSettings\n */\nexport type CommonLanguageSettingsJson = {\n /**\n * Link to automatically generated reference documentation. Example:\n * https://cloud.google.com/nodejs/docs/reference/asset/latest\n *\n * @generated from field: string reference_docs_uri = 1 [deprecated = true];\n * @deprecated\n */\n referenceDocsUri?: string;\n\n /**\n * The destination where API teams want this client library to be published.\n *\n * @generated from field: repeated google.api.ClientLibraryDestination destinations = 2;\n */\n destinations?: ClientLibraryDestinationJson[];\n\n /**\n * Configuration for which RPCs should be generated in the GAPIC client.\n *\n * @generated from field: google.api.SelectiveGapicGeneration selective_gapic_generation = 3;\n */\n selectiveGapicGeneration?: SelectiveGapicGenerationJson;\n};\n\n/**\n * Describes the message google.api.CommonLanguageSettings.\n * Use `create(CommonLanguageSettingsSchema)` to create a new message.\n */\nexport const CommonLanguageSettingsSchema: GenMessage<CommonLanguageSettings, {jsonType: CommonLanguageSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 0);\n\n/**\n * Details about how and where to publish client libraries.\n *\n * @generated from message google.api.ClientLibrarySettings\n */\nexport type ClientLibrarySettings = Message<\"google.api.ClientLibrarySettings\"> & {\n /**\n * Version of the API to apply these settings to. This is the full protobuf\n * package for the API, ending in the version element.\n * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n *\n * @generated from field: string version = 1;\n */\n version: string;\n\n /**\n * Launch stage of this version of the API.\n *\n * @generated from field: google.api.LaunchStage launch_stage = 2;\n */\n launchStage: LaunchStage;\n\n /**\n * When using transport=rest, the client request will encode enums as\n * numbers rather than strings.\n *\n * @generated from field: bool rest_numeric_enums = 3;\n */\n restNumericEnums: boolean;\n\n /**\n * Settings for legacy Java features, supported in the Service YAML.\n *\n * @generated from field: google.api.JavaSettings java_settings = 21;\n */\n javaSettings?: JavaSettings;\n\n /**\n * Settings for C++ client libraries.\n *\n * @generated from field: google.api.CppSettings cpp_settings = 22;\n */\n cppSettings?: CppSettings;\n\n /**\n * Settings for PHP client libraries.\n *\n * @generated from field: google.api.PhpSettings php_settings = 23;\n */\n phpSettings?: PhpSettings;\n\n /**\n * Settings for Python client libraries.\n *\n * @generated from field: google.api.PythonSettings python_settings = 24;\n */\n pythonSettings?: PythonSettings;\n\n /**\n * Settings for Node client libraries.\n *\n * @generated from field: google.api.NodeSettings node_settings = 25;\n */\n nodeSettings?: NodeSettings;\n\n /**\n * Settings for .NET client libraries.\n *\n * @generated from field: google.api.DotnetSettings dotnet_settings = 26;\n */\n dotnetSettings?: DotnetSettings;\n\n /**\n * Settings for Ruby client libraries.\n *\n * @generated from field: google.api.RubySettings ruby_settings = 27;\n */\n rubySettings?: RubySettings;\n\n /**\n * Settings for Go client libraries.\n *\n * @generated from field: google.api.GoSettings go_settings = 28;\n */\n goSettings?: GoSettings;\n};\n\n/**\n * Details about how and where to publish client libraries.\n *\n * @generated from message google.api.ClientLibrarySettings\n */\nexport type ClientLibrarySettingsJson = {\n /**\n * Version of the API to apply these settings to. This is the full protobuf\n * package for the API, ending in the version element.\n * Examples: \"google.cloud.speech.v1\" and \"google.spanner.admin.database.v1\".\n *\n * @generated from field: string version = 1;\n */\n version?: string;\n\n /**\n * Launch stage of this version of the API.\n *\n * @generated from field: google.api.LaunchStage launch_stage = 2;\n */\n launchStage?: LaunchStageJson;\n\n /**\n * When using transport=rest, the client request will encode enums as\n * numbers rather than strings.\n *\n * @generated from field: bool rest_numeric_enums = 3;\n */\n restNumericEnums?: boolean;\n\n /**\n * Settings for legacy Java features, supported in the Service YAML.\n *\n * @generated from field: google.api.JavaSettings java_settings = 21;\n */\n javaSettings?: JavaSettingsJson;\n\n /**\n * Settings for C++ client libraries.\n *\n * @generated from field: google.api.CppSettings cpp_settings = 22;\n */\n cppSettings?: CppSettingsJson;\n\n /**\n * Settings for PHP client libraries.\n *\n * @generated from field: google.api.PhpSettings php_settings = 23;\n */\n phpSettings?: PhpSettingsJson;\n\n /**\n * Settings for Python client libraries.\n *\n * @generated from field: google.api.PythonSettings python_settings = 24;\n */\n pythonSettings?: PythonSettingsJson;\n\n /**\n * Settings for Node client libraries.\n *\n * @generated from field: google.api.NodeSettings node_settings = 25;\n */\n nodeSettings?: NodeSettingsJson;\n\n /**\n * Settings for .NET client libraries.\n *\n * @generated from field: google.api.DotnetSettings dotnet_settings = 26;\n */\n dotnetSettings?: DotnetSettingsJson;\n\n /**\n * Settings for Ruby client libraries.\n *\n * @generated from field: google.api.RubySettings ruby_settings = 27;\n */\n rubySettings?: RubySettingsJson;\n\n /**\n * Settings for Go client libraries.\n *\n * @generated from field: google.api.GoSettings go_settings = 28;\n */\n goSettings?: GoSettingsJson;\n};\n\n/**\n * Describes the message google.api.ClientLibrarySettings.\n * Use `create(ClientLibrarySettingsSchema)` to create a new message.\n */\nexport const ClientLibrarySettingsSchema: GenMessage<ClientLibrarySettings, {jsonType: ClientLibrarySettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 1);\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * @generated from message google.api.Publishing\n */\nexport type Publishing = Message<\"google.api.Publishing\"> & {\n /**\n * A list of API method settings, e.g. the behavior for methods that use the\n * long-running operation pattern.\n *\n * @generated from field: repeated google.api.MethodSettings method_settings = 2;\n */\n methodSettings: MethodSettings[];\n\n /**\n * Link to a *public* URI where users can report issues. Example:\n * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n *\n * @generated from field: string new_issue_uri = 101;\n */\n newIssueUri: string;\n\n /**\n * Link to product home page. Example:\n * https://cloud.google.com/asset-inventory/docs/overview\n *\n * @generated from field: string documentation_uri = 102;\n */\n documentationUri: string;\n\n /**\n * Used as a tracking tag when collecting data about the APIs developer\n * relations artifacts like docs, packages delivered to package managers,\n * etc. Example: \"speech\".\n *\n * @generated from field: string api_short_name = 103;\n */\n apiShortName: string;\n\n /**\n * GitHub label to apply to issues and pull requests opened for this API.\n *\n * @generated from field: string github_label = 104;\n */\n githubLabel: string;\n\n /**\n * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n * containing source code for the client libraries for this API.\n *\n * @generated from field: repeated string codeowner_github_teams = 105;\n */\n codeownerGithubTeams: string[];\n\n /**\n * A prefix used in sample code when demarking regions to be included in\n * documentation.\n *\n * @generated from field: string doc_tag_prefix = 106;\n */\n docTagPrefix: string;\n\n /**\n * For whom the client library is being published.\n *\n * @generated from field: google.api.ClientLibraryOrganization organization = 107;\n */\n organization: ClientLibraryOrganization;\n\n /**\n * Client library settings. If the same version string appears multiple\n * times in this list, then the last one wins. Settings from earlier\n * settings with the same version string are discarded.\n *\n * @generated from field: repeated google.api.ClientLibrarySettings library_settings = 109;\n */\n librarySettings: ClientLibrarySettings[];\n\n /**\n * Optional link to proto reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n *\n * @generated from field: string proto_reference_documentation_uri = 110;\n */\n protoReferenceDocumentationUri: string;\n\n /**\n * Optional link to REST reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rest\n *\n * @generated from field: string rest_reference_documentation_uri = 111;\n */\n restReferenceDocumentationUri: string;\n};\n\n/**\n * This message configures the settings for publishing [Google Cloud Client\n * libraries](https://cloud.google.com/apis/docs/cloud-client-libraries)\n * generated from the service config.\n *\n * @generated from message google.api.Publishing\n */\nexport type PublishingJson = {\n /**\n * A list of API method settings, e.g. the behavior for methods that use the\n * long-running operation pattern.\n *\n * @generated from field: repeated google.api.MethodSettings method_settings = 2;\n */\n methodSettings?: MethodSettingsJson[];\n\n /**\n * Link to a *public* URI where users can report issues. Example:\n * https://issuetracker.google.com/issues/new?component=190865&template=1161103\n *\n * @generated from field: string new_issue_uri = 101;\n */\n newIssueUri?: string;\n\n /**\n * Link to product home page. Example:\n * https://cloud.google.com/asset-inventory/docs/overview\n *\n * @generated from field: string documentation_uri = 102;\n */\n documentationUri?: string;\n\n /**\n * Used as a tracking tag when collecting data about the APIs developer\n * relations artifacts like docs, packages delivered to package managers,\n * etc. Example: \"speech\".\n *\n * @generated from field: string api_short_name = 103;\n */\n apiShortName?: string;\n\n /**\n * GitHub label to apply to issues and pull requests opened for this API.\n *\n * @generated from field: string github_label = 104;\n */\n githubLabel?: string;\n\n /**\n * GitHub teams to be added to CODEOWNERS in the directory in GitHub\n * containing source code for the client libraries for this API.\n *\n * @generated from field: repeated string codeowner_github_teams = 105;\n */\n codeownerGithubTeams?: string[];\n\n /**\n * A prefix used in sample code when demarking regions to be included in\n * documentation.\n *\n * @generated from field: string doc_tag_prefix = 106;\n */\n docTagPrefix?: string;\n\n /**\n * For whom the client library is being published.\n *\n * @generated from field: google.api.ClientLibraryOrganization organization = 107;\n */\n organization?: ClientLibraryOrganizationJson;\n\n /**\n * Client library settings. If the same version string appears multiple\n * times in this list, then the last one wins. Settings from earlier\n * settings with the same version string are discarded.\n *\n * @generated from field: repeated google.api.ClientLibrarySettings library_settings = 109;\n */\n librarySettings?: ClientLibrarySettingsJson[];\n\n /**\n * Optional link to proto reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rpc\n *\n * @generated from field: string proto_reference_documentation_uri = 110;\n */\n protoReferenceDocumentationUri?: string;\n\n /**\n * Optional link to REST reference documentation. Example:\n * https://cloud.google.com/pubsub/lite/docs/reference/rest\n *\n * @generated from field: string rest_reference_documentation_uri = 111;\n */\n restReferenceDocumentationUri?: string;\n};\n\n/**\n * Describes the message google.api.Publishing.\n * Use `create(PublishingSchema)` to create a new message.\n */\nexport const PublishingSchema: GenMessage<Publishing, {jsonType: PublishingJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 2);\n\n/**\n * Settings for Java client libraries.\n *\n * @generated from message google.api.JavaSettings\n */\nexport type JavaSettings = Message<\"google.api.JavaSettings\"> & {\n /**\n * The package name to use in Java. Clobbers the java_package option\n * set in the protobuf. This should be used **only** by APIs\n * who have already set the language_settings.java.package_name\" field\n * in gapic.yaml. API teams should use the protobuf java_package option\n * where possible.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * library_package: com.google.cloud.pubsub.v1\n *\n * @generated from field: string library_package = 1;\n */\n libraryPackage: string;\n\n /**\n * Configure the Java class name to use instead of the service's for its\n * corresponding generated GAPIC client. Keys are fully-qualified\n * service names as they appear in the protobuf (including the full\n * the language_settings.java.interface_names\" field in gapic.yaml. API\n * teams should otherwise use the service name as it appears in the\n * protobuf.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * service_class_names:\n * - google.pubsub.v1.Publisher: TopicAdmin\n * - google.pubsub.v1.Subscriber: SubscriptionAdmin\n *\n * @generated from field: map<string, string> service_class_names = 2;\n */\n serviceClassNames: { [key: string]: string };\n\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 3;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Java client libraries.\n *\n * @generated from message google.api.JavaSettings\n */\nexport type JavaSettingsJson = {\n /**\n * The package name to use in Java. Clobbers the java_package option\n * set in the protobuf. This should be used **only** by APIs\n * who have already set the language_settings.java.package_name\" field\n * in gapic.yaml. API teams should use the protobuf java_package option\n * where possible.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * library_package: com.google.cloud.pubsub.v1\n *\n * @generated from field: string library_package = 1;\n */\n libraryPackage?: string;\n\n /**\n * Configure the Java class name to use instead of the service's for its\n * corresponding generated GAPIC client. Keys are fully-qualified\n * service names as they appear in the protobuf (including the full\n * the language_settings.java.interface_names\" field in gapic.yaml. API\n * teams should otherwise use the service name as it appears in the\n * protobuf.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * java_settings:\n * service_class_names:\n * - google.pubsub.v1.Publisher: TopicAdmin\n * - google.pubsub.v1.Subscriber: SubscriptionAdmin\n *\n * @generated from field: map<string, string> service_class_names = 2;\n */\n serviceClassNames?: { [key: string]: string };\n\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 3;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.JavaSettings.\n * Use `create(JavaSettingsSchema)` to create a new message.\n */\nexport const JavaSettingsSchema: GenMessage<JavaSettings, {jsonType: JavaSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 3);\n\n/**\n * Settings for C++ client libraries.\n *\n * @generated from message google.api.CppSettings\n */\nexport type CppSettings = Message<\"google.api.CppSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for C++ client libraries.\n *\n * @generated from message google.api.CppSettings\n */\nexport type CppSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.CppSettings.\n * Use `create(CppSettingsSchema)` to create a new message.\n */\nexport const CppSettingsSchema: GenMessage<CppSettings, {jsonType: CppSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 4);\n\n/**\n * Settings for Php client libraries.\n *\n * @generated from message google.api.PhpSettings\n */\nexport type PhpSettings = Message<\"google.api.PhpSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Php client libraries.\n *\n * @generated from message google.api.PhpSettings\n */\nexport type PhpSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.PhpSettings.\n * Use `create(PhpSettingsSchema)` to create a new message.\n */\nexport const PhpSettingsSchema: GenMessage<PhpSettings, {jsonType: PhpSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 5);\n\n/**\n * Settings for Python client libraries.\n *\n * @generated from message google.api.PythonSettings\n */\nexport type PythonSettings = Message<\"google.api.PythonSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Experimental features to be included during client library generation.\n *\n * @generated from field: google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;\n */\n experimentalFeatures?: PythonSettings_ExperimentalFeatures;\n};\n\n/**\n * Settings for Python client libraries.\n *\n * @generated from message google.api.PythonSettings\n */\nexport type PythonSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n\n /**\n * Experimental features to be included during client library generation.\n *\n * @generated from field: google.api.PythonSettings.ExperimentalFeatures experimental_features = 2;\n */\n experimentalFeatures?: PythonSettings_ExperimentalFeaturesJson;\n};\n\n/**\n * Describes the message google.api.PythonSettings.\n * Use `create(PythonSettingsSchema)` to create a new message.\n */\nexport const PythonSettingsSchema: GenMessage<PythonSettings, {jsonType: PythonSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 6);\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * @generated from message google.api.PythonSettings.ExperimentalFeatures\n */\nexport type PythonSettings_ExperimentalFeatures = Message<\"google.api.PythonSettings.ExperimentalFeatures\"> & {\n /**\n * Enables generation of asynchronous REST clients if `rest` transport is\n * enabled. By default, asynchronous REST clients will not be generated.\n * This feature will be enabled by default 1 month after launching the\n * feature in preview packages.\n *\n * @generated from field: bool rest_async_io_enabled = 1;\n */\n restAsyncIoEnabled: boolean;\n\n /**\n * Enables generation of protobuf code using new types that are more\n * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n * enabled by default 1 month after launching the feature in preview\n * packages.\n *\n * @generated from field: bool protobuf_pythonic_types_enabled = 2;\n */\n protobufPythonicTypesEnabled: boolean;\n\n /**\n * Disables generation of an unversioned Python package for this client\n * library. This means that the module names will need to be versioned in\n * import statements. For example `import google.cloud.library_v2` instead\n * of `import google.cloud.library`.\n *\n * @generated from field: bool unversioned_package_disabled = 3;\n */\n unversionedPackageDisabled: boolean;\n};\n\n/**\n * Experimental features to be included during client library generation.\n * These fields will be deprecated once the feature graduates and is enabled\n * by default.\n *\n * @generated from message google.api.PythonSettings.ExperimentalFeatures\n */\nexport type PythonSettings_ExperimentalFeaturesJson = {\n /**\n * Enables generation of asynchronous REST clients if `rest` transport is\n * enabled. By default, asynchronous REST clients will not be generated.\n * This feature will be enabled by default 1 month after launching the\n * feature in preview packages.\n *\n * @generated from field: bool rest_async_io_enabled = 1;\n */\n restAsyncIoEnabled?: boolean;\n\n /**\n * Enables generation of protobuf code using new types that are more\n * Pythonic which are included in `protobuf>=5.29.x`. This feature will be\n * enabled by default 1 month after launching the feature in preview\n * packages.\n *\n * @generated from field: bool protobuf_pythonic_types_enabled = 2;\n */\n protobufPythonicTypesEnabled?: boolean;\n\n /**\n * Disables generation of an unversioned Python package for this client\n * library. This means that the module names will need to be versioned in\n * import statements. For example `import google.cloud.library_v2` instead\n * of `import google.cloud.library`.\n *\n * @generated from field: bool unversioned_package_disabled = 3;\n */\n unversionedPackageDisabled?: boolean;\n};\n\n/**\n * Describes the message google.api.PythonSettings.ExperimentalFeatures.\n * Use `create(PythonSettings_ExperimentalFeaturesSchema)` to create a new message.\n */\nexport const PythonSettings_ExperimentalFeaturesSchema: GenMessage<PythonSettings_ExperimentalFeatures, {jsonType: PythonSettings_ExperimentalFeaturesJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 6, 0);\n\n/**\n * Settings for Node client libraries.\n *\n * @generated from message google.api.NodeSettings\n */\nexport type NodeSettings = Message<\"google.api.NodeSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Node client libraries.\n *\n * @generated from message google.api.NodeSettings\n */\nexport type NodeSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.NodeSettings.\n * Use `create(NodeSettingsSchema)` to create a new message.\n */\nexport const NodeSettingsSchema: GenMessage<NodeSettings, {jsonType: NodeSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 7);\n\n/**\n * Settings for Dotnet client libraries.\n *\n * @generated from message google.api.DotnetSettings\n */\nexport type DotnetSettings = Message<\"google.api.DotnetSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Map from original service names to renamed versions.\n * This is used when the default generated types\n * would cause a naming conflict. (Neither name is\n * fully-qualified.)\n * Example: Subscriber to SubscriberServiceApi.\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices: { [key: string]: string };\n\n /**\n * Map from full resource types to the effective short name\n * for the resource. This is used when otherwise resource\n * named from different services would cause naming collisions.\n * Example entry:\n * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n *\n * @generated from field: map<string, string> renamed_resources = 3;\n */\n renamedResources: { [key: string]: string };\n\n /**\n * List of full resource types to ignore during generation.\n * This is typically used for API-specific Location resources,\n * which should be handled by the generator as if they were actually\n * the common Location resources.\n * Example entry: \"documentai.googleapis.com/Location\"\n *\n * @generated from field: repeated string ignored_resources = 4;\n */\n ignoredResources: string[];\n\n /**\n * Namespaces which must be aliased in snippets due to\n * a known (but non-generator-predictable) naming collision\n *\n * @generated from field: repeated string forced_namespace_aliases = 5;\n */\n forcedNamespaceAliases: string[];\n\n /**\n * Method signatures (in the form \"service.method(signature)\")\n * which are provided separately, so shouldn't be generated.\n * Snippets *calling* these methods are still generated, however.\n *\n * @generated from field: repeated string handwritten_signatures = 6;\n */\n handwrittenSignatures: string[];\n};\n\n/**\n * Settings for Dotnet client libraries.\n *\n * @generated from message google.api.DotnetSettings\n */\nexport type DotnetSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n\n /**\n * Map from original service names to renamed versions.\n * This is used when the default generated types\n * would cause a naming conflict. (Neither name is\n * fully-qualified.)\n * Example: Subscriber to SubscriberServiceApi.\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices?: { [key: string]: string };\n\n /**\n * Map from full resource types to the effective short name\n * for the resource. This is used when otherwise resource\n * named from different services would cause naming collisions.\n * Example entry:\n * \"datalabeling.googleapis.com/Dataset\": \"DataLabelingDataset\"\n *\n * @generated from field: map<string, string> renamed_resources = 3;\n */\n renamedResources?: { [key: string]: string };\n\n /**\n * List of full resource types to ignore during generation.\n * This is typically used for API-specific Location resources,\n * which should be handled by the generator as if they were actually\n * the common Location resources.\n * Example entry: \"documentai.googleapis.com/Location\"\n *\n * @generated from field: repeated string ignored_resources = 4;\n */\n ignoredResources?: string[];\n\n /**\n * Namespaces which must be aliased in snippets due to\n * a known (but non-generator-predictable) naming collision\n *\n * @generated from field: repeated string forced_namespace_aliases = 5;\n */\n forcedNamespaceAliases?: string[];\n\n /**\n * Method signatures (in the form \"service.method(signature)\")\n * which are provided separately, so shouldn't be generated.\n * Snippets *calling* these methods are still generated, however.\n *\n * @generated from field: repeated string handwritten_signatures = 6;\n */\n handwrittenSignatures?: string[];\n};\n\n/**\n * Describes the message google.api.DotnetSettings.\n * Use `create(DotnetSettingsSchema)` to create a new message.\n */\nexport const DotnetSettingsSchema: GenMessage<DotnetSettings, {jsonType: DotnetSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 8);\n\n/**\n * Settings for Ruby client libraries.\n *\n * @generated from message google.api.RubySettings\n */\nexport type RubySettings = Message<\"google.api.RubySettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n};\n\n/**\n * Settings for Ruby client libraries.\n *\n * @generated from message google.api.RubySettings\n */\nexport type RubySettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n};\n\n/**\n * Describes the message google.api.RubySettings.\n * Use `create(RubySettingsSchema)` to create a new message.\n */\nexport const RubySettingsSchema: GenMessage<RubySettings, {jsonType: RubySettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 9);\n\n/**\n * Settings for Go client libraries.\n *\n * @generated from message google.api.GoSettings\n */\nexport type GoSettings = Message<\"google.api.GoSettings\"> & {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettings;\n\n /**\n * Map of service names to renamed services. Keys are the package relative\n * service names and values are the name to be used for the service client\n * and call options.\n *\n * publishing:\n * go_settings:\n * renamed_services:\n * Publisher: TopicAdmin\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices: { [key: string]: string };\n};\n\n/**\n * Settings for Go client libraries.\n *\n * @generated from message google.api.GoSettings\n */\nexport type GoSettingsJson = {\n /**\n * Some settings.\n *\n * @generated from field: google.api.CommonLanguageSettings common = 1;\n */\n common?: CommonLanguageSettingsJson;\n\n /**\n * Map of service names to renamed services. Keys are the package relative\n * service names and values are the name to be used for the service client\n * and call options.\n *\n * publishing:\n * go_settings:\n * renamed_services:\n * Publisher: TopicAdmin\n *\n * @generated from field: map<string, string> renamed_services = 2;\n */\n renamedServices?: { [key: string]: string };\n};\n\n/**\n * Describes the message google.api.GoSettings.\n * Use `create(GoSettingsSchema)` to create a new message.\n */\nexport const GoSettingsSchema: GenMessage<GoSettings, {jsonType: GoSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 10);\n\n/**\n * Describes the generator configuration for a method.\n *\n * @generated from message google.api.MethodSettings\n */\nexport type MethodSettings = Message<\"google.api.MethodSettings\"> & {\n /**\n * The fully qualified name of the method, for which the options below apply.\n * This is used to find the method to apply the options.\n *\n * Example:\n *\n * publishing:\n * method_settings:\n * - selector: google.storage.control.v2.StorageControl.CreateFolder\n * # method settings for CreateFolder...\n *\n * @generated from field: string selector = 1;\n */\n selector: string;\n\n /**\n * Describes settings to use for long-running operations when generating\n * API methods for RPCs. Complements RPCs that use the annotations in\n * google/longrunning/operations.proto.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * method_settings:\n * - selector: google.cloud.speech.v2.Speech.BatchRecognize\n * long_running:\n * initial_poll_delay: 60s # 1 minute\n * poll_delay_multiplier: 1.5\n * max_poll_delay: 360s # 6 minutes\n * total_poll_timeout: 54000s # 90 minutes\n *\n * @generated from field: google.api.MethodSettings.LongRunning long_running = 2;\n */\n longRunning?: MethodSettings_LongRunning;\n\n /**\n * List of top-level fields of the request message, that should be\n * automatically populated by the client libraries based on their\n * (google.api.field_info).format. Currently supported format: UUID4.\n *\n * Example of a YAML configuration:\n *\n * publishing:\n * method_settings:\n * - selector: google.example.v1.ExampleService.CreateExample\n * auto_populated_fields:\n * - request_id\n *\n * @generated from field: repeated string auto_populated_fields = 3;\n */\n autoPopulatedFields: string[];\n};\n\n/**\n * Describes the generator configuration for a method.\n *\n * @generated from message google.api.MethodSettings\n */\nexport type MethodSettingsJson = {\n /**\n * The fully qualified name of the method, for which the options below apply.\n * This is used to find the method to apply the options.\n *\n * Example:\n *\n * publishing:\n * method_settings:\n * - selector: google.storage.control.v2.StorageControl.CreateFolder\n * # method settings for CreateFolder...\n *\n * @generated from field: string selector = 1;\n */\n selector?: string;\n\n /**\n * Describes settings to use for long-running operations when generating\n * API methods for RPCs. Complements RPCs that use the annotations in\n * google/longrunning/operations.proto.\n *\n * Example of a YAML configuration::\n *\n * publishing:\n * method_settings:\n * - selector: google.cloud.speech.v2.Speech.BatchRecognize\n * long_running:\n * initial_poll_delay: 60s # 1 minute\n * poll_delay_multiplier: 1.5\n * max_poll_delay: 360s # 6 minutes\n * total_poll_timeout: 54000s # 90 minutes\n *\n * @generated from field: google.api.MethodSettings.LongRunning long_running = 2;\n */\n longRunning?: MethodSettings_LongRunningJson;\n\n /**\n * List of top-level fields of the request message, that should be\n * automatically populated by the client libraries based on their\n * (google.api.field_info).format. Currently supported format: UUID4.\n *\n * Example of a YAML configuration:\n *\n * publishing:\n * method_settings:\n * - selector: google.example.v1.ExampleService.CreateExample\n * auto_populated_fields:\n * - request_id\n *\n * @generated from field: repeated string auto_populated_fields = 3;\n */\n autoPopulatedFields?: string[];\n};\n\n/**\n * Describes the message google.api.MethodSettings.\n * Use `create(MethodSettingsSchema)` to create a new message.\n */\nexport const MethodSettingsSchema: GenMessage<MethodSettings, {jsonType: MethodSettingsJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 11);\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * @generated from message google.api.MethodSettings.LongRunning\n */\nexport type MethodSettings_LongRunning = Message<\"google.api.MethodSettings.LongRunning\"> & {\n /**\n * Initial delay after which the first poll request will be made.\n * Default value: 5 seconds.\n *\n * @generated from field: google.protobuf.Duration initial_poll_delay = 1;\n */\n initialPollDelay?: Duration;\n\n /**\n * Multiplier to gradually increase delay between subsequent polls until it\n * reaches max_poll_delay.\n * Default value: 1.5.\n *\n * @generated from field: float poll_delay_multiplier = 2;\n */\n pollDelayMultiplier: number;\n\n /**\n * Maximum time between two subsequent poll requests.\n * Default value: 45 seconds.\n *\n * @generated from field: google.protobuf.Duration max_poll_delay = 3;\n */\n maxPollDelay?: Duration;\n\n /**\n * Total polling timeout.\n * Default value: 5 minutes.\n *\n * @generated from field: google.protobuf.Duration total_poll_timeout = 4;\n */\n totalPollTimeout?: Duration;\n};\n\n/**\n * Describes settings to use when generating API methods that use the\n * long-running operation pattern.\n * All default values below are from those used in the client library\n * generators (e.g.\n * [Java](https://github.com/googleapis/gapic-generator-java/blob/04c2faa191a9b5a10b92392fe8482279c4404803/src/main/java/com/google/api/generator/gapic/composer/common/RetrySettingsComposer.java)).\n *\n * @generated from message google.api.MethodSettings.LongRunning\n */\nexport type MethodSettings_LongRunningJson = {\n /**\n * Initial delay after which the first poll request will be made.\n * Default value: 5 seconds.\n *\n * @generated from field: google.protobuf.Duration initial_poll_delay = 1;\n */\n initialPollDelay?: DurationJson;\n\n /**\n * Multiplier to gradually increase delay between subsequent polls until it\n * reaches max_poll_delay.\n * Default value: 1.5.\n *\n * @generated from field: float poll_delay_multiplier = 2;\n */\n pollDelayMultiplier?: number | \"NaN\" | \"Infinity\" | \"-Infinity\";\n\n /**\n * Maximum time between two subsequent poll requests.\n * Default value: 45 seconds.\n *\n * @generated from field: google.protobuf.Duration max_poll_delay = 3;\n */\n maxPollDelay?: DurationJson;\n\n /**\n * Total polling timeout.\n * Default value: 5 minutes.\n *\n * @generated from field: google.protobuf.Duration total_poll_timeout = 4;\n */\n totalPollTimeout?: DurationJson;\n};\n\n/**\n * Describes the message google.api.MethodSettings.LongRunning.\n * Use `create(MethodSettings_LongRunningSchema)` to create a new message.\n */\nexport const MethodSettings_LongRunningSchema: GenMessage<MethodSettings_LongRunning, {jsonType: MethodSettings_LongRunningJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 11, 0);\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * @generated from message google.api.SelectiveGapicGeneration\n */\nexport type SelectiveGapicGeneration = Message<\"google.api.SelectiveGapicGeneration\"> & {\n /**\n * An allowlist of the fully qualified names of RPCs that should be included\n * on public client surfaces.\n *\n * @generated from field: repeated string methods = 1;\n */\n methods: string[];\n\n /**\n * Setting this to true indicates to the client generators that methods\n * that would be excluded from the generation should instead be generated\n * in a way that indicates these methods should not be consumed by\n * end users. How this is expressed is up to individual language\n * implementations to decide. Some examples may be: added annotations,\n * obfuscated identifiers, or other language idiomatic patterns.\n *\n * @generated from field: bool generate_omitted_as_internal = 2;\n */\n generateOmittedAsInternal: boolean;\n};\n\n/**\n * This message is used to configure the generation of a subset of the RPCs in\n * a service for client libraries.\n *\n * @generated from message google.api.SelectiveGapicGeneration\n */\nexport type SelectiveGapicGenerationJson = {\n /**\n * An allowlist of the fully qualified names of RPCs that should be included\n * on public client surfaces.\n *\n * @generated from field: repeated string methods = 1;\n */\n methods?: string[];\n\n /**\n * Setting this to true indicates to the client generators that methods\n * that would be excluded from the generation should instead be generated\n * in a way that indicates these methods should not be consumed by\n * end users. How this is expressed is up to individual language\n * implementations to decide. Some examples may be: added annotations,\n * obfuscated identifiers, or other language idiomatic patterns.\n *\n * @generated from field: bool generate_omitted_as_internal = 2;\n */\n generateOmittedAsInternal?: boolean;\n};\n\n/**\n * Describes the message google.api.SelectiveGapicGeneration.\n * Use `create(SelectiveGapicGenerationSchema)` to create a new message.\n */\nexport const SelectiveGapicGenerationSchema: GenMessage<SelectiveGapicGeneration, {jsonType: SelectiveGapicGenerationJson}> = /*@__PURE__*/\n messageDesc(file_google_api_client, 12);\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * @generated from enum google.api.ClientLibraryOrganization\n */\nexport enum ClientLibraryOrganization {\n /**\n * Not useful.\n *\n * @generated from enum value: CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0;\n */\n CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED = 0,\n\n /**\n * Google Cloud Platform Org.\n *\n * @generated from enum value: CLOUD = 1;\n */\n CLOUD = 1,\n\n /**\n * Ads (Advertising) Org.\n *\n * @generated from enum value: ADS = 2;\n */\n ADS = 2,\n\n /**\n * Photos Org.\n *\n * @generated from enum value: PHOTOS = 3;\n */\n PHOTOS = 3,\n\n /**\n * Street View Org.\n *\n * @generated from enum value: STREET_VIEW = 4;\n */\n STREET_VIEW = 4,\n\n /**\n * Shopping Org.\n *\n * @generated from enum value: SHOPPING = 5;\n */\n SHOPPING = 5,\n\n /**\n * Geo Org.\n *\n * @generated from enum value: GEO = 6;\n */\n GEO = 6,\n\n /**\n * Generative AI - https://developers.generativeai.google\n *\n * @generated from enum value: GENERATIVE_AI = 7;\n */\n GENERATIVE_AI = 7,\n}\n\n/**\n * The organization for which the client libraries are being published.\n * Affects the url where generated docs are published, etc.\n *\n * @generated from enum google.api.ClientLibraryOrganization\n */\nexport type ClientLibraryOrganizationJson = \"CLIENT_LIBRARY_ORGANIZATION_UNSPECIFIED\" | \"CLOUD\" | \"ADS\" | \"PHOTOS\" | \"STREET_VIEW\" | \"SHOPPING\" | \"GEO\" | \"GENERATIVE_AI\";\n\n/**\n * Describes the enum google.api.ClientLibraryOrganization.\n */\nexport const ClientLibraryOrganizationSchema: GenEnum<ClientLibraryOrganization, ClientLibraryOrganizationJson> = /*@__PURE__*/\n enumDesc(file_google_api_client, 0);\n\n/**\n * To where should client libraries be published?\n *\n * @generated from enum google.api.ClientLibraryDestination\n */\nexport enum ClientLibraryDestination {\n /**\n * Client libraries will neither be generated nor published to package\n * managers.\n *\n * @generated from enum value: CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0;\n */\n CLIENT_LIBRARY_DESTINATION_UNSPECIFIED = 0,\n\n /**\n * Generate the client library in a repo under github.com/googleapis,\n * but don't publish it to package managers.\n *\n * @generated from enum value: GITHUB = 10;\n */\n GITHUB = 10,\n\n /**\n * Publish the library to package managers like nuget.org and npmjs.com.\n *\n * @generated from enum value: PACKAGE_MANAGER = 20;\n */\n PACKAGE_MANAGER = 20,\n}\n\n/**\n * To where should client libraries be published?\n *\n * @generated from enum google.api.ClientLibraryDestination\n */\nexport type ClientLibraryDestinationJson = \"CLIENT_LIBRARY_DESTINATION_UNSPECIFIED\" | \"GITHUB\" | \"PACKAGE_MANAGER\";\n\n/**\n * Describes the enum google.api.ClientLibraryDestination.\n */\nexport const ClientLibraryDestinationSchema: GenEnum<ClientLibraryDestination, ClientLibraryDestinationJson> = /*@__PURE__*/\n enumDesc(file_google_api_client, 1);\n\n/**\n * A definition of a client library method signature.\n *\n * In client libraries, each proto RPC corresponds to one or more methods\n * which the end user is able to call, and calls the underlying RPC.\n * Normally, this method receives a single argument (a struct or instance\n * corresponding to the RPC request object). Defining this field will\n * add one or more overloads providing flattened or simpler method signatures\n * in some languages.\n *\n * The fields on the method signature are provided as a comma-separated\n * string.\n *\n * For example, the proto RPC and annotation:\n *\n * rpc CreateSubscription(CreateSubscriptionRequest)\n * returns (Subscription) {\n * option (google.api.method_signature) = \"name,topic\";\n * }\n *\n * Would add the following Java overload (in addition to the method accepting\n * the request object):\n *\n * public final Subscription createSubscription(String name, String topic)\n *\n * The following backwards-compatibility guidelines apply:\n *\n * * Adding this annotation to an unannotated method is backwards\n * compatible.\n * * Adding this annotation to a method which already has existing\n * method signature annotations is backwards compatible if and only if\n * the new method signature annotation is last in the sequence.\n * * Modifying or removing an existing method signature annotation is\n * a breaking change.\n * * Re-ordering existing method signature annotations is a breaking\n * change.\n *\n * @generated from extension: repeated string method_signature = 1051;\n */\nexport const method_signature: GenExtension<MethodOptions, string[]> = /*@__PURE__*/\n extDesc(file_google_api_client, 0);\n\n/**\n * The hostname for this service.\n * This should be specified with no prefix or protocol.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.default_host) = \"foo.googleapi.com\";\n * ...\n * }\n *\n * @generated from extension: string default_host = 1049;\n */\nexport const default_host: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 1);\n\n/**\n * OAuth scopes needed for the client.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.oauth_scopes) = \\\n * \"https://www.googleapis.com/auth/cloud-platform\";\n * ...\n * }\n *\n * If there is more than one scope, use a comma-separated string:\n *\n * Example:\n *\n * service Foo {\n * option (google.api.oauth_scopes) = \\\n * \"https://www.googleapis.com/auth/cloud-platform,\"\n * \"https://www.googleapis.com/auth/monitoring\";\n * ...\n * }\n *\n * @generated from extension: string oauth_scopes = 1050;\n */\nexport const oauth_scopes: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 2);\n\n/**\n * The API version of this service, which should be sent by version-aware\n * clients to the service. This allows services to abide by the schema and\n * behavior of the service at the time this API version was deployed.\n * The format of the API version must be treated as opaque by clients.\n * Services may use a format with an apparent structure, but clients must\n * not rely on this to determine components within an API version, or attempt\n * to construct other valid API versions. Note that this is for upcoming\n * functionality and may not be implemented for all services.\n *\n * Example:\n *\n * service Foo {\n * option (google.api.api_version) = \"v1_20230821_preview\";\n * }\n *\n * @generated from extension: string api_version = 525000001;\n */\nexport const api_version: GenExtension<ServiceOptions, string> = /*@__PURE__*/\n extDesc(file_google_api_client, 3);\n\n", "// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file google/api/launch_stage.proto (package google.api, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenEnum, GenFile } from \"@bufbuild/protobuf/codegenv2\";\nimport { enumDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file google/api/launch_stage.proto.\n */\nexport const file_google_api_launch_stage: GenFile = /*@__PURE__*/\n fileDesc(\"Ch1nb29nbGUvYXBpL2xhdW5jaF9zdGFnZS5wcm90bxIKZ29vZ2xlLmFwaSqMAQoLTGF1bmNoU3RhZ2USHAoYTEFVTkNIX1NUQUdFX1VOU1BFQ0lGSUVEEAASEQoNVU5JTVBMRU1FTlRFRBAGEg0KCVBSRUxBVU5DSBAHEhAKDEVBUkxZX0FDQ0VTUxABEgkKBUFMUEhBEAISCAoEQkVUQRADEgYKAkdBEAQSDgoKREVQUkVDQVRFRBAFQloKDmNvbS5nb29nbGUuYXBpQhBMYXVuY2hTdGFnZVByb3RvUAFaLWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpO2FwaaICBEdBUEliBnByb3RvMw\");\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * @generated from enum google.api.LaunchStage\n */\nexport enum LaunchStage {\n /**\n * Do not use this default value.\n *\n * @generated from enum value: LAUNCH_STAGE_UNSPECIFIED = 0;\n */\n LAUNCH_STAGE_UNSPECIFIED = 0,\n\n /**\n * The feature is not yet implemented. Users can not use it.\n *\n * @generated from enum value: UNIMPLEMENTED = 6;\n */\n UNIMPLEMENTED = 6,\n\n /**\n * Prelaunch features are hidden from users and are only visible internally.\n *\n * @generated from enum value: PRELAUNCH = 7;\n */\n PRELAUNCH = 7,\n\n /**\n * Early Access features are limited to a closed group of testers. To use\n * these features, you must sign up in advance and sign a Trusted Tester\n * agreement (which includes confidentiality provisions). These features may\n * be unstable, changed in backward-incompatible ways, and are not\n * guaranteed to be released.\n *\n * @generated from enum value: EARLY_ACCESS = 1;\n */\n EARLY_ACCESS = 1,\n\n /**\n * Alpha is a limited availability test for releases before they are cleared\n * for widespread use. By Alpha, all significant design issues are resolved\n * and we are in the process of verifying functionality. Alpha customers\n * need to apply for access, agree to applicable terms, and have their\n * projects allowlisted. Alpha releases don't have to be feature complete,\n * no SLAs are provided, and there are no technical support obligations, but\n * they will be far enough along that customers can actually use them in\n * test environments or for limited-use tests -- just like they would in\n * normal production cases.\n *\n * @generated from enum value: ALPHA = 2;\n */\n ALPHA = 2,\n\n /**\n * Beta is the point at which we are ready to open a release for any\n * customer to use. There are no SLA or technical support obligations in a\n * Beta release. Products will be complete from a feature perspective, but\n * may have some open outstanding issues. Beta releases are suitable for\n * limited production use cases.\n *\n * @generated from enum value: BETA = 3;\n */\n BETA = 3,\n\n /**\n * GA features are open to all developers and are considered stable and\n * fully qualified for production use.\n *\n * @generated from enum value: GA = 4;\n */\n GA = 4,\n\n /**\n * Deprecated features are scheduled to be shut down and removed. For more\n * information, see the \"Deprecation Policy\" section of our [Terms of\n * Service](https://cloud.google.com/terms/)\n * and the [Google Cloud Platform Subject to the Deprecation\n * Policy](https://cloud.google.com/terms/deprecation) documentation.\n *\n * @generated from enum value: DEPRECATED = 5;\n */\n DEPRECATED = 5,\n}\n\n/**\n * The launch stage as defined by [Google Cloud Platform\n * Launch Stages](https://cloud.google.com/terms/launch-stages).\n *\n * @generated from enum google.api.LaunchStage\n */\nexport type LaunchStageJson = \"LAUNCH_STAGE_UNSPECIFIED\" | \"UNIMPLEMENTED\" | \"PRELAUNCH\" | \"EARLY_ACCESS\" | \"ALPHA\" | \"BETA\" | \"GA\" | \"DEPRECATED\";\n\n/**\n * Describes the enum google.api.LaunchStage.\n */\nexport const LaunchStageSchema: GenEnum<LaunchStage, LaunchStageJson> = /*@__PURE__*/\n enumDesc(file_google_api_launch_stage, 0);\n\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/runtime/v1/store.proto (package mochabugapis.adapt.runtime.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../../../buf/validate/validate_pb\";\nimport type { Timestamp, TimestampJson } from \"@bufbuild/protobuf/wkt\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/runtime/v1/store.proto.\n */\nexport const file_mochabugapis_adapt_runtime_v1_store: GenFile = /*@__PURE__*/\n fileDesc(\"Ciltb2NoYWJ1Z2FwaXMvYWRhcHQvcnVudGltZS92MS9zdG9yZS5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEiJgoIUHV0VmFsdWUSDQoFdmFsdWUYASABKAwSCwoDdHRsGAIgASgFIlkKCEdldFZhbHVlEg0KBXZhbHVlGAEgASgMEj4KCG1ldGFkYXRhGAIgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuVmFsdWVNZXRhZGF0YSJdCg1WYWx1ZU1ldGFkYXRhEgsKA3R0bBgBIAEoBRIxCg1sYXN0X21vZGlmaWVkGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIMCgRldGFnGAMgASgJIuwBCg5UaW1lc3RhbXBSYW5nZRIxCgVzdGFydBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCBrpIA8gBARIvCgNlbmQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESFwoPc3RhcnRfaW5jbHVzaXZlGAMgASgIEhUKDWVuZF9pbmNsdXNpdmUYBCABKAg6RrpIQxpBCgt2YWxpZF9yYW5nZRIbc3RhcnQgbXVzdCBiZSBsZXNzIHRoYW4gZW5kGhV0aGlzLnN0YXJ0IDwgdGhpcy5lbmQinwMKCFNlbGVjdE9wEhwKBXN0YXJ0GAEgASgJQgi6SAVyAxiAIEgAiAEBEhoKA2VuZBgCIAEoCUIIukgFcgMYgCBIAYgBARIcCg9zdGFydF9pbmNsdXNpdmUYAyABKAhIAogBARIaCg1lbmRfaW5jbHVzaXZlGAQgASgISAOIAQESHgoFbGltaXQYBSABKAVCCrpIBxoFGOgHKABIBIgBARIXCgpwYWdlX3Rva2VuGAYgASgJSAWIAQE6lAG6SJABGo0BCgt2YWxpZF9yYW5nZRJBd2hlbiBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIHByb3ZpZGVkLCBzdGFydCBtdXN0IGJlIGxlc3MgdGhhbiBlbmQaOyFoYXModGhpcy5zdGFydCkgfHwgIWhhcyh0aGlzLmVuZCkgfHwgdGhpcy5zdGFydCA8IHRoaXMuZW5kQggKBl9zdGFydEIGCgRfZW5kQhIKEF9zdGFydF9pbmNsdXNpdmVCEAoOX2VuZF9pbmNsdXNpdmVCCAoGX2xpbWl0Qg0KC19wYWdlX3Rva2VuIuABCg5Xcml0ZU9wZXJhdGlvbhI5CgZpbnNlcnQYASABKAsyJy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5JbnNlcnRPcEgAEjkKBmRlbGV0ZRgCIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkRlbGV0ZU9wSAASRAoMcmFuZ2VfZGVsZXRlGAMgASgLMiwubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuUmFuZ2VEZWxldGVPcEgAQhIKCW9wZXJhdGlvbhIFukgCCAEiuwEKGUNvbmRpdGlvbmFsV3JpdGVPcGVyYXRpb24SRAoGaW5zZXJ0GAEgASgLMjIubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuQ29uZGl0aW9uYWxJbnNlcnRPcEgAEkQKBmRlbGV0ZRgCIAEoCzIyLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmRpdGlvbmFsRGVsZXRlT3BIAEISCglvcGVyYXRpb24SBbpIAggBItICCg1SYW5nZURlbGV0ZU9wEhwKBXN0YXJ0GAEgASgJQgi6SAVyAxiAIEgAiAEBEhoKA2VuZBgCIAEoCUIIukgFcgMYgCBIAYgBARIcCg9zdGFydF9pbmNsdXNpdmUYAyABKAhIAogBARIaCg1lbmRfaW5jbHVzaXZlGAQgASgISAOIAQE6lAG6SJABGo0BCgt2YWxpZF9yYW5nZRJBd2hlbiBib3RoIHN0YXJ0IGFuZCBlbmQgYXJlIHByb3ZpZGVkLCBzdGFydCBtdXN0IGJlIGxlc3MgdGhhbiBlbmQaOyFoYXModGhpcy5zdGFydCkgfHwgIWhhcyh0aGlzLmVuZCkgfHwgdGhpcy5zdGFydCA8IHRoaXMuZW5kQggKBl9zdGFydEIGCgRfZW5kQhIKEF9zdGFydF9pbmNsdXNpdmVCEAoOX2VuZF9pbmNsdXNpdmUiYQoISW5zZXJ0T3ASFQoDa2V5GAEgASgJQgi6SAVyAxiAIBI+CgV2YWx1ZRgCIAEoCzInLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlB1dFZhbHVlQga6SAPIAQEiIQoIRGVsZXRlT3ASFQoDa2V5GAEgASgJQgi6SAVyAxiAICK2BgoTQ29uZGl0aW9uYWxJbnNlcnRPcBIVCgNrZXkYASABKAlCCLpIBXIDGIAgEj4KBXZhbHVlGAIgASgLMicubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuUHV0VmFsdWVCBrpIA8gBARJaCgxwcmVjb25kaXRpb24YAyABKAsyPy5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Db25kaXRpb25hbEluc2VydE9wLlByZWNvbmRpdGlvbkgAiAEBGtoECgxQcmVjb25kaXRpb24SOgoUbGFzdF9tb2RpZmllZF9lcXVhbHMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAASTAoTbGFzdF9tb2RpZmllZF9yYW5nZRgCIAEoCzItLm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLlRpbWVzdGFtcFJhbmdlSAASEQoEZXRhZxgEIAEoCUgBiAEBEhsKDmZhaWxfaWZfZXhpc3RzGAUgASgISAKIAQE63AK6SNgCGscBCiBub190aW1lc3RhbXBfd2l0aF9mYWlsX2lmX2V4aXN0cxI7ZmFpbF9pZl9leGlzdHMgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggdGltZXN0YW1wIGNvbmRpdGlvbnMaZnRoaXMuZmFpbF9pZl9leGlzdHMgPT0gdHJ1ZSA/ICFoYXModGhpcy5sYXN0X21vZGlmaWVkX2VxdWFscykgJiYgIWhhcyh0aGlzLmxhc3RfbW9kaWZpZWRfcmFuZ2UpIDogdHJ1ZRqLAQobbm9fZXRhZ193aXRoX2ZhaWxfaWZfZXhpc3RzEjZmYWlsX2lmX2V4aXN0cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBldGFnIGNvbmRpdGlvbnMaNHRoaXMuZmFpbF9pZl9leGlzdHMgPT0gdHJ1ZSA/ICFoYXModGhpcy5ldGFnKSA6IHRydWVCFQoTdGltZXN0YW1wX2NvbmRpdGlvbkIHCgVfZXRhZ0IRCg9fZmFpbF9pZl9leGlzdHNCDwoNX3ByZWNvbmRpdGlvbiLeBQoTQ29uZGl0aW9uYWxEZWxldGVPcBIVCgNrZXkYASABKAlCCLpIBXIDGIAgEloKDHByZWNvbmRpdGlvbhgCIAEoCzI/Lm1vY2hhYnVnYXBpcy5hZGFwdC5ydW50aW1lLnYxLkNvbmRpdGlvbmFsRGVsZXRlT3AuUHJlY29uZGl0aW9uSACIAQEawgQKDFByZWNvbmRpdGlvbhIYCgttdXN0X2V4aXN0cxgBIAEoCEgBiAEBEjoKFGxhc3RfbW9kaWZpZWRfZXF1YWxzGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAEkwKE2xhc3RfbW9kaWZpZWRfcmFuZ2UYAyABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5UaW1lc3RhbXBSYW5nZUgAEhEKBGV0YWcYBCABKAlIAogBATrKArpIxgIavgEKHW5vX3RpbWVzdGFtcF93aXRoX211c3RfZXhpc3RzEjhtdXN0X2V4aXN0cyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCB0aW1lc3RhbXAgY29uZGl0aW9ucxpjdGhpcy5tdXN0X2V4aXN0cyA9PSB0cnVlID8gIWhhcyh0aGlzLmxhc3RfbW9kaWZpZWRfZXF1YWxzKSAmJiAhaGFzKHRoaXMubGFzdF9tb2RpZmllZF9yYW5nZSkgOiB0cnVlGoIBChhub19ldGFnX3dpdGhfbXVzdF9leGlzdHMSM211c3RfZXhpc3RzIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGV0YWcgY29uZGl0aW9ucxoxdGhpcy5tdXN0X2V4aXN0cyA9PSB0cnVlID8gIWhhcyh0aGlzLmV0YWcpIDogdHJ1ZUIVChN0aW1lc3RhbXBfY29uZGl0aW9uQg4KDF9tdXN0X2V4aXN0c0IHCgVfZXRhZ0IPCg1fcHJlY29uZGl0aW9uYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_timestamp]);\n\n/**\n * This represents a value to be stored\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PutValue\n */\nexport type PutValue = Message<\"mochabugapis.adapt.runtime.v1.PutValue\"> & {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n\n /**\n * TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 2;\n */\n ttl: number;\n};\n\n/**\n * This represents a value to be stored\n *\n * @generated from message mochabugapis.adapt.runtime.v1.PutValue\n */\nexport type PutValueJson = {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value?: string;\n\n /**\n * TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 2;\n */\n ttl?: number;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.PutValue.\n * Use `create(PutValueSchema)` to create a new message.\n */\nexport const PutValueSchema: GenMessage<PutValue, {jsonType: PutValueJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 0);\n\n/**\n * Retrieved value\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetValue\n */\nexport type GetValue = Message<\"mochabugapis.adapt.runtime.v1.GetValue\"> & {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value: Uint8Array;\n\n /**\n * The metadata for the written value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 2;\n */\n metadata?: ValueMetadata;\n};\n\n/**\n * Retrieved value\n *\n * @generated from message mochabugapis.adapt.runtime.v1.GetValue\n */\nexport type GetValueJson = {\n /**\n * Data\n *\n * @generated from field: bytes value = 1;\n */\n value?: string;\n\n /**\n * The metadata for the written value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ValueMetadata metadata = 2;\n */\n metadata?: ValueMetadataJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.GetValue.\n * Use `create(GetValueSchema)` to create a new message.\n */\nexport const GetValueSchema: GenMessage<GetValue, {jsonType: GetValueJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 1);\n\n/**\n * Write metadata\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ValueMetadata\n */\nexport type ValueMetadata = Message<\"mochabugapis.adapt.runtime.v1.ValueMetadata\"> & {\n /**\n * Remaining TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 1;\n */\n ttl: number;\n\n /**\n * Last modified\n *\n * @generated from field: google.protobuf.Timestamp last_modified = 2;\n */\n lastModified?: Timestamp;\n\n /**\n * ETag\n *\n * @generated from field: string etag = 3;\n */\n etag: string;\n};\n\n/**\n * Write metadata\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ValueMetadata\n */\nexport type ValueMetadataJson = {\n /**\n * Remaining TTL seconds (0 = no expiration)\n *\n * @generated from field: int32 ttl = 1;\n */\n ttl?: number;\n\n /**\n * Last modified\n *\n * @generated from field: google.protobuf.Timestamp last_modified = 2;\n */\n lastModified?: TimestampJson;\n\n /**\n * ETag\n *\n * @generated from field: string etag = 3;\n */\n etag?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ValueMetadata.\n * Use `create(ValueMetadataSchema)` to create a new message.\n */\nexport const ValueMetadataSchema: GenMessage<ValueMetadata, {jsonType: ValueMetadataJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 2);\n\n/**\n * Timestamp range\n *\n * @generated from message mochabugapis.adapt.runtime.v1.TimestampRange\n */\nexport type TimestampRange = Message<\"mochabugapis.adapt.runtime.v1.TimestampRange\"> & {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: Timestamp;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: Timestamp;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive: boolean;\n};\n\n/**\n * Timestamp range\n *\n * @generated from message mochabugapis.adapt.runtime.v1.TimestampRange\n */\nexport type TimestampRangeJson = {\n /**\n * Start\n *\n * @generated from field: google.protobuf.Timestamp start = 1;\n */\n start?: TimestampJson;\n\n /**\n * End\n *\n * @generated from field: google.protobuf.Timestamp end = 2;\n */\n end?: TimestampJson;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.TimestampRange.\n * Use `create(TimestampRangeSchema)` to create a new message.\n */\nexport const TimestampRangeSchema: GenMessage<TimestampRange, {jsonType: TimestampRangeJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 3);\n\n/**\n * Range query on keys (lexicographic comparison)\n * Examples: \"user/\" to \"user/~\", \"logs/2024-01/\" to \"logs/2024-02/\"\n * not setting any start or end will scan the entire store\n * Results are always returned in ascending order by key\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SelectOp\n */\nexport type SelectOp = Message<\"mochabugapis.adapt.runtime.v1.SelectOp\"> & {\n /**\n * Not setting the start will be equivalent of fetching from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded queries\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n\n /**\n * Max results (1-1000), defaults to 100\n *\n * @generated from field: optional int32 limit = 5;\n */\n limit?: number;\n\n /**\n * An optional page_token to continue the query\n *\n * @generated from field: optional string page_token = 6;\n */\n pageToken?: string;\n};\n\n/**\n * Range query on keys (lexicographic comparison)\n * Examples: \"user/\" to \"user/~\", \"logs/2024-01/\" to \"logs/2024-02/\"\n * not setting any start or end will scan the entire store\n * Results are always returned in ascending order by key\n *\n * @generated from message mochabugapis.adapt.runtime.v1.SelectOp\n */\nexport type SelectOpJson = {\n /**\n * Not setting the start will be equivalent of fetching from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded queries\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n\n /**\n * Max results (1-1000), defaults to 100\n *\n * @generated from field: optional int32 limit = 5;\n */\n limit?: number;\n\n /**\n * An optional page_token to continue the query\n *\n * @generated from field: optional string page_token = 6;\n */\n pageToken?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.SelectOp.\n * Use `create(SelectOpSchema)` to create a new message.\n */\nexport const SelectOpSchema: GenMessage<SelectOp, {jsonType: SelectOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 4);\n\n/**\n * Batch write (no preconditions)\n * All operations in a batch share the same timestamp.\n * Interfering operations on the same key have undefined order.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.WriteOperation\n */\nexport type WriteOperation = Message<\"mochabugapis.adapt.runtime.v1.WriteOperation\"> & {\n /**\n * Operation\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.WriteOperation.operation\n */\n operation: {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.InsertOp insert = 1;\n */\n value: InsertOp;\n case: \"insert\";\n } | {\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.DeleteOp delete = 2;\n */\n value: DeleteOp;\n case: \"delete\";\n } | {\n /**\n * Range delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.RangeDeleteOp range_delete = 3;\n */\n value: RangeDeleteOp;\n case: \"rangeDelete\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Batch write (no preconditions)\n * All operations in a batch share the same timestamp.\n * Interfering operations on the same key have undefined order.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.WriteOperation\n */\nexport type WriteOperationJson = {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.InsertOp insert = 1;\n */\n insert?: InsertOpJson;\n\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.DeleteOp delete = 2;\n */\n delete?: DeleteOpJson;\n\n /**\n * Range delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.RangeDeleteOp range_delete = 3;\n */\n rangeDelete?: RangeDeleteOpJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.WriteOperation.\n * Use `create(WriteOperationSchema)` to create a new message.\n */\nexport const WriteOperationSchema: GenMessage<WriteOperation, {jsonType: WriteOperationJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 5);\n\n/**\n * Single write (supports preconditions)\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalWriteOperation\n */\nexport type ConditionalWriteOperation = Message<\"mochabugapis.adapt.runtime.v1.ConditionalWriteOperation\"> & {\n /**\n * Operation\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.ConditionalWriteOperation.operation\n */\n operation: {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalInsertOp insert = 1;\n */\n value: ConditionalInsertOp;\n case: \"insert\";\n } | {\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalDeleteOp delete = 2;\n */\n value: ConditionalDeleteOp;\n case: \"delete\";\n } | { case: undefined; value?: undefined };\n};\n\n/**\n * Single write (supports preconditions)\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalWriteOperation\n */\nexport type ConditionalWriteOperationJson = {\n /**\n * Insert\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalInsertOp insert = 1;\n */\n insert?: ConditionalInsertOpJson;\n\n /**\n * Delete\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ConditionalDeleteOp delete = 2;\n */\n delete?: ConditionalDeleteOpJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalWriteOperation.\n * Use `create(ConditionalWriteOperationSchema)` to create a new message.\n */\nexport const ConditionalWriteOperationSchema: GenMessage<ConditionalWriteOperation, {jsonType: ConditionalWriteOperationJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 6);\n\n/**\n * Range delete, works like SelectOp for defining the range\n * For example, to delete all keys with prefix \"user/\", set start=\"user/\" and end=\"user/~\"\n *\n * @generated from message mochabugapis.adapt.runtime.v1.RangeDeleteOp\n */\nexport type RangeDeleteOp = Message<\"mochabugapis.adapt.runtime.v1.RangeDeleteOp\"> & {\n /**\n * Not setting the start will be equivalent of deleting from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded deletes\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n};\n\n/**\n * Range delete, works like SelectOp for defining the range\n * For example, to delete all keys with prefix \"user/\", set start=\"user/\" and end=\"user/~\"\n *\n * @generated from message mochabugapis.adapt.runtime.v1.RangeDeleteOp\n */\nexport type RangeDeleteOpJson = {\n /**\n * Not setting the start will be equivalent of deleting from the the empty key\n *\n * @generated from field: optional string start = 1;\n */\n start?: string;\n\n /**\n * This is required to avoid unbounded deletes\n *\n * @generated from field: optional string end = 2;\n */\n end?: string;\n\n /**\n * Include start (>= vs >)\n *\n * @generated from field: optional bool start_inclusive = 3;\n */\n startInclusive?: boolean;\n\n /**\n * Include end (<= vs <)\n *\n * @generated from field: optional bool end_inclusive = 4;\n */\n endInclusive?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.RangeDeleteOp.\n * Use `create(RangeDeleteOpSchema)` to create a new message.\n */\nexport const RangeDeleteOpSchema: GenMessage<RangeDeleteOp, {jsonType: RangeDeleteOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 7);\n\n/**\n * Insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.InsertOp\n */\nexport type InsertOp = Message<\"mochabugapis.adapt.runtime.v1.InsertOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValue;\n};\n\n/**\n * Insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.InsertOp\n */\nexport type InsertOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValueJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.InsertOp.\n * Use `create(InsertOpSchema)` to create a new message.\n */\nexport const InsertOpSchema: GenMessage<InsertOp, {jsonType: InsertOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 8);\n\n/**\n * Delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DeleteOp\n */\nexport type DeleteOp = Message<\"mochabugapis.adapt.runtime.v1.DeleteOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n};\n\n/**\n * Delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.DeleteOp\n */\nexport type DeleteOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.DeleteOp.\n * Use `create(DeleteOpSchema)` to create a new message.\n */\nexport const DeleteOpSchema: GenMessage<DeleteOp, {jsonType: DeleteOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 9);\n\n/**\n * Conditional insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp\n */\nexport type ConditionalInsertOp = Message<\"mochabugapis.adapt.runtime.v1.ConditionalInsertOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValue;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition precondition = 3;\n */\n precondition?: ConditionalInsertOp_Precondition;\n};\n\n/**\n * Conditional insert\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp\n */\nexport type ConditionalInsertOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n\n /**\n * Value\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.PutValue value = 2;\n */\n value?: PutValueJson;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition precondition = 3;\n */\n precondition?: ConditionalInsertOp_PreconditionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.\n * Use `create(ConditionalInsertOpSchema)` to create a new message.\n */\nexport const ConditionalInsertOpSchema: GenMessage<ConditionalInsertOp, {jsonType: ConditionalInsertOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 10);\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition\n */\nexport type ConditionalInsertOp_Precondition = Message<\"mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition\"> & {\n /**\n * Timestamp\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition.timestamp_condition\n */\n timestampCondition: {\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 1;\n */\n value: Timestamp;\n case: \"lastModifiedEquals\";\n } | {\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 2;\n */\n value: TimestampRange;\n case: \"lastModifiedRange\";\n } | { case: undefined; value?: undefined };\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n\n /**\n * Fail if exists\n *\n * @generated from field: optional bool fail_if_exists = 5;\n */\n failIfExists?: boolean;\n};\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition\n */\nexport type ConditionalInsertOp_PreconditionJson = {\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 1;\n */\n lastModifiedEquals?: TimestampJson;\n\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 2;\n */\n lastModifiedRange?: TimestampRangeJson;\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n\n /**\n * Fail if exists\n *\n * @generated from field: optional bool fail_if_exists = 5;\n */\n failIfExists?: boolean;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalInsertOp.Precondition.\n * Use `create(ConditionalInsertOp_PreconditionSchema)` to create a new message.\n */\nexport const ConditionalInsertOp_PreconditionSchema: GenMessage<ConditionalInsertOp_Precondition, {jsonType: ConditionalInsertOp_PreconditionJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 10, 0);\n\n/**\n * Conditional delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp\n */\nexport type ConditionalDeleteOp = Message<\"mochabugapis.adapt.runtime.v1.ConditionalDeleteOp\"> & {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key: string;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition precondition = 2;\n */\n precondition?: ConditionalDeleteOp_Precondition;\n};\n\n/**\n * Conditional delete\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp\n */\nexport type ConditionalDeleteOpJson = {\n /**\n * Key\n *\n * @generated from field: string key = 1;\n */\n key?: string;\n\n /**\n * Precondition\n *\n * @generated from field: optional mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition precondition = 2;\n */\n precondition?: ConditionalDeleteOp_PreconditionJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.\n * Use `create(ConditionalDeleteOpSchema)` to create a new message.\n */\nexport const ConditionalDeleteOpSchema: GenMessage<ConditionalDeleteOp, {jsonType: ConditionalDeleteOpJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 11);\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition\n */\nexport type ConditionalDeleteOp_Precondition = Message<\"mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition\"> & {\n /**\n * Must exist\n *\n * @generated from field: optional bool must_exists = 1;\n */\n mustExists?: boolean;\n\n /**\n * Timestamp\n *\n * @generated from oneof mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition.timestamp_condition\n */\n timestampCondition: {\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 2;\n */\n value: Timestamp;\n case: \"lastModifiedEquals\";\n } | {\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 3;\n */\n value: TimestampRange;\n case: \"lastModifiedRange\";\n } | { case: undefined; value?: undefined };\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n};\n\n/**\n * Precondition\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition\n */\nexport type ConditionalDeleteOp_PreconditionJson = {\n /**\n * Must exist\n *\n * @generated from field: optional bool must_exists = 1;\n */\n mustExists?: boolean;\n\n /**\n * Exact match\n *\n * @generated from field: google.protobuf.Timestamp last_modified_equals = 2;\n */\n lastModifiedEquals?: TimestampJson;\n\n /**\n * Range\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.TimestampRange last_modified_range = 3;\n */\n lastModifiedRange?: TimestampRangeJson;\n\n /**\n * ETag\n *\n * @generated from field: optional string etag = 4;\n */\n etag?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ConditionalDeleteOp.Precondition.\n * Use `create(ConditionalDeleteOp_PreconditionSchema)` to create a new message.\n */\nexport const ConditionalDeleteOp_PreconditionSchema: GenMessage<ConditionalDeleteOp_Precondition, {jsonType: ConditionalDeleteOp_PreconditionJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_store, 11, 0);\n\n", "import type {\n DescMessage,\n DescMethodStreaming,\n DescMethodUnary,\n MessageInitShape,\n MessageShape\n} from '@bufbuild/protobuf';\nimport type {\n ContextValues,\n Interceptor,\n StreamResponse,\n Transport,\n UnaryRequest,\n UnaryResponse\n} from '@connectrpc/connect';\nimport { Code, ConnectError, createContextValues } from '@connectrpc/connect';\nimport {\n compressedFlag,\n createClientMethodSerializers,\n createEnvelopeReadableStream,\n createMethodUrl,\n encodeEnvelope,\n runStreamingCall,\n runUnaryCall\n} from '@connectrpc/connect/protocol';\nimport {\n headerGrpcStatus,\n requestHeader,\n trailerFlag,\n trailerParse,\n validateResponse,\n validateTrailer\n} from '@connectrpc/connect/protocol-grpc-web';\nimport { Fetcher } from './types';\n\nexport interface GrpcWebTransportOptions {\n fetcher: Fetcher;\n interceptors?: Interceptor[];\n}\n\nexport function createGrpcWebTransport(\n options: GrpcWebTransportOptions\n): Transport {\n return {\n async unary<I extends DescMessage, O extends DescMessage>(\n method: DescMethodUnary<I, O>,\n signal: AbortSignal | undefined,\n timeoutMs: number | undefined,\n header: Headers,\n message: MessageInitShape<I>,\n contextValues?: ContextValues\n ): Promise<UnaryResponse<I, O>> {\n const { serialize, parse } = createClientMethodSerializers(method, true);\n\n return runUnaryCall<I, O>({\n interceptors: options.interceptors,\n signal,\n timeoutMs,\n req: {\n stream: false,\n service: method.parent,\n method,\n requestMethod: 'POST',\n url: createMethodUrl('https://runtimeapi/', method),\n header: requestHeader(true, timeoutMs, header, false),\n contextValues: contextValues ?? createContextValues(),\n message\n },\n next: async (req: UnaryRequest<I, O>): Promise<UnaryResponse<I, O>> => {\n const response = await options.fetcher.fetch(req.url, {\n method: req.requestMethod,\n headers: req.header,\n signal: req.signal,\n body: encodeEnvelope(0, serialize(req.message))\n });\n\n const { headerError } = validateResponse(\n response.status,\n response.headers\n );\n if (!response.body) {\n if (headerError !== undefined) throw headerError;\n throw new ConnectError('missing response body', Code.Internal);\n }\n\n const reader = createEnvelopeReadableStream(\n response.body\n ).getReader();\n let trailer: Headers | undefined;\n let msg: MessageShape<O> | undefined;\n\n for (;;) {\n const r = await reader.read();\n if (r.done) {\n break;\n }\n const { flags, data } = r.value;\n if ((flags & compressedFlag) === compressedFlag) {\n throw new ConnectError(\n 'received compressed data, which is unsupported',\n Code.Internal\n );\n }\n if (flags === trailerFlag) {\n if (trailer !== undefined) {\n throw new ConnectError('extra trailer', Code.Internal);\n }\n trailer = trailerParse(data);\n continue;\n }\n if (msg !== undefined) {\n throw new ConnectError('extra message', Code.Unimplemented);\n }\n msg = parse(data);\n }\n\n if (trailer === undefined) {\n if (headerError !== undefined) throw headerError;\n throw new ConnectError(\n 'missing trailer',\n response.headers.has(headerGrpcStatus)\n ? Code.Unimplemented\n : Code.Unknown\n );\n }\n validateTrailer(trailer, response.headers);\n\n if (msg === undefined) {\n throw new ConnectError(\n 'missing message',\n trailer.has(headerGrpcStatus) ? Code.Unimplemented : Code.Unknown\n );\n }\n\n return {\n stream: false,\n service: method.parent,\n method,\n header: response.headers,\n message: msg,\n trailer\n };\n }\n });\n },\n\n async stream<I extends DescMessage, O extends DescMessage>(\n method: DescMethodStreaming<I, O>,\n signal: AbortSignal | undefined,\n timeoutMs: number | undefined,\n header:\n | Headers\n | Record<string, string>\n | Iterable<Iterable<string>>\n | undefined,\n input: AsyncIterable<MessageInitShape<I>>,\n contextValues?: ContextValues\n ): Promise<StreamResponse<I, O>> {\n const { serialize, parse } = createClientMethodSerializers(method, true);\n\n async function createRequestBody(\n source: AsyncIterable<MessageShape<I>>\n ): Promise<Uint8Array> {\n // Minimal approach: we only allow sending a single message, since\n // standard fetch in browsers doesn't support streaming request bodies.\n const { value, done } = await source[Symbol.asyncIterator]().next();\n if (done) {\n throw new ConnectError(\n 'missing request message',\n Code.InvalidArgument\n );\n }\n return encodeEnvelope(0, serialize(value));\n }\n\n async function* parseResponseBody(\n body: ReadableStream<Uint8Array>,\n foundStatus: boolean,\n trailerTarget: Headers,\n rawHeader: Headers,\n abortSignal: AbortSignal\n ) {\n // If foundStatus is true, that means we received grpc-status:0 in headers\n // indicating a \"trailers-only\" response with no body (or no data).\n if (foundStatus) {\n // We tolerate an empty body for status 0 (success).\n // Just ensure it's actually empty.\n const emptyReader = createEnvelopeReadableStream(body).getReader();\n if (!(await emptyReader.read()).done) {\n throw new ConnectError(\n 'extra data for trailers-only',\n Code.Internal\n );\n }\n return;\n }\n\n const reader = createEnvelopeReadableStream(body).getReader();\n let trailerReceived = false;\n for (;;) {\n const result = await reader.read();\n if (result.done) {\n break;\n }\n const { flags, data } = result.value;\n if ((flags & trailerFlag) === trailerFlag) {\n if (trailerReceived) {\n throw new ConnectError('extra trailer', Code.Internal);\n }\n trailerReceived = true;\n const trailer = trailerParse(data);\n validateTrailer(trailer, rawHeader);\n trailer.forEach((value, key) => trailerTarget.set(key, value));\n continue;\n }\n if (trailerReceived) {\n throw new ConnectError(\n 'extra message after trailer',\n Code.Internal\n );\n }\n yield parse(data);\n }\n\n // Workaround for Node not always throwing on read if the signal was aborted\n if ('throwIfAborted' in abortSignal) {\n abortSignal.throwIfAborted?.();\n }\n\n if (!trailerReceived) {\n throw new ConnectError('missing trailer', Code.Internal);\n }\n }\n\n return runStreamingCall<I, O>({\n interceptors: options.interceptors,\n signal,\n timeoutMs,\n req: {\n stream: true,\n service: method.parent,\n method,\n requestMethod: 'POST',\n url: createMethodUrl('https://runtimeapi/', method),\n header: requestHeader(true, timeoutMs, header as HeadersInit, false),\n contextValues: contextValues ?? createContextValues(),\n message: input\n },\n next: async (req) => {\n const body = await createRequestBody(req.message);\n const fRes = await options.fetcher.fetch(req.url, {\n method: req.requestMethod,\n headers: req.header,\n signal: req.signal,\n body: body as BodyInit\n });\n\n const { foundStatus, headerError } = validateResponse(\n fRes.status,\n fRes.headers\n );\n if (headerError) {\n throw headerError;\n }\n if (!fRes.body) {\n throw new ConnectError('missing response body', Code.Internal);\n }\n\n const trailer = new Headers();\n const res: StreamResponse<I, O> = {\n ...req,\n header: fRes.headers,\n trailer,\n message: parseResponseBody(\n fRes.body,\n foundStatus,\n trailer,\n fRes.headers,\n req.signal\n )\n };\n return res;\n }\n });\n }\n };\n}\n", "// Copyright 2023, mochabug AB\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.10.2 with parameter \"target=ts,json_types=true,ts_nocheck=true\"\n// @generated from file mochabugapis/adapt/runtime/v1/incoming.proto (package mochabugapis.adapt.runtime.v1, syntax proto3)\n/* eslint-disable */\n// @ts-nocheck\n\nimport type { GenFile, GenMessage } from \"@bufbuild/protobuf/codegenv2\";\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport type { SignalData, SignalDataJson } from \"../../graph/signal_data_pb\";\nimport { file_mochabugapis_adapt_graph_signal_data } from \"../../graph/signal_data_pb\";\nimport type { ExchangeOperation, ExchangeOperationJson } from \"./runtime_pb\";\nimport { file_mochabugapis_adapt_runtime_v1_runtime } from \"./runtime_pb\";\nimport type { Message } from \"@bufbuild/protobuf\";\n\n/**\n * Describes the file mochabugapis/adapt/runtime/v1/incoming.proto.\n */\nexport const file_mochabugapis_adapt_runtime_v1_incoming: GenFile = /*@__PURE__*/\n fileDesc(\"Cixtb2NoYWJ1Z2FwaXMvYWRhcHQvcnVudGltZS92MS9pbmNvbWluZy5wcm90bxIdbW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEiOgoOSG9zdGluZ0RldGFpbHMSGAoLcHVibGljX2hvc3QYASABKAlIAIgBAUIOCgxfcHVibGljX2hvc3QiZgoVU3RhcnRFeGVjdXRpb25SZXF1ZXN0EhAKCHJlY2VpdmVyGAEgASgJEjsKBGhvc3QYAiABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ib3N0aW5nRGV0YWlscyIYChZTdGFydEV4ZWN1dGlvblJlc3BvbnNlIlMKFFN0b3BFeGVjdXRpb25SZXF1ZXN0EjsKBGhvc3QYASABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ib3N0aW5nRGV0YWlscyIXChVTdG9wRXhlY3V0aW9uUmVzcG9uc2UiUQoSQ3JvblRyaWdnZXJSZXF1ZXN0EjsKBGhvc3QYASABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5Ib3N0aW5nRGV0YWlscyIVChNDcm9uVHJpZ2dlclJlc3BvbnNlIsgBCg5FeGNoYW5nZVJlc3VsdBITCgt0cmFuc21pdHRlchgBIAEoCRJLCgdzaWduYWxzGAIgAygLMjoubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuRXhjaGFuZ2VSZXN1bHQuU2lnbmFsc0VudHJ5GlQKDFNpZ25hbHNFbnRyeRILCgNrZXkYASABKAkSMwoFdmFsdWUYAiABKAsyJC5tb2NoYWJ1Z2FwaXMuYWRhcHQuZ3JhcGguU2lnbmFsRGF0YToCOAEi2AEKFUV4Y2hhbmdlUmVzdWx0UmVxdWVzdBJDCglvcGVyYXRpb24YASABKAsyMC5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGNoYW5nZU9wZXJhdGlvbhI9CgZyZXN1bHQYAiABKAsyLS5tb2NoYWJ1Z2FwaXMuYWRhcHQucnVudGltZS52MS5FeGNoYW5nZVJlc3VsdBI7CgRob3N0GAMgASgLMi0ubW9jaGFidWdhcGlzLmFkYXB0LnJ1bnRpbWUudjEuSG9zdGluZ0RldGFpbHMiGAoWRXhjaGFuZ2VSZXN1bHRSZXNwb25zZWIGcHJvdG8z\", [file_mochabugapis_adapt_graph_signal_data, file_mochabugapis_adapt_runtime_v1_runtime]);\n\n/**\n * Some information about the host environment\n * Can for example be used to automatically register hooks for external triggers\n *\n * @generated from message mochabugapis.adapt.runtime.v1.HostingDetails\n */\nexport type HostingDetails = Message<\"mochabugapis.adapt.runtime.v1.HostingDetails\"> & {\n /**\n * The public host (i.e. domain without protocol) of the host environment\n * Only set for public vertices like external triggers and browsers\n *\n * @generated from field: optional string public_host = 1;\n */\n publicHost?: string;\n};\n\n/**\n * Some information about the host environment\n * Can for example be used to automatically register hooks for external triggers\n *\n * @generated from message mochabugapis.adapt.runtime.v1.HostingDetails\n */\nexport type HostingDetailsJson = {\n /**\n * The public host (i.e. domain without protocol) of the host environment\n * Only set for public vertices like external triggers and browsers\n *\n * @generated from field: optional string public_host = 1;\n */\n publicHost?: string;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.HostingDetails.\n * Use `create(HostingDetailsSchema)` to create a new message.\n */\nexport const HostingDetailsSchema: GenMessage<HostingDetails, {jsonType: HostingDetailsJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 0);\n\n/**\n * The request object used to initiate an execution on a specific receiver.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionRequest\n */\nexport type StartExecutionRequest = Message<\"mochabugapis.adapt.runtime.v1.StartExecutionRequest\"> & {\n /**\n * The name of the receiver to start the execution on.\n *\n * @generated from field: string receiver = 1;\n */\n receiver: string;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 2;\n */\n host?: HostingDetails;\n};\n\n/**\n * The request object used to initiate an execution on a specific receiver.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionRequest\n */\nexport type StartExecutionRequestJson = {\n /**\n * The name of the receiver to start the execution on.\n *\n * @generated from field: string receiver = 1;\n */\n receiver?: string;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 2;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StartExecutionRequest.\n * Use `create(StartExecutionRequestSchema)` to create a new message.\n */\nexport const StartExecutionRequestSchema: GenMessage<StartExecutionRequest, {jsonType: StartExecutionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 1);\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionResponse\n */\nexport type StartExecutionResponse = Message<\"mochabugapis.adapt.runtime.v1.StartExecutionResponse\"> & {\n};\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StartExecutionResponse\n */\nexport type StartExecutionResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StartExecutionResponse.\n * Use `create(StartExecutionResponseSchema)` to create a new message.\n */\nexport const StartExecutionResponseSchema: GenMessage<StartExecutionResponse, {jsonType: StartExecutionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 2);\n\n/**\n * The request object used to stop a currently running execution.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionRequest\n */\nexport type StopExecutionRequest = Message<\"mochabugapis.adapt.runtime.v1.StopExecutionRequest\"> & {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetails;\n};\n\n/**\n * The request object used to stop a currently running execution.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionRequest\n */\nexport type StopExecutionRequestJson = {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StopExecutionRequest.\n * Use `create(StopExecutionRequestSchema)` to create a new message.\n */\nexport const StopExecutionRequestSchema: GenMessage<StopExecutionRequest, {jsonType: StopExecutionRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 3);\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionResponse\n */\nexport type StopExecutionResponse = Message<\"mochabugapis.adapt.runtime.v1.StopExecutionResponse\"> & {\n};\n\n/**\n * The response of the start execution\n *\n * @generated from message mochabugapis.adapt.runtime.v1.StopExecutionResponse\n */\nexport type StopExecutionResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.StopExecutionResponse.\n * Use `create(StopExecutionResponseSchema)` to create a new message.\n */\nexport const StopExecutionResponseSchema: GenMessage<StopExecutionResponse, {jsonType: StopExecutionResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 4);\n\n/**\n * The request object used to manage cron-trigger related operations.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerRequest\n */\nexport type CronTriggerRequest = Message<\"mochabugapis.adapt.runtime.v1.CronTriggerRequest\"> & {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetails;\n};\n\n/**\n * The request object used to manage cron-trigger related operations.\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerRequest\n */\nexport type CronTriggerRequestJson = {\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 1;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CronTriggerRequest.\n * Use `create(CronTriggerRequestSchema)` to create a new message.\n */\nexport const CronTriggerRequestSchema: GenMessage<CronTriggerRequest, {jsonType: CronTriggerRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 5);\n\n/**\n * The response of the cron-trigger operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerResponse\n */\nexport type CronTriggerResponse = Message<\"mochabugapis.adapt.runtime.v1.CronTriggerResponse\"> & {\n};\n\n/**\n * The response of the cron-trigger operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.CronTriggerResponse\n */\nexport type CronTriggerResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.CronTriggerResponse.\n * Use `create(CronTriggerResponseSchema)` to create a new message.\n */\nexport const CronTriggerResponseSchema: GenMessage<CronTriggerResponse, {jsonType: CronTriggerResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 6);\n\n/**\n * The result of executing a exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResult\n */\nexport type ExchangeResult = Message<\"mochabugapis.adapt.runtime.v1.ExchangeResult\"> & {\n /**\n * The name of the transmitter pushing the resulting signals\n *\n * @generated from field: string transmitter = 1;\n */\n transmitter: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals: { [key: string]: SignalData };\n};\n\n/**\n * The result of executing a exchange\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResult\n */\nexport type ExchangeResultJson = {\n /**\n * The name of the transmitter pushing the resulting signals\n *\n * @generated from field: string transmitter = 1;\n */\n transmitter?: string;\n\n /**\n * The signals to send over the transmitter\n *\n * @generated from field: map<string, mochabugapis.adapt.graph.SignalData> signals = 2;\n */\n signals?: { [key: string]: SignalDataJson };\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeResult.\n * Use `create(ExchangeResultSchema)` to create a new message.\n */\nexport const ExchangeResultSchema: GenMessage<ExchangeResult, {jsonType: ExchangeResultJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 7);\n\n/**\n * Represents the result object providing detailed information about the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultRequest\n */\nexport type ExchangeResultRequest = Message<\"mochabugapis.adapt.runtime.v1.ExchangeResultRequest\"> & {\n /**\n * The exchange operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperation;\n\n /**\n * The result of the exchange, check the operation status before using\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeResult result = 2;\n */\n result?: ExchangeResult;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 3;\n */\n host?: HostingDetails;\n};\n\n/**\n * Represents the result object providing detailed information about the exchange operation\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultRequest\n */\nexport type ExchangeResultRequestJson = {\n /**\n * The exchange operation\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeOperation operation = 1;\n */\n operation?: ExchangeOperationJson;\n\n /**\n * The result of the exchange, check the operation status before using\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.ExchangeResult result = 2;\n */\n result?: ExchangeResultJson;\n\n /**\n * General information about the host environment\n *\n * @generated from field: mochabugapis.adapt.runtime.v1.HostingDetails host = 3;\n */\n host?: HostingDetailsJson;\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeResultRequest.\n * Use `create(ExchangeResultRequestSchema)` to create a new message.\n */\nexport const ExchangeResultRequestSchema: GenMessage<ExchangeResultRequest, {jsonType: ExchangeResultRequestJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 8);\n\n/**\n * The response of the procedure result\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultResponse\n */\nexport type ExchangeResultResponse = Message<\"mochabugapis.adapt.runtime.v1.ExchangeResultResponse\"> & {\n};\n\n/**\n * The response of the procedure result\n *\n * @generated from message mochabugapis.adapt.runtime.v1.ExchangeResultResponse\n */\nexport type ExchangeResultResponseJson = {\n};\n\n/**\n * Describes the message mochabugapis.adapt.runtime.v1.ExchangeResultResponse.\n * Use `create(ExchangeResultResponseSchema)` to create a new message.\n */\nexport const ExchangeResultResponseSchema: GenMessage<ExchangeResultResponse, {jsonType: ExchangeResultResponseJson}> = /*@__PURE__*/\n messageDesc(file_mochabugapis_adapt_runtime_v1_incoming, 9);\n\n"],
5
+ "mappings": "ubAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,6BAAAE,GAAA,6BAAAC,GAAA,YAAAC,EAAA,2BAAAC,GAAA,4BAAAC,GAAA,sBAAAC,GAAA,uCAAAC,GAAA,wCAAAC,GAAA,sCAAAC,GAAA,uCAAAC,GAAA,yCAAAC,GAAA,0CAAAC,GAAA,oCAAAC,GAAA,qCAAAC,GAAA,uCAAAC,GAAA,wCAAAC,GAAA,oBAAAC,GAAA,yCAAAC,GAAA,0CAAAC,GAAA,8CAAAC,GAAA,2CAAAC,GAAA,8BAAAC,GAAA,2CAAAC,GAAA,oCAAAC,GAAA,oBAAAC,GAAA,wBAAAC,GAAA,mDAAAC,GAAA,oDAAAC,GAAA,oDAAAC,GAAA,qDAAAC,GAAA,oDAAAC,GAAA,qDAAAC,GAAA,gDAAAC,GAAA,iDAAAC,GAAA,+CAAAC,GAAA,gDAAAC,GAAA,6DAAAC,GAAA,8BAAAC,GAAA,mBAAAC,GAAA,kCAAAC,GAAA,mCAAAC,GAAA,4BAAAC,GAAA,gCAAAC,GAAA,iCAAAC,GAAA,yBAAAC,GAAA,mBAAAC,GAAA,gBAAAC,GAAA,oBAAAC,GAAA,+CAAAC,GAAA,gDAAAC,GAAA,gDAAAC,GAAA,iDAAAC,GAAA,gDAAAC,GAAA,iDAAAC,GAAA,4CAAAC,GAAA,6CAAAC,GAAA,2CAAAC,GAAA,4CAAAC,GAAA,sCAAAC,GAAA,uCAAAC,GAAA,4BAAAC,GAAA,6BAAAC,GAAA,mCAAAC,GAAA,oCAAAC,GAAA,mBAAAC,GAAA,yBAAAC,GAAA,2BAAAC,GAAA,gCAAAC,GAAA,iCAAAC,GAAA,mBAAAC,GAAA,oBAAAC,GAAA,mCAAAC,GAAA,oCAAAC,GAAA,qCAAAC,GAAA,sCAAAC,GAAA,cAAAC,GAAA,oBAAAC,GAAA,iBAAAC,GAAA,kBAAAC,GAAA,kCAAAC,GAAA,mCAAAC,GAAA,mBAAAC,GAAA,wBAAAC,GAAA,4BAAAC,GAAA,6BAAAC,GAAA,0BAAAC,GAAA,2BAAAC,GAAA,mBAAAC,GAAA,4BAAAC,GAAA,6BAAAC,GAAA,4BAAAC,GAAA,4BAAAC,GAAA,6BAAAC,GAAA,4BAAAC,GAAA,mBAAAC,GAAA,sBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,kBAAAC,GAAA,wBAAAC,GAAA,wBAAAC,GAAA,8BAAAC,GAAA,qBAAAC,EAAA,2BAAAC,GAAA,uBAAAC,GAAA,gCAAAC,GAAA,iCAAAC,GAAA,8BAAAC,GAAA,+BAAAC,GAAA,WAAAC,GAAA,iBAAAC,GAAA,+BAAAC,GAAA,gCAAAC,GAAA,oBAAAC,GAAA,6BAAAC,GAAA,8BAAAC,GAAA,UAAAC,EAAA,+BAAAC,GAAA,gCAAAC,GAAA,yBAAAC,GAAA,gBAAAC,GAAA,sBAAAC,GAAA,sBAAAC,GAAA,qBAAAC,GAAA,2BAAAC,GAAA,cAAAC,GAAA,wBAAAC,GAAA,yBAAAC,EAAA,eAAAC,GAAA,qBAAAC,GAAA,sBAAAC,GAAA,yBAAAC,EAAA,uDAAAC,EAAA,2CAAAC,GAAA,6CAAAC,EAAA,2CAAAC,GAAA,iDAAAC,EAAA,8CAAAC,EAAA,oDAAAC,EAAA,gDAAAC,EAAA,8CAAAC,GAAA,8CAAAC,EAAA,kDAAAC,GAAA,gDAAAC,EAAA,+CAAAC,EAAA,6CAAAC,EAAA,gCAAAC,GAAA,iBAAAC,KAAA,eAAAC,GAAAtJ,IAYA,IAAAuJ,EAMO,8BACPC,EAMO,kCACPC,EAAyD,+BCNzD,IAAAC,EAAsC,wCCAtC,IAAAC,EAAyD,wCAEzDC,EAAgJ,kCAMnIC,KACX,YAAS,q6tEAAs6tE,CAAC,kCAAiC,gCAA+B,kCAAiC,gCAA8B,CAAC,EDF3iuE,IAAMC,KACX,YAAS,60DAA80D,CAACC,CAA0B,CAAC,EAoMx2DC,KACX,eAAYF,EAA2C,CAAC,EE7M1D,IAAAG,EAAsC,wCCAtC,IAAAC,EAAsC,wCAGtC,IAAAC,GAA4C,kCAM/BC,KACX,YAAS,+2JAAg3J,CAACC,EAA4B,8BAA2B,CAAC,EAkZv6JC,MACX,eAAYF,EAA0C,CAAC,EDpZlD,IAAMG,KACX,YAAS,29BAA49B,CAACC,EAA4BC,CAAwC,CAAC,EAwShiCC,MACX,eAAYH,EAA6C,CAAC,EEnT5D,IAAAI,GAAsC,wCCAtC,IAAAC,GAAsC,wCCAtC,IAAAC,GAAsC,wCCAtC,IAAAC,GAAsC,wCAS/B,IAAMC,KACX,aAAS,6dAA8d,CAACC,EAA4BC,CAA2C,CAAC,EAkKriBC,MACX,gBAAYH,EAAiD,CAAC,EDpKzD,IAAMI,MACX,aAAS,0iBAA2iB,CAACC,EAA4BC,CAA+C,CAAC,EA4EtnBC,MACX,gBAAYH,GAA2C,CAAC,ED9EnD,IAAMI,MACX,aAAS,8vBAA+vB,CAACC,EAA4BC,EAAyC,CAAC,EA4Ep0BC,MACX,gBAAYH,GAAwC,CAAC,EGvFvD,IAAAI,GAAsC,wCCAtC,IAAAC,EAAgD,wCAWzC,IAAMC,KACX,YAAS,ipCAAkpC,CAACC,EAA4BC,EAA2CC,CAA2C,CAAC,EAgXpwCC,MACX,eAAYJ,EAA8C,CAAC,EAQjDK,QAOVA,IAAA,YAAc,GAAd,cAYAA,IAAA,QAAU,GAAV,UAcAA,IAAA,eAAiB,GAAjB,iBAeAA,IAAA,gBAAkB,GAAlB,kBAhDUA,QAAA,IA8DCC,MACX,YAASN,EAA8C,EAAG,CAAC,ED3btD,IAAMO,MACX,aAAS,kfAAmf,CAACC,EAA4BC,CAA4C,CAAC,EAkE3jBC,MACX,gBAAYH,GAAwC,CAAC,EE7EvD,IAAAI,EAAgD,wCASzC,IAAMC,KACX,YAAS,usBAAwsB,CAACC,EAA4BC,CAA+C,CAAC,EA8EnxBC,MACX,eAAYH,EAA2C,CAAC,EAO9CI,QAMVA,IAAA,YAAc,GAAd,cAOAA,IAAA,SAAW,GAAX,WAOAA,IAAA,OAAS,GAAT,SAOAA,IAAA,QAAU,GAAV,UA3BUA,QAAA,IAwCCC,MACX,YAASL,EAA2C,EAAG,CAAC,EN5HnD,IAAMM,MACX,aAAS,+8BAAg9B,CAACC,EAA4BC,GAAwCC,GAAwCC,CAAyC,CAAC,EAkGrmCC,KACX,gBAAYL,GAA+C,CAAC,EOjH9D,IAAAM,EAA6D,wCAG7D,IAAAC,EAA6G,kCCH7G,IAAAC,EAA6D,wCCA7D,IAAAC,GAAkC,wCCAlC,IAAAC,GAAsC,wCAMzBC,MACX,aAAS,stBAAstB,EDHjuB,IAAAC,GAAgD,kCAKnCC,MACX,aAAS,kUAAmU,CAACC,GAAsB,kCAA+B,CAAC,EEVrY,IAAAC,EAAyD,wCCAzD,IAAAC,GAAmC,wCAKtBC,MACX,aAAS,gYAAgY,EDF3Y,IAAAC,GAA+E,kCAMlEC,MACX,YAAS,6xJAA8xJ,CAACC,GAA8B,mCAAiC,gCAA6B,CAAC,EHNv4J,IAAAC,GAA+C,kCAQxC,IAAMC,KACX,YAAS,y8OAA08O,CAACC,EAA4BC,GAA6BC,GAAwB,kCAAgCC,CAAyC,CAAC,EAoCpmPC,MACX,eAAYL,EAAoD,CAAC,EAgDtDM,MACX,eAAYN,EAAoD,CAAC,EAkFtDO,MACX,eAAYP,EAAoD,CAAC,EA8DtDQ,MACX,eAAYR,EAAoD,CAAC,EAkEtDS,MACX,eAAYT,EAAoD,CAAC,EA8DtDU,MACX,eAAYV,EAAoD,CAAC,EAgEtDW,MACX,eAAYX,EAAoD,CAAC,EAgDtDY,MACX,eAAYZ,EAAoD,CAAC,EAoCtDa,MACX,eAAYb,EAAoD,CAAC,EAsBtDc,MACX,eAAYd,EAAoD,CAAC,EAkCtDe,MACX,eAAYf,EAAoD,EAAE,EAkCvDgB,MACX,eAAYhB,EAAoD,EAAE,EA4EvDiB,MACX,eAAYjB,EAAoD,EAAE,EA8GvDkB,MACX,eAAYlB,EAAoD,EAAE,EAgDvDmB,MACX,eAAYnB,EAAoD,EAAE,EAkCvDoB,MACX,eAAYpB,EAAoD,EAAE,EAgDvDqB,MACX,eAAYrB,EAAoD,EAAE,EAsBvDsB,MACX,eAAYtB,EAAoD,EAAE,EAsFvDuB,MACX,eAAYvB,EAAoD,EAAE,EAgEvDwB,MACX,eAAYxB,EAAoD,EAAE,EAuGvDyB,MACX,eAAYzB,EAAoD,EAAE,EAgDvD0B,MACX,eAAY1B,EAAoD,EAAE,EAkCvD2B,MACX,eAAY3B,EAAoD,EAAE,EAuGvD4B,MACX,eAAY5B,EAAoD,EAAE,EAgDvD6B,MACX,eAAY7B,EAAoD,EAAE,EAOxD8B,QAMVA,IAAA,YAAc,GAAd,cAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,SAAW,GAAX,WAOAA,IAAA,UAAY,GAAZ,YAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,WAAa,GAAb,aAOAA,IAAA,UAAY,GAAZ,YA9DUA,QAAA,IA2ECC,MACX,YAAS/B,EAAoD,CAAC,EAOnDgC,MAwGX,eAAYhC,EAAoD,CAAC,EKnnDnE,IAAAiC,EAAsC,wCAGtC,IAAAC,GAA+C,kCAMlCC,KACX,YAAS,k9IAAm9I,CAACC,EAA4B,iCAA8B,CAAC,EAgD7gJC,MACX,eAAYF,EAA0C,CAAC,EAgD5CG,MACX,eAAYH,EAA0C,CAAC,EA8D5CI,MACX,eAAYJ,EAA0C,CAAC,EA4E5CK,MACX,eAAYL,EAA0C,CAAC,EA8G5CM,MACX,eAAYN,EAA0C,CAAC,EA4E5CO,KACX,eAAYP,EAA0C,CAAC,EAyD5CQ,MACX,eAAYR,EAA0C,CAAC,EA8E5CS,MACX,eAAYT,EAA0C,CAAC,EAgD5CU,MACX,eAAYV,EAA0C,CAAC,EAkC5CW,MACX,eAAYX,EAA0C,CAAC,EA8D5CY,MACX,eAAYZ,EAA0C,EAAE,EAqF7Ca,MACX,eAAYb,EAA0C,GAAI,CAAC,EAgDhDc,MACX,eAAYd,EAA0C,EAAE,EAqF7Ce,MACX,eAAYf,EAA0C,GAAI,CAAC,ENx5BtD,IAAMgB,KACX,YAAS,qmhBAAsmhB,CAACC,EAA4B,kCAAiC,8BAA6B,iCAAgCC,EAAoDC,EAA2CC,EAA6CC,EAA2CC,GAA+CC,CAAwC,CAAC,EAkD9+hBC,MACX,eAAYR,EAA4C,CAAC,EAoC9CS,MACX,eAAYT,EAA4C,CAAC,EAsD9CU,MACX,eAAYV,EAA4C,CAAC,EAoC9CW,MACX,eAAYX,EAA4C,CAAC,EAkD9CY,MACX,eAAYZ,EAA4C,CAAC,EAoC9Ca,MACX,eAAYb,EAA4C,CAAC,EAgD9Cc,MACX,eAAYd,EAA4C,CAAC,EAgD9Ce,MACX,eAAYf,EAA4C,CAAC,EAkC9CgB,MACX,eAAYhB,EAA4C,CAAC,EAsB9CiB,MACX,eAAYjB,EAA4C,CAAC,EAkC9CkB,MACX,eAAYlB,EAA4C,EAAE,EAkC/CmB,MACX,eAAYnB,EAA4C,EAAE,EA8D/CoB,MACX,eAAYpB,EAA4C,EAAE,EAoC/CqB,MACX,eAAYrB,EAA4C,EAAE,EA8D/CsB,MACX,eAAYtB,EAA4C,EAAE,EAgD/CuB,MACX,eAAYvB,EAA4C,EAAE,EAsB/CwB,MACX,eAAYxB,EAA4C,EAAE,EAoC/CyB,MACX,eAAYzB,EAA4C,EAAE,EAgD/C0B,MACX,eAAY1B,EAA4C,EAAE,EAgE/C2B,MACX,eAAY3B,EAA4C,EAAE,EA4E/C4B,MACX,eAAY5B,EAA4C,EAAE,EAkC/C6B,MACX,eAAY7B,EAA4C,EAAE,EAwE/C8B,MACX,eAAY9B,EAA4C,EAAE,EAkE/C+B,MACX,eAAY/B,EAA4C,EAAE,EAwG/CgC,MACX,eAAYhC,EAA4C,EAAE,EAgE/CiC,MACX,eAAYjC,EAA4C,EAAE,EAkD/CkC,MACX,eAAYlC,EAA4C,EAAE,EAoC/CmC,MACX,eAAYnC,EAA4C,EAAE,EAsD/CoC,MACX,eAAYpC,EAA4C,EAAE,EAoC/CqC,MACX,eAAYrC,EAA4C,EAAE,EAkD/CsC,MACX,eAAYtC,EAA4C,EAAE,EAkC/CuC,MACX,eAAYvC,EAA4C,EAAE,EAgD/CwC,MACX,eAAYxC,EAA4C,EAAE,EAgD/CyC,MACX,eAAYzC,EAA4C,EAAE,EAkC/C0C,MACX,eAAY1C,EAA4C,EAAE,EAwE/C2C,MACX,eAAY3C,EAA4C,EAAE,EAgF/C4C,MACX,eAAY5C,EAA4C,EAAE,EAkC/C6C,MACX,eAAY7C,EAA4C,EAAE,EAsB/C8C,MACX,eAAY9C,EAA4C,EAAE,EA4C/C+C,MACX,eAAY/C,EAA4C,EAAE,EAkC/CgD,MACX,eAAYhD,EAA4C,EAAE,EAsB/CiD,MACX,eAAYjD,EAA4C,EAAE,EAkC/CkD,MACX,eAAYlD,EAA4C,EAAE,EAkC/CmD,MACX,eAAYnD,EAA4C,EAAE,EAkC/CoD,MACX,eAAYpD,EAA4C,EAAE,EAkC/CqD,MACX,eAAYrD,EAA4C,EAAE,EAkC/CsD,MACX,eAAYtD,EAA4C,EAAE,EAkC/CuD,MACX,eAAYvD,EAA4C,EAAE,EAkC/CwD,MACX,eAAYxD,EAA4C,EAAE,EAkC/CyD,MACX,eAAYzD,EAA4C,EAAE,EAkF/C0D,MACX,eAAY1D,EAA4C,EAAE,EAOhD2D,QAMVA,IAAA,YAAc,GAAd,cAYAA,IAAA,gBAAkB,GAAlB,kBAaAA,IAAA,gBAAkB,GAAlB,kBAmBAA,IAAA,OAAS,GAAT,SAoBAA,IAAA,OAAS,GAAT,SAtEUA,QAAA,IAmFCC,MACX,YAAS5D,EAA4C,CAAC,EAQ5C6D,QAMVA,IAAA,YAAc,GAAd,cAOAA,IAAA,MAAQ,GAAR,QAOAA,IAAA,OAAS,GAAT,SAOAA,IAAA,OAAS,GAAT,SAOAA,IAAA,SAAW,GAAX,WAOAA,IAAA,QAAU,GAAV,UAOAA,IAAA,aAAe,GAAf,eAhDUA,QAAA,IA8DCC,MACX,YAAS9D,EAA4C,CAAC,EAQ3C+D,MA4HX,eAAY/D,EAA4C,CAAC,EAW9CgE,MAsFX,eAAYhE,EAA4C,CAAC,EAO9CiE,MAoEX,eAAYjE,EAA4C,CAAC,EOxzF3D,IAAAkE,EAAwD,+BACxDC,EAQO,wCACPC,EAOO,iDAQA,SAASC,EACdC,EACW,CACX,MAAO,CACL,MAAM,MACJC,EACAC,EACAC,EACAC,EACAC,EACAC,EAC8B,CAC9B,GAAM,CAAE,UAAAC,EAAW,MAAAC,CAAM,KAAI,iCAA8BP,EAAQ,EAAI,EAEvE,SAAO,gBAAmB,CACxB,aAAcD,EAAQ,aACtB,OAAAE,EACA,UAAAC,EACA,IAAK,CACH,OAAQ,GACR,QAASF,EAAO,OAChB,OAAAA,EACA,cAAe,OACf,OAAK,mBAAgB,sBAAuBA,CAAM,EAClD,UAAQ,iBAAc,GAAME,EAAWC,EAAQ,EAAK,EACpD,cAAeE,MAAiB,uBAAoB,EACpD,QAAAD,CACF,EACA,KAAM,MAAOI,GAA0D,CACrE,IAAMC,EAAW,MAAMV,EAAQ,QAAQ,MAAMS,EAAI,IAAK,CACpD,OAAQA,EAAI,cACZ,QAASA,EAAI,OACb,OAAQA,EAAI,OACZ,QAAM,kBAAe,EAAGF,EAAUE,EAAI,OAAO,CAAC,CAChD,CAAC,EAEK,CAAE,YAAAE,CAAY,KAAI,oBACtBD,EAAS,OACTA,EAAS,OACX,EACA,GAAI,CAACA,EAAS,KACZ,MAAIC,IAAgB,OAAiBA,EAC/B,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAG/D,IAAMC,KAAS,gCACbF,EAAS,IACX,EAAE,UAAU,EACRG,EACAC,EAEJ,OAAS,CACP,IAAMC,EAAI,MAAMH,EAAO,KAAK,EAC5B,GAAIG,EAAE,KACJ,MAEF,GAAM,CAAE,MAAAC,EAAO,KAAAC,CAAK,EAAIF,EAAE,MAC1B,IAAKC,EAAQ,oBAAoB,iBAC/B,MAAM,IAAI,eACR,iDACA,OAAK,QACP,EAEF,GAAIA,IAAU,cAAa,CACzB,GAAIH,IAAY,OACd,MAAM,IAAI,eAAa,gBAAiB,OAAK,QAAQ,EAEvDA,KAAU,gBAAaI,CAAI,EAC3B,QACF,CACA,GAAIH,IAAQ,OACV,MAAM,IAAI,eAAa,gBAAiB,OAAK,aAAa,EAE5DA,EAAMN,EAAMS,CAAI,CAClB,CAEA,GAAIJ,IAAY,OACd,MAAIF,IAAgB,OAAiBA,EAC/B,IAAI,eACR,kBACAD,EAAS,QAAQ,IAAI,kBAAgB,EACjC,OAAK,cACL,OAAK,OACX,EAIF,MAFA,mBAAgBG,EAASH,EAAS,OAAO,EAErCI,IAAQ,OACV,MAAM,IAAI,eACR,kBACAD,EAAQ,IAAI,kBAAgB,EAAI,OAAK,cAAgB,OAAK,OAC5D,EAGF,MAAO,CACL,OAAQ,GACR,QAASZ,EAAO,OAChB,OAAAA,EACA,OAAQS,EAAS,QACjB,QAASI,EACT,QAAAD,CACF,CACF,CACF,CAAC,CACH,EAEA,MAAM,OACJZ,EACAC,EACAC,EACAC,EAKAc,EACAZ,EAC+B,CAC/B,GAAM,CAAE,UAAAC,EAAW,MAAAC,CAAM,KAAI,iCAA8BP,EAAQ,EAAI,EAEvE,eAAekB,EACbC,EACqB,CAGrB,GAAM,CAAE,MAAAC,EAAO,KAAAC,CAAK,EAAI,MAAMF,EAAO,OAAO,aAAa,EAAE,EAAE,KAAK,EAClE,GAAIE,EACF,MAAM,IAAI,eACR,0BACA,OAAK,eACP,EAEF,SAAO,kBAAe,EAAGf,EAAUc,CAAK,CAAC,CAC3C,CAEA,eAAgBE,EACdC,EACAC,EACAC,EACAC,EACAC,EACA,CAGA,GAAIH,EAAa,CAIf,GAAI,EAAE,QADc,gCAA6BD,CAAI,EAAE,UAAU,EACzC,KAAK,GAAG,KAC9B,MAAM,IAAI,eACR,+BACA,OAAK,QACP,EAEF,MACF,CAEA,IAAMZ,KAAS,gCAA6BY,CAAI,EAAE,UAAU,EACxDK,EAAkB,GACtB,OAAS,CACP,IAAMC,GAAS,MAAMlB,EAAO,KAAK,EACjC,GAAIkB,GAAO,KACT,MAEF,GAAM,CAAE,MAAAd,GAAO,KAAAC,EAAK,EAAIa,GAAO,MAC/B,IAAKd,GAAQ,iBAAiB,cAAa,CACzC,GAAIa,EACF,MAAM,IAAI,eAAa,gBAAiB,OAAK,QAAQ,EAEvDA,EAAkB,GAClB,IAAMhB,MAAU,gBAAaI,EAAI,KACjC,mBAAgBJ,GAASc,CAAS,EAClCd,GAAQ,QAAQ,CAACQ,GAAOU,KAAQL,EAAc,IAAIK,GAAKV,EAAK,CAAC,EAC7D,QACF,CACA,GAAIQ,EACF,MAAM,IAAI,eACR,8BACA,OAAK,QACP,EAEF,MAAMrB,EAAMS,EAAI,CAClB,CAOA,GAJI,mBAAoBW,GACtBA,EAAY,iBAAiB,EAG3B,CAACC,EACH,MAAM,IAAI,eAAa,kBAAmB,OAAK,QAAQ,CAE3D,CAEA,SAAO,oBAAuB,CAC5B,aAAc7B,EAAQ,aACtB,OAAAE,EACA,UAAAC,EACA,IAAK,CACH,OAAQ,GACR,QAASF,EAAO,OAChB,OAAAA,EACA,cAAe,OACf,OAAK,mBAAgB,sBAAuBA,CAAM,EAClD,UAAQ,iBAAc,GAAME,EAAWC,EAAuB,EAAK,EACnE,cAAeE,MAAiB,uBAAoB,EACpD,QAASY,CACX,EACA,KAAM,MAAOT,GAAQ,CACnB,IAAMe,EAAO,MAAML,EAAkBV,EAAI,OAAO,EAC1CuB,EAAO,MAAMhC,EAAQ,QAAQ,MAAMS,EAAI,IAAK,CAChD,OAAQA,EAAI,cACZ,QAASA,EAAI,OACb,OAAQA,EAAI,OACZ,KAAMe,CACR,CAAC,EAEK,CAAE,YAAAC,EAAa,YAAAd,CAAY,KAAI,oBACnCqB,EAAK,OACLA,EAAK,OACP,EACA,GAAIrB,EACF,MAAMA,EAER,GAAI,CAACqB,EAAK,KACR,MAAM,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAG/D,IAAMnB,EAAU,IAAI,QAapB,MAZkC,CAChC,GAAGJ,EACH,OAAQuB,EAAK,QACb,QAAAnB,EACA,QAASU,EACPS,EAAK,KACLP,EACAZ,EACAmB,EAAK,QACLvB,EAAI,MACN,CACF,CAEF,CACF,CAAC,CACH,CACF,CACF,CC1QA,IAAAwB,EAAsC,wCAU/B,IAAMC,KACX,YAAS,uuCAAwuC,CAACC,EAA2CC,CAA0C,CAAC,EAsC7zCC,MACX,eAAYH,EAA6C,CAAC,EAgD/CI,MACX,eAAYJ,EAA6C,CAAC,EAsB/CK,MACX,eAAYL,EAA6C,CAAC,EAkC/CM,MACX,eAAYN,EAA6C,CAAC,EAsB/CO,MACX,eAAYP,EAA6C,CAAC,EAkC/CQ,MACX,eAAYR,EAA6C,CAAC,EAsB/CS,MACX,eAAYT,EAA6C,CAAC,EAgD/CU,MACX,eAAYV,EAA6C,CAAC,EA8D/CW,MACX,eAAYX,EAA6C,CAAC,EAsB/CY,MACX,eAAYZ,EAA6C,CAAC,EpB/S5D,IAAMa,GAA6C,CACjD,OAAQ,SACR,SAAU,WACV,mBAAoB,qBACtB,EAEA,SAASC,GAAYC,EAA2B,CAC9C,OAAOF,GAAmBE,CAAS,GAAKA,CAC1C,CAoCO,IAAMC,EAAN,KAAc,CACT,IACA,cACA,YAQV,YAAYC,EAAkBC,EAAqB,CACjD,KAAK,IAAMD,EACX,KAAK,YAAcC,EACnB,KAAK,iBAAgB,gBACnBC,GACAC,EAAuB,CACrB,QAAS,KAAK,IAAI,OAClB,aAAc,CACXC,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB,UAAU,KAAK,WAAW,EAAE,EACrD,MAAMD,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAeA,MAAM,kBAAiCC,EAA0B,CAI/D,IAAMC,GAHW,MAAM,KAAK,cAAc,wBAAwB,CAChE,MAAO,CAACD,CAAI,CACd,CAAC,GACsB,MAAMA,CAAI,EACjC,OAAQC,KAAQ,UAAO,cAAaA,CAAK,EAAI,MAC/C,CAyBA,MAAM,sBACDC,EACS,CACZ,IAAMC,EAAW,MAAM,KAAK,cAAc,wBAAwB,CAChE,MAAOD,CACT,CAAC,EACKE,EAAiC,CAAC,EACxC,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,EAAS,KAAK,EACtDC,EAAIC,CAAG,KAAI,UAAO,cAAaC,CAAK,EAEtC,OAAOF,CACT,CAeA,MAAM,gBAA+BJ,EAA0B,CAI7D,IAAMC,GAHW,MAAM,KAAK,cAAc,sBAAsB,CAC9D,MAAO,CAACD,CAAI,CACd,CAAC,GACsB,MAAMA,CAAI,EACjC,OAAQC,KAAQ,UAAO,cAAaA,CAAK,EAAI,MAC/C,CAyBA,MAAM,oBACDC,EACS,CACZ,IAAMC,EAAW,MAAM,KAAK,cAAc,sBAAsB,CAC9D,MAAOD,CACT,CAAC,EACKE,EAAiC,CAAC,EACxC,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,EAAS,KAAK,EACtDC,EAAIC,CAAG,KAAI,UAAO,cAAaC,CAAK,EAEtC,OAAOF,CACT,CAkBA,MAAM,aAAaJ,EAA8B,CAI/C,OAHiB,MAAM,KAAK,cAAc,mBAAmB,CAC3D,MAAO,CAACA,CAAI,CACd,CAAC,GACe,MAAMA,CAAI,CAC5B,CAmBA,MAAM,iBAAiBO,EAAiD,CAItE,OAHiB,MAAM,KAAK,cAAc,mBAAmB,CAC3D,MAAAA,CACF,CAAC,GACe,KAClB,CAkBA,MAAM,eAAeP,EAA8B,CAIjD,OAHiB,MAAM,KAAK,cAAc,qBAAqB,CAC7D,MAAO,CAACA,CAAI,CACd,CAAC,GACe,MAAMA,CAAI,CAC5B,CAmBA,MAAM,mBAAmBO,EAAiD,CAIxE,OAHiB,MAAM,KAAK,cAAc,qBAAqB,CAC7D,MAAAA,CACF,CAAC,GACe,KAClB,CAiBA,cAAcP,EAA4B,CACxC,MAAO,CAACQ,EAA+BC,IAAuB,CAC5D,IAAMV,EAAM,IAAI,QAAQS,EAAOC,CAAI,EACnC,OAAAV,EAAI,QAAQ,IACV,0CACA,UAAU,KAAK,WAAW,EAC5B,EACAA,EAAI,QAAQ,IAAI,yCAA0C,QAAQC,CAAI,EAAE,EACxED,EAAI,QAAQ,IAAI,OAAQ,IAAI,IAAIA,EAAI,GAAG,EAAE,IAAI,EAEtC,KAAK,IAAI,UAAU,MAAMA,CAAG,CACrC,CACF,CAiBA,gBAAgBC,EAA4B,CAC1C,MAAO,CAACQ,EAA+BC,IAAuB,CAC5D,IAAMV,EAAM,IAAI,QAAQS,EAAOC,CAAI,EACnC,OAAAV,EAAI,QAAQ,IACV,0CACA,UAAU,KAAK,WAAW,EAC5B,EACAA,EAAI,QAAQ,IACV,yCACA,UAAUC,CAAI,EAChB,EACAD,EAAI,QAAQ,IAAI,OAAQ,IAAI,IAAIA,EAAI,GAAG,EAAE,IAAI,EACtC,KAAK,IAAI,UAAU,MAAMA,CAAG,CACrC,CACF,CAoBA,MAAM,UAAUW,EAA8B,CAC5C,MAAM,KAAK,cAAc,UAAU,CAAE,YAAaA,CAAM,CAAC,CAC3D,CAeA,MAAM,mBAAyD,CAE7D,OADiB,MAAM,KAAK,cAAc,kBAAkB,CAAC,CAAC,GAC9C,kBAClB,CASA,MAAM,SAASC,EAAkC,CAC/C,IAAIC,EAAM,IAAI,IAAI,oBAAoB,EACtCA,EAAI,SAAWD,EACf,IAAMP,EAAM,MAAM,KAAK,IAAI,OAAO,MAAMQ,EAAK,CAAE,OAAQ,KAAM,CAAC,EAC9D,GAAI,CAACR,EAAI,GACP,MAAMS,GAAaT,EAAI,MAAM,EAG/B,IAAMU,EAAcV,EAAI,QAAQ,IAAI,cAAc,EAClD,GACE,CAACU,GACD,CAACA,EAAY,YAAY,EAAE,SAAS,0BAA0B,EAE9D,MAAM,IAAI,eACR,6CACA,OAAK,eACP,EAGF,MAAO,CAAE,QAASV,EAAI,KAAwB,KAAMU,CAAY,CAClE,CASA,MAAM,cAAcH,EAAuC,CACzD,IAAIC,EAAM,IAAI,IAAI,oBAAoB,EACtCA,EAAI,SAAWD,EACf,IAAMP,EAAM,MAAM,KAAK,IAAI,OAAO,MAAMQ,EAAK,CAAE,OAAQ,KAAM,CAAC,EAC9D,GAAI,CAACR,EAAI,GACP,MAAMS,GAAaT,EAAI,MAAM,EAG/B,IAAMU,EAAcV,EAAI,QAAQ,IAAI,cAAc,EAClD,GACE,CAACU,GACD,CAACA,EAAY,YAAY,EAAE,SAAS,kBAAkB,EAEtD,MAAM,IAAI,eACR,6CACA,OAAK,eACP,EAEF,OAAQ,MAAMV,EAAI,KAAK,CACzB,CACF,EAMaW,GAAN,KAAsB,CAClB,OAOT,YAAYC,EAAkC,CAC5C,KAAK,OAASA,CAChB,CAqBA,IACEX,EAQY,CACZ,IAAMD,EAAM,KAAK,OAAOC,CAAG,EAC3B,GAAKD,EAGL,MAAO,CACL,MAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAI,KAAK,CAAC,EACrD,IAAKA,EAAI,SAAU,IACnB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,EACvD,KAAMA,EAAI,SAAU,IACtB,CACF,CAqBA,UAAUC,EAOI,CACZ,IAAMD,EAAM,KAAK,OAAOC,CAAG,EAC3B,GAAKD,EAIL,MAAO,CACL,IAAKA,EAAI,SAAU,IACnB,MAAOA,EAAI,MACX,gBAAc,iBAAcA,EAAI,SAAU,YAAa,EACvD,KAAMA,EAAI,SAAU,IACtB,CACF,CACF,EASaa,GAAN,KAAwB,CACrB,IAAwB,CAAC,EAkBjC,OAAgBZ,EAAaC,EAAUY,EAAoB,CACzD,YAAK,IAAI,QACP,UAAOC,EAAsB,CAC3B,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAAd,EACA,MAAO,CACL,MACEC,aAAiB,WACbA,EACA,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUA,CAAK,CAAC,EACpD,IAAAY,CACF,CACF,CACF,CACF,CAAC,CACH,EACO,IACT,CAgBA,OAAOb,EAAmB,CACxB,YAAK,IAAI,QACP,UAAOc,EAAsB,CAC3B,UAAW,CACT,KAAM,SACN,MAAO,CAAE,IAAAd,CAAI,CACf,CACF,CAAC,CACH,EACO,IACT,CAuBA,YACEe,EACAC,EACAC,EACAC,EACM,CACN,YAAK,IAAI,QACP,UAAOJ,EAAsB,CAC3B,UAAW,CACT,KAAM,cACN,MAAO,CACL,MAAAC,EACA,IAAAC,EACA,eAAAC,EACA,aAAAC,CACF,CACF,CACF,CAAC,CACH,EACO,IACT,CAOA,OAA0B,CACxB,OAAO,KAAK,GACd,CACF,EA4LaC,EAAN,KAAY,CACT,QACA,UAQR,YAAYC,EAA6BC,EAA0B,CACjE,KAAK,QAAUD,EACf,KAAK,aAAY,gBAAaE,GAAiBD,CAAS,CAC1D,CA8BA,MAAM,OACJrB,EACAC,EACAY,EACAU,EACwB,CACxB,IAAIC,EACAD,IACFC,KAAe,UAAOC,GAAwC,CAAC,CAAC,EAC5DF,EAAU,aACZC,EAAa,aAAe,IAExBD,EAAU,aACZC,EAAa,KAAOD,EAAU,YAE5BA,EAAU,gBACZC,EAAa,mBAAqB,CAChC,KAAM,qBACN,SAAO,qBAAkBD,EAAU,eAAe,CACpD,EACSA,EAAU,iBACnBC,EAAa,mBAAqB,CAChC,KAAM,oBACN,SAAO,UAAOE,GAAsB,CAClC,MAAOH,EAAU,eAAe,SAC5B,qBAAkBA,EAAU,eAAe,KAAK,EAChD,OACJ,IAAKA,EAAU,eAAe,OAC1B,qBAAkBA,EAAU,eAAe,GAAG,EAC9C,OACJ,eAAgBA,EAAU,eAAe,eACzC,aAAcA,EAAU,eAAe,YACzC,CAAC,CACH,KAKN,IAAMxB,EAAM,MAAM,KAAK,QAAQ,WAAW,CACxC,UAAW,CACT,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAAC,EACA,MAAO,CACL,MACEC,aAAiB,WACbA,EACA,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUA,CAAK,CAAC,EACpD,IAAAY,CACF,EACA,aAAAW,CACF,CACF,CACF,EACA,UAAW,KAAK,SAClB,CAAC,EAED,MAAO,CACL,IAAKzB,EAAI,SAAU,IACnB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,EACvD,KAAMA,EAAI,SAAU,IACtB,CACF,CA4BA,MAAM,OAAOC,EAAauB,EAA4C,CACpE,IAAIC,EACAD,IACFC,KAAe,UAAOG,GAAwC,CAAC,CAAC,EAC5DJ,EAAU,WACZC,EAAa,WAAa,IAEtBD,EAAU,aACZC,EAAa,KAAOD,EAAU,YAE5BA,EAAU,gBACZC,EAAa,mBAAqB,CAChC,KAAM,qBACN,SAAO,qBAAkBD,EAAU,eAAe,CACpD,EACSA,EAAU,iBACnBC,EAAa,mBAAqB,CAChC,KAAM,oBACN,SAAO,UAAOE,GAAsB,CAClC,MAAOH,EAAU,eAAe,SAC5B,qBAAkBA,EAAU,eAAe,KAAK,EAChD,OACJ,IAAKA,EAAU,eAAe,OAC1B,qBAAkBA,EAAU,eAAe,GAAG,EAC9C,OACJ,eAAgBA,EAAU,eAAe,eACzC,aAAcA,EAAU,eAAe,YACzC,CAAC,CACH,KAKN,MAAM,KAAK,QAAQ,WAAW,CAC5B,UAAW,CACT,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAAvB,EACA,aAAAwB,CACF,CACF,CACF,EACA,UAAW,KAAK,SAClB,CAAC,CACH,CA6BA,MAAM,YACJT,EACAC,EACAC,EACAC,EACe,CACf,MAAM,KAAK,QAAQ,gBAAgB,CACjC,UAAW,KAAK,UAChB,WAAY,CACV,CACE,UAAW,CACT,KAAM,cACN,MAAO,CACL,MAAAH,EACA,IAAAC,EACA,eAAAC,EACA,aAAAC,CACF,CACF,CACF,CACF,CACF,CAAC,CACH,CAoBA,MAAM,IACJlB,EASA,CAMA,IAAM4B,GALM,MAAM,KAAK,QAAQ,eAAe,CAC5C,KAAM,CAAC5B,CAAG,EACV,UAAW,KAAK,SAClB,CAAC,GAEkB,MAAMA,CAAG,EAC5B,GAAI4B,EACF,MAAO,CACL,KAAM,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAO,KAAK,CAAC,EACvD,IAAKA,EAAO,SAAU,IACtB,KAAMA,EAAO,SAAU,KACvB,gBAAc,iBAAcA,EAAO,SAAU,YAAa,CAC5D,CAEJ,CAoBA,MAAM,UAAU5B,EAQd,CAMA,IAAM4B,GALM,MAAM,KAAK,QAAQ,eAAe,CAC5C,KAAM,CAAC5B,CAAG,EACV,UAAW,KAAK,SAClB,CAAC,GAEkB,MAAMA,CAAG,EAC5B,GAAI4B,EACF,MAAO,CACL,KAAMA,EAAO,MACb,IAAKA,EAAO,SAAU,IACtB,KAAMA,EAAO,SAAU,KACvB,gBAAc,iBAAcA,EAAO,SAAU,YAAa,CAC5D,CAEJ,CA+CA,MAAM,YACJC,EAUC,CACD,IAAM9B,EAAM,MAAM,KAAK,QAAQ,YAAY,CACzC,UAAW,KAAK,UAChB,UAAW8B,CACb,CAAC,EAED,MAAO,CACL,UAAW9B,EAAI,UACf,MAAO,OAAO,QAAQA,EAAI,KAAK,EAC5B,KAAK,CAAC,CAAC+B,CAAI,EAAG,CAACC,CAAI,IAAMD,EAAK,cAAcC,CAAI,CAAC,EACjD,IAAI,CAAC,CAAC/B,EAAKgC,CAAG,KAAO,CACpB,IAAAhC,EACA,MAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOgC,EAAI,KAAK,CAAC,EACrD,IAAKA,EAAI,SAAU,IACnB,KAAMA,EAAI,SAAU,KACpB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,CACzD,EAAE,CACN,CACF,CA+CA,MAAM,kBAAkBH,EAQrB,CACD,IAAM9B,EAAM,MAAM,KAAK,QAAQ,YAAY,CACzC,UAAW,KAAK,UAChB,UAAW8B,CACb,CAAC,EAED,MAAO,CACL,UAAW9B,EAAI,UACf,MAAO,OAAO,OAAOA,EAAI,KAAK,EAAE,IAAKiC,IAAS,CAC5C,MAAOA,EAAI,MACX,IAAKA,EAAI,SAAU,IACnB,KAAMA,EAAI,SAAU,KACpB,gBAAc,iBAAcA,EAAI,SAAU,YAAa,CACzD,EAAE,CACJ,CACF,CA2BA,MAAM,WAAWC,EAEd,CACD,IAAMnC,EAAW,MAAM,KAAK,QAAQ,gBAAgB,CAClD,UAAW,KAAK,UAChB,WAAYmC,CACd,CAAC,EAEGtB,EAA2C,CAAC,EAChD,OAAW,CAACX,EAAKkC,CAAQ,IAAK,OAAO,QAAQpC,EAAS,QAAQ,EAC5Da,EAAOX,CAAG,EAAI,CACZ,IAAKkC,EAAS,IACd,gBAAc,iBAAcA,EAAS,YAAa,EAClD,KAAMA,EAAS,IACjB,EAEF,OAAOvB,CACT,CAkBA,MAAM,UAAUd,EAA0C,CACxD,IAAMC,EAAW,MAAM,KAAK,QAAQ,eAAe,CACjD,UAAW,KAAK,UAChB,KAAAD,CACF,CAAC,EACD,OAAO,IAAIa,GAAgBZ,EAAS,KAAK,CAC3C,CAsBA,MAAM,QAAQqC,EAAgBtB,EAAgC,CAC5D,GAAI,CACF,MAAM,KAAK,QAAQ,WAAW,CAC5B,UAAW,KAAK,UAChB,UAAW,CACT,UAAW,CACT,KAAM,SACN,MAAO,CACL,IAAKsB,EACL,MAAO,CACL,MAAO,IAAI,WAAW,CAAC,CAAC,CAAC,EACzB,IAAKtB,GAAO,CACd,EACA,gBAAc,UAAOY,GAAwC,CAC3D,aAAc,EAChB,CAAC,CACH,CACF,CACF,CACF,CAAC,CACH,OAASW,EAAG,CACV,GAAIA,aAAa,gBAAgBA,EAAE,OAAS,OAAK,mBAC/C,MAAO,GAET,MAAMA,CACR,CAEA,MAAO,EACT,CAaA,MAAM,QAAQD,EAA+B,CAC3C,MAAM,KAAK,WAAW,IAAIvB,GAAkB,EAAE,OAAOuB,CAAM,EAAE,MAAM,CAAC,CACtE,CAkCA,MAAM,KACJnC,EACAqC,EACAC,EACY,CACZ,IAAMC,EAAaD,GAAS,YAAc,EACpCE,EAAeF,GAAS,cAAgB,GACxCG,EAAWH,GAAS,UAAY,IAEtC,QAASI,EAAU,EAAGA,EAAUH,EAAYG,IAE1C,GADiB,MAAM,KAAK,QAAQ1C,CAAG,EAErC,GAAI,CACF,OAAO,MAAMqC,EAAQ,CACvB,QAAE,CACA,MAAM,KAAK,QAAQrC,CAAG,CACxB,SACS0C,EAAUH,EAAa,EAAG,CACnC,IAAMI,EAAQ,KAAK,IAAIH,EAAe,GAAKE,EAASD,CAAQ,EAC5D,QAAQ,IACN,+BAA+BzC,CAAG,kBAAkB2C,CAAK,IAC3D,EACA,MAAM,IAAI,QAASC,GAAY,WAAWA,EAASD,CAAK,CAAC,CAC3D,CAEF,MAAM,IAAI,MAAM,8CAA8C,CAChE,CACF,EAMaE,GAAN,cAA0BzD,CAAQ,CAC7B,SAQV,YAAYC,EAA0BC,EAAqB,CACzD,MAAMD,EAAKC,CAAW,EACtB,KAAK,YAAW,gBACdwD,GACAtD,EAAuB,CACrB,QAASH,EAAI,SACb,aAAc,CACXI,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB,UAAUJ,CAAW,EAAE,EAChD,MAAMG,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAiDA,MAAM,aACDqD,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,SAAS,gBAAgB,CACnD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAY1E,GAVIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,EACnC,GAAIlD,EAAS,QAAUA,EAAS,OAAO,OAAS,EAC9C,GAAI,CACFa,EAAO,OAAS,KAAK,MACnB,IAAI,YAAY,EAAE,OAAOb,EAAS,MAAM,CAC1C,CACF,MAAQ,CACNa,EAAO,OAAS,MAClB,MAEAA,EAAO,OAAS,OAIpB,OAAOA,CACT,CA4CA,MAAM,mBACDoC,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,SAAS,gBAAgB,CACnD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAE1E,OAAIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,IACnCrC,EAAO,OAASb,EAAS,QAGpBa,CACT,CAgBA,cAAcU,EAAuC,CACnD,OAAO,IAAIF,EACT,KAAK,SACLE,IAAc,SAAW,mBAAqB,kBAChD,CACF,CASA,cAAc6B,EAAwC,CACpD,OAAO,IAAIC,GACT,KAAK,IACL,KAAK,YACLD,CACF,CACF,CACF,EAMaE,GAAN,cAA8BP,EAAY,CAIrC,kBASV,YACExD,EACAC,EACA+D,EACA,CACA,MAAMhE,EAAKC,CAAW,EACtB,KAAK,kBAAoB+D,EAGzB,KAAK,YAAW,gBACdP,GACAtD,EAAuB,CACrB,QAASH,EAAI,SACb,aAAc,CACXI,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB2D,CAAiB,EAC1C,MAAM5D,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAeA,eAAwB,CACtB,OAAO,KAAK,iBACd,CAiBA,gBAAgB2B,EAAuC,CACrD,OAAO,IAAIF,EACT,KAAK,SACLE,IAAc,SACV,4BACA,2BACN,CACF,CACF,EA4Ba8B,GAAN,cAAiCC,EAAgB,CAQtD,YACE/D,EACAC,EACA+D,EACA,CACA,MAAMhE,EAAKC,EAAa+D,CAAiB,CAC3C,CAyBA,MAAM,YAAYf,EAIf,CACD,IAAMxC,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,SAAUwC,GAAS,SACnB,gBAAiBA,GAAS,eAC5B,CAAC,EAED,MAAO,CACL,QAAS,OAAO,YACd,OAAO,QAAQxC,EAAS,OAAO,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAK,IAAM,CACrDD,EACA,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOC,EAAM,IAAI,CAAC,CACjD,CAAC,CACH,EACA,SAAUH,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAyBA,MAAM,kBAAkBwC,EAIrB,CACD,IAAMxC,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,SAAUwC,GAAS,SACnB,gBAAiBA,GAAS,eAC5B,CAAC,EACD,MAAO,CACL,QAASxC,EAAS,QAClB,SAAUA,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAkBA,MAAM,oBAAoBwD,EAIvB,CACD,IAAMxD,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,OAAAwD,CACF,CAAC,EAED,MAAO,CACL,QAAS,OAAO,YACd,OAAO,QAAQxD,EAAS,OAAO,EAAE,IAAI,CAAC,CAACE,EAAKC,CAAK,IAAM,CACrDD,EACA,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOC,EAAM,IAAI,CAAC,CACjD,CAAC,CACH,EACA,SAAUH,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAkBA,MAAM,0BAA0BwD,EAI7B,CACD,IAAMxD,EAAW,MAAM,KAAK,SAAS,kBAAkB,CACrD,OAAAwD,CACF,CAAC,EACD,MAAO,CACL,QAASxD,EAAS,QAClB,SAAUA,EAAS,SACnB,OAAQA,EAAS,UACnB,CACF,CAiBA,MAAM,UAAqCH,EAA0B,CAInE,IAAM4D,GAHW,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAO,CAAC5D,CAAI,CACd,CAAC,GACqB,MAAMA,CAAI,EAChC,OACE4D,EAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAK,IAAI,CAAC,EAAI,MAE7D,CAiBA,MAAM,gBAAgB5D,EAA+C,CAInE,OAHiB,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAO,CAACA,CAAI,CACd,CAAC,GACe,MAAMA,CAAI,CAC5B,CA4BA,MAAM,cACDO,EACS,CACZ,GAAIA,EAAM,SAAW,EACnB,MAAO,CAAC,EAGV,IAAMJ,EAAW,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAOI,CACT,CAAC,EAED,GAAI,OAAO,KAAKJ,EAAS,KAAK,EAAE,SAAW,EACzC,MAAO,CAAC,EAGV,IAAMC,EAAiC,CAAC,EACxC,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQH,EAAS,KAAK,EACtDC,EAAIC,CAAG,EAAI,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOC,EAAM,IAAI,CAAC,EAE5D,OAAOF,CACT,CAoBA,MAAM,oBACDG,EACkC,CACrC,OAAIA,EAAM,SAAW,EACZ,CAAC,GAGO,MAAM,KAAK,SAAS,sBAAsB,CACzD,MAAOA,CACT,CAAC,GAEe,KAClB,CAoCA,MAAM,KACJsD,EACAC,EASe,CACf,MAAM,KAAK,SAAS,KAAK,CACvB,YAAAD,EACA,QAASC,EACL,OAAO,YACL,OAAO,QAAQA,CAAO,EAAE,IAAI,CAAC,CAACzD,EAAKC,CAAK,IAGpCA,GAAO,gBAAgB,YACvB,OAAOA,GAAO,UAAa,UAC3BA,EAAM,SAEC,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAMzD,EAAM,KACZ,SAAUA,EAAM,SAChB,SAAUA,EAAM,QAClB,CAAC,CACH,EAIK,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAM,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUzD,CAAK,CAAC,EACpD,SAAU,kBACZ,CAAC,CACH,CACD,CACH,EACA,CAAC,CACP,CAAC,CACH,CA8BA,MAAM,iBACJN,EACAgE,EACAF,EAS4B,CAmC5B,OAlCiB,MAAM,KAAK,SAAS,iBAAiB,CACpD,KAAA9D,EACA,SAAUgE,EACV,QAASF,EACL,OAAO,YACL,OAAO,QAAQA,CAAO,EAAE,IAAI,CAAC,CAACzD,EAAKC,CAAK,IAGpCA,GAAO,gBAAgB,YACvB,OAAOA,GAAO,UAAa,UAC3BA,EAAM,SAEC,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAMzD,EAAM,KACZ,SAAUA,EAAM,SAChB,SAAUA,EAAM,QAClB,CAAC,CACH,EAIK,CACLD,KACA,UAAO0D,EAAkB,CACvB,KAAM,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUzD,CAAK,CAAC,EACpD,SAAU,kBACZ,CAAC,CACH,CACD,CACH,EACA,CAAC,CACP,CAAC,GACe,SAClB,CAeA,MAAM,YAAY2D,EAAwC,CACxD,IAAM9D,EAAW,MAAM,KAAK,SAAS,qBAAqB,CACxD,GAAA8D,CACF,CAAC,EACD,GAAI,CAAC9D,EAAS,KACZ,MAAM,IAAI,eAAa,+BAAgC,OAAK,QAAQ,EAEtE,OAAOA,EAAS,IAClB,CAcA,MAAM,eAAe8D,EAA2B,CAC9C,MAAM,KAAK,SAAS,wBAAwB,CAAE,GAAAA,CAAG,CAAC,CACpD,CACF,EA+CaC,GAAN,cAA8BzE,CAAQ,CACnC,aAQR,YAAYC,EAA8BC,EAAqB,CAC7D,MAAMD,EAAKC,CAAW,EACtB,KAAK,gBAAe,gBAClBwE,GACAtE,EAAuB,CACrB,QAASH,EAAI,aACb,aAAc,CACXI,GAAS,MAAOC,IACfA,EAAI,OAAO,IAAI,gBAAiB,UAAUJ,CAAW,EAAE,EAChD,MAAMG,EAAKC,CAAG,EAEzB,CACF,CAAC,CACH,CACF,CAqCA,MAAM,aACDqD,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,aAAa,gBAAgB,CACvD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAY1E,GAVIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,EACnC,GAAIlD,EAAS,QAAUA,EAAS,OAAO,OAAS,EAC9C,GAAI,CACFa,EAAO,OAAS,KAAK,MACnB,IAAI,YAAY,EAAE,OAAOb,EAAS,MAAM,CAC1C,CACF,MAAQ,CACNa,EAAO,OAAS,MAClB,MAEAA,EAAO,OAAS,OAIpB,OAAOA,CACT,CAmCA,MAAM,mBACDoC,EACW,CACd,IAAMjD,EAAW,MAAM,KAAK,aAAa,gBAAgB,CACvD,UACEiD,EAAO,OAAS,KACZ,UAAO,kBAAiB,CAAE,MAAOA,EAAO,IAAI7D,EAAW,CAAE,CAAC,EAC1D,MACR,CAAC,EAEKyB,EAAc,CAAC,EACfqC,EACJD,EAAO,OAAS,EAAIA,EAAS,CAAC,SAAU,WAAY,oBAAoB,EAE1E,OAAIC,EAAgB,SAAS,UAAU,IACrCrC,EAAO,SAAWb,EAAS,YACvB,UAAOmD,EAAsBnD,EAAS,QAAQ,EAC9C,QAGFkD,EAAgB,SAAS,oBAAoB,IAC/CrC,EAAO,mBAAqBb,EAAS,oBAAsB,CAAC,GAG1DkD,EAAgB,SAAS,QAAQ,IACnCrC,EAAO,OAASb,EAAS,QAGpBa,CACT,CAuCA,MAAM,WACJoD,EAC6B,CAC7B,GAAI,CAACA,EAAK,QAAU,CAACA,EAAK,SACxB,MAAM,IAAI,eACR,6CACA,OAAK,eACP,EAGF,IAAIC,EACAD,EAAK,SAAW,SAClBC,EACED,EAAK,kBAAkB,WACnBA,EAAK,OACL,IAAI,YAAY,EAAE,OAAO,KAAK,UAAUA,EAAK,MAAM,CAAC,GAG5D,IAAMjE,EAAW,MAAM,KAAK,aAAa,iBAAiB,CACxD,OAAQkE,EACR,SAAUD,EAAK,YACX,YAASd,EAAsBc,EAAK,QAAQ,EAC5C,OACJ,iBAAkBA,GAAM,gBAC1B,CAAC,EACD,SAAO,UACLd,EACAnD,EAAS,QACX,CACF,CAgCA,MAAM,oBACJ6D,EACAM,EACAC,EAC0C,CAC1C,IAAMpE,EAAW,MAAM,KAAK,aAAa,oBAAoB,CAC3D,SAAA6D,EACA,QAASM,GAAS,IAAKE,MAAM,YAASC,GAAoBD,CAAC,CAAC,GAAK,CAAC,EAClE,UAAWD,KAAY,YAAS,kBAAiBA,CAAS,EAAI,MAChE,CAAC,EACD,SAAO,UACLG,GACAvE,CACF,CACF,CASA,cAAcuB,EAAuC,CACnD,OAAO,IAAIF,EACT,KAAK,aACLE,IAAc,SAAW,mBAAqB,kBAChD,CACF,CACF,EAQO,SAASb,GAAa8D,EAA8B,CACzD,OAAQA,EAAQ,CACd,IAAK,KACH,OAAO,IAAI,eAAa,cAAe,OAAK,eAAe,EAC7D,IAAK,KACH,OAAO,IAAI,eAAa,eAAgB,OAAK,eAAe,EAC9D,IAAK,KACH,OAAO,IAAI,eAAa,YAAa,OAAK,gBAAgB,EAC5D,IAAK,KACH,OAAO,IAAI,eAAa,YAAa,OAAK,QAAQ,EACpD,IAAK,KACH,OAAO,IAAI,eAAa,WAAY,OAAK,aAAa,EACxD,IAAK,KACH,OAAO,IAAI,eAAa,oBAAqB,OAAK,iBAAiB,EACrE,IAAK,KACH,OAAO,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAChE,IAAK,KACH,OAAO,IAAI,eAAa,wBAAyB,OAAK,QAAQ,EAChE,IAAK,KACH,OAAO,IAAI,eAAa,kBAAmB,OAAK,aAAa,EAC/D,IAAK,KACH,OAAO,IAAI,eAAa,sBAAuB,OAAK,WAAW,EACjE,IAAK,KACH,OAAO,IAAI,eAAa,kBAAmB,OAAK,gBAAgB,EAClE,QACE,OAAO,IAAI,eAAa,uBAAuBA,CAAM,GAAI,OAAK,OAAO,CACzE,CACF,CAQO,SAASC,GAA4BC,EAA6B,CACvE,OAAQA,EAAM,KAAM,CAClB,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,QACR,MAAO,KACT,KAAK,OAAK,gBACR,MAAO,KACT,KAAK,OAAK,iBACR,MAAO,KACT,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,cACR,MAAO,KACT,KAAK,OAAK,iBACR,MAAO,KACT,KAAK,OAAK,kBACR,MAAO,KACT,KAAK,OAAK,mBACR,MAAO,KACT,KAAK,OAAK,QACR,MAAO,KACT,KAAK,OAAK,WACR,MAAO,KACT,KAAK,OAAK,cACR,MAAO,KACT,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,YACR,MAAO,KACT,KAAK,OAAK,SACR,MAAO,KACT,KAAK,OAAK,gBACR,MAAO,KACT,QAEE,MAAO,IACX,CACF",
6
+ "names": ["api_exports", "__export", "AckMessageRequestSchema", "AckMessageResponseSchema", "ApiBase", "AuthorizeRequestSchema", "AuthorizeResponseSchema", "AutomationService", "BatchGetActiveSignalsRequestSchema", "BatchGetActiveSignalsResponseSchema", "BatchGetSystemTokensRequestSchema", "BatchGetSystemTokensResponseSchema", "BatchGetSystemVariablesRequestSchema", "BatchGetSystemVariablesResponseSchema", "BatchGetUserTokensRequestSchema", "BatchGetUserTokensResponseSchema", "BatchGetUserVariablesRequestSchema", "BatchGetUserVariablesResponseSchema", "BatchReadResult", "CancelExchangeOperationRequestSchema", "CancelExchangeOperationResponseSchema", "ConditionalDeleteOpSchema", "ConditionalDeleteOp_PreconditionSchema", "ConditionalInsertOpSchema", "ConditionalInsertOp_PreconditionSchema", "ConditionalWriteOperationSchema", "ConfiguratorApi", "ConfiguratorService", "ConfiguratorServiceBatchReadStoreRequestSchema", "ConfiguratorServiceBatchReadStoreResponseSchema", "ConfiguratorServiceBatchWriteStoreRequestSchema", "ConfiguratorServiceBatchWriteStoreResponseSchema", "ConfiguratorServiceGetVertexConfigRequestSchema", "ConfiguratorServiceGetVertexConfigResponseSchema", "ConfiguratorServiceSelectStoreRequestSchema", "ConfiguratorServiceSelectStoreResponseSchema", "ConfiguratorServiceWriteStoreRequestSchema", "ConfiguratorServiceWriteStoreResponseSchema", "CronTriggerRequestSchema", "CronTriggerResponseSchema", "DeleteOpSchema", "DispatchExchangeRequestSchema", "DispatchExchangeResponseSchema", "ExchangeOperationSchema", "ExchangeResultRequestSchema", "ExchangeResultResponseSchema", "ExchangeResultSchema", "ExchangeSchema", "ExecutorApi", "ExecutorService", "ExecutorServiceBatchReadStoreRequestSchema", "ExecutorServiceBatchReadStoreResponseSchema", "ExecutorServiceBatchWriteStoreRequestSchema", "ExecutorServiceBatchWriteStoreResponseSchema", "ExecutorServiceGetVertexConfigRequestSchema", "ExecutorServiceGetVertexConfigResponseSchema", "ExecutorServiceSelectStoreRequestSchema", "ExecutorServiceSelectStoreResponseSchema", "ExecutorServiceWriteStoreRequestSchema", "ExecutorServiceWriteStoreResponseSchema", "GetExchangeOperationRequestSchema", "GetExchangeOperationResponseSchema", "GetSessionRequestSchema", "GetSessionResponseSchema", "GetSystemServicesRequestSchema", "GetSystemServicesResponseSchema", "GetValueSchema", "HostingDetailsSchema", "IncomingVerticesSchema", "InheritSessionRequestSchema", "InheritSessionResponseSchema", "InsertOpSchema", "JTDSchemaSchema", "ListActiveSignalsRequestSchema", "ListActiveSignalsResponseSchema", "ListIncomingSignalsRequestSchema", "ListIncomingSignalsResponseSchema", "Namespace", "NamespaceSchema", "OutputSchema", "PluginService", "PostVertexConfigRequestSchema", "PostVertexConfigResponseSchema", "PutValueSchema", "RangeDeleteOpSchema", "ReadOutputRequestSchema", "ReadOutputResponseSchema", "ReadUrlsRequestSchema", "ReadUrlsResponseSchema", "ReceiverSchema", "RunInheritRequestSchema", "RunInheritResponseSchema", "RunInheritStartedSchema", "RunSessionRequestSchema", "RunSessionResponseSchema", "RunSessionStartedSchema", "SelectOpSchema", "SendRequestSchema", "SendResponseSchema", "SessionExecutorApi", "SessionSchema", "SignalBindingSchema", "SignalBinding_Error", "SignalBinding_ErrorSchema", "SignalDataSchema", "SignalDescriptorSchema", "SignalFormatSchema", "StartExecutionRequestSchema", "StartExecutionResponseSchema", "StartSessionRequestSchema", "StartSessionResponseSchema", "Status", "StatusSchema", "StopExecutionRequestSchema", "StopExecutionResponseSchema", "StopExecutorApi", "StopSessionRequestSchema", "StopSessionResponseSchema", "Store", "StreamSessionRequestSchema", "StreamSessionResponseSchema", "TimestampRangeSchema", "TokenSchema", "TransceiverSchema", "TransmitterSchema", "Transmitter_Mode", "Transmitter_ModeSchema", "UrlSchema", "ValueMetadataSchema", "VertexMetadataSchema", "VertexType", "VertexTypeSchema", "WriteBatchBuilder", "WriteOperationSchema", "file_mochabugapis_adapt_automations_v1_automations", "file_mochabugapis_adapt_graph_exchange", "file_mochabugapis_adapt_graph_jtd_schema", "file_mochabugapis_adapt_graph_receiver", "file_mochabugapis_adapt_graph_signal_binding", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_graph_signal_descriptor", "file_mochabugapis_adapt_graph_signal_format", "file_mochabugapis_adapt_graph_transceiver", "file_mochabugapis_adapt_graph_transmitter", "file_mochabugapis_adapt_graph_vertex_metadata", "file_mochabugapis_adapt_runtime_v1_incoming", "file_mochabugapis_adapt_runtime_v1_runtime", "file_mochabugapis_adapt_runtime_v1_store", "mapConnectErrorToHttpStatus", "mapHttpError", "__toCommonJS", "import_protobuf", "import_wkt", "import_connect", "import_codegenv2", "import_codegenv2", "import_wkt", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_data", "file_buf_validate_validate", "SignalDataSchema", "import_codegenv2", "import_codegenv2", "import_wkt", "file_mochabugapis_adapt_graph_jtd_schema", "file_buf_validate_validate", "JTDSchemaSchema", "file_mochabugapis_adapt_graph_signal_format", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_jtd_schema", "SignalFormatSchema", "import_codegenv2", "import_codegenv2", "import_codegenv2", "import_codegenv2", "file_mochabugapis_adapt_graph_signal_descriptor", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_format", "SignalDescriptorSchema", "file_mochabugapis_adapt_graph_transceiver", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_descriptor", "TransceiverSchema", "file_mochabugapis_adapt_graph_exchange", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_transceiver", "ExchangeSchema", "import_codegenv2", "import_codegenv2", "file_mochabugapis_adapt_graph_signal_binding", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_graph_signal_format", "SignalBindingSchema", "SignalBinding_Error", "SignalBinding_ErrorSchema", "file_mochabugapis_adapt_graph_receiver", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_binding", "ReceiverSchema", "import_codegenv2", "file_mochabugapis_adapt_graph_transmitter", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_signal_descriptor", "TransmitterSchema", "Transmitter_Mode", "Transmitter_ModeSchema", "file_mochabugapis_adapt_graph_vertex_metadata", "file_buf_validate_validate", "file_mochabugapis_adapt_graph_exchange", "file_mochabugapis_adapt_graph_receiver", "file_mochabugapis_adapt_graph_transmitter", "VertexMetadataSchema", "import_codegenv2", "import_wkt", "import_codegenv2", "import_codegenv2", "import_codegenv2", "file_google_api_http", "import_wkt", "file_google_api_annotations", "file_google_api_http", "import_codegenv2", "import_codegenv2", "file_google_api_launch_stage", "import_wkt", "file_google_api_client", "file_google_api_launch_stage", "import_wkt", "file_mochabugapis_adapt_automations_v1_automations", "file_buf_validate_validate", "file_google_api_annotations", "file_google_api_client", "file_mochabugapis_adapt_graph_signal_data", "InheritSessionRequestSchema", "InheritSessionResponseSchema", "ReadOutputRequestSchema", "ReadOutputResponseSchema", "ReadUrlsRequestSchema", "ReadUrlsResponseSchema", "StartSessionRequestSchema", "StartSessionResponseSchema", "StopSessionRequestSchema", "StopSessionResponseSchema", "GetSessionRequestSchema", "GetSessionResponseSchema", "OutputSchema", "UrlSchema", "SessionSchema", "StreamSessionRequestSchema", "AckMessageRequestSchema", "AckMessageResponseSchema", "StreamSessionResponseSchema", "RunSessionRequestSchema", "RunSessionResponseSchema", "RunSessionStartedSchema", "RunInheritRequestSchema", "RunInheritResponseSchema", "RunInheritStartedSchema", "Status", "StatusSchema", "AutomationService", "import_codegenv2", "import_wkt", "file_mochabugapis_adapt_runtime_v1_store", "file_buf_validate_validate", "PutValueSchema", "GetValueSchema", "ValueMetadataSchema", "TimestampRangeSchema", "SelectOpSchema", "WriteOperationSchema", "ConditionalWriteOperationSchema", "RangeDeleteOpSchema", "InsertOpSchema", "DeleteOpSchema", "ConditionalInsertOpSchema", "ConditionalInsertOp_PreconditionSchema", "ConditionalDeleteOpSchema", "ConditionalDeleteOp_PreconditionSchema", "file_mochabugapis_adapt_runtime_v1_runtime", "file_buf_validate_validate", "file_mochabugapis_adapt_automations_v1_automations", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_graph_signal_format", "file_mochabugapis_adapt_graph_transmitter", "file_mochabugapis_adapt_graph_vertex_metadata", "file_mochabugapis_adapt_runtime_v1_store", "ExecutorServiceBatchWriteStoreRequestSchema", "ExecutorServiceBatchWriteStoreResponseSchema", "ExecutorServiceWriteStoreRequestSchema", "ExecutorServiceWriteStoreResponseSchema", "ExecutorServiceBatchReadStoreRequestSchema", "ExecutorServiceBatchReadStoreResponseSchema", "ExecutorServiceSelectStoreRequestSchema", "ExecutorServiceSelectStoreResponseSchema", "CancelExchangeOperationRequestSchema", "CancelExchangeOperationResponseSchema", "GetExchangeOperationRequestSchema", "GetExchangeOperationResponseSchema", "DispatchExchangeRequestSchema", "DispatchExchangeResponseSchema", "ExchangeOperationSchema", "SendRequestSchema", "SendResponseSchema", "BatchGetActiveSignalsRequestSchema", "BatchGetActiveSignalsResponseSchema", "ListActiveSignalsRequestSchema", "ListActiveSignalsResponseSchema", "ExecutorServiceGetVertexConfigRequestSchema", "ExecutorServiceGetVertexConfigResponseSchema", "ListIncomingSignalsRequestSchema", "IncomingVerticesSchema", "ListIncomingSignalsResponseSchema", "ConfiguratorServiceBatchWriteStoreRequestSchema", "ConfiguratorServiceBatchWriteStoreResponseSchema", "ConfiguratorServiceWriteStoreRequestSchema", "ConfiguratorServiceWriteStoreResponseSchema", "ConfiguratorServiceBatchReadStoreRequestSchema", "ConfiguratorServiceBatchReadStoreResponseSchema", "ConfiguratorServiceSelectStoreRequestSchema", "ConfiguratorServiceSelectStoreResponseSchema", "ConfiguratorServiceGetVertexConfigRequestSchema", "ConfiguratorServiceGetVertexConfigResponseSchema", "PostVertexConfigRequestSchema", "PostVertexConfigResponseSchema", "GetSystemServicesRequestSchema", "GetSystemServicesResponseSchema", "AuthorizeRequestSchema", "AuthorizeResponseSchema", "BatchGetSystemVariablesRequestSchema", "BatchGetSystemVariablesResponseSchema", "BatchGetUserVariablesRequestSchema", "BatchGetUserVariablesResponseSchema", "BatchGetUserTokensRequestSchema", "BatchGetUserTokensResponseSchema", "BatchGetSystemTokensRequestSchema", "BatchGetSystemTokensResponseSchema", "TokenSchema", "Namespace", "NamespaceSchema", "VertexType", "VertexTypeSchema", "ExecutorService", "ConfiguratorService", "PluginService", "import_connect", "import_protocol", "import_protocol_grpc_web", "createGrpcWebTransport", "options", "method", "signal", "timeoutMs", "header", "message", "contextValues", "serialize", "parse", "req", "response", "headerError", "reader", "trailer", "msg", "r", "flags", "data", "input", "createRequestBody", "source", "value", "done", "parseResponseBody", "body", "foundStatus", "trailerTarget", "rawHeader", "abortSignal", "trailerReceived", "result", "key", "fRes", "import_codegenv2", "file_mochabugapis_adapt_runtime_v1_incoming", "file_mochabugapis_adapt_graph_signal_data", "file_mochabugapis_adapt_runtime_v1_runtime", "HostingDetailsSchema", "StartExecutionRequestSchema", "StartExecutionResponseSchema", "StopExecutionRequestSchema", "StopExecutionResponseSchema", "CronTriggerRequestSchema", "CronTriggerResponseSchema", "ExchangeResultSchema", "ExchangeResultRequestSchema", "ExchangeResultResponseSchema", "CAMEL_TO_SNAKE_MAP", "toSnakeCase", "camelCase", "ApiBase", "env", "pluginToken", "PluginService", "createGrpcWebTransport", "next", "req", "name", "vares", "keys", "response", "res", "key", "value", "names", "input", "init", "token", "path", "url", "mapHttpError", "contentType", "BatchReadResult", "result", "WriteBatchBuilder", "ttl", "WriteOperationSchema", "start", "end", "startInclusive", "endInclusive", "Store", "service", "namespace", "NamespaceSchema", "condition", "precondition", "ConditionalInsertOp_PreconditionSchema", "TimestampRangeSchema", "ConditionalDeleteOp_PreconditionSchema", "resGet", "select", "keyA", "keyB", "val", "ops", "metadata", "locker", "e", "section", "options", "maxRetries", "initialDelay", "maxDelay", "attempt", "delay", "resolve", "ExecutorApi", "ExecutorService", "fields", "fieldsToInclude", "VertexMetadataSchema", "authHeader", "SessionExecutorApi", "StopExecutorApi", "sessionAuthHeader", "cursor", "data", "transmitter", "signals", "SignalDataSchema", "receiver", "id", "ConfiguratorApi", "ConfiguratorService", "opts", "configBytes", "formats", "fieldMask", "f", "SignalFormatSchema", "ListIncomingSignalsResponseSchema", "status", "mapConnectErrorToHttpStatus", "error"]
7
7
  }