@tailor-platform/sdk 1.25.4 → 1.26.0

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/{application-DegTCDd8.mjs → application-CxH6Yp54.mjs} +1 -1
  3. package/dist/{application-91Th6tm6.mjs → application-D9xahQRQ.mjs} +2066 -1968
  4. package/dist/application-D9xahQRQ.mjs.map +1 -0
  5. package/dist/cli/index.mjs +152 -3
  6. package/dist/cli/index.mjs.map +1 -1
  7. package/dist/cli/lib.d.mts +350 -8
  8. package/dist/cli/lib.mjs +2 -2
  9. package/dist/configure/index.d.mts +5 -5
  10. package/dist/configure/index.mjs.map +1 -1
  11. package/dist/{env-uBeVwE9B.d.mts → env-CSsVESbH.d.mts} +2 -2
  12. package/dist/{index-Bu12qy3m.d.mts → index-BJg0DTbR.d.mts} +4 -4
  13. package/dist/{index-CT53egux.d.mts → index-BKy-OC5C.d.mts} +2 -2
  14. package/dist/{index-cZilKprY.d.mts → index-BtYPY8ya.d.mts} +2 -2
  15. package/dist/{index-BD-K97-C.d.mts → index-DgRShBpu.d.mts} +2 -2
  16. package/dist/{index-D1J5SfyK.d.mts → index-DkJbItB-.d.mts} +2 -2
  17. package/dist/plugin/builtin/enum-constants/index.d.mts +1 -1
  18. package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
  19. package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
  20. package/dist/plugin/builtin/seed/index.d.mts +1 -1
  21. package/dist/plugin/index.d.mts +2 -2
  22. package/dist/{plugin-zY5wvV82.d.mts → plugin-B1hNwcCC.d.mts} +15 -3
  23. package/dist/{query-kb_4EQp4.mjs → query-B8ml6ClT.mjs} +454 -358
  24. package/dist/query-B8ml6ClT.mjs.map +1 -0
  25. package/dist/utils/test/index.d.mts +2 -2
  26. package/dist/{workflow.generated-v1LXRuB6.d.mts → workflow.generated-Bm4b8hEk.d.mts} +2 -2
  27. package/docs/cli/setup.md +82 -0
  28. package/docs/cli-reference.md +8 -0
  29. package/docs/services/auth.md +33 -0
  30. package/package.json +4 -4
  31. package/dist/application-91Th6tm6.mjs.map +0 -1
  32. package/dist/query-kb_4EQp4.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-D9xahQRQ.mjs","names":["AuthInvokerSchema","IdPLangSchema","fs","fs","fs","fs","sanitizePluginId","toCamelCase","toKebabCase","fs","fs","fs","TailorFieldTypeSchema","AllowedValueSchema","fs","fs"],"sources":["../src/cli/shared/logger.ts","../../tailor-proto/src/buf/validate/validate_pb.js","../../tailor-proto/src/tailor/fieldmask/v1/option_pb.js","../../tailor-proto/src/google/api/field_behavior_pb.js","../../tailor-proto/src/tailor/v1/application_resource_pb.js","../../tailor-proto/src/tailor/v1/resource_pb.js","../../tailor-proto/src/tailor/v1/application_pb.js","../../tailor-proto/src/tailor/v1/secret_manager_resource_pb.js","../../tailor-proto/src/tailor/v1/auth_resource_pb.js","../../tailor-proto/src/tailor/v1/auth_pb.js","../../tailor-proto/src/tailor/v1/events_resource_pb.js","../../tailor-proto/src/tailor/v1/events_pb.js","../../tailor-proto/src/tailor/v1/executor_resource_pb.js","../../tailor-proto/src/tailor/v1/executor_pb.js","../../tailor-proto/src/tailor/v1/function_resource_pb.js","../../tailor-proto/src/tailor/v1/function_pb.js","../../tailor-proto/src/tailor/v1/function_registry_pb.js","../../tailor-proto/src/tailor/v1/idp_resource_pb.js","../../tailor-proto/src/tailor/v1/idp_pb.js","../../tailor-proto/src/tailor/v1/metadata_resource_pb.js","../../tailor-proto/src/tailor/v1/metadata_pb.js","../../tailor-proto/src/tailor/v1/meter_pb.js","../../tailor-proto/src/tailor/v1/pipeline_resource_pb.js","../../tailor-proto/src/tailor/v1/pipeline_pb.js","../../tailor-proto/src/tailor/v1/secret_manager_pb.js","../../tailor-proto/src/tailor/v1/stateflow_resource_pb.js","../../tailor-proto/src/tailor/v1/stateflow_pb.js","../../tailor-proto/src/tailor/v1/staticwebsite_resource_pb.js","../../tailor-proto/src/tailor/v1/staticwebsite_pb.js","../../tailor-proto/src/tailor/v1/tailordb_resource_pb.js","../../tailor-proto/src/tailor/v1/tailordb_pb.js","../../tailor-proto/src/tailor/v1/telemetry_export_resource_pb.js","../../tailor-proto/src/tailor/v1/telemetry_export_pb.js","../../tailor-proto/src/tailor/v1/workflow_resource_pb.js","../../tailor-proto/src/tailor/v1/workflow_pb.js","../../tailor-proto/src/tailor/v1/workspace_resource_pb.js","../../tailor-proto/src/tailor/v1/workspace_pb.js","../../tailor-proto/src/tailor/v1/service_pb.js","../src/cli/shared/client.ts","../src/cli/shared/context.ts","../src/cli/cache/hasher.ts","../src/cli/shared/dist-dir.ts","../src/cli/cache/dep-collector-plugin.ts","../src/cli/cache/bundle-cache.ts","../src/cli/shared/plugin-import.ts","../src/types/plugin.ts","../src/cli/commands/generate/plugin-executor-generator.ts","../src/cli/commands/generate/plugin-type-generator.ts","../src/cli/services/stale-cleanup.ts","../src/cli/services/file-loader.ts","../src/cli/services/workflow/ast-utils.ts","../src/cli/services/workflow/sdk-binding-collector.ts","../src/cli/services/workflow/job-detector.ts","../src/cli/services/workflow/workflow-detector.ts","../src/cli/services/workflow/trigger-transformer.ts","../src/cli/shared/trigger-context.ts","../src/cli/services/auth/bundler.ts","../src/parser/service/tailordb/hooks-validate-precompiled-expr.ts","../src/parser/service/tailordb/field.ts","../src/parser/service/tailordb/permission.ts","../src/parser/service/tailordb/relation.ts","../src/parser/service/tailordb/type-parser.ts","../src/parser/service/common.ts","../src/parser/service/tailordb/schema.ts","../src/cli/services/tailordb/es-builtins.ts","../src/cli/services/tailordb/hooks-validate-bundler.ts","../src/cli/services/tailordb/service.ts","../src/parser/service/resolver/schema.ts","../src/parser/service/auth/schema.ts","../src/cli/services/auth/service.ts","../src/parser/service/executor/schema.ts","../src/cli/services/executor/loader.ts","../src/cli/services/executor/bundler.ts","../src/cli/services/executor/service.ts","../src/cli/services/resolver/loader.ts","../src/cli/services/resolver/bundler.ts","../src/cli/services/resolver/service.ts","../src/cli/services/workflow/source-transformer.ts","../src/cli/services/workflow/bundler.ts","../src/parser/service/workflow/schema.ts","../src/cli/services/workflow/service.ts","../src/parser/generator-config/index.ts","../src/parser/plugin-config/schema.ts","../src/plugin/builtin/registry.ts","../src/cli/shared/mock.ts","../src/cli/shared/config-loader.ts","../src/cli/shared/inline-sourcemap.ts","../src/parser/service/idp/schema.ts","../src/parser/service/secrets/schema.ts","../src/parser/service/staticwebsite/schema.ts","../src/cli/services/application.ts"],"sourcesContent":["import { formatWithOptions, type InspectOptions } from \"node:util\";\nimport chalk from \"chalk\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { getBorderCharacters, table } from \"table\";\n\n/**\n * Error thrown when a prompt is attempted in a CI environment\n */\nexport class CIPromptError extends Error {\n constructor(message?: string) {\n super(\n message ??\n \"Interactive prompts are not available in CI environments. Use --yes flag to skip confirmation prompts.\",\n );\n this.name = \"CIPromptError\";\n }\n}\n\n/**\n * Semantic style functions for inline text styling\n */\nexport const styles = {\n // Status colors\n success: chalk.green,\n error: chalk.red,\n warning: chalk.yellow,\n info: chalk.cyan,\n\n // Action colors (for change sets)\n create: chalk.green,\n update: chalk.yellow,\n delete: chalk.red,\n unchanged: chalk.gray,\n\n // Emphasis\n bold: chalk.bold,\n dim: chalk.gray,\n highlight: chalk.cyanBright,\n successBright: chalk.greenBright,\n errorBright: chalk.redBright,\n\n // Resource types\n resourceType: chalk.bold,\n resourceName: chalk.cyan,\n\n // File paths\n path: chalk.cyan,\n\n // Values\n value: chalk.white,\n placeholder: chalk.gray.italic,\n};\n\n/**\n * Standardized symbols for CLI output\n */\nexport const symbols = {\n success: chalk.green(\"\\u2713\"),\n error: chalk.red(\"\\u2716\"),\n warning: chalk.yellow(\"\\u26a0\"),\n info: chalk.cyan(\"i\"),\n create: chalk.green(\"+\"),\n update: chalk.yellow(\"~\"),\n delete: chalk.red(\"-\"),\n replace: chalk.magenta(\"\\u00b1\"),\n bullet: chalk.gray(\"\\u2022\"),\n arrow: chalk.gray(\"\\u2192\"),\n};\n\n/**\n * Log output modes\n */\nexport type LogMode = \"default\" | \"stream\" | \"plain\";\n\nexport interface LogOptions {\n /** Output mode (default: \"default\") */\n mode?: LogMode;\n /** Number of spaces to indent the entire line (default: 0) */\n indent?: number;\n}\n\n/** Field transformer function. null excludes the field from table output. */\nexport type FieldTransformer = ((value: unknown, item: object) => string) | null;\n\nexport interface OutOptions {\n /** Table display field transform/exclude settings. Only applied in table mode (not JSON). */\n display?: Record<string, FieldTransformer>;\n\n /** Show null values in table output (default: false) */\n showNull?: boolean;\n}\n\n// In JSON mode, all logs go to stderr to keep stdout clean for JSON data\nlet _jsonMode = false;\n\n// Type icons for log output\nconst TYPE_ICONS: Record<string, string> = {\n info: \"ℹ\",\n success: \"✔\",\n warn: \"⚠\",\n error: \"✖\",\n debug: \"⚙\",\n trace: \"→\",\n log: \"\",\n};\n\n// Color functions for icon and message text\nconst TYPE_COLORS: Record<string, (text: string) => string> = {\n info: chalk.cyan,\n success: chalk.green,\n warn: chalk.yellow,\n error: chalk.red,\n debug: chalk.gray,\n trace: chalk.gray,\n log: (text) => text,\n};\n\ninterface FormatLogLineOptions {\n mode: string;\n indent: number;\n type: string;\n message: string;\n timestamp?: string;\n}\n\n/**\n * Formats a log line with the appropriate prefix and indentation\n * @param opts - Formatting options\n * @returns Formatted log line\n */\nexport function formatLogLine(opts: FormatLogLineOptions): string {\n const { mode, indent, type, message, timestamp } = opts;\n const indentPrefix = indent > 0 ? \" \".repeat(indent) : \"\";\n const colorFn = TYPE_COLORS[type] || ((text: string) => text);\n\n // Plain mode: color only, no icon, no timestamp\n if (mode === \"plain\") {\n return `${indentPrefix}${colorFn(message)}\\n`;\n }\n\n // Default/Stream mode: with icon and color\n const icon = TYPE_ICONS[type] || \"\";\n const prefix = icon ? `${icon} ` : \"\";\n const coloredOutput = colorFn(`${prefix}${message}`);\n const timestampPrefix = timestamp ?? \"\";\n\n return `${indentPrefix}${timestampPrefix}${coloredOutput}\\n`;\n}\n\n/**\n * Writes a formatted log line to stderr.\n * @param type - Log type (info, success, warn, error, log)\n * @param message - Log message\n * @param opts - Log options (mode and indent)\n */\nfunction writeLog(type: string, message: string, opts?: LogOptions): void {\n const mode = opts?.mode ?? \"default\";\n const indent = opts?.indent ?? 0;\n const inspectOpts: InspectOptions = {\n breakLength: process.stdout.columns || 80,\n };\n const formattedMessage = formatWithOptions(inspectOpts, message);\n const timestamp = mode === \"stream\" ? `${new Date().toLocaleTimeString()} ` : \"\";\n const output = formatLogLine({ mode, indent, type, message: formattedMessage, timestamp });\n process.stderr.write(output);\n}\n\nexport const logger = {\n get jsonMode(): boolean {\n return _jsonMode;\n },\n set jsonMode(value: boolean) {\n _jsonMode = value;\n },\n\n info(message: string, opts?: LogOptions): void {\n writeLog(\"info\", message, opts);\n },\n\n success(message: string, opts?: LogOptions): void {\n writeLog(\"success\", message, opts);\n },\n\n warn(message: string, opts?: LogOptions): void {\n writeLog(\"warn\", message, opts);\n },\n\n error(message: string, opts?: LogOptions): void {\n writeLog(\"error\", message, opts);\n },\n\n log(message: string): void {\n writeLog(\"log\", message, { mode: \"plain\" });\n },\n\n newline(): void {\n process.stderr.write(\"\\n\");\n },\n\n debug(message: string): void {\n if (process.env.DEBUG === \"true\") {\n writeLog(\"log\", styles.dim(message), { mode: \"plain\" });\n }\n },\n\n out(data: string | object | object[], options?: OutOptions): void {\n if (typeof data === \"string\") {\n process.stdout.write(data.endsWith(\"\\n\") ? data : data + \"\\n\");\n return;\n }\n\n if (this.jsonMode) {\n // eslint-disable-next-line no-restricted-syntax\n console.log(JSON.stringify(data));\n return;\n }\n\n const display = options?.display;\n\n // Helper to format a value for table display\n const formatValue = (value: unknown, pretty = false): string => {\n if (options?.showNull && value === null) return \"NULL\";\n if (value === null || value === undefined) return \"N/A\";\n if (value instanceof Date) {\n return formatDistanceToNowStrict(value, { addSuffix: true });\n }\n if (typeof value === \"object\") {\n return pretty ? JSON.stringify(value, null, 2) : JSON.stringify(value);\n }\n return String(value);\n };\n\n // Helper to check if field should be excluded\n const isExcluded = (key: string): boolean => {\n return display !== undefined && key in display && display[key] === null;\n };\n\n // Helper to apply transformer or default formatting\n const transformValue = (key: string, value: unknown, item: object, pretty = false): string => {\n if (display && key in display) {\n const transformer = display[key];\n if (transformer) {\n return transformer(value, item);\n }\n }\n return formatValue(value, pretty);\n };\n\n if (!Array.isArray(data)) {\n const entries = Object.entries(data).filter(([key]) => !isExcluded(key));\n const formattedEntries = entries.map(([key, value]) => [\n key,\n transformValue(key, value, data, true),\n ]);\n const t = table(formattedEntries, {\n singleLine: false,\n border: getBorderCharacters(\"norc\"),\n });\n process.stdout.write(t);\n return;\n }\n\n if (data.length === 0) {\n return;\n }\n\n const allHeaders = Array.from(new Set(data.flatMap((item) => Object.keys(item))));\n const headers = allHeaders.filter((h) => !isExcluded(h));\n const rows = data.map((item) =>\n headers.map((header) =>\n transformValue(header, (item as Record<string, unknown>)[header], item),\n ),\n );\n\n const t = table([headers, ...rows], {\n border: getBorderCharacters(\"norc\"),\n drawHorizontalLine: (lineIndex, rowCount) => {\n return lineIndex === 0 || lineIndex === 1 || lineIndex === rowCount;\n },\n });\n process.stdout.write(t);\n },\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.6.3\n// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)\n/* eslint-disable */\n\nimport { enumDesc, extDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file buf/validate/validate.proto.\n */\nexport const file_buf_validate_validate = /*@__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 * Describes the message buf.validate.Rule.\n * Use `create(RuleSchema)` to create a new message.\n */\nexport const RuleSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 0);\n\n/**\n * Describes the message buf.validate.MessageRules.\n * Use `create(MessageRulesSchema)` to create a new message.\n */\nexport const MessageRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 1);\n\n/**\n * Describes the message buf.validate.MessageOneofRule.\n * Use `create(MessageOneofRuleSchema)` to create a new message.\n */\nexport const MessageOneofRuleSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 2);\n\n/**\n * Describes the message buf.validate.OneofRules.\n * Use `create(OneofRulesSchema)` to create a new message.\n */\nexport const OneofRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 3);\n\n/**\n * Describes the message buf.validate.FieldRules.\n * Use `create(FieldRulesSchema)` to create a new message.\n */\nexport const FieldRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 4);\n\n/**\n * Describes the message buf.validate.PredefinedRules.\n * Use `create(PredefinedRulesSchema)` to create a new message.\n */\nexport const PredefinedRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 5);\n\n/**\n * Describes the message buf.validate.FloatRules.\n * Use `create(FloatRulesSchema)` to create a new message.\n */\nexport const FloatRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 6);\n\n/**\n * Describes the message buf.validate.DoubleRules.\n * Use `create(DoubleRulesSchema)` to create a new message.\n */\nexport const DoubleRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 7);\n\n/**\n * Describes the message buf.validate.Int32Rules.\n * Use `create(Int32RulesSchema)` to create a new message.\n */\nexport const Int32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 8);\n\n/**\n * Describes the message buf.validate.Int64Rules.\n * Use `create(Int64RulesSchema)` to create a new message.\n */\nexport const Int64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 9);\n\n/**\n * Describes the message buf.validate.UInt32Rules.\n * Use `create(UInt32RulesSchema)` to create a new message.\n */\nexport const UInt32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 10);\n\n/**\n * Describes the message buf.validate.UInt64Rules.\n * Use `create(UInt64RulesSchema)` to create a new message.\n */\nexport const UInt64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 11);\n\n/**\n * Describes the message buf.validate.SInt32Rules.\n * Use `create(SInt32RulesSchema)` to create a new message.\n */\nexport const SInt32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 12);\n\n/**\n * Describes the message buf.validate.SInt64Rules.\n * Use `create(SInt64RulesSchema)` to create a new message.\n */\nexport const SInt64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 13);\n\n/**\n * Describes the message buf.validate.Fixed32Rules.\n * Use `create(Fixed32RulesSchema)` to create a new message.\n */\nexport const Fixed32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 14);\n\n/**\n * Describes the message buf.validate.Fixed64Rules.\n * Use `create(Fixed64RulesSchema)` to create a new message.\n */\nexport const Fixed64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 15);\n\n/**\n * Describes the message buf.validate.SFixed32Rules.\n * Use `create(SFixed32RulesSchema)` to create a new message.\n */\nexport const SFixed32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 16);\n\n/**\n * Describes the message buf.validate.SFixed64Rules.\n * Use `create(SFixed64RulesSchema)` to create a new message.\n */\nexport const SFixed64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 17);\n\n/**\n * Describes the message buf.validate.BoolRules.\n * Use `create(BoolRulesSchema)` to create a new message.\n */\nexport const BoolRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 18);\n\n/**\n * Describes the message buf.validate.StringRules.\n * Use `create(StringRulesSchema)` to create a new message.\n */\nexport const StringRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 19);\n\n/**\n * Describes the message buf.validate.BytesRules.\n * Use `create(BytesRulesSchema)` to create a new message.\n */\nexport const BytesRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 20);\n\n/**\n * Describes the message buf.validate.EnumRules.\n * Use `create(EnumRulesSchema)` to create a new message.\n */\nexport const EnumRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 21);\n\n/**\n * Describes the message buf.validate.RepeatedRules.\n * Use `create(RepeatedRulesSchema)` to create a new message.\n */\nexport const RepeatedRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 22);\n\n/**\n * Describes the message buf.validate.MapRules.\n * Use `create(MapRulesSchema)` to create a new message.\n */\nexport const MapRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 23);\n\n/**\n * Describes the message buf.validate.AnyRules.\n * Use `create(AnyRulesSchema)` to create a new message.\n */\nexport const AnyRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 24);\n\n/**\n * Describes the message buf.validate.DurationRules.\n * Use `create(DurationRulesSchema)` to create a new message.\n */\nexport const DurationRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 25);\n\n/**\n * Describes the message buf.validate.TimestampRules.\n * Use `create(TimestampRulesSchema)` to create a new message.\n */\nexport const TimestampRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 26);\n\n/**\n * Describes the message buf.validate.Violations.\n * Use `create(ViolationsSchema)` to create a new message.\n */\nexport const ViolationsSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 27);\n\n/**\n * Describes the message buf.validate.Violation.\n * Use `create(ViolationSchema)` to create a new message.\n */\nexport const ViolationSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 28);\n\n/**\n * Describes the message buf.validate.FieldPath.\n * Use `create(FieldPathSchema)` to create a new message.\n */\nexport const FieldPathSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 29);\n\n/**\n * Describes the message buf.validate.FieldPathElement.\n * Use `create(FieldPathElementSchema)` to create a new message.\n */\nexport const FieldPathElementSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 30);\n\n/**\n * Describes the enum buf.validate.Ignore.\n */\nexport const IgnoreSchema = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 0);\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 const Ignore = /*@__PURE__*/\n tsEnum(IgnoreSchema);\n\n/**\n * Describes the enum buf.validate.KnownRegex.\n */\nexport const KnownRegexSchema = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 1);\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport const KnownRegex = /*@__PURE__*/\n tsEnum(KnownRegexSchema);\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 = /*@__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 = /*@__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 = /*@__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 = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 3);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/fieldmask/v1/option.proto (package tailor.fieldmask.v1, syntax proto3)\n/* eslint-disable */\n\nimport { extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/fieldmask/v1/option.proto.\n */\nexport const file_tailor_fieldmask_v1_option = /*@__PURE__*/\n fileDesc(\"CiB0YWlsb3IvZmllbGRtYXNrL3YxL29wdGlvbi5wcm90bxITdGFpbG9yLmZpZWxkbWFzay52MTo1CgVtYXNrcxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYkb8FIAMoCVIFbWFza3NiBnByb3RvMw\", [file_google_protobuf_descriptor]);\n\n/**\n * @generated from extension: repeated string masks = 90001;\n */\nexport const masks = /*@__PURE__*/\n extDesc(file_tailor_fieldmask_v1_option, 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.6.3\n// @generated from file google/api/field_behavior.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, extDesc, fileDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/field_behavior.proto.\n */\nexport const file_google_api_field_behavior = /*@__PURE__*/\n fileDesc(\"Ch9nb29nbGUvYXBpL2ZpZWxkX2JlaGF2aW9yLnByb3RvEgpnb29nbGUuYXBpKrYBCg1GaWVsZEJlaGF2aW9yEh4KGkZJRUxEX0JFSEFWSU9SX1VOU1BFQ0lGSUVEEAASDAoIT1BUSU9OQUwQARIMCghSRVFVSVJFRBACEg8KC09VVFBVVF9PTkxZEAMSDgoKSU5QVVRfT05MWRAEEg0KCUlNTVVUQUJMRRAFEhIKDlVOT1JERVJFRF9MSVNUEAYSFQoRTk9OX0VNUFRZX0RFRkFVTFQQBxIOCgpJREVOVElGSUVSEAg6ZAoOZmllbGRfYmVoYXZpb3ISHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJwIIAMoDjIZLmdvb2dsZS5hcGkuRmllbGRCZWhhdmlvckICEABSDWZpZWxkQmVoYXZpb3JCcAoOY29tLmdvb2dsZS5hcGlCEkZpZWxkQmVoYXZpb3JQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMw\", [file_google_protobuf_descriptor]);\n\n/**\n * Describes the enum google.api.FieldBehavior.\n */\nexport const FieldBehaviorSchema = /*@__PURE__*/\n enumDesc(file_google_api_field_behavior, 0);\n\n/**\n * An indicator of the behavior of a given field (for example, that a field\n * is required in requests, or given as output but ignored as input).\n * This **does not** change the behavior in protocol buffers itself; it only\n * denotes the behavior and may affect how API tooling handles the field.\n *\n * Note: This enum **may** receive new values in the future.\n *\n * @generated from enum google.api.FieldBehavior\n */\nexport const FieldBehavior = /*@__PURE__*/\n tsEnum(FieldBehaviorSchema);\n\n/**\n * A designation of a specific field behavior (required, output only, etc.)\n * in protobuf messages.\n *\n * Examples:\n *\n * string name = 1 [(google.api.field_behavior) = REQUIRED];\n * State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];\n * google.protobuf.Duration ttl = 1\n * [(google.api.field_behavior) = INPUT_ONLY];\n * google.protobuf.Timestamp expire_time = 1\n * [(google.api.field_behavior) = OUTPUT_ONLY,\n * (google.api.field_behavior) = IMMUTABLE];\n *\n * @generated from extension: repeated google.api.FieldBehavior field_behavior = 1052 [packed = false];\n */\nexport const field_behavior = /*@__PURE__*/\n extDesc(file_google_api_field_behavior, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/application_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/application_resource.proto.\n */\nexport const file_tailor_v1_application_resource = /*@__PURE__*/\n fileDesc(\"CiR0YWlsb3IvdjEvYXBwbGljYXRpb25fcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSLQAwoLQXBwbGljYXRpb24SDAoEbmFtZRgBIAEoCRITCgZkb21haW4YAiABKAlCA+BBAxIWCg5hdXRoX25hbWVzcGFjZRgDIAEoCRIMCgRjb3JzGAQgAygJEhwKFGFsbG93ZWRfaXBfYWRkcmVzc2VzGAsgAygJEiYKCXN1YmdyYXBocxgFIAMoCzITLnRhaWxvci52MS5TdWJncmFwaBIbCg5jcmVhdGVfdXNlcl9pZBgGIAEoCUID4EEDEhsKDnVwZGF0ZV91c2VyX2lkGAcgASgJQgPgQQMSNAoLY3JlYXRlX3RpbWUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSEAoDdXJsGAogASgJQgPgQQMSHQoVZGlzYWJsZV9pbnRyb3NwZWN0aW9uGAwgASgIEhAKCGRpc2FibGVkGA0gASgIEkkKFGF1dGhfaWRwX2NvbmZpZ19uYW1lGA4gASgJQiu6SChyJjIkXihbYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldKT8kIqIBCh5BcHBsaWNhdGlvblNjaGVtYVVwZGF0ZUF0dGVtcHQSMAoMYXR0ZW1wdF90aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/CgZzdGF0dXMYAiABKA4yLy50YWlsb3IudjEuQXBwbGljYXRpb25TY2hlbWFVcGRhdGVBdHRlbXB0U3RhdHVzEg0KBWVycm9yGAMgASgJIsgCCghTdWJncmFwaBI1CgxzZXJ2aWNlX3R5cGUYASABKA4yHy50YWlsb3IudjEuU3ViZ3JhcGguU2VydmljZVR5cGUSQwoRc2VydmljZV9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQivwEKC1NlcnZpY2VUeXBlEhwKGFNFUlZJQ0VfVFlQRV9VTlNQRUNJRklFRBAAEhkKFVNFUlZJQ0VfVFlQRV9QSVBFTElORRABEhoKFlNFUlZJQ0VfVFlQRV9TVEFURUZMT1cQAhIZChVTRVJWSUNFX1RZUEVfVEFJTE9SREIQAxIVChFTRVJWSUNFX1RZUEVfQVVUSBAEEhMKD1NFUlZJQ0VfVFlQRV9BSRAFEhQKEFNFUlZJQ0VfVFlQRV9JRFAQBirNAQokQXBwbGljYXRpb25TY2hlbWFVcGRhdGVBdHRlbXB0U3RhdHVzEjgKNEFQUExJQ0FUSU9OX1NDSEVNQV9VUERBVEVfQVRURU1QVF9TVEFUVVNfVU5TUEVDSUZJRUQQABI2CjJBUFBMSUNBVElPTl9TQ0hFTUFfVVBEQVRFX0FUVEVNUFRfU1RBVFVTX1NVQ0NFRURFRBABEjMKL0FQUExJQ0FUSU9OX1NDSEVNQV9VUERBVEVfQVRURU1QVF9TVEFUVVNfRkFJTEVEEAJiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.Application.\n * Use `create(ApplicationSchema)` to create a new message.\n */\nexport const ApplicationSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application_resource, 0);\n\n/**\n * Describes the message tailor.v1.ApplicationSchemaUpdateAttempt.\n * Use `create(ApplicationSchemaUpdateAttemptSchema)` to create a new message.\n */\nexport const ApplicationSchemaUpdateAttemptSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application_resource, 1);\n\n/**\n * Describes the message tailor.v1.Subgraph.\n * Use `create(SubgraphSchema)` to create a new message.\n */\nexport const SubgraphSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application_resource, 2);\n\n/**\n * Describes the enum tailor.v1.Subgraph.ServiceType.\n */\nexport const Subgraph_ServiceTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_application_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.Subgraph.ServiceType\n */\nexport const Subgraph_ServiceType = /*@__PURE__*/\n tsEnum(Subgraph_ServiceTypeSchema);\n\n/**\n * Describes the enum tailor.v1.ApplicationSchemaUpdateAttemptStatus.\n */\nexport const ApplicationSchemaUpdateAttemptStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_application_resource, 0);\n\n/**\n * @generated from enum tailor.v1.ApplicationSchemaUpdateAttemptStatus\n */\nexport const ApplicationSchemaUpdateAttemptStatus = /*@__PURE__*/\n tsEnum(ApplicationSchemaUpdateAttemptStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/resource.proto.\n */\nexport const file_tailor_v1_resource = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSKqAgoHU2VydmljZRInCgluYW1lc3BhY2UYASABKAsyFC50YWlsb3IudjEuTmFtZXNwYWNlEjQKDHNlcnZpY2VfdHlwZRgCIAEoDjIeLnRhaWxvci52MS5TZXJ2aWNlLlNlcnZpY2VUeXBlIr8BCgtTZXJ2aWNlVHlwZRIcChhTRVJWSUNFX1RZUEVfVU5TUEVDSUZJRUQQABIZChVTRVJWSUNFX1RZUEVfVEFJTE9SREIQARIVChFTRVJWSUNFX1RZUEVfQVVUSBACEhkKFVNFUlZJQ0VfVFlQRV9QSVBFTElORRADEhoKFlNFUlZJQ0VfVFlQRV9TVEFURUZMT1cQBBITCg9TRVJWSUNFX1RZUEVfQUkQBRIUChBTRVJWSUNFX1RZUEVfSURQEAYiGQoJTmFtZXNwYWNlEgwKBG5hbWUYASABKAkiFgoGU2NyaXB0EgwKBGV4cHIYASABKAkicAoGRmlsdGVyEicKCWNvbmRpdGlvbhgBIAEoCzIULnRhaWxvci52MS5Db25kaXRpb24SHgoDYW5kGAIgAygLMhEudGFpbG9yLnYxLkZpbHRlchIdCgJvchgDIAMoCzIRLnRhaWxvci52MS5GaWx0ZXIirAIKCUNvbmRpdGlvbhINCgVmaWVsZBgBIAEoCRI7CghvcGVyYXRvchgCIAEoDjIdLnRhaWxvci52MS5Db25kaXRpb24uT3BlcmF0b3JCCrpIB4IBBBABIAASJQoFdmFsdWUYAyABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiqwEKCE9wZXJhdG9yEhgKFE9QRVJBVE9SX1VOU1BFQ0lGSUVEEAASDwoLT1BFUkFUT1JfRVEQARIVChFPUEVSQVRPUl9DT05UQUlOUxACEg8KC09QRVJBVE9SX0dUEAMSDwoLT1BFUkFUT1JfR0UQBBIPCgtPUEVSQVRPUl9MVBAFEg8KC09QRVJBVE9SX0xFEAYSGQoVT1BFUkFUT1JfTk9UX0NPTlRBSU5TEAcqYAoNUGFnZURpcmVjdGlvbhIeChpQQUdFX0RJUkVDVElPTl9VTlNQRUNJRklFRBAAEhYKElBBR0VfRElSRUNUSU9OX0FTQxABEhcKE1BBR0VfRElSRUNUSU9OX0RFU0MQAmIGcHJvdG8z\", [file_buf_validate_validate, file_google_protobuf_struct]);\n\n/**\n * Describes the message tailor.v1.Service.\n * Use `create(ServiceSchema)` to create a new message.\n */\nexport const ServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 0);\n\n/**\n * Describes the enum tailor.v1.Service.ServiceType.\n */\nexport const Service_ServiceTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_resource, 0, 0);\n\n/**\n * @generated from enum tailor.v1.Service.ServiceType\n */\nexport const Service_ServiceType = /*@__PURE__*/\n tsEnum(Service_ServiceTypeSchema);\n\n/**\n * Describes the message tailor.v1.Namespace.\n * Use `create(NamespaceSchema)` to create a new message.\n */\nexport const NamespaceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 1);\n\n/**\n * Describes the message tailor.v1.Script.\n * Use `create(ScriptSchema)` to create a new message.\n */\nexport const ScriptSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 2);\n\n/**\n * Describes the message tailor.v1.Filter.\n * Use `create(FilterSchema)` to create a new message.\n */\nexport const FilterSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 3);\n\n/**\n * Describes the message tailor.v1.Condition.\n * Use `create(ConditionSchema)` to create a new message.\n */\nexport const ConditionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 4);\n\n/**\n * Describes the enum tailor.v1.Condition.Operator.\n */\nexport const Condition_OperatorSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_resource, 4, 0);\n\n/**\n * @generated from enum tailor.v1.Condition.Operator\n */\nexport const Condition_Operator = /*@__PURE__*/\n tsEnum(Condition_OperatorSchema);\n\n/**\n * Describes the enum tailor.v1.PageDirection.\n */\nexport const PageDirectionSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_resource, 0);\n\n/**\n * @generated from enum tailor.v1.PageDirection\n */\nexport const PageDirection = /*@__PURE__*/\n tsEnum(PageDirectionSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/application.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_field_mask, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_fieldmask_v1_option } from \"../fieldmask/v1/option_pb\";\nimport { file_tailor_v1_application_resource } from \"./application_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/application.proto.\n */\nexport const file_tailor_v1_application = /*@__PURE__*/\n fileDesc(\"Cht0YWlsb3IvdjEvYXBwbGljYXRpb24ucHJvdG8SCXRhaWxvci52MSKTAwoYQ3JlYXRlQXBwbGljYXRpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQgoQYXBwbGljYXRpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDI4fVthLXowLTldJBJDCg5hdXRoX25hbWVzcGFjZRgDIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBJJChRhdXRoX2lkcF9jb25maWdfbmFtZRgEIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBIMCgRjb3JzGAUgAygJEiYKCXN1YmdyYXBocxgGIAMoCzITLnRhaWxvci52MS5TdWJncmFwaBIcChRhbGxvd2VkX2lwX2FkZHJlc3NlcxgHIAMoCRIdChVkaXNhYmxlX2ludHJvc3BlY3Rpb24YCCABKAgSEAoIZGlzYWJsZWQYCSABKAgiSAoZQ3JlYXRlQXBwbGljYXRpb25SZXNwb25zZRIrCgthcHBsaWNhdGlvbhgBIAEoCzIWLnRhaWxvci52MS5BcHBsaWNhdGlvbiLDBAoYVXBkYXRlQXBwbGljYXRpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQgoQYXBwbGljYXRpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDI4fVthLXowLTldJBJDCg5hdXRoX25hbWVzcGFjZRgDIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBJJChRhdXRoX2lkcF9jb25maWdfbmFtZRgEIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBIMCgRjb3JzGAUgAygJEiYKCXN1YmdyYXBocxgGIAMoCzITLnRhaWxvci52MS5TdWJncmFwaBIcChRhbGxvd2VkX2lwX2FkZHJlc3NlcxgHIAMoCRIdChVkaXNhYmxlX2ludHJvc3BlY3Rpb24YCCABKAgSEAoIZGlzYWJsZWQYCSABKAgSrQEKC3VwZGF0ZV9tYXNrGGQgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0J8ivkrFWRpc2FibGVfaW50cm9zcGVjdGlvbor5KwhkaXNhYmxlZIr5Kw5hdXRoX25hbWVzcGFjZYr5KxRhdXRoX2lkcF9jb25maWdfbmFtZYr5KwRjb3JzivkrCXN1YmdyYXBoc4r5KxRhbGxvd2VkX2lwX2FkZHJlc3NlcyJIChlVcGRhdGVBcHBsaWNhdGlvblJlc3BvbnNlEisKC2FwcGxpY2F0aW9uGAEgASgLMhYudGFpbG9yLnYxLkFwcGxpY2F0aW9uIn4KGERlbGV0ZUFwcGxpY2F0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkIKEGFwcGxpY2F0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSwyOH1bYS16MC05XSQiGwoZRGVsZXRlQXBwbGljYXRpb25SZXNwb25zZSKSAQoXTGlzdEFwcGxpY2F0aW9uc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInYKGExpc3RBcHBsaWNhdGlvbnNSZXNwb25zZRIsCgxhcHBsaWNhdGlvbnMYASADKAsyFi50YWlsb3IudjEuQXBwbGljYXRpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDInsKFUdldEFwcGxpY2F0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkIKEGFwcGxpY2F0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSwyOH1bYS16MC05XSQiRQoWR2V0QXBwbGljYXRpb25SZXNwb25zZRIrCgthcHBsaWNhdGlvbhgBIAEoCzIWLnRhaWxvci52MS5BcHBsaWNhdGlvbiKHAQohR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQgoQYXBwbGljYXRpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDI4fVthLXowLTldJCLNAwoiR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXNwb25zZRJbCgZzdGF0dXMYASABKA4ySy50YWlsb3IudjEuR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXNwb25zZS5BcHBsaWNhdGlvblNjaGVtYUhlYWx0aFN0YXR1cxJGCiJjdXJyZW50X3NlcnZpbmdfc2NoZW1hX3VwZGF0ZV90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJNChpsYXN0X3NjaGVtYV91cGRhdGVfYXR0ZW1wdBgDIAEoCzIpLnRhaWxvci52MS5BcHBsaWNhdGlvblNjaGVtYVVwZGF0ZUF0dGVtcHQisgEKHUFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoU3RhdHVzEjAKLEFQUExJQ0FUSU9OX1NDSEVNQV9IRUFMVEhfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJwojQVBQTElDQVRJT05fU0NIRU1BX0hFQUxUSF9TVEFUVVNfT0sQARI2CjJBUFBMSUNBVElPTl9TQ0hFTUFfSEVBTFRIX1NUQVRVU19DT01QT1NJVElPTl9FUlJPUhACYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_google_protobuf_timestamp, file_tailor_fieldmask_v1_option, file_tailor_v1_application_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreateApplicationRequest.\n * Use `create(CreateApplicationRequestSchema)` to create a new message.\n */\nexport const CreateApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 0);\n\n/**\n * Describes the message tailor.v1.CreateApplicationResponse.\n * Use `create(CreateApplicationResponseSchema)` to create a new message.\n */\nexport const CreateApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 1);\n\n/**\n * Describes the message tailor.v1.UpdateApplicationRequest.\n * Use `create(UpdateApplicationRequestSchema)` to create a new message.\n */\nexport const UpdateApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 2);\n\n/**\n * Describes the message tailor.v1.UpdateApplicationResponse.\n * Use `create(UpdateApplicationResponseSchema)` to create a new message.\n */\nexport const UpdateApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 3);\n\n/**\n * Describes the message tailor.v1.DeleteApplicationRequest.\n * Use `create(DeleteApplicationRequestSchema)` to create a new message.\n */\nexport const DeleteApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 4);\n\n/**\n * Describes the message tailor.v1.DeleteApplicationResponse.\n * Use `create(DeleteApplicationResponseSchema)` to create a new message.\n */\nexport const DeleteApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 5);\n\n/**\n * Describes the message tailor.v1.ListApplicationsRequest.\n * Use `create(ListApplicationsRequestSchema)` to create a new message.\n */\nexport const ListApplicationsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 6);\n\n/**\n * Describes the message tailor.v1.ListApplicationsResponse.\n * Use `create(ListApplicationsResponseSchema)` to create a new message.\n */\nexport const ListApplicationsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 7);\n\n/**\n * Describes the message tailor.v1.GetApplicationRequest.\n * Use `create(GetApplicationRequestSchema)` to create a new message.\n */\nexport const GetApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 8);\n\n/**\n * Describes the message tailor.v1.GetApplicationResponse.\n * Use `create(GetApplicationResponseSchema)` to create a new message.\n */\nexport const GetApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 9);\n\n/**\n * Describes the message tailor.v1.GetApplicationSchemaHealthRequest.\n * Use `create(GetApplicationSchemaHealthRequestSchema)` to create a new message.\n */\nexport const GetApplicationSchemaHealthRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 10);\n\n/**\n * Describes the message tailor.v1.GetApplicationSchemaHealthResponse.\n * Use `create(GetApplicationSchemaHealthResponseSchema)` to create a new message.\n */\nexport const GetApplicationSchemaHealthResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 11);\n\n/**\n * Describes the enum tailor.v1.GetApplicationSchemaHealthResponse.ApplicationSchemaHealthStatus.\n */\nexport const GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_application, 11, 0);\n\n/**\n * @generated from enum tailor.v1.GetApplicationSchemaHealthResponse.ApplicationSchemaHealthStatus\n */\nexport const GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatus = /*@__PURE__*/\n tsEnum(GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/secret_manager_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/secret_manager_resource.proto.\n */\nexport const file_tailor_v1_secret_manager_resource = /*@__PURE__*/\n fileDesc(\"Cid0YWlsb3IvdjEvc2VjcmV0X21hbmFnZXJfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSKOAQoSU2VjcmV0TWFuYWdlclZhdWx0EgwKBG5hbWUYASABKAkSNAoLY3JlYXRlX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMijwEKE1NlY3JldE1hbmFnZXJTZWNyZXQSDAoEbmFtZRgBIAEoCRI0CgtjcmVhdGVfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxI0Cgt1cGRhdGVfdGltZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAyI1CgtTZWNyZXRWYWx1ZRISCgp2YXVsdF9uYW1lGAEgASgJEhIKCnNlY3JldF9rZXkYAiABKAliBnByb3RvMw\", [file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.SecretManagerVault.\n * Use `create(SecretManagerVaultSchema)` to create a new message.\n */\nexport const SecretManagerVaultSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager_resource, 0);\n\n/**\n * Describes the message tailor.v1.SecretManagerSecret.\n * Use `create(SecretManagerSecretSchema)` to create a new message.\n */\nexport const SecretManagerSecretSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager_resource, 1);\n\n/**\n * Describes the message tailor.v1.SecretValue.\n * Use `create(SecretValueSchema)` to create a new message.\n */\nexport const SecretValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager_resource, 2);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/auth_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_duration, file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/auth_resource.proto.\n */\nexport const file_tailor_v1_auth_resource = /*@__PURE__*/\n fileDesc(\"Ch10YWlsb3IvdjEvYXV0aF9yZXNvdXJjZS5wcm90bxIJdGFpbG9yLnYxIlYKC0F1dGhTZXJ2aWNlEicKCW5hbWVzcGFjZRgBIAEoCzIULnRhaWxvci52MS5OYW1lc3BhY2USHgoWcHVibGlzaF9zZXNzaW9uX2V2ZW50cxgCIAEoCCK0BgoNQXV0aElEUENvbmZpZxI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjQKCWF1dGhfdHlwZRgCIAEoDjIhLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLkF1dGhUeXBlEi8KBmNvbmZpZxgDIAEoCzIfLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLkNvbmZpZxq4AQoGQ29uZmlnEjMKBG9pZGMYASABKAsyIy50YWlsb3IudjEuQXV0aElEUENvbmZpZy5PSURDQ29uZmlnSAASMwoEc2FtbBgCIAEoCzIjLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLlNBTUxDb25maWdIABI6CghpZF90b2tlbhgDIAEoCzImLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLklEVG9rZW5Db25maWdIAEIICgZjb25maWcamAEKCk9JRENDb25maWcSFQoNY2xpZW50X2lkX2tleRgBIAEoCRIxChFjbGllbnRfc2VjcmV0X2tleRgCIAEoCzIWLnRhaWxvci52MS5TZWNyZXRWYWx1ZRIUCgxwcm92aWRlcl91cmwYAyABKAkSEgoKaXNzdWVyX3VybBgEIAEoCRIWCg51c2VybmFtZV9jbGFpbRgFIAEoCRphCgpTQU1MQ29uZmlnEhQKDG1ldGFkYXRhX3VybBgBIAEoCRIUCgxyYXdfbWV0YWRhdGEYBCABKAkSGwoTZW5hYmxlX3NpZ25fcmVxdWVzdBgFIAEoCEoECAIQA0oECAMQBBpkCg1JRFRva2VuQ29uZmlnEhQKDHByb3ZpZGVyX3VybBgBIAEoCRIRCgljbGllbnRfaWQYAiABKAkSEgoKaXNzdWVyX3VybBgDIAEoCRIWCg51c2VybmFtZV9jbGFpbRgEIAEoCSJlCghBdXRoVHlwZRIZChVBVVRIX1RZUEVfVU5TUEVDSUZJRUQQABISCg5BVVRIX1RZUEVfT0lEQxABEhIKDkFVVEhfVFlQRV9TQU1MEAISFgoSQVVUSF9UWVBFX0lEX1RPS0VOEAMirQYKGVVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcSFAoIcHJvdmlkZXIYASABKAlCAhgBElMKDXByb3ZpZGVyX3R5cGUYAiABKA4yPC50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5Vc2VyUHJvZmlsZVByb3ZpZGVyVHlwZRI7CgZjb25maWcYAyABKAsyKy50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5Db25maWcaYwoGQ29uZmlnEk8KCHRhaWxvcmRiGAEgASgLMjsudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcuVGFpbG9yREJQcm92aWRlckNvbmZpZ0gAQggKBmNvbmZpZxqSAwoWVGFpbG9yREJQcm92aWRlckNvbmZpZxI7CgluYW1lc3BhY2UYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLQoEdHlwZRgCIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBIWCg51c2VybmFtZV9maWVsZBgDIAEoCRIZChFhdHRyaWJ1dGVzX2ZpZWxkcxgEIAMoCRIXCg90ZW5hbnRfaWRfZmllbGQYBSABKAkSigEKDWF0dHJpYnV0ZV9tYXAYBiADKAsyTS50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5UYWlsb3JEQlByb3ZpZGVyQ29uZmlnLkF0dHJpYnV0ZU1hcEVudHJ5QiS6SCGaAR4iHHIaMhheW2Etel1bMC05YS16QS1aXXswLDYyfSQaMwoRQXR0cmlidXRlTWFwRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJuChdVc2VyUHJvZmlsZVByb3ZpZGVyVHlwZRIqCiZVU0VSX1BST0ZJTEVfUFJPVklERVJfVFlQRV9VTlNQRUNJRklFRBAAEicKI1VTRVJfUFJPRklMRV9QUk9WSURFUl9UWVBFX1RBSUxPUkRCEAEivgMKFFRlbmFudFByb3ZpZGVyQ29uZmlnEhAKCHByb3ZpZGVyGAEgASgJEkkKDXByb3ZpZGVyX3R5cGUYAiABKA4yMi50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWcuVGVuYW50UHJvdmlkZXJUeXBlEjYKBmNvbmZpZxgDIAEoCzImLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZy5Db25maWcaXgoGQ29uZmlnEkoKCHRhaWxvcmRiGAEgASgLMjYudGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnLlRhaWxvckRCUHJvdmlkZXJDb25maWdIAEIICgZjb25maWcaUgoWVGFpbG9yREJQcm92aWRlckNvbmZpZxIRCgluYW1lc3BhY2UYASABKAkSDAoEdHlwZRgCIAEoCRIXCg9zaWduYXR1cmVfZmllbGQYAyABKAkiXQoSVGVuYW50UHJvdmlkZXJUeXBlEiQKIFRFTkFOVF9QUk9WSURFUl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodVEVOQU5UX1BST1ZJREVSX1RZUEVfVEFJTE9SREIQASI7CgtBdXRoSW52b2tlchIRCgluYW1lc3BhY2UYASABKAkSGQoRbWFjaGluZV91c2VyX25hbWUYAiABKAkiSAoTUGVyc29uYWxBY2Nlc3NUb2tlbhIMCgRuYW1lGAEgASgJEiMKBnNjb3BlcxgCIAMoDjITLnRhaWxvci52MS5QQVRTY29wZSLGAwoLTWFjaGluZVVzZXISCgoCaWQYASABKAkSNgoEbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIWCgljbGllbnRfaWQYAyABKAlCA+BBAxIaCg1jbGllbnRfc2VjcmV0GAQgASgJQgPgQQMSIQoKYXR0cmlidXRlcxgFIAMoCUINukgKkgEHIgVyA7ABARIzCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjMKCnVwZGF0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSZQoNYXR0cmlidXRlX21hcBgIIAMoCzIoLnRhaWxvci52MS5NYWNoaW5lVXNlci5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEi3gIKDkF1dGhTQ0lNQ29uZmlnEkMKEW1hY2hpbmVfdXNlcl9uYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkcKEmF1dGhvcml6YXRpb25fdHlwZRgCIAEoDjIrLnRhaWxvci52MS5BdXRoU0NJTUNvbmZpZy5BdXRob3JpemF0aW9uVHlwZRIvCg1iZWFyZXJfc2VjcmV0GAogASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlSAAidQoRQXV0aG9yaXphdGlvblR5cGUSIgoeQVVUSE9SSVpBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASHQoZQVVUSE9SSVpBVElPTl9UWVBFX0JFQVJFUhABEh0KGUFVVEhPUklaQVRJT05fVFlQRV9PQVVUSDIQAkIWChRhdXRob3JpemF0aW9uX2NvbmZpZyLDAgoQQXV0aFNDSU1SZXNvdXJjZRI/CgRuYW1lGAEgASgJQjG6SC5yLDIqXltBLVphLXowLTldW0EtWmEtejAtOS1dezEsNjF9W0EtWmEtejAtOV0kEkUKE3RhaWxvcl9kYl9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNwoOdGFpbG9yX2RiX3R5cGUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQSPgoRYXR0cmlidXRlX21hcHBpbmcYBCADKAsyIy50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGVNYXBwaW5nEi4KC2NvcmVfc2NoZW1hGAUgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNU2NoZW1hIkYKGEF1dGhTQ0lNQXR0cmlidXRlTWFwcGluZxIXCg90YWlsb3JfZGJfZmllbGQYASABKAkSEQoJc2NpbV9wYXRoGAIgASgJIlAKDkF1dGhTQ0lNU2NoZW1hEgwKBG5hbWUYASABKAkSMAoKYXR0cmlidXRlcxgCIAMoCzIcLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZSLZBQoRQXV0aFNDSU1BdHRyaWJ1dGUSLwoEdHlwZRgBIAEoDjIhLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZS5UeXBlEi4KBG5hbWUYAiABKAlCILpIHXIbMhleW0EtWmEtel1bYS16QS1aMC05XyQtXSokEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjsKCm11dGFiaWxpdHkYBCABKA4yJy50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGUuTXV0YWJpbGl0eRIQCghyZXF1aXJlZBgFIAEoCBIUCgxtdWx0aV92YWx1ZWQYBiABKAgSOwoKdW5pcXVlbmVzcxgHIAEoDjInLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZS5VbmlxdWVuZXNzEhgKEGNhbm9uaWNhbF92YWx1ZXMYCCADKAkSNAoOc3ViX2F0dHJpYnV0ZXMYCSADKAsyHC50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGUidQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASEAoMVFlQRV9DT01QTEVYEAESDwoLVFlQRV9TVFJJTkcQAhIPCgtUWVBFX05VTUJFUhADEhAKDFRZUEVfQk9PTEVBThAEEhEKDVRZUEVfREFURVRJTUUQBSJ4CgpNdXRhYmlsaXR5EhoKFk1VVEFCSUxJVFlfVU5TUEVDSUZJRUQQABIYChRNVVRBQklMSVRZX1JFQURfT05MWRABEhkKFU1VVEFCSUxJVFlfUkVBRF9XUklURRACEhkKFU1VVEFCSUxJVFlfV1JJVEVfT05MWRADImsKClVuaXF1ZW5lc3MSGgoWVU5JUVVFTkVTU19VTlNQRUNJRklFRBAAEhMKD1VOSVFVRU5FU1NfTk9ORRABEhUKEVVOSVFVRU5FU1NfU0VSVkVSEAISFQoRVU5JUVVFTkVTU19HTE9CQUwQAyKYAQoIQXV0aEhvb2sSOAoKaG9va19wb2ludBgBIAEoDjIYLnRhaWxvci52MS5BdXRoSG9va1BvaW50Qgq6SAeCAQQQASAAEhsKCnNjcmlwdF9yZWYYAiABKAlCB7pIBHICEAESLwoHaW52b2tlchgEIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlckIGukgDyAEBSgQIAxAEIr4ECg5BdXRoQ29ubmVjdGlvbhI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEiwKBHR5cGUYAiABKA4yHi50YWlsb3IudjEuQXV0aENvbm5lY3Rpb24uVHlwZRJGCgZvYXV0aDIYAyABKAsyNC50YWlsb3IudjEuQXV0aENvbm5lY3Rpb24uQXV0aENvbm5lY3Rpb25PQXV0aDJDb25maWdIABIzCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDGogCChpBdXRoQ29ubmVjdGlvbk9BdXRoMkNvbmZpZxIUCgxwcm92aWRlcl91cmwYASABKAkSEgoKaXNzdWVyX3VybBgCIAEoCRIRCgljbGllbnRfaWQYAyABKAkSGgoNY2xpZW50X3NlY3JldBgEIAEoCUID4EEEEkcKCGF1dGhfdXJsGAUgASgJQjW6SDLYAQFyLTIoXmh0dHBzOi8vW0EtWmEtejAtOS4tXSsoOlswLTldKyk/KC8uKik/JIgBARJICgl0b2tlbl91cmwYBiABKAlCNbpIMtgBAXItMiheaHR0cHM6Ly9bQS1aYS16MC05Li1dKyg6WzAtOV0rKT8oLy4qKT8kiAEBIi0KBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEg8KC1RZUEVfT0FVVEgyEAFCDwoGY29uZmlnEgW6SAIIASKjBwoQQXV0aE9BdXRoMkNsaWVudBIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjoKC2dyYW50X3R5cGVzGAMgAygOMiUudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQuR3JhbnRUeXBlEhUKDXJlZGlyZWN0X3VyaXMYBCADKAkSFgoJY2xpZW50X2lkGAUgASgJQgPgQQMSGgoNY2xpZW50X3NlY3JldBgGIAEoCUID4EEDEjMKCmNyZWF0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSSgoLY2xpZW50X3R5cGUYCCABKA4yJi50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudC5DbGllbnRUeXBlQg26SArYAQGCAQQQASAAEkoKFWFjY2Vzc190b2tlbl9saWZldGltZRgJIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIQukgNqgEKIgQIgKMFMgIIPBJLChZyZWZyZXNoX3Rva2VuX2xpZmV0aW1lGAogASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQhC6SA2qAQoiBAiA9SQyAgg8EhQKDHJlcXVpcmVfZHBvcBgLIAEoCCJoCglHcmFudFR5cGUSGgoWR1JBTlRfVFlQRV9VTlNQRUNJRklFRBAAEiEKHUdSQU5UX1RZUEVfQVVUSE9SSVpBVElPTl9DT0RFEAESHAoYR1JBTlRfVFlQRV9SRUZSRVNIX1RPS0VOEAIieAoKQ2xpZW50VHlwZRIbChdDTElFTlRfVFlQRV9VTlNQRUNJRklFRBAAEhwKGENMSUVOVF9UWVBFX0NPTkZJREVOVElBTBABEhYKEkNMSUVOVF9UWVBFX1BVQkxJQxACEhcKE0NMSUVOVF9UWVBFX0JST1dTRVIQAzrQAbpIzAEayQEKImJyb3dzZXJfY2xpZW50X2Nhbm5vdF9yZXF1aXJlX2Rwb3ASNnJlcXVpcmVfZHBvcCBjYW5ub3QgYmUgc2V0IHRvIHRydWUgZm9yIGJyb3dzZXIgY2xpZW50cxprdGhpcy5jbGllbnRfdHlwZSAhPSB0YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudC5DbGllbnRUeXBlLkNMSUVOVF9UWVBFX0JST1dTRVIgfHwgdGhpcy5yZXF1aXJlX2Rwb3AgPT0gZmFsc2UitwEKF0NvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEg8KAmlkGAEgASgJQgPgQQMSDAoEbmFtZRgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIcCg9vcmdhbml6YXRpb25faWQYBCABKAlCA+BBAxIWCglmb2xkZXJfaWQYBSABKAlCA+BBAxIWCgljbGllbnRfaWQYBiABKAlCA+BBAxIaCg1jbGllbnRfc2VjcmV0GAcgASgJQgPgQQMqTgoIUEFUU2NvcGUSGQoVUEFUX1NDT1BFX1VOU1BFQ0lGSUVEEAASEgoOUEFUX1NDT1BFX1JFQUQQARITCg9QQVRfU0NPUEVfV1JJVEUQAipSCg1BdXRoSG9va1BvaW50Eh8KG0FVVEhfSE9PS19QT0lOVF9VTlNQRUNJRklFRBAAEiAKHEFVVEhfSE9PS19QT0lOVF9CRUZPUkVfTE9HSU4QAWIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_duration, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_resource, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.AuthService.\n * Use `create(AuthServiceSchema)` to create a new message.\n */\nexport const AuthServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 0);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.\n * Use `create(AuthIDPConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.Config.\n * Use `create(AuthIDPConfig_ConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.OIDCConfig.\n * Use `create(AuthIDPConfig_OIDCConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_OIDCConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.SAMLConfig.\n * Use `create(AuthIDPConfig_SAMLConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_SAMLConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.IDTokenConfig.\n * Use `create(AuthIDPConfig_IDTokenConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_IDTokenConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 3);\n\n/**\n * Describes the enum tailor.v1.AuthIDPConfig.AuthType.\n */\nexport const AuthIDPConfig_AuthTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.AuthIDPConfig.AuthType\n */\nexport const AuthIDPConfig_AuthType = /*@__PURE__*/\n tsEnum(AuthIDPConfig_AuthTypeSchema);\n\n/**\n * Describes the message tailor.v1.UserProfileProviderConfig.\n * Use `create(UserProfileProviderConfigSchema)` to create a new message.\n */\nexport const UserProfileProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 2);\n\n/**\n * Describes the message tailor.v1.UserProfileProviderConfig.Config.\n * Use `create(UserProfileProviderConfig_ConfigSchema)` to create a new message.\n */\nexport const UserProfileProviderConfig_ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 2, 0);\n\n/**\n * Describes the message tailor.v1.UserProfileProviderConfig.TailorDBProviderConfig.\n * Use `create(UserProfileProviderConfig_TailorDBProviderConfigSchema)` to create a new message.\n */\nexport const UserProfileProviderConfig_TailorDBProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 2, 1);\n\n/**\n * Describes the enum tailor.v1.UserProfileProviderConfig.UserProfileProviderType.\n */\nexport const UserProfileProviderConfig_UserProfileProviderTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.UserProfileProviderConfig.UserProfileProviderType\n */\nexport const UserProfileProviderConfig_UserProfileProviderType = /*@__PURE__*/\n tsEnum(UserProfileProviderConfig_UserProfileProviderTypeSchema);\n\n/**\n * Describes the message tailor.v1.TenantProviderConfig.\n * Use `create(TenantProviderConfigSchema)` to create a new message.\n */\nexport const TenantProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 3);\n\n/**\n * Describes the message tailor.v1.TenantProviderConfig.Config.\n * Use `create(TenantProviderConfig_ConfigSchema)` to create a new message.\n */\nexport const TenantProviderConfig_ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 3, 0);\n\n/**\n * Describes the message tailor.v1.TenantProviderConfig.TailorDBProviderConfig.\n * Use `create(TenantProviderConfig_TailorDBProviderConfigSchema)` to create a new message.\n */\nexport const TenantProviderConfig_TailorDBProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 3, 1);\n\n/**\n * Describes the enum tailor.v1.TenantProviderConfig.TenantProviderType.\n */\nexport const TenantProviderConfig_TenantProviderTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 3, 0);\n\n/**\n * @generated from enum tailor.v1.TenantProviderConfig.TenantProviderType\n */\nexport const TenantProviderConfig_TenantProviderType = /*@__PURE__*/\n tsEnum(TenantProviderConfig_TenantProviderTypeSchema);\n\n/**\n * Describes the message tailor.v1.AuthInvoker.\n * Use `create(AuthInvokerSchema)` to create a new message.\n */\nexport const AuthInvokerSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 4);\n\n/**\n * Describes the message tailor.v1.PersonalAccessToken.\n * Use `create(PersonalAccessTokenSchema)` to create a new message.\n */\nexport const PersonalAccessTokenSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 5);\n\n/**\n * Describes the message tailor.v1.MachineUser.\n * Use `create(MachineUserSchema)` to create a new message.\n */\nexport const MachineUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 6);\n\n/**\n * Describes the message tailor.v1.AuthSCIMConfig.\n * Use `create(AuthSCIMConfigSchema)` to create a new message.\n */\nexport const AuthSCIMConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 7);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMConfig.AuthorizationType.\n */\nexport const AuthSCIMConfig_AuthorizationTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 7, 0);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMConfig.AuthorizationType\n */\nexport const AuthSCIMConfig_AuthorizationType = /*@__PURE__*/\n tsEnum(AuthSCIMConfig_AuthorizationTypeSchema);\n\n/**\n * Describes the message tailor.v1.AuthSCIMResource.\n * Use `create(AuthSCIMResourceSchema)` to create a new message.\n */\nexport const AuthSCIMResourceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 8);\n\n/**\n * Describes the message tailor.v1.AuthSCIMAttributeMapping.\n * Use `create(AuthSCIMAttributeMappingSchema)` to create a new message.\n */\nexport const AuthSCIMAttributeMappingSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 9);\n\n/**\n * Describes the message tailor.v1.AuthSCIMSchema.\n * Use `create(AuthSCIMSchemaSchema)` to create a new message.\n */\nexport const AuthSCIMSchemaSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 10);\n\n/**\n * Describes the message tailor.v1.AuthSCIMAttribute.\n * Use `create(AuthSCIMAttributeSchema)` to create a new message.\n */\nexport const AuthSCIMAttributeSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 11);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMAttribute.Type.\n */\nexport const AuthSCIMAttribute_TypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 11, 0);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMAttribute.Type\n */\nexport const AuthSCIMAttribute_Type = /*@__PURE__*/\n tsEnum(AuthSCIMAttribute_TypeSchema);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMAttribute.Mutability.\n */\nexport const AuthSCIMAttribute_MutabilitySchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 11, 1);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMAttribute.Mutability\n */\nexport const AuthSCIMAttribute_Mutability = /*@__PURE__*/\n tsEnum(AuthSCIMAttribute_MutabilitySchema);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMAttribute.Uniqueness.\n */\nexport const AuthSCIMAttribute_UniquenessSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 11, 2);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMAttribute.Uniqueness\n */\nexport const AuthSCIMAttribute_Uniqueness = /*@__PURE__*/\n tsEnum(AuthSCIMAttribute_UniquenessSchema);\n\n/**\n * Describes the message tailor.v1.AuthHook.\n * Use `create(AuthHookSchema)` to create a new message.\n */\nexport const AuthHookSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 12);\n\n/**\n * Describes the message tailor.v1.AuthConnection.\n * Use `create(AuthConnectionSchema)` to create a new message.\n */\nexport const AuthConnectionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 13);\n\n/**\n * Describes the message tailor.v1.AuthConnection.AuthConnectionOAuth2Config.\n * Use `create(AuthConnection_AuthConnectionOAuth2ConfigSchema)` to create a new message.\n */\nexport const AuthConnection_AuthConnectionOAuth2ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 13, 0);\n\n/**\n * Describes the enum tailor.v1.AuthConnection.Type.\n */\nexport const AuthConnection_TypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 13, 0);\n\n/**\n * @generated from enum tailor.v1.AuthConnection.Type\n */\nexport const AuthConnection_Type = /*@__PURE__*/\n tsEnum(AuthConnection_TypeSchema);\n\n/**\n * Describes the message tailor.v1.AuthOAuth2Client.\n * Use `create(AuthOAuth2ClientSchema)` to create a new message.\n */\nexport const AuthOAuth2ClientSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 14);\n\n/**\n * Describes the enum tailor.v1.AuthOAuth2Client.GrantType.\n */\nexport const AuthOAuth2Client_GrantTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 14, 0);\n\n/**\n * @generated from enum tailor.v1.AuthOAuth2Client.GrantType\n */\nexport const AuthOAuth2Client_GrantType = /*@__PURE__*/\n tsEnum(AuthOAuth2Client_GrantTypeSchema);\n\n/**\n * Describes the enum tailor.v1.AuthOAuth2Client.ClientType.\n */\nexport const AuthOAuth2Client_ClientTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 14, 1);\n\n/**\n * @generated from enum tailor.v1.AuthOAuth2Client.ClientType\n */\nexport const AuthOAuth2Client_ClientType = /*@__PURE__*/\n tsEnum(AuthOAuth2Client_ClientTypeSchema);\n\n/**\n * Describes the message tailor.v1.ControlplaneMachineUser.\n * Use `create(ControlplaneMachineUserSchema)` to create a new message.\n */\nexport const ControlplaneMachineUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 15);\n\n/**\n * Describes the enum tailor.v1.PATScope.\n */\nexport const PATScopeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 0);\n\n/**\n * @generated from enum tailor.v1.PATScope\n */\nexport const PATScope = /*@__PURE__*/\n tsEnum(PATScopeSchema);\n\n/**\n * Describes the enum tailor.v1.AuthHookPoint.\n */\nexport const AuthHookPointSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 1);\n\n/**\n * Auth Hook --------------------------------------------------------\n *\n * @generated from enum tailor.v1.AuthHookPoint\n */\nexport const AuthHookPoint = /*@__PURE__*/\n tsEnum(AuthHookPointSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/auth.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/auth.proto.\n */\nexport const file_tailor_v1_auth = /*@__PURE__*/\n fileDesc(\"ChR0YWlsb3IvdjEvYXV0aC5wcm90bxIJdGFpbG9yLnYxIpwBChhDcmVhdGVBdXRoU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIeChZwdWJsaXNoX3Nlc3Npb25fZXZlbnRzGAMgASgIIkkKGUNyZWF0ZUF1dGhTZXJ2aWNlUmVzcG9uc2USLAoMYXV0aF9zZXJ2aWNlGAEgASgLMhYudGFpbG9yLnYxLkF1dGhTZXJ2aWNlIpwBChhVcGRhdGVBdXRoU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIeChZwdWJsaXNoX3Nlc3Npb25fZXZlbnRzGAMgASgIIkkKGVVwZGF0ZUF1dGhTZXJ2aWNlUmVzcG9uc2USLAoMYXV0aF9zZXJ2aWNlGAEgASgLMhYudGFpbG9yLnYxLkF1dGhTZXJ2aWNlInwKGERlbGV0ZUF1dGhTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIhsKGURlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UieQoVR2V0QXV0aFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiRgoWR2V0QXV0aFNlcnZpY2VSZXNwb25zZRIsCgxhdXRoX3NlcnZpY2UYASABKAsyFi50YWlsb3IudjEuQXV0aFNlcnZpY2UikgEKF0xpc3RBdXRoU2VydmljZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ3ChhMaXN0QXV0aFNlcnZpY2VzUmVzcG9uc2USLQoNYXV0aF9zZXJ2aWNlcxgBIAMoCzIWLnRhaWxvci52MS5BdXRoU2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirAEKGkNyZWF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG0NyZWF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcirAEKGlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG1VwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcitgEKGkRlbGV0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIdChtEZWxldGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiswEKF0dldEF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJIChhHZXRBdXRoSURQQ29uZmlnUmVzcG9uc2USLAoKaWRwX2NvbmZpZxgBIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnItYBChlMaXN0QXV0aElEUENvbmZpZ3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEgoKcGFnZV90b2tlbhgDIAEoCRIRCglwYWdlX3NpemUYBCABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBSABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ5ChpMaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZRItCgtpZHBfY29uZmlncxgBIAMoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLOAQoeQ3JlYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgDIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIm0KH0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2USSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIs4BCh5VcGRhdGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAMgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcibQofVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWciggEKHkRlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiEKH0RlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UifwobR2V0VXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiagocR2V0VXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcixgEKGUNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJHChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAMgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnQga6SAPIAQEiXQoaQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyLGAQoZVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkcKFnRlbmFudF9wcm92aWRlcl9jb25maWcYAyABKAsyHy50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWdCBrpIA8gBASJdChpVcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZRI/ChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAEgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnIn0KGURlbGV0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIcChpEZWxldGVUZW5hbnRDb25maWdSZXNwb25zZSJ6ChZHZXRUZW5hbnRDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiWgoXR2V0VGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyKSAQogQ3JlYXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgZzY29wZXMYAiADKA4yEy50YWlsb3IudjEuUEFUU2NvcGVCEbpIDpIBCwgBIgeCAQQQASAAIjkKIUNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkiWgogRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIjCiFEZWxldGVQZXJzb25hbEFjY2Vzc1Rva2VuUmVzcG9uc2UiegofTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIpABCiBMaXN0UGVyc29uYWxBY2Nlc3NUb2tlbnNSZXNwb25zZRI+ChZwZXJzb25hbF9hY2Nlc3NfdG9rZW5zGAEgAygLMh4udGFpbG9yLnYxLlBlcnNvbmFsQWNjZXNzVG9rZW4SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIqMDChxDcmVhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoOYXV0aF9uYW1lc3BhY2UYAiABKAlCK7pIKHImMiReKFthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0pPyQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIqADChxVcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIrgBChxEZWxldGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIfCh1EZWxldGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSK1AQoZR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDmF1dGhfbmFtZXNwYWNlGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSgoaR2V0QXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyItgBChtMaXN0QXV0aE1hY2hpbmVVc2Vyc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5hdXRoX25hbWVzcGFjZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInsKHExpc3RBdXRoTWFjaGluZVVzZXJzUmVzcG9uc2USLQoNbWFjaGluZV91c2VycxgBIAMoCzIWLnRhaWxvci52MS5NYWNoaW5lVXNlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirwEKG0NyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHENyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcirwEKG1VwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHFVwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcifAoYR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSwoZR2V0QXV0aFNDSU1Db25maWdSZXNwb25zZRIuCgtzY2ltX2NvbmZpZxgBIAEoCzIZLnRhaWxvci52MS5BdXRoU0NJTUNvbmZpZyJ/ChtEZWxldGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIeChxEZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIrUBCh1DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIrUBCh1VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIo8BCh1EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIrYBChpHZXRBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlEjIKDXNjaW1fcmVzb3VyY2UYASABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJ/ChtHZXRBdXRoU0NJTVJlc291cmNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJTChxHZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlEjMKDnNjaW1fcmVzb3VyY2VzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhTQ0lNUmVzb3VyY2UipAEKFUNyZWF0ZUF1dGhIb29rUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEikKBGhvb2sYAyABKAsyEy50YWlsb3IudjEuQXV0aEhvb2tCBrpIA8gBASI7ChZDcmVhdGVBdXRoSG9va1Jlc3BvbnNlEiEKBGhvb2sYASABKAsyEy50YWlsb3IudjEuQXV0aEhvb2sipAEKFVVwZGF0ZUF1dGhIb29rUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEikKBGhvb2sYAyABKAsyEy50YWlsb3IudjEuQXV0aEhvb2tCBrpIA8gBASI7ChZVcGRhdGVBdXRoSG9va1Jlc3BvbnNlEiEKBGhvb2sYASABKAsyEy50YWlsb3IudjEuQXV0aEhvb2siswEKFURlbGV0ZUF1dGhIb29rUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjgKCmhvb2tfcG9pbnQYAyABKA4yGC50YWlsb3IudjEuQXV0aEhvb2tQb2ludEIKukgHggEEEAEgACIYChZEZWxldGVBdXRoSG9va1Jlc3BvbnNlIrABChJHZXRBdXRoSG9va1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI4Cgpob29rX3BvaW50GAMgASgOMhgudGFpbG9yLnYxLkF1dGhIb29rUG9pbnRCCrpIB4IBBBABIAAiOAoTR2V0QXV0aEhvb2tSZXNwb25zZRIhCgRob29rGAEgASgLMhMudGFpbG9yLnYxLkF1dGhIb29rInQKG0NyZWF0ZUF1dGhDb25uZWN0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjUKCmNvbm5lY3Rpb24YAiABKAsyGS50YWlsb3IudjEuQXV0aENvbm5lY3Rpb25CBrpIA8gBASIeChxDcmVhdGVBdXRoQ29ubmVjdGlvblJlc3BvbnNlIpUBChpMaXN0QXV0aENvbm5lY3Rpb25zUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24iewobTGlzdEF1dGhDb25uZWN0aW9uc1Jlc3BvbnNlEi4KC2Nvbm5lY3Rpb25zGAEgAygLMhkudGFpbG9yLnYxLkF1dGhDb25uZWN0aW9uEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKAAQobUmV2b2tlQXV0aENvbm5lY3Rpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQQoPY29ubmVjdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIh4KHFJldm9rZUF1dGhDb25uZWN0aW9uUmVzcG9uc2Ui5gEKJFJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkEKD2Nvbm5lY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIUCgxhY2Nlc3NfdG9rZW4YAyABKAkSFQoNcmVmcmVzaF90b2tlbhgEIAEoCRIuCgpleHBpcmVzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCInCiVSZWdpc3RlckF1dGhDb25uZWN0aW9uU2Vzc2lvblJlc3BvbnNlItcBCi5FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQQoPY29ubmVjdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEiMKEmF1dGhvcml6YXRpb25fY29kZRgDIAEoCUIHukgEcgIQARIdCgxyZWRpcmVjdF91cmkYBCABKAlCB7pIBHICEAEiMQovRXhjaGFuZ2VBdXRoQ29ubmVjdGlvbkF1dGhvcml6YXRpb25Db2RlUmVzcG9uc2UiiwEKHUNyZWF0ZUF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESFgoObmFtZXNwYWNlX25hbWUYAiABKAkSMgoNb2F1dGgyX2NsaWVudBgDIAEoCzIbLnRhaWxvci52MS5BdXRoT0F1dGgyQ2xpZW50IlQKHkNyZWF0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZRIyCg1vYXV0aDJfY2xpZW50GAEgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiiwEKHVVwZGF0ZUF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESFgoObmFtZXNwYWNlX25hbWUYAiABKAkSMgoNb2F1dGgyX2NsaWVudBgDIAEoCzIbLnRhaWxvci52MS5BdXRoT0F1dGgyQ2xpZW50IlQKHlVwZGF0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZRIyCg1vYXV0aDJfY2xpZW50GAEgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiZQodRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIMCgRuYW1lGAMgASgJIiAKHkRlbGV0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZSK2AQoaR2V0QXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgRuYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIlEKG0dldEF1dGhPQXV0aDJDbGllbnRSZXNwb25zZRIyCg1vYXV0aDJfY2xpZW50GAEgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQirwEKHExpc3RBdXRoT0F1dGgyQ2xpZW50c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIoIBCh1MaXN0QXV0aE9BdXRoMkNsaWVudHNSZXNwb25zZRIzCg5vYXV0aDJfY2xpZW50cxgBIAMoCzIbLnRhaWxvci52MS5BdXRoT0F1dGgyQ2xpZW50EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyK2AQokQ3JlYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESHgoJZm9sZGVyX2lkGAIgASgJQgu6SAjYAQFyA7ABARI2CgRuYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhMKC2Rlc2NyaXB0aW9uGAQgASgJImEKJUNyZWF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2USOAoMbWFjaGluZV91c2VyGAEgASgLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyIvwBCiRVcGRhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEiEKD21hY2hpbmVfdXNlcl9pZBgDIAEoCUIIukgFcgOwAQESOwoEbmFtZRgEIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJEgAiAEBEhgKC2Rlc2NyaXB0aW9uGAUgASgJSAGIAQFCBwoFX25hbWVCDgoMX2Rlc2NyaXB0aW9uImEKJVVwZGF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2USOAoMbWFjaGluZV91c2VyGAEgASgLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyIokBCiFHZXRDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEiEKD21hY2hpbmVfdXNlcl9pZBgDIAEoCUIIukgFcgOwAQEiXgoiR2V0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZRI4CgxtYWNoaW5lX3VzZXIYASABKAsyIi50YWlsb3IudjEuQ29udHJvbHBsYW5lTWFjaGluZVVzZXIipAEKJ0dldENvbnRyb2xwbGFuZU1hY2hpbmVVc2VyQnlOYW1lUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEh4KCWZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJkCihHZXRDb250cm9scGxhbmVNYWNoaW5lVXNlckJ5TmFtZVJlc3BvbnNlEjgKDG1hY2hpbmVfdXNlchgBIAEoCzIiLnRhaWxvci52MS5Db250cm9scGxhbmVNYWNoaW5lVXNlciLBAQojTGlzdENvbnRyb2xwbGFuZU1hY2hpbmVVc2Vyc1JlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ijwEKJExpc3RDb250cm9scGxhbmVNYWNoaW5lVXNlcnNSZXNwb25zZRI5Cg1tYWNoaW5lX3VzZXJzGAEgAygLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKMAQokRGVsZXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESHgoJZm9sZGVyX2lkGAIgASgJQgu6SAjYAQFyA7ABARIhCg9tYWNoaW5lX3VzZXJfaWQYAyABKAlCCLpIBXIDsAEBIicKJURlbGV0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2ViBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_auth_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreateAuthServiceRequest.\n * Use `create(CreateAuthServiceRequestSchema)` to create a new message.\n */\nexport const CreateAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 0);\n\n/**\n * Describes the message tailor.v1.CreateAuthServiceResponse.\n * Use `create(CreateAuthServiceResponseSchema)` to create a new message.\n */\nexport const CreateAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 1);\n\n/**\n * Describes the message tailor.v1.UpdateAuthServiceRequest.\n * Use `create(UpdateAuthServiceRequestSchema)` to create a new message.\n */\nexport const UpdateAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 2);\n\n/**\n * Describes the message tailor.v1.UpdateAuthServiceResponse.\n * Use `create(UpdateAuthServiceResponseSchema)` to create a new message.\n */\nexport const UpdateAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 3);\n\n/**\n * Describes the message tailor.v1.DeleteAuthServiceRequest.\n * Use `create(DeleteAuthServiceRequestSchema)` to create a new message.\n */\nexport const DeleteAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 4);\n\n/**\n * Describes the message tailor.v1.DeleteAuthServiceResponse.\n * Use `create(DeleteAuthServiceResponseSchema)` to create a new message.\n */\nexport const DeleteAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 5);\n\n/**\n * Describes the message tailor.v1.GetAuthServiceRequest.\n * Use `create(GetAuthServiceRequestSchema)` to create a new message.\n */\nexport const GetAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 6);\n\n/**\n * Describes the message tailor.v1.GetAuthServiceResponse.\n * Use `create(GetAuthServiceResponseSchema)` to create a new message.\n */\nexport const GetAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 7);\n\n/**\n * Describes the message tailor.v1.ListAuthServicesRequest.\n * Use `create(ListAuthServicesRequestSchema)` to create a new message.\n */\nexport const ListAuthServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 8);\n\n/**\n * Describes the message tailor.v1.ListAuthServicesResponse.\n * Use `create(ListAuthServicesResponseSchema)` to create a new message.\n */\nexport const ListAuthServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 9);\n\n/**\n * Describes the message tailor.v1.CreateAuthIDPConfigRequest.\n * Use `create(CreateAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const CreateAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 10);\n\n/**\n * Describes the message tailor.v1.CreateAuthIDPConfigResponse.\n * Use `create(CreateAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const CreateAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 11);\n\n/**\n * Describes the message tailor.v1.UpdateAuthIDPConfigRequest.\n * Use `create(UpdateAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const UpdateAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 12);\n\n/**\n * Describes the message tailor.v1.UpdateAuthIDPConfigResponse.\n * Use `create(UpdateAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const UpdateAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 13);\n\n/**\n * Describes the message tailor.v1.DeleteAuthIDPConfigRequest.\n * Use `create(DeleteAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const DeleteAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 14);\n\n/**\n * Describes the message tailor.v1.DeleteAuthIDPConfigResponse.\n * Use `create(DeleteAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const DeleteAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 15);\n\n/**\n * Describes the message tailor.v1.GetAuthIDPConfigRequest.\n * Use `create(GetAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const GetAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 16);\n\n/**\n * Describes the message tailor.v1.GetAuthIDPConfigResponse.\n * Use `create(GetAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const GetAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 17);\n\n/**\n * Describes the message tailor.v1.ListAuthIDPConfigsRequest.\n * Use `create(ListAuthIDPConfigsRequestSchema)` to create a new message.\n */\nexport const ListAuthIDPConfigsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 18);\n\n/**\n * Describes the message tailor.v1.ListAuthIDPConfigsResponse.\n * Use `create(ListAuthIDPConfigsResponseSchema)` to create a new message.\n */\nexport const ListAuthIDPConfigsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 19);\n\n/**\n * Describes the message tailor.v1.CreateUserProfileConfigRequest.\n * Use `create(CreateUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const CreateUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 20);\n\n/**\n * Describes the message tailor.v1.CreateUserProfileConfigResponse.\n * Use `create(CreateUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const CreateUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 21);\n\n/**\n * Describes the message tailor.v1.UpdateUserProfileConfigRequest.\n * Use `create(UpdateUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const UpdateUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 22);\n\n/**\n * Describes the message tailor.v1.UpdateUserProfileConfigResponse.\n * Use `create(UpdateUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const UpdateUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 23);\n\n/**\n * Describes the message tailor.v1.DeleteUserProfileConfigRequest.\n * Use `create(DeleteUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const DeleteUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 24);\n\n/**\n * Describes the message tailor.v1.DeleteUserProfileConfigResponse.\n * Use `create(DeleteUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const DeleteUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 25);\n\n/**\n * Describes the message tailor.v1.GetUserProfileConfigRequest.\n * Use `create(GetUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const GetUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 26);\n\n/**\n * Describes the message tailor.v1.GetUserProfileConfigResponse.\n * Use `create(GetUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const GetUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 27);\n\n/**\n * Describes the message tailor.v1.CreateTenantConfigRequest.\n * Use `create(CreateTenantConfigRequestSchema)` to create a new message.\n */\nexport const CreateTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 28);\n\n/**\n * Describes the message tailor.v1.CreateTenantConfigResponse.\n * Use `create(CreateTenantConfigResponseSchema)` to create a new message.\n */\nexport const CreateTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 29);\n\n/**\n * Describes the message tailor.v1.UpdateTenantConfigRequest.\n * Use `create(UpdateTenantConfigRequestSchema)` to create a new message.\n */\nexport const UpdateTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 30);\n\n/**\n * Describes the message tailor.v1.UpdateTenantConfigResponse.\n * Use `create(UpdateTenantConfigResponseSchema)` to create a new message.\n */\nexport const UpdateTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 31);\n\n/**\n * Describes the message tailor.v1.DeleteTenantConfigRequest.\n * Use `create(DeleteTenantConfigRequestSchema)` to create a new message.\n */\nexport const DeleteTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 32);\n\n/**\n * Describes the message tailor.v1.DeleteTenantConfigResponse.\n * Use `create(DeleteTenantConfigResponseSchema)` to create a new message.\n */\nexport const DeleteTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 33);\n\n/**\n * Describes the message tailor.v1.GetTenantConfigRequest.\n * Use `create(GetTenantConfigRequestSchema)` to create a new message.\n */\nexport const GetTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 34);\n\n/**\n * Describes the message tailor.v1.GetTenantConfigResponse.\n * Use `create(GetTenantConfigResponseSchema)` to create a new message.\n */\nexport const GetTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 35);\n\n/**\n * Describes the message tailor.v1.CreatePersonalAccessTokenRequest.\n * Use `create(CreatePersonalAccessTokenRequestSchema)` to create a new message.\n */\nexport const CreatePersonalAccessTokenRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 36);\n\n/**\n * Describes the message tailor.v1.CreatePersonalAccessTokenResponse.\n * Use `create(CreatePersonalAccessTokenResponseSchema)` to create a new message.\n */\nexport const CreatePersonalAccessTokenResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 37);\n\n/**\n * Describes the message tailor.v1.DeletePersonalAccessTokenRequest.\n * Use `create(DeletePersonalAccessTokenRequestSchema)` to create a new message.\n */\nexport const DeletePersonalAccessTokenRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 38);\n\n/**\n * Describes the message tailor.v1.DeletePersonalAccessTokenResponse.\n * Use `create(DeletePersonalAccessTokenResponseSchema)` to create a new message.\n */\nexport const DeletePersonalAccessTokenResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 39);\n\n/**\n * Describes the message tailor.v1.ListPersonalAccessTokensRequest.\n * Use `create(ListPersonalAccessTokensRequestSchema)` to create a new message.\n */\nexport const ListPersonalAccessTokensRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 40);\n\n/**\n * Describes the message tailor.v1.ListPersonalAccessTokensResponse.\n * Use `create(ListPersonalAccessTokensResponseSchema)` to create a new message.\n */\nexport const ListPersonalAccessTokensResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 41);\n\n/**\n * Describes the message tailor.v1.CreateAuthMachineUserRequest.\n * Use `create(CreateAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const CreateAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 42);\n\n/**\n * Describes the message tailor.v1.CreateAuthMachineUserResponse.\n * Use `create(CreateAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const CreateAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 43);\n\n/**\n * Describes the message tailor.v1.UpdateAuthMachineUserRequest.\n * Use `create(UpdateAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const UpdateAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 44);\n\n/**\n * Describes the message tailor.v1.UpdateAuthMachineUserResponse.\n * Use `create(UpdateAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const UpdateAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 45);\n\n/**\n * Describes the message tailor.v1.DeleteAuthMachineUserRequest.\n * Use `create(DeleteAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const DeleteAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 46);\n\n/**\n * Describes the message tailor.v1.DeleteAuthMachineUserResponse.\n * Use `create(DeleteAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const DeleteAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 47);\n\n/**\n * Describes the message tailor.v1.GetAuthMachineUserRequest.\n * Use `create(GetAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const GetAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 48);\n\n/**\n * Describes the message tailor.v1.GetAuthMachineUserResponse.\n * Use `create(GetAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const GetAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 49);\n\n/**\n * Describes the message tailor.v1.ListAuthMachineUsersRequest.\n * Use `create(ListAuthMachineUsersRequestSchema)` to create a new message.\n */\nexport const ListAuthMachineUsersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 50);\n\n/**\n * Describes the message tailor.v1.ListAuthMachineUsersResponse.\n * Use `create(ListAuthMachineUsersResponseSchema)` to create a new message.\n */\nexport const ListAuthMachineUsersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 51);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMConfigRequest.\n * Use `create(CreateAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const CreateAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 52);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMConfigResponse.\n * Use `create(CreateAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const CreateAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 53);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMConfigRequest.\n * Use `create(UpdateAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 54);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMConfigResponse.\n * Use `create(UpdateAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 55);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMConfigRequest.\n * Use `create(GetAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const GetAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 56);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMConfigResponse.\n * Use `create(GetAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const GetAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 57);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMConfigRequest.\n * Use `create(DeleteAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 58);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMConfigResponse.\n * Use `create(DeleteAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 59);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMResourceRequest.\n * Use `create(CreateAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const CreateAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 60);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMResourceResponse.\n * Use `create(CreateAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const CreateAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 61);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMResourceRequest.\n * Use `create(UpdateAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 62);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMResourceResponse.\n * Use `create(UpdateAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 63);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMResourceRequest.\n * Use `create(DeleteAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 64);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMResourceResponse.\n * Use `create(DeleteAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 65);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourceRequest.\n * Use `create(GetAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 66);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourceResponse.\n * Use `create(GetAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 67);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourcesRequest.\n * Use `create(GetAuthSCIMResourcesRequestSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourcesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 68);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourcesResponse.\n * Use `create(GetAuthSCIMResourcesResponseSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourcesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 69);\n\n/**\n * Describes the message tailor.v1.CreateAuthHookRequest.\n * Use `create(CreateAuthHookRequestSchema)` to create a new message.\n */\nexport const CreateAuthHookRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 70);\n\n/**\n * Describes the message tailor.v1.CreateAuthHookResponse.\n * Use `create(CreateAuthHookResponseSchema)` to create a new message.\n */\nexport const CreateAuthHookResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 71);\n\n/**\n * Describes the message tailor.v1.UpdateAuthHookRequest.\n * Use `create(UpdateAuthHookRequestSchema)` to create a new message.\n */\nexport const UpdateAuthHookRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 72);\n\n/**\n * Describes the message tailor.v1.UpdateAuthHookResponse.\n * Use `create(UpdateAuthHookResponseSchema)` to create a new message.\n */\nexport const UpdateAuthHookResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 73);\n\n/**\n * Describes the message tailor.v1.DeleteAuthHookRequest.\n * Use `create(DeleteAuthHookRequestSchema)` to create a new message.\n */\nexport const DeleteAuthHookRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 74);\n\n/**\n * Describes the message tailor.v1.DeleteAuthHookResponse.\n * Use `create(DeleteAuthHookResponseSchema)` to create a new message.\n */\nexport const DeleteAuthHookResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 75);\n\n/**\n * Describes the message tailor.v1.GetAuthHookRequest.\n * Use `create(GetAuthHookRequestSchema)` to create a new message.\n */\nexport const GetAuthHookRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 76);\n\n/**\n * Describes the message tailor.v1.GetAuthHookResponse.\n * Use `create(GetAuthHookResponseSchema)` to create a new message.\n */\nexport const GetAuthHookResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 77);\n\n/**\n * Describes the message tailor.v1.CreateAuthConnectionRequest.\n * Use `create(CreateAuthConnectionRequestSchema)` to create a new message.\n */\nexport const CreateAuthConnectionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 78);\n\n/**\n * Describes the message tailor.v1.CreateAuthConnectionResponse.\n * Use `create(CreateAuthConnectionResponseSchema)` to create a new message.\n */\nexport const CreateAuthConnectionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 79);\n\n/**\n * Describes the message tailor.v1.ListAuthConnectionsRequest.\n * Use `create(ListAuthConnectionsRequestSchema)` to create a new message.\n */\nexport const ListAuthConnectionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 80);\n\n/**\n * Describes the message tailor.v1.ListAuthConnectionsResponse.\n * Use `create(ListAuthConnectionsResponseSchema)` to create a new message.\n */\nexport const ListAuthConnectionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 81);\n\n/**\n * Describes the message tailor.v1.RevokeAuthConnectionRequest.\n * Use `create(RevokeAuthConnectionRequestSchema)` to create a new message.\n */\nexport const RevokeAuthConnectionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 82);\n\n/**\n * Describes the message tailor.v1.RevokeAuthConnectionResponse.\n * Use `create(RevokeAuthConnectionResponseSchema)` to create a new message.\n */\nexport const RevokeAuthConnectionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 83);\n\n/**\n * Describes the message tailor.v1.RegisterAuthConnectionSessionRequest.\n * Use `create(RegisterAuthConnectionSessionRequestSchema)` to create a new message.\n */\nexport const RegisterAuthConnectionSessionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 84);\n\n/**\n * Describes the message tailor.v1.RegisterAuthConnectionSessionResponse.\n * Use `create(RegisterAuthConnectionSessionResponseSchema)` to create a new message.\n */\nexport const RegisterAuthConnectionSessionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 85);\n\n/**\n * Describes the message tailor.v1.ExchangeAuthConnectionAuthorizationCodeRequest.\n * Use `create(ExchangeAuthConnectionAuthorizationCodeRequestSchema)` to create a new message.\n */\nexport const ExchangeAuthConnectionAuthorizationCodeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 86);\n\n/**\n * Describes the message tailor.v1.ExchangeAuthConnectionAuthorizationCodeResponse.\n * Use `create(ExchangeAuthConnectionAuthorizationCodeResponseSchema)` to create a new message.\n */\nexport const ExchangeAuthConnectionAuthorizationCodeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 87);\n\n/**\n * Describes the message tailor.v1.CreateAuthOAuth2ClientRequest.\n * Use `create(CreateAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const CreateAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 88);\n\n/**\n * Describes the message tailor.v1.CreateAuthOAuth2ClientResponse.\n * Use `create(CreateAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const CreateAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 89);\n\n/**\n * Describes the message tailor.v1.UpdateAuthOAuth2ClientRequest.\n * Use `create(UpdateAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const UpdateAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 90);\n\n/**\n * Describes the message tailor.v1.UpdateAuthOAuth2ClientResponse.\n * Use `create(UpdateAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const UpdateAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 91);\n\n/**\n * Describes the message tailor.v1.DeleteAuthOAuth2ClientRequest.\n * Use `create(DeleteAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const DeleteAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 92);\n\n/**\n * Describes the message tailor.v1.DeleteAuthOAuth2ClientResponse.\n * Use `create(DeleteAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const DeleteAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 93);\n\n/**\n * Describes the message tailor.v1.GetAuthOAuth2ClientRequest.\n * Use `create(GetAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const GetAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 94);\n\n/**\n * Describes the message tailor.v1.GetAuthOAuth2ClientResponse.\n * Use `create(GetAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const GetAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 95);\n\n/**\n * Describes the message tailor.v1.ListAuthOAuth2ClientsRequest.\n * Use `create(ListAuthOAuth2ClientsRequestSchema)` to create a new message.\n */\nexport const ListAuthOAuth2ClientsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 96);\n\n/**\n * Describes the message tailor.v1.ListAuthOAuth2ClientsResponse.\n * Use `create(ListAuthOAuth2ClientsResponseSchema)` to create a new message.\n */\nexport const ListAuthOAuth2ClientsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 97);\n\n/**\n * Describes the message tailor.v1.CreateControlplaneMachineUserRequest.\n * Use `create(CreateControlplaneMachineUserRequestSchema)` to create a new message.\n */\nexport const CreateControlplaneMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 98);\n\n/**\n * Describes the message tailor.v1.CreateControlplaneMachineUserResponse.\n * Use `create(CreateControlplaneMachineUserResponseSchema)` to create a new message.\n */\nexport const CreateControlplaneMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 99);\n\n/**\n * Describes the message tailor.v1.UpdateControlplaneMachineUserRequest.\n * Use `create(UpdateControlplaneMachineUserRequestSchema)` to create a new message.\n */\nexport const UpdateControlplaneMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 100);\n\n/**\n * Describes the message tailor.v1.UpdateControlplaneMachineUserResponse.\n * Use `create(UpdateControlplaneMachineUserResponseSchema)` to create a new message.\n */\nexport const UpdateControlplaneMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 101);\n\n/**\n * Describes the message tailor.v1.GetControlplaneMachineUserRequest.\n * Use `create(GetControlplaneMachineUserRequestSchema)` to create a new message.\n */\nexport const GetControlplaneMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 102);\n\n/**\n * Describes the message tailor.v1.GetControlplaneMachineUserResponse.\n * Use `create(GetControlplaneMachineUserResponseSchema)` to create a new message.\n */\nexport const GetControlplaneMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 103);\n\n/**\n * Describes the message tailor.v1.GetControlplaneMachineUserByNameRequest.\n * Use `create(GetControlplaneMachineUserByNameRequestSchema)` to create a new message.\n */\nexport const GetControlplaneMachineUserByNameRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 104);\n\n/**\n * Describes the message tailor.v1.GetControlplaneMachineUserByNameResponse.\n * Use `create(GetControlplaneMachineUserByNameResponseSchema)` to create a new message.\n */\nexport const GetControlplaneMachineUserByNameResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 105);\n\n/**\n * Describes the message tailor.v1.ListControlplaneMachineUsersRequest.\n * Use `create(ListControlplaneMachineUsersRequestSchema)` to create a new message.\n */\nexport const ListControlplaneMachineUsersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 106);\n\n/**\n * Describes the message tailor.v1.ListControlplaneMachineUsersResponse.\n * Use `create(ListControlplaneMachineUsersResponseSchema)` to create a new message.\n */\nexport const ListControlplaneMachineUsersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 107);\n\n/**\n * Describes the message tailor.v1.DeleteControlplaneMachineUserRequest.\n * Use `create(DeleteControlplaneMachineUserRequestSchema)` to create a new message.\n */\nexport const DeleteControlplaneMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 108);\n\n/**\n * Describes the message tailor.v1.DeleteControlplaneMachineUserResponse.\n * Use `create(DeleteControlplaneMachineUserResponseSchema)` to create a new message.\n */\nexport const DeleteControlplaneMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 109);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/events_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/events_resource.proto.\n */\nexport const file_tailor_v1_events_resource = /*@__PURE__*/\n fileDesc(\"Ch90YWlsb3IvdjEvZXZlbnRzX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEitgEKDkRhdGFwbGFuZUV2ZW50EhcKD2lkZW1wb3RlbmN5X2tleRgBIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSEgoKZXZlbnRfdHlwZRgDIAEoCRIQCghhY3Rvcl9pZBgEIAEoCRIlCgRkYXRhGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIoCgR0aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLBAQoXQ29udHJvbHBsYW5lQWN0aXZpdHlMb2cSFwoPaWRlbXBvdGVuY3lfa2V5GAEgASgJEhQKDHdvcmtzcGFjZV9pZBgCIAEoCRIQCghhY3Rvcl9pZBgDIAEoCRIQCghyZXNvdXJjZRgEIAEoCRIOCgZhY3Rpb24YBSABKAkSEgoKaWRlbnRpZmllchgGIAEoCRIvCgtvcGVyYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBiBnByb3RvMw\", [file_google_protobuf_struct, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.DataplaneEvent.\n * Use `create(DataplaneEventSchema)` to create a new message.\n */\nexport const DataplaneEventSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events_resource, 0);\n\n/**\n * Describes the message tailor.v1.ControlplaneActivityLog.\n * Use `create(ControlplaneActivityLogSchema)` to create a new message.\n */\nexport const ControlplaneActivityLogSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events_resource, 1);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/events.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_events_resource } from \"./events_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/events.proto.\n */\nexport const file_tailor_v1_events = /*@__PURE__*/\n fileDesc(\"ChZ0YWlsb3IvdjEvZXZlbnRzLnByb3RvEgl0YWlsb3IudjEiuAEKGkxpc3REYXRhcGxhbmVFdmVudHNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEh4KDHdvcmtzcGFjZV9pZBgDIAEoCUIIukgFcgOwAQESMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYBSABKAsyES50YWlsb3IudjEuRmlsdGVyInYKG0xpc3REYXRhcGxhbmVFdmVudHNSZXNwb25zZRIXCg9uZXh0X3BhZ2VfdG9rZW4YASABKAkSKQoGZXZlbnRzGAIgAygLMhkudGFpbG9yLnYxLkRhdGFwbGFuZUV2ZW50EhMKC3RvdGFsX2NvdW50GAMgASgDIsEBCiNMaXN0Q29udHJvbHBsYW5lQWN0aXZpdHlMb2dzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIeCgx3b3Jrc3BhY2VfaWQYAyABKAlCCLpIBXIDsAEBEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoGZmlsdGVyGAUgASgLMhEudGFpbG9yLnYxLkZpbHRlciKGAQokTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9nc1Jlc3BvbnNlEhcKD25leHRfcGFnZV90b2tlbhgBIAEoCRIwCgRsb2dzGAIgAygLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZUFjdGl2aXR5TG9nEhMKC3RvdGFsX2NvdW50GAMgASgDYgZwcm90bzM\", [file_buf_validate_validate, file_tailor_v1_events_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.ListDataplaneEventsRequest.\n * Use `create(ListDataplaneEventsRequestSchema)` to create a new message.\n */\nexport const ListDataplaneEventsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 0);\n\n/**\n * Describes the message tailor.v1.ListDataplaneEventsResponse.\n * Use `create(ListDataplaneEventsResponseSchema)` to create a new message.\n */\nexport const ListDataplaneEventsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 1);\n\n/**\n * Describes the message tailor.v1.ListControlplaneActivityLogsRequest.\n * Use `create(ListControlplaneActivityLogsRequestSchema)` to create a new message.\n */\nexport const ListControlplaneActivityLogsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 2);\n\n/**\n * Describes the message tailor.v1.ListControlplaneActivityLogsResponse.\n * Use `create(ListControlplaneActivityLogsResponseSchema)` to create a new message.\n */\nexport const ListControlplaneActivityLogsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 3);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/executor_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/executor_resource.proto.\n */\nexport const file_tailor_v1_executor_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvZXhlY3V0b3JfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSL9AgoQRXhlY3V0b3JFeGVjdXRvchI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhMKC2Rlc2NyaXB0aW9uGAIgASgJEkIKDHRyaWdnZXJfdHlwZRgDIAEoDjIeLnRhaWxvci52MS5FeGVjdXRvclRyaWdnZXJUeXBlQgy6SAmCAQYYARgCGAMSQAoOdHJpZ2dlcl9jb25maWcYBCABKAsyIC50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyQ29uZmlnQga6SAPIAQESRAoLdGFyZ2V0X3R5cGUYBSABKA4yHS50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRUeXBlQhC6SA2CAQoYARgCGAMYBBgFEj4KDXRhcmdldF9jb25maWcYBiABKAsyHy50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRDb25maWdCBrpIA8gBARIQCghkaXNhYmxlZBgHIAEoCCLrAQoVRXhlY3V0b3JUcmlnZ2VyQ29uZmlnEjwKCHNjaGVkdWxlGAEgASgLMigudGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlclNjaGVkdWxlQ29uZmlnSAASNgoFZXZlbnQYAiABKAsyJS50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyRXZlbnRDb25maWdIABJLChBpbmNvbWluZ193ZWJob29rGAMgASgLMi8udGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlckluY29taW5nV2ViaG9va0NvbmZpZ0gAQg8KBmNvbmZpZxIFukgCCAEiVgodRXhlY3V0b3JUcmlnZ2VyU2NoZWR1bGVDb25maWcSGQoIdGltZXpvbmUYASABKAlCB7pIBHICEAESGgoJZnJlcXVlbmN5GAIgASgJQge6SARyAhABIswCChpFeGVjdXRvclRyaWdnZXJFdmVudENvbmZpZxIWCgpldmVudF90eXBlGAEgASgJQgIYARIoCgljb25kaXRpb24YAiABKAsyES50YWlsb3IudjEuU2NyaXB0QgIYARI6Cgh0YWlsb3JkYhgDIAEoCzImLnRhaWxvci52MS5FeGVjdXRvclRhaWxvckRCRXZlbnRDb25maWdIABIwCgNpZHAYBCABKAsyIS50YWlsb3IudjEuRXhlY3V0b3JJZFBFdmVudENvbmZpZ0gAEjIKBGF1dGgYBSABKAsyIi50YWlsb3IudjEuRXhlY3V0b3JBdXRoRXZlbnRDb25maWdIABI6CghwaXBlbGluZRgGIAEoCzImLnRhaWxvci52MS5FeGVjdXRvclBpcGVsaW5lRXZlbnRDb25maWdIAEIOCgx0eXBlZF9jb25maWci6QEKG0V4ZWN1dG9yVGFpbG9yREJFdmVudENvbmZpZxIuCgtldmVudF90eXBlcxgBIAMoCUIZukgWkgETCAEiD3INMgtedGFpbG9yZGJcLhJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIyCgl0eXBlX25hbWUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQSJAoJY29uZGl0aW9uGAQgASgLMhEudGFpbG9yLnYxLlNjcmlwdCKrAQoWRXhlY3V0b3JJZFBFdmVudENvbmZpZxIpCgtldmVudF90eXBlcxgBIAMoCUIUukgRkgEOCAEiCnIIMgZeaWRwXC4SQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJAoJY29uZGl0aW9uGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdCKtAQoXRXhlY3V0b3JBdXRoRXZlbnRDb25maWcSKgoLZXZlbnRfdHlwZXMYASADKAlCFbpIEpIBDwgBIgtyCTIHXmF1dGhcLhJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIkCgljb25kaXRpb24YAyABKAsyES50YWlsb3IudjEuU2NyaXB0ItUBChtFeGVjdXRvclBpcGVsaW5lRXZlbnRDb25maWcSLgoLZXZlbnRfdHlwZXMYASADKAlCGbpIFpIBEwgBIg9yDTILXnBpcGVsaW5lXC4SQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSHgoNcmVzb2x2ZXJfbmFtZRgDIAEoCUIHukgEcgIQARIkCgljb25kaXRpb24YBCABKAsyES50YWlsb3IudjEuU2NyaXB0IjsKJEV4ZWN1dG9yVHJpZ2dlckluY29taW5nV2ViaG9va0NvbmZpZxITCgZzZWNyZXQYASABKAlCA+BBAyKeAgoURXhlY3V0b3JUYXJnZXRDb25maWcSMwoHd2ViaG9vaxgBIAEoCzIgLnRhaWxvci52MS5FeGVjdXRvcldlYmhvb2tDb25maWdIABJGCg50YWlsb3JfZ3JhcGhxbBgCIAEoCzIsLnRhaWxvci52MS5FeGVjdXRvclRhcmdldFRhaWxvckdyYXBocWxDb25maWdIABI7CghmdW5jdGlvbhgDIAEoCzInLnRhaWxvci52MS5FeGVjdXRvclRhcmdldEZ1bmN0aW9uQ29uZmlnSAASOwoId29ya2Zsb3cYBSABKAsyJy50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRXb3JrZmxvd0NvbmZpZ0gAQg8KBmNvbmZpZxIFukgCCAEiuQEKFUV4ZWN1dG9yV2ViaG9va0NvbmZpZxIeCgN1cmwYASABKAsyES50YWlsb3IudjEuU2NyaXB0EiYKBnNlY3JldBgCIAEoCzIWLnRhaWxvci52MS5TZWNyZXRWYWx1ZRI3CgdoZWFkZXJzGAMgAygLMiYudGFpbG9yLnYxLkV4ZWN1dG9yVGFyZ2V0V2ViaG9va0hlYWRlchIfCgRib2R5GAQgASgLMhEudGFpbG9yLnYxLlNjcmlwdCKRAQobRXhlY3V0b3JUYXJnZXRXZWJob29rSGVhZGVyEhQKA2tleRgBIAEoCUIHukgEcgIQARIcCglyYXdfdmFsdWUYAiABKAlCB7pIBHICEAFIABIuCgxzZWNyZXRfdmFsdWUYAyABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWVIAEIOCgV2YWx1ZRIFukgCCAEipQEKIUV4ZWN1dG9yVGFyZ2V0VGFpbG9yR3JhcGhxbENvbmZpZxIZCghhcHBfbmFtZRgBIAEoCUIHukgEcgIQARIWCgVxdWVyeRgCIAEoCUIHukgEcgIQARIkCgl2YXJpYWJsZXMYAyABKAsyES50YWlsb3IudjEuU2NyaXB0EicKB2ludm9rZXIYBCABKAsyFi50YWlsb3IudjEuQXV0aEludm9rZXIixQEKHEV4ZWN1dG9yVGFyZ2V0RnVuY3Rpb25Db25maWcSFQoEbmFtZRgBIAEoCUIHukgEcgIQARIOCgZzY3JpcHQYAiABKAkSJAoJdmFyaWFibGVzGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdBInCgdpbnZva2VyGAQgASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VyEiAKCnNjcmlwdF9yZWYYBSABKAlCB7pIBHICEAFIAIgBAUINCgtfc2NyaXB0X3JlZiKNAQocRXhlY3V0b3JUYXJnZXRXb3JrZmxvd0NvbmZpZxIeCg13b3JrZmxvd19uYW1lGAEgASgJQge6SARyAhABEiQKCXZhcmlhYmxlcxgCIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSJwoHaW52b2tlchgDIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlciLeAgoLRXhlY3V0b3JKb2ISCgoCaWQYASABKAkSFQoNZXhlY3V0b3JfbmFtZRgCIAEoCRIsCgZzdGF0dXMYAyABKA4yHC50YWlsb3IudjEuRXhlY3V0b3JKb2JTdGF0dXMSJgoFYWN0b3IYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EiUKBGRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eh0KFWV2ZW50X2lkZW1wb3RlbmN5X2tleRgGIAEoCRIwCgxzY2hlZHVsZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIssCChJFeGVjdXRvckpvYkF0dGVtcHQSCgoCaWQYASABKAkSDgoGam9iX2lkGAIgASgJEiwKBnN0YXR1cxgDIAEoDjIcLnRhaWxvci52MS5FeGVjdXRvckpvYlN0YXR1cxINCgVlcnJvchgEIAEoCRIuCgpzdGFydGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTb3BlcmF0aW9uX3JlZmVyZW5jZRgJIAEoCSJPChdFeGVjdXRvckluY29taW5nV2ViaG9vaxIVCg1leGVjdXRvcl9uYW1lGAEgASgJEgsKA3VybBgCIAEoCRIQCghkaXNhYmxlZBgDIAEoCCqtAQoTRXhlY3V0b3JUcmlnZ2VyVHlwZRIlCiFFWEVDVVRPUl9UUklHR0VSX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5FWEVDVVRPUl9UUklHR0VSX1RZUEVfU0NIRURVTEUQARIfChtFWEVDVVRPUl9UUklHR0VSX1RZUEVfRVZFTlQQAhIqCiZFWEVDVVRPUl9UUklHR0VSX1RZUEVfSU5DT01JTkdfV0VCSE9PSxADKvIBChJFeGVjdXRvclRhcmdldFR5cGUSJAogRVhFQ1VUT1JfVEFSR0VUX1RZUEVfVU5TUEVDSUZJRUQQABIgChxFWEVDVVRPUl9UQVJHRVRfVFlQRV9XRUJIT09LEAESJwojRVhFQ1VUT1JfVEFSR0VUX1RZUEVfVEFJTE9SX0dSQVBIUUwQAhIhCh1FWEVDVVRPUl9UQVJHRVRfVFlQRV9GVU5DVElPThADEiUKIUVYRUNVVE9SX1RBUkdFVF9UWVBFX0pPQl9GVU5DVElPThAEEiEKHUVYRUNVVE9SX1RBUkdFVF9UWVBFX1dPUktGTE9XEAUq3QEKEUV4ZWN1dG9ySm9iU3RhdHVzEiMKH0VYRUNVVE9SX0pPQl9TVEFUVVNfVU5TUEVDSUZJRUQQABIfChtFWEVDVVRPUl9KT0JfU1RBVFVTX1BFTkRJTkcQARIfChtFWEVDVVRPUl9KT0JfU1RBVFVTX1JVTk5JTkcQAhIfChtFWEVDVVRPUl9KT0JfU1RBVFVTX1NVQ0NFU1MQAxIeChpFWEVDVVRPUl9KT0JfU1RBVFVTX0ZBSUxFRBAEEiAKHEVYRUNVVE9SX0pPQl9TVEFUVVNfQ0FOQ0VMRUQQBWIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_auth_resource, file_tailor_v1_resource, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.ExecutorExecutor.\n * Use `create(ExecutorExecutorSchema)` to create a new message.\n */\nexport const ExecutorExecutorSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 0);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerConfig.\n * Use `create(ExecutorTriggerConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 1);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerScheduleConfig.\n * Use `create(ExecutorTriggerScheduleConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerScheduleConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 2);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerEventConfig.\n * Use `create(ExecutorTriggerEventConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerEventConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 3);\n\n/**\n * Describes the message tailor.v1.ExecutorTailorDBEventConfig.\n * Use `create(ExecutorTailorDBEventConfigSchema)` to create a new message.\n */\nexport const ExecutorTailorDBEventConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 4);\n\n/**\n * Describes the message tailor.v1.ExecutorIdPEventConfig.\n * Use `create(ExecutorIdPEventConfigSchema)` to create a new message.\n */\nexport const ExecutorIdPEventConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 5);\n\n/**\n * Describes the message tailor.v1.ExecutorAuthEventConfig.\n * Use `create(ExecutorAuthEventConfigSchema)` to create a new message.\n */\nexport const ExecutorAuthEventConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 6);\n\n/**\n * Describes the message tailor.v1.ExecutorPipelineEventConfig.\n * Use `create(ExecutorPipelineEventConfigSchema)` to create a new message.\n */\nexport const ExecutorPipelineEventConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 7);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerIncomingWebhookConfig.\n * Use `create(ExecutorTriggerIncomingWebhookConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerIncomingWebhookConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 8);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetConfig.\n * Use `create(ExecutorTargetConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 9);\n\n/**\n * Describes the message tailor.v1.ExecutorWebhookConfig.\n * Use `create(ExecutorWebhookConfigSchema)` to create a new message.\n */\nexport const ExecutorWebhookConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 10);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetWebhookHeader.\n * Use `create(ExecutorTargetWebhookHeaderSchema)` to create a new message.\n */\nexport const ExecutorTargetWebhookHeaderSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 11);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetTailorGraphqlConfig.\n * Use `create(ExecutorTargetTailorGraphqlConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetTailorGraphqlConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 12);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetFunctionConfig.\n * Use `create(ExecutorTargetFunctionConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetFunctionConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 13);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetWorkflowConfig.\n * Use `create(ExecutorTargetWorkflowConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetWorkflowConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 14);\n\n/**\n * Describes the message tailor.v1.ExecutorJob.\n * Use `create(ExecutorJobSchema)` to create a new message.\n */\nexport const ExecutorJobSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 15);\n\n/**\n * Describes the message tailor.v1.ExecutorJobAttempt.\n * Use `create(ExecutorJobAttemptSchema)` to create a new message.\n */\nexport const ExecutorJobAttemptSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 16);\n\n/**\n * Describes the message tailor.v1.ExecutorIncomingWebhook.\n * Use `create(ExecutorIncomingWebhookSchema)` to create a new message.\n */\nexport const ExecutorIncomingWebhookSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 17);\n\n/**\n * Describes the enum tailor.v1.ExecutorTriggerType.\n */\nexport const ExecutorTriggerTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_executor_resource, 0);\n\n/**\n * @generated from enum tailor.v1.ExecutorTriggerType\n */\nexport const ExecutorTriggerType = /*@__PURE__*/\n tsEnum(ExecutorTriggerTypeSchema);\n\n/**\n * Describes the enum tailor.v1.ExecutorTargetType.\n */\nexport const ExecutorTargetTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_executor_resource, 1);\n\n/**\n * @generated from enum tailor.v1.ExecutorTargetType\n */\nexport const ExecutorTargetType = /*@__PURE__*/\n tsEnum(ExecutorTargetTypeSchema);\n\n/**\n * Describes the enum tailor.v1.ExecutorJobStatus.\n */\nexport const ExecutorJobStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_executor_resource, 2);\n\n/**\n * @generated from enum tailor.v1.ExecutorJobStatus\n */\nexport const ExecutorJobStatus = /*@__PURE__*/\n tsEnum(ExecutorJobStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/executor.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_executor_resource } from \"./executor_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/executor.proto.\n */\nexport const file_tailor_v1_executor = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvZXhlY3V0b3IucHJvdG8SCXRhaWxvci52MSJ2Ch1DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjUKCGV4ZWN1dG9yGAIgASgLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3JCBrpIA8gBASJPCh5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2USLQoIZXhlY3V0b3IYASABKAsyGy50YWlsb3IudjEuRXhlY3V0b3JFeGVjdXRvciJ2Ch1VcGRhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjUKCGV4ZWN1dG9yGAIgASgLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3JCBrpIA8gBASJPCh5VcGRhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2USLQoIZXhlY3V0b3IYASABKAsyGy50YWlsb3IudjEuRXhlY3V0b3JFeGVjdXRvciJ0ChpHZXRFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKBG5hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiTAobR2V0RXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlEi0KCGV4ZWN1dG9yGAEgASgLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3IidwodRGVsZXRlRXhlY3V0b3JFeGVjdXRvclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiAKHkRlbGV0ZUV4ZWN1dG9yRXhlY3V0b3JSZXNwb25zZSKXAQocTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ifQodTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVzcG9uc2USLgoJZXhlY3V0b3JzGAEgAygLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3ISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIpIBChVHZXRFeGVjdXRvckpvYlJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg1leGVjdXRvcl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhgKBmpvYl9pZBgDIAEoCUIIukgFcgOwAQEiPQoWR2V0RXhlY3V0b3JKb2JSZXNwb25zZRIjCgNqb2IYASABKAsyFi50YWlsb3IudjEuRXhlY3V0b3JKb2Ii9gEKF0xpc3RFeGVjdXRvckpvYnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNZXhlY3V0b3JfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKBmZpbHRlchgGIAEoCzIRLnRhaWxvci52MS5GaWx0ZXIibgoYTGlzdEV4ZWN1dG9ySm9ic1Jlc3BvbnNlEiQKBGpvYnMYASADKAsyFi50YWlsb3IudjEuRXhlY3V0b3JKb2ISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIrMBCh5MaXN0RXhlY3V0b3JKb2JBdHRlbXB0c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIYCgZqb2JfaWQYAiABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24igAEKH0xpc3RFeGVjdXRvckpvYkF0dGVtcHRzUmVzcG9uc2USLwoIYXR0ZW1wdHMYASADKAsyHS50YWlsb3IudjEuRXhlY3V0b3JKb2JBdHRlbXB0EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKeAQojTGlzdEV4ZWN1dG9ySW5jb21pbmdXZWJob29rc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIooBCiRMaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzUmVzcG9uc2USNAoId2ViaG9va3MYASADKAsyIi50YWlsb3IudjEuRXhlY3V0b3JJbmNvbWluZ1dlYmhvb2sSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDInsKIUdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKBG5hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiWQoiR2V0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tSZXNwb25zZRIzCgd3ZWJob29rGAEgASgLMiIudGFpbG9yLnYxLkV4ZWN1dG9ySW5jb21pbmdXZWJob29rIqMBChZUcmlnZ2VyRXhlY3V0b3JSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNZXhlY3V0b3JfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIoCgdwYXlsb2FkGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdCIzChdUcmlnZ2VyRXhlY3V0b3JSZXNwb25zZRIYCgZqb2JfaWQYASABKAlCCLpIBXIDsAEBYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_struct, file_tailor_v1_executor_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreateExecutorExecutorRequest.\n * Use `create(CreateExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const CreateExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 0);\n\n/**\n * Describes the message tailor.v1.CreateExecutorExecutorResponse.\n * Use `create(CreateExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const CreateExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 1);\n\n/**\n * Describes the message tailor.v1.UpdateExecutorExecutorRequest.\n * Use `create(UpdateExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const UpdateExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 2);\n\n/**\n * Describes the message tailor.v1.UpdateExecutorExecutorResponse.\n * Use `create(UpdateExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const UpdateExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 3);\n\n/**\n * Describes the message tailor.v1.GetExecutorExecutorRequest.\n * Use `create(GetExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const GetExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 4);\n\n/**\n * Describes the message tailor.v1.GetExecutorExecutorResponse.\n * Use `create(GetExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const GetExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 5);\n\n/**\n * Describes the message tailor.v1.DeleteExecutorExecutorRequest.\n * Use `create(DeleteExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const DeleteExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 6);\n\n/**\n * Describes the message tailor.v1.DeleteExecutorExecutorResponse.\n * Use `create(DeleteExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const DeleteExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 7);\n\n/**\n * Describes the message tailor.v1.ListExecutorExecutorsRequest.\n * Use `create(ListExecutorExecutorsRequestSchema)` to create a new message.\n */\nexport const ListExecutorExecutorsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 8);\n\n/**\n * Describes the message tailor.v1.ListExecutorExecutorsResponse.\n * Use `create(ListExecutorExecutorsResponseSchema)` to create a new message.\n */\nexport const ListExecutorExecutorsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 9);\n\n/**\n * Describes the message tailor.v1.GetExecutorJobRequest.\n * Use `create(GetExecutorJobRequestSchema)` to create a new message.\n */\nexport const GetExecutorJobRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 10);\n\n/**\n * Describes the message tailor.v1.GetExecutorJobResponse.\n * Use `create(GetExecutorJobResponseSchema)` to create a new message.\n */\nexport const GetExecutorJobResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 11);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobsRequest.\n * Use `create(ListExecutorJobsRequestSchema)` to create a new message.\n */\nexport const ListExecutorJobsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 12);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobsResponse.\n * Use `create(ListExecutorJobsResponseSchema)` to create a new message.\n */\nexport const ListExecutorJobsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 13);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobAttemptsRequest.\n * Use `create(ListExecutorJobAttemptsRequestSchema)` to create a new message.\n */\nexport const ListExecutorJobAttemptsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 14);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobAttemptsResponse.\n * Use `create(ListExecutorJobAttemptsResponseSchema)` to create a new message.\n */\nexport const ListExecutorJobAttemptsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 15);\n\n/**\n * Describes the message tailor.v1.ListExecutorIncomingWebhooksRequest.\n * Use `create(ListExecutorIncomingWebhooksRequestSchema)` to create a new message.\n */\nexport const ListExecutorIncomingWebhooksRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 16);\n\n/**\n * Describes the message tailor.v1.ListExecutorIncomingWebhooksResponse.\n * Use `create(ListExecutorIncomingWebhooksResponseSchema)` to create a new message.\n */\nexport const ListExecutorIncomingWebhooksResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 17);\n\n/**\n * Describes the message tailor.v1.GetExecutorIncomingWebhookRequest.\n * Use `create(GetExecutorIncomingWebhookRequestSchema)` to create a new message.\n */\nexport const GetExecutorIncomingWebhookRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 18);\n\n/**\n * Describes the message tailor.v1.GetExecutorIncomingWebhookResponse.\n * Use `create(GetExecutorIncomingWebhookResponseSchema)` to create a new message.\n */\nexport const GetExecutorIncomingWebhookResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 19);\n\n/**\n * Describes the message tailor.v1.TriggerExecutorRequest.\n * Use `create(TriggerExecutorRequestSchema)` to create a new message.\n */\nexport const TriggerExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 20);\n\n/**\n * Describes the message tailor.v1.TriggerExecutorResponse.\n * Use `create(TriggerExecutorResponseSchema)` to create a new message.\n */\nexport const TriggerExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 21);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/function_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/function_resource.proto.\n */\nexport const file_tailor_v1_function_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvZnVuY3Rpb25fcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJGChFGdW5jdGlvbkVycm9ySW5mbxIWCgRuYW1lGAEgASgJQgi6SAVyAxiAARIZCgdtZXNzYWdlGAIgASgJQgi6SAVyAxiAAiKYBAoRRnVuY3Rpb25FeGVjdXRpb24SFAoCaWQYASABKAlCCLpIBXIDsAEBEh4KDHdvcmtzcGFjZV9pZBgCIAEoCUIIukgFcgOwAQESEwoLc2NyaXB0X25hbWUYAyABKAkSMwoGc3RhdHVzGAQgASgOMiMudGFpbG9yLnYxLkZ1bmN0aW9uRXhlY3V0aW9uLlN0YXR1cxIMCgRsb2dzGAUgASgJEi4KCnN0YXJ0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2ZpbmlzaGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI7CgR0eXBlGAggASgOMiEudGFpbG9yLnYxLkZ1bmN0aW9uRXhlY3V0aW9uLlR5cGVCCrpIB4IBBBgBGAISDgoGcmVzdWx0GAkgASgJEisKBWVycm9yGAogASgLMhwudGFpbG9yLnYxLkZ1bmN0aW9uRXJyb3JJbmZvIlsKBlN0YXR1cxIWChJTVEFUVVNfVU5TUEVDSUZJRUQQABISCg5TVEFUVVNfU1VDQ0VTUxABEhEKDVNUQVRVU19GQUlMRUQQAhISCg5TVEFUVVNfUlVOTklORxADIj0KBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfU1RBTkRBUkQQARIMCghUWVBFX0pPQhACYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.FunctionErrorInfo.\n * Use `create(FunctionErrorInfoSchema)` to create a new message.\n */\nexport const FunctionErrorInfoSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_resource, 0);\n\n/**\n * Describes the message tailor.v1.FunctionExecution.\n * Use `create(FunctionExecutionSchema)` to create a new message.\n */\nexport const FunctionExecutionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_resource, 1);\n\n/**\n * Describes the enum tailor.v1.FunctionExecution.Status.\n */\nexport const FunctionExecution_StatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_function_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.FunctionExecution.Status\n */\nexport const FunctionExecution_Status = /*@__PURE__*/\n tsEnum(FunctionExecution_StatusSchema);\n\n/**\n * Describes the enum tailor.v1.FunctionExecution.Type.\n */\nexport const FunctionExecution_TypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_function_resource, 1, 1);\n\n/**\n * @generated from enum tailor.v1.FunctionExecution.Type\n */\nexport const FunctionExecution_Type = /*@__PURE__*/\n tsEnum(FunctionExecution_TypeSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/function.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_function_resource } from \"./function_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/function.proto.\n */\nexport const file_tailor_v1_function = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvZnVuY3Rpb24ucHJvdG8SCXRhaWxvci52MSKcAQoVVGVzdEV4ZWNTY3JpcHRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESDAoEbmFtZRgCIAEoCRIMCgRjb2RlGAMgASgJEhAKA2FyZxgEIAEoCUgAiAEBEicKB2ludm9rZXIYBSABKAsyFi50YWlsb3IudjEuQXV0aEludm9rZXJCBgoEX2FyZ0oECAYQByJOChZUZXN0RXhlY1NjcmlwdFJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCRIeCgxleGVjdXRpb25faWQYAyABKAlCCLpIBXIDsAEBSgQIAhADIl0KG0dldEZ1bmN0aW9uRXhlY3V0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh4KDGV4ZWN1dGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiTwocR2V0RnVuY3Rpb25FeGVjdXRpb25SZXNwb25zZRIvCglleGVjdXRpb24YASABKAsyHC50YWlsb3IudjEuRnVuY3Rpb25FeGVjdXRpb24izAEKHUxpc3RGdW5jdGlvbkV4ZWN1dGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYBSABKAsyES50YWlsb3IudjEuRmlsdGVyEg8KB3NvcnRfYnkYBiABKAkigAEKHkxpc3RGdW5jdGlvbkV4ZWN1dGlvbnNSZXNwb25zZRIwCgpleGVjdXRpb25zGAEgAygLMhwudGFpbG9yLnYxLkZ1bmN0aW9uRXhlY3V0aW9uEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoA2IGcHJvdG8z\", [file_buf_validate_validate, file_tailor_v1_auth_resource, file_tailor_v1_function_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.TestExecScriptRequest.\n * Use `create(TestExecScriptRequestSchema)` to create a new message.\n */\nexport const TestExecScriptRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 0);\n\n/**\n * Describes the message tailor.v1.TestExecScriptResponse.\n * Use `create(TestExecScriptResponseSchema)` to create a new message.\n */\nexport const TestExecScriptResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 1);\n\n/**\n * Describes the message tailor.v1.GetFunctionExecutionRequest.\n * Use `create(GetFunctionExecutionRequestSchema)` to create a new message.\n */\nexport const GetFunctionExecutionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 2);\n\n/**\n * Describes the message tailor.v1.GetFunctionExecutionResponse.\n * Use `create(GetFunctionExecutionResponseSchema)` to create a new message.\n */\nexport const GetFunctionExecutionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 3);\n\n/**\n * Describes the message tailor.v1.ListFunctionExecutionsRequest.\n * Use `create(ListFunctionExecutionsRequestSchema)` to create a new message.\n */\nexport const ListFunctionExecutionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 4);\n\n/**\n * Describes the message tailor.v1.ListFunctionExecutionsResponse.\n * Use `create(ListFunctionExecutionsResponseSchema)` to create a new message.\n */\nexport const ListFunctionExecutionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 5);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/function_registry.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/function_registry.proto.\n */\nexport const file_tailor_v1_function_registry = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvZnVuY3Rpb25fcmVnaXN0cnkucHJvdG8SCXRhaWxvci52MSLhAQoQRnVuY3Rpb25SZWdpc3RyeRIKCgJpZBgBIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSDAoEbmFtZRgDIAEoCRISCgpzaXplX2J5dGVzGAQgASgDEhQKDGNvbnRlbnRfaGFzaBgFIAEoCRITCgtkZXNjcmlwdGlvbhgGIAEoCRIuCgpjcmVhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJyCh1DcmVhdGVGdW5jdGlvblJlZ2lzdHJ5UmVxdWVzdBI1CgRpbmZvGAEgASgLMiUudGFpbG9yLnYxLkNyZWF0ZUZ1bmN0aW9uUmVnaXN0cnlJbmZvSAASDwoFY2h1bmsYAiABKAxIAEIJCgdwYXlsb2FkItoBChpDcmVhdGVGdW5jdGlvblJlZ2lzdHJ5SW5mbxIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjIKBG5hbWUYAiABKAlCJLpIIXIfEAEY/wEyGF5bYS16QS1aXVthLXpBLVowLTlfLV0qJBITCgtkZXNjcmlwdGlvbhgDIAEoCRIgCgpzaXplX2J5dGVzGAQgASgDQgy6SAkiBxiAgIAKIAASMQoMY29udGVudF9oYXNoGAUgASgJQhu6SBhyFjIRXlthLWZBLUYwLTldezY0fSSYAUAiTwoeQ3JlYXRlRnVuY3Rpb25SZWdpc3RyeVJlc3BvbnNlEi0KCGZ1bmN0aW9uGAEgASgLMhsudGFpbG9yLnYxLkZ1bmN0aW9uUmVnaXN0cnkicgodVXBkYXRlRnVuY3Rpb25SZWdpc3RyeVJlcXVlc3QSNQoEaW5mbxgBIAEoCzIlLnRhaWxvci52MS5VcGRhdGVGdW5jdGlvblJlZ2lzdHJ5SW5mb0gAEg8KBWNodW5rGAIgASgMSABCCQoHcGF5bG9hZCLaAQoaVXBkYXRlRnVuY3Rpb25SZWdpc3RyeUluZm8SHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIyCgRuYW1lGAIgASgJQiS6SCFyHxABGP8BMhheW2EtekEtWl1bYS16QS1aMC05Xy1dKiQSEwoLZGVzY3JpcHRpb24YAyABKAkSIAoKc2l6ZV9ieXRlcxgEIAEoA0IMukgJIgcYgICACiAAEjEKDGNvbnRlbnRfaGFzaBgFIAEoCUIbukgYchYyEV5bYS1mQS1GMC05XXs2NH0kmAFAIk8KHlVwZGF0ZUZ1bmN0aW9uUmVnaXN0cnlSZXNwb25zZRItCghmdW5jdGlvbhgBIAEoCzIbLnRhaWxvci52MS5GdW5jdGlvblJlZ2lzdHJ5IlMKGkdldEZ1bmN0aW9uUmVnaXN0cnlSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESFQoEbmFtZRgCIAEoCUIHukgEcgIQASJMChtHZXRGdW5jdGlvblJlZ2lzdHJ5UmVzcG9uc2USLQoIZnVuY3Rpb24YASABKAsyGy50YWlsb3IudjEuRnVuY3Rpb25SZWdpc3RyeSLMAQodTGlzdEZ1bmN0aW9uUmVnaXN0cmllc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKBmZpbHRlchgFIAEoCzIRLnRhaWxvci52MS5GaWx0ZXISDwoHc29ydF9ieRgGIAEoCSJ+Ch5MaXN0RnVuY3Rpb25SZWdpc3RyaWVzUmVzcG9uc2USLgoJZnVuY3Rpb25zGAEgAygLMhsudGFpbG9yLnYxLkZ1bmN0aW9uUmVnaXN0cnkSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIlYKHURlbGV0ZUZ1bmN0aW9uUmVnaXN0cnlSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESFQoEbmFtZRgCIAEoCUIHukgEcgIQASIgCh5EZWxldGVGdW5jdGlvblJlZ2lzdHJ5UmVzcG9uc2UipwEKJURvd25sb2FkRnVuY3Rpb25SZWdpc3RyeVNjcmlwdFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIVCgRuYW1lGAIgASgJQge6SARyAhABEjYKDGNvbnRlbnRfaGFzaBgDIAEoCUIbukgYchYyEV5bYS1mQS1GMC05XXs2NH0kmAFASACIAQFCDwoNX2NvbnRlbnRfaGFzaCKDAQomRG93bmxvYWRGdW5jdGlvblJlZ2lzdHJ5U2NyaXB0UmVzcG9uc2USPQoIbWV0YWRhdGEYASABKAsyKS50YWlsb3IudjEuRnVuY3Rpb25SZWdpc3RyeVNjcmlwdE1ldGFkYXRhSAASDwoFY2h1bmsYAiABKAxIAEIJCgdwYXlsb2FkIk8KHkZ1bmN0aW9uUmVnaXN0cnlTY3JpcHRNZXRhZGF0YRItCghmdW5jdGlvbhgBIAEoCzIbLnRhaWxvci52MS5GdW5jdGlvblJlZ2lzdHJ5YgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_timestamp, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.FunctionRegistry.\n * Use `create(FunctionRegistrySchema)` to create a new message.\n */\nexport const FunctionRegistrySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 0);\n\n/**\n * Describes the message tailor.v1.CreateFunctionRegistryRequest.\n * Use `create(CreateFunctionRegistryRequestSchema)` to create a new message.\n */\nexport const CreateFunctionRegistryRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 1);\n\n/**\n * Describes the message tailor.v1.CreateFunctionRegistryInfo.\n * Use `create(CreateFunctionRegistryInfoSchema)` to create a new message.\n */\nexport const CreateFunctionRegistryInfoSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 2);\n\n/**\n * Describes the message tailor.v1.CreateFunctionRegistryResponse.\n * Use `create(CreateFunctionRegistryResponseSchema)` to create a new message.\n */\nexport const CreateFunctionRegistryResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 3);\n\n/**\n * Describes the message tailor.v1.UpdateFunctionRegistryRequest.\n * Use `create(UpdateFunctionRegistryRequestSchema)` to create a new message.\n */\nexport const UpdateFunctionRegistryRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 4);\n\n/**\n * Describes the message tailor.v1.UpdateFunctionRegistryInfo.\n * Use `create(UpdateFunctionRegistryInfoSchema)` to create a new message.\n */\nexport const UpdateFunctionRegistryInfoSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 5);\n\n/**\n * Describes the message tailor.v1.UpdateFunctionRegistryResponse.\n * Use `create(UpdateFunctionRegistryResponseSchema)` to create a new message.\n */\nexport const UpdateFunctionRegistryResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 6);\n\n/**\n * Describes the message tailor.v1.GetFunctionRegistryRequest.\n * Use `create(GetFunctionRegistryRequestSchema)` to create a new message.\n */\nexport const GetFunctionRegistryRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 7);\n\n/**\n * Describes the message tailor.v1.GetFunctionRegistryResponse.\n * Use `create(GetFunctionRegistryResponseSchema)` to create a new message.\n */\nexport const GetFunctionRegistryResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 8);\n\n/**\n * Describes the message tailor.v1.ListFunctionRegistriesRequest.\n * Use `create(ListFunctionRegistriesRequestSchema)` to create a new message.\n */\nexport const ListFunctionRegistriesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 9);\n\n/**\n * Describes the message tailor.v1.ListFunctionRegistriesResponse.\n * Use `create(ListFunctionRegistriesResponseSchema)` to create a new message.\n */\nexport const ListFunctionRegistriesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 10);\n\n/**\n * Describes the message tailor.v1.DeleteFunctionRegistryRequest.\n * Use `create(DeleteFunctionRegistryRequestSchema)` to create a new message.\n */\nexport const DeleteFunctionRegistryRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 11);\n\n/**\n * Describes the message tailor.v1.DeleteFunctionRegistryResponse.\n * Use `create(DeleteFunctionRegistryResponseSchema)` to create a new message.\n */\nexport const DeleteFunctionRegistryResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 12);\n\n/**\n * Describes the message tailor.v1.DownloadFunctionRegistryScriptRequest.\n * Use `create(DownloadFunctionRegistryScriptRequestSchema)` to create a new message.\n */\nexport const DownloadFunctionRegistryScriptRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 13);\n\n/**\n * Describes the message tailor.v1.DownloadFunctionRegistryScriptResponse.\n * Use `create(DownloadFunctionRegistryScriptResponseSchema)` to create a new message.\n */\nexport const DownloadFunctionRegistryScriptResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 14);\n\n/**\n * Describes the message tailor.v1.FunctionRegistryScriptMetadata.\n * Use `create(FunctionRegistryScriptMetadataSchema)` to create a new message.\n */\nexport const FunctionRegistryScriptMetadataSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_registry, 15);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/idp_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/idp_resource.proto.\n */\nexport const file_tailor_v1_idp_resource = /*@__PURE__*/\n fileDesc(\"Chx0YWlsb3IvdjEvaWRwX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEiogIKCklkUFNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRIVCg1hdXRob3JpemF0aW9uGAIgASgJEhkKDHByb3ZpZGVyX3VybBgDIAEoCUID4EEDEjYKEHVzZXJfYXV0aF9wb2xpY3kYBCABKAsyHC50YWlsb3IudjEuSWRQVXNlckF1dGhQb2xpY3kSIAoEbGFuZxgFIAEoDjISLnRhaWxvci52MS5JZFBMYW5nEhsKE3B1Ymxpc2hfdXNlcl9ldmVudHMYBiABKAgSQgoWZGlzYWJsZV9ncWxfb3BlcmF0aW9ucxgHIAEoCzIiLnRhaWxvci52MS5JZFBEaXNhYmxlR3FsT3BlcmF0aW9ucyJ6ChdJZFBEaXNhYmxlR3FsT3BlcmF0aW9ucxIOCgZjcmVhdGUYASABKAgSDgoGdXBkYXRlGAIgASgIEg4KBmRlbGV0ZRgDIAEoCBIMCgRyZWFkGAQgASgIEiEKGXNlbmRfcGFzc3dvcmRfcmVzZXRfZW1haWwYBSABKAgiTQoJSWRQQ2xpZW50EgwKBG5hbWUYASABKAkSFgoJY2xpZW50X2lkGAIgASgJQgPgQQMSGgoNY2xpZW50X3NlY3JldBgDIAEoCUID4EEDIuUTChFJZFBVc2VyQXV0aFBvbGljeRIgChh1c2Vfbm9uX2VtYWlsX2lkZW50aWZpZXIYASABKAgSIQoZYWxsb3dfc2VsZl9wYXNzd29yZF9yZXNldBgCIAEoCBIiChpwYXNzd29yZF9yZXF1aXJlX3VwcGVyY2FzZRgDIAEoCBIiChpwYXNzd29yZF9yZXF1aXJlX2xvd2VyY2FzZRgEIAEoCBIpCiFwYXNzd29yZF9yZXF1aXJlX25vbl9hbHBoYW51bWVyaWMYBSABKAgSIAoYcGFzc3dvcmRfcmVxdWlyZV9udW1lcmljGAYgASgIEqYBChNwYXNzd29yZF9taW5fbGVuZ3RoGAcgASgFQogBukiEAboBgAEKGXBhc3N3b3JkX21pbl9sZW5ndGhfcmFuZ2USO3Bhc3N3b3JkX21pbl9sZW5ndGggbXVzdCBiZSAwIChkZWZhdWx0KSBvciBiZXR3ZWVuIDYgYW5kIDMwGiZ0aGlzID09IDAgfHwgKHRoaXMgPj0gNiAmJiB0aGlzIDw9IDMwKRKqAQoTcGFzc3dvcmRfbWF4X2xlbmd0aBgIIAEoBUKMAbpIiAG6AYQBChlwYXNzd29yZF9tYXhfbGVuZ3RoX3JhbmdlEj1wYXNzd29yZF9tYXhfbGVuZ3RoIG11c3QgYmUgMCAoZGVmYXVsdCkgb3IgYmV0d2VlbiA2IGFuZCA0MDk2Gih0aGlzID09IDAgfHwgKHRoaXMgPj0gNiAmJiB0aGlzIDw9IDQwOTYpEi8KFWFsbG93ZWRfZW1haWxfZG9tYWlucxgJIAMoCUIQukgNkgEKEGQYASIEcgJoARIaChJhbGxvd19nb29nbGVfb2F1dGgYCiABKAgSHQoVZGlzYWJsZV9wYXNzd29yZF9hdXRoGAsgASgIEh0KFWFsbG93X21pY3Jvc29mdF9vYXV0aBgMIAEoCDqUDrpIkA4a6gEKG3Bhc3N3b3JkX2xlbmd0aF9jb25zaXN0ZW5jeRJFcGFzc3dvcmRfbWluX2xlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBwYXNzd29yZF9tYXhfbGVuZ3RoGoMBKHRoaXMucGFzc3dvcmRfbWluX2xlbmd0aCA9PSAwID8gNiA6IHRoaXMucGFzc3dvcmRfbWluX2xlbmd0aCkgPD0gKHRoaXMucGFzc3dvcmRfbWF4X2xlbmd0aCA9PSAwID8gNDA5NiA6IHRoaXMucGFzc3dvcmRfbWF4X2xlbmd0aCkaxgEKL2FsbG93ZWRfZW1haWxfZG9tYWluc19yZXF1aXJlc19lbWFpbF9pZGVudGlmaWVyEklhbGxvd2VkX2VtYWlsX2RvbWFpbnMgY2Fubm90IGJlIHNldCB3aGVuIHVzZV9ub25fZW1haWxfaWRlbnRpZmllciBpcyB0cnVlGkh0aGlzLmFsbG93ZWRfZW1haWxfZG9tYWlucy5zaXplKCkgPT0gMCB8fCAhdGhpcy51c2Vfbm9uX2VtYWlsX2lkZW50aWZpZXIatgEKLGFsbG93X2dvb2dsZV9vYXV0aF9yZXF1aXJlc19lbWFpbF9pZGVudGlmaWVyEkphbGxvd19nb29nbGVfb2F1dGggY2Fubm90IGJlIGVuYWJsZWQgd2hlbiB1c2Vfbm9uX2VtYWlsX2lkZW50aWZpZXIgaXMgdHJ1ZRo6IXRoaXMuYWxsb3dfZ29vZ2xlX29hdXRoIHx8ICF0aGlzLnVzZV9ub25fZW1haWxfaWRlbnRpZmllchq5AQoxYWxsb3dfZ29vZ2xlX29hdXRoX3JlcXVpcmVzX2FsbG93ZWRfZW1haWxfZG9tYWlucxJBYWxsb3dlZF9lbWFpbF9kb21haW5zIG11c3QgYmUgc2V0IHdoZW4gYWxsb3dfZ29vZ2xlX29hdXRoIGlzIHRydWUaQSF0aGlzLmFsbG93X2dvb2dsZV9vYXV0aCB8fCB0aGlzLmFsbG93ZWRfZW1haWxfZG9tYWlucy5zaXplKCkgPiAwGr8BCi9hbGxvd19taWNyb3NvZnRfb2F1dGhfcmVxdWlyZXNfZW1haWxfaWRlbnRpZmllchJNYWxsb3dfbWljcm9zb2Z0X29hdXRoIGNhbm5vdCBiZSBlbmFibGVkIHdoZW4gdXNlX25vbl9lbWFpbF9pZGVudGlmaWVyIGlzIHRydWUaPSF0aGlzLmFsbG93X21pY3Jvc29mdF9vYXV0aCB8fCAhdGhpcy51c2Vfbm9uX2VtYWlsX2lkZW50aWZpZXIatQEKNGFsbG93X21pY3Jvc29mdF9vYXV0aF9yZXF1aXJlc19kaXNhYmxlX3Bhc3N3b3JkX2F1dGgSQmFsbG93X21pY3Jvc29mdF9vYXV0aCByZXF1aXJlcyBkaXNhYmxlX3Bhc3N3b3JkX2F1dGggdG8gYmUgZW5hYmxlZBo5IXRoaXMuYWxsb3dfbWljcm9zb2Z0X29hdXRoIHx8IHRoaXMuZGlzYWJsZV9wYXNzd29yZF9hdXRoGsIBCjRhbGxvd19taWNyb3NvZnRfb2F1dGhfcmVxdWlyZXNfYWxsb3dlZF9lbWFpbF9kb21haW5zEkRhbGxvd2VkX2VtYWlsX2RvbWFpbnMgbXVzdCBiZSBzZXQgd2hlbiBhbGxvd19taWNyb3NvZnRfb2F1dGggaXMgdHJ1ZRpEIXRoaXMuYWxsb3dfbWljcm9zb2Z0X29hdXRoIHx8IHRoaXMuYWxsb3dlZF9lbWFpbF9kb21haW5zLnNpemUoKSA+IDAa1gEKJGRpc2FibGVfcGFzc3dvcmRfYXV0aF9yZXF1aXJlc19vYXV0aBJYZGlzYWJsZV9wYXNzd29yZF9hdXRoIHJlcXVpcmVzIGFsbG93X2dvb2dsZV9vYXV0aCBvciBhbGxvd19taWNyb3NvZnRfb2F1dGggdG8gYmUgZW5hYmxlZBpUIXRoaXMuZGlzYWJsZV9wYXNzd29yZF9hdXRoIHx8IHRoaXMuYWxsb3dfZ29vZ2xlX29hdXRoIHx8IHRoaXMuYWxsb3dfbWljcm9zb2Z0X29hdXRoGsoBCjhkaXNhYmxlX3Bhc3N3b3JkX2F1dGhfY29uZmxpY3RzX3dpdGhfc2VsZl9wYXNzd29yZF9yZXNldBJOYWxsb3dfc2VsZl9wYXNzd29yZF9yZXNldCBjYW5ub3QgYmUgZW5hYmxlZCB3aGVuIGRpc2FibGVfcGFzc3dvcmRfYXV0aCBpcyB0cnVlGj4hdGhpcy5kaXNhYmxlX3Bhc3N3b3JkX2F1dGggfHwgIXRoaXMuYWxsb3dfc2VsZl9wYXNzd29yZF9yZXNldCpICgdJZFBMYW5nEhkKFUlEX1BfTEFOR19VTlNQRUNJRklFRBAAEhAKDElEX1BfTEFOR19FThABEhAKDElEX1BfTEFOR19KQRACYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.IdPService.\n * Use `create(IdPServiceSchema)` to create a new message.\n */\nexport const IdPServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 0);\n\n/**\n * Describes the message tailor.v1.IdPDisableGqlOperations.\n * Use `create(IdPDisableGqlOperationsSchema)` to create a new message.\n */\nexport const IdPDisableGqlOperationsSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 1);\n\n/**\n * Describes the message tailor.v1.IdPClient.\n * Use `create(IdPClientSchema)` to create a new message.\n */\nexport const IdPClientSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 2);\n\n/**\n * Describes the message tailor.v1.IdPUserAuthPolicy.\n * Use `create(IdPUserAuthPolicySchema)` to create a new message.\n */\nexport const IdPUserAuthPolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 3);\n\n/**\n * Describes the enum tailor.v1.IdPLang.\n */\nexport const IdPLangSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_idp_resource, 0);\n\n/**\n * IdPLang represents the IETF BCP 47 language subtag.\n *\n * @generated from enum tailor.v1.IdPLang\n */\nexport const IdPLang = /*@__PURE__*/\n tsEnum(IdPLangSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/idp.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_idp_resource } from \"./idp_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/idp.proto.\n */\nexport const file_tailor_v1_idp = /*@__PURE__*/\n fileDesc(\"ChN0YWlsb3IvdjEvaWRwLnByb3RvEgl0YWlsb3IudjEikQEKFkxpc3RJZFBTZXJ2aWNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInQKF0xpc3RJZFBTZXJ2aWNlc1Jlc3BvbnNlEisKDGlkcF9zZXJ2aWNlcxgBIAMoCzIVLnRhaWxvci52MS5JZFBTZXJ2aWNlEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLNAgoXQ3JlYXRlSWRQU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIVCg1hdXRob3JpemF0aW9uGAMgASgJEjYKEHVzZXJfYXV0aF9wb2xpY3kYBCABKAsyHC50YWlsb3IudjEuSWRQVXNlckF1dGhQb2xpY3kSIAoEbGFuZxgFIAEoDjISLnRhaWxvci52MS5JZFBMYW5nEhsKE3B1Ymxpc2hfdXNlcl9ldmVudHMYBiABKAgSQgoWZGlzYWJsZV9ncWxfb3BlcmF0aW9ucxgHIAEoCzIiLnRhaWxvci52MS5JZFBEaXNhYmxlR3FsT3BlcmF0aW9ucyJGChhDcmVhdGVJZFBTZXJ2aWNlUmVzcG9uc2USKgoLaWRwX3NlcnZpY2UYASABKAsyFS50YWlsb3IudjEuSWRQU2VydmljZSLNAgoXVXBkYXRlSWRQU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIVCg1hdXRob3JpemF0aW9uGAMgASgJEjYKEHVzZXJfYXV0aF9wb2xpY3kYBCABKAsyHC50YWlsb3IudjEuSWRQVXNlckF1dGhQb2xpY3kSIAoEbGFuZxgFIAEoDjISLnRhaWxvci52MS5JZFBMYW5nEhsKE3B1Ymxpc2hfdXNlcl9ldmVudHMYBiABKAgSQgoWZGlzYWJsZV9ncWxfb3BlcmF0aW9ucxgHIAEoCzIiLnRhaWxvci52MS5JZFBEaXNhYmxlR3FsT3BlcmF0aW9ucyJGChhVcGRhdGVJZFBTZXJ2aWNlUmVzcG9uc2USKgoLaWRwX3NlcnZpY2UYASABKAsyFS50YWlsb3IudjEuSWRQU2VydmljZSJ7ChdEZWxldGVJZFBTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIhoKGERlbGV0ZUlkUFNlcnZpY2VSZXNwb25zZSJ4ChRHZXRJZFBTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIkMKFUdldElkUFNlcnZpY2VSZXNwb25zZRIqCgtpZHBfc2VydmljZRgBIAEoCzIVLnRhaWxvci52MS5JZFBTZXJ2aWNlItIBChVMaXN0SWRQQ2xpZW50c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIm0KFkxpc3RJZFBDbGllbnRzUmVzcG9uc2USJQoHY2xpZW50cxgBIAMoCzIULnRhaWxvci52MS5JZFBDbGllbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIqABChZDcmVhdGVJZFBDbGllbnRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJAoGY2xpZW50GAMgASgLMhQudGFpbG9yLnYxLklkUENsaWVudCI/ChdDcmVhdGVJZFBDbGllbnRSZXNwb25zZRIkCgZjbGllbnQYASABKAsyFC50YWlsb3IudjEuSWRQQ2xpZW50Iq8BChNHZXRJZFBDbGllbnRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCI8ChRHZXRJZFBDbGllbnRSZXNwb25zZRIkCgZjbGllbnQYASABKAsyFC50YWlsb3IudjEuSWRQQ2xpZW50IrIBChZEZWxldGVJZFBDbGllbnRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIZChdEZWxldGVJZFBDbGllbnRSZXNwb25zZWIGcHJvdG8z\", [file_buf_validate_validate, file_tailor_v1_idp_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.ListIdPServicesRequest.\n * Use `create(ListIdPServicesRequestSchema)` to create a new message.\n */\nexport const ListIdPServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 0);\n\n/**\n * Describes the message tailor.v1.ListIdPServicesResponse.\n * Use `create(ListIdPServicesResponseSchema)` to create a new message.\n */\nexport const ListIdPServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 1);\n\n/**\n * Describes the message tailor.v1.CreateIdPServiceRequest.\n * Use `create(CreateIdPServiceRequestSchema)` to create a new message.\n */\nexport const CreateIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 2);\n\n/**\n * Describes the message tailor.v1.CreateIdPServiceResponse.\n * Use `create(CreateIdPServiceResponseSchema)` to create a new message.\n */\nexport const CreateIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 3);\n\n/**\n * Describes the message tailor.v1.UpdateIdPServiceRequest.\n * Use `create(UpdateIdPServiceRequestSchema)` to create a new message.\n */\nexport const UpdateIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 4);\n\n/**\n * Describes the message tailor.v1.UpdateIdPServiceResponse.\n * Use `create(UpdateIdPServiceResponseSchema)` to create a new message.\n */\nexport const UpdateIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 5);\n\n/**\n * Describes the message tailor.v1.DeleteIdPServiceRequest.\n * Use `create(DeleteIdPServiceRequestSchema)` to create a new message.\n */\nexport const DeleteIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 6);\n\n/**\n * Describes the message tailor.v1.DeleteIdPServiceResponse.\n * Use `create(DeleteIdPServiceResponseSchema)` to create a new message.\n */\nexport const DeleteIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 7);\n\n/**\n * Describes the message tailor.v1.GetIdPServiceRequest.\n * Use `create(GetIdPServiceRequestSchema)` to create a new message.\n */\nexport const GetIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 8);\n\n/**\n * Describes the message tailor.v1.GetIdPServiceResponse.\n * Use `create(GetIdPServiceResponseSchema)` to create a new message.\n */\nexport const GetIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 9);\n\n/**\n * Describes the message tailor.v1.ListIdPClientsRequest.\n * Use `create(ListIdPClientsRequestSchema)` to create a new message.\n */\nexport const ListIdPClientsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 10);\n\n/**\n * Describes the message tailor.v1.ListIdPClientsResponse.\n * Use `create(ListIdPClientsResponseSchema)` to create a new message.\n */\nexport const ListIdPClientsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 11);\n\n/**\n * Describes the message tailor.v1.CreateIdPClientRequest.\n * Use `create(CreateIdPClientRequestSchema)` to create a new message.\n */\nexport const CreateIdPClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 12);\n\n/**\n * Describes the message tailor.v1.CreateIdPClientResponse.\n * Use `create(CreateIdPClientResponseSchema)` to create a new message.\n */\nexport const CreateIdPClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 13);\n\n/**\n * Describes the message tailor.v1.GetIdPClientRequest.\n * Use `create(GetIdPClientRequestSchema)` to create a new message.\n */\nexport const GetIdPClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 14);\n\n/**\n * Describes the message tailor.v1.GetIdPClientResponse.\n * Use `create(GetIdPClientResponseSchema)` to create a new message.\n */\nexport const GetIdPClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 15);\n\n/**\n * Describes the message tailor.v1.DeleteIdPClientRequest.\n * Use `create(DeleteIdPClientRequestSchema)` to create a new message.\n */\nexport const DeleteIdPClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 16);\n\n/**\n * Describes the message tailor.v1.DeleteIdPClientResponse.\n * Use `create(DeleteIdPClientResponseSchema)` to create a new message.\n */\nexport const DeleteIdPClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 17);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/metadata_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file tailor/v1/metadata_resource.proto.\n */\nexport const file_tailor_v1_metadata_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvbWV0YWRhdGFfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJqCghNZXRhZGF0YRIvCgZsYWJlbHMYASADKAsyHy50YWlsb3IudjEuTWV0YWRhdGEuTGFiZWxzRW50cnkaLQoLTGFiZWxzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AWIGcHJvdG8z\");\n\n/**\n * Describes the message tailor.v1.Metadata.\n * Use `create(MetadataSchema)` to create a new message.\n */\nexport const MetadataSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata_resource, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/metadata.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_metadata_resource } from \"./metadata_resource_pb\";\n\n/**\n * Describes the file tailor/v1/metadata.proto.\n */\nexport const file_tailor_v1_metadata = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvbWV0YWRhdGEucHJvdG8SCXRhaWxvci52MSLMAgoSU2V0TWV0YWRhdGFSZXF1ZXN0EoYBCgN0cm4YASABKAlCebpIdnJ0MnJedHJuOnYxOndvcmtzcGFjZTpbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn0oOlthLXpBLVowLTlfOiotXSspPyQSfgoGbGFiZWxzGAIgAygLMikudGFpbG9yLnYxLlNldE1ldGFkYXRhUmVxdWVzdC5MYWJlbHNFbnRyeUJDukhAmgE9IhtyGTIXXlthLXpdW2EtejAtOV8tXXswLDYyfSQqHnIcMhpeJHxeW2Etel1bYS16MC05Xy1dezAsNjJ9JBotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjwKE1NldE1ldGFkYXRhUmVzcG9uc2USJQoIbWV0YWRhdGEYASABKAsyEy50YWlsb3IudjEuTWV0YWRhdGEinQEKEkdldE1ldGFkYXRhUmVxdWVzdBKGAQoDdHJuGAEgASgJQnm6SHZydDJyXnRybjp2MTp3b3Jrc3BhY2U6WzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9KDpbYS16QS1aMC05XzoqLV0rKT8kIjwKE0dldE1ldGFkYXRhUmVzcG9uc2USJQoIbWV0YWRhdGEYASABKAsyEy50YWlsb3IudjEuTWV0YWRhdGFiBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_metadata_resource]);\n\n/**\n * Describes the message tailor.v1.SetMetadataRequest.\n * Use `create(SetMetadataRequestSchema)` to create a new message.\n */\nexport const SetMetadataRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 0);\n\n/**\n * Describes the message tailor.v1.SetMetadataResponse.\n * Use `create(SetMetadataResponseSchema)` to create a new message.\n */\nexport const SetMetadataResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 1);\n\n/**\n * Describes the message tailor.v1.GetMetadataRequest.\n * Use `create(GetMetadataRequestSchema)` to create a new message.\n */\nexport const GetMetadataRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 2);\n\n/**\n * Describes the message tailor.v1.GetMetadataResponse.\n * Use `create(GetMetadataResponseSchema)` to create a new message.\n */\nexport const GetMetadataResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 3);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/meter.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/meter.proto.\n */\nexport const file_tailor_v1_meter = /*@__PURE__*/\n fileDesc(\"ChV0YWlsb3IvdjEvbWV0ZXIucHJvdG8SCXRhaWxvci52MSLsAQodTGlzdE1ldGVyUmVxdWVzdENvdW50c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgpzdGFydF90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIGukgDyAEBEjQKCGVuZF90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIGukgDyAEBEj0KBHN0ZXAYBCABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CFLpIEcgBAaoBCyIECICjBTIDCJAcIsUCCh5MaXN0TWV0ZXJSZXF1ZXN0Q291bnRzUmVzcG9uc2USTgoOcmVxdWVzdF9jb3VudHMYASADKAsyNi50YWlsb3IudjEuTGlzdE1ldGVyUmVxdWVzdENvdW50c1Jlc3BvbnNlLlJlcXVlc3RDb3VudBppCgxSZXF1ZXN0Q291bnQSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRI/CgZ2YWx1ZXMYAiADKAsyLy50YWlsb3IudjEuTGlzdE1ldGVyUmVxdWVzdENvdW50c1Jlc3BvbnNlLlZhbHVlGmgKBVZhbHVlEigKBGZyb20YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgVjb3VudBgDIAEoAyLuAQofTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKCnN0YXJ0X3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESNAoIZW5kX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESPQoEc3RlcBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIUukgRyAEBqgELIgQIgKMFMgMIkBwizQIKIExpc3RNZXRlckV4ZWN1dGlvbkNvdW50c1Jlc3BvbnNlElQKEGV4ZWN1dGlvbl9jb3VudHMYASADKAsyOi50YWlsb3IudjEuTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVzcG9uc2UuRXhlY3V0aW9uQ291bnQaaQoORXhlY3V0aW9uQ291bnQSFAoMc2VydmljZV9uYW1lGAEgASgJEkEKBnZhbHVlcxgCIAMoCzIxLnRhaWxvci52MS5MaXN0TWV0ZXJFeGVjdXRpb25Db3VudHNSZXNwb25zZS5WYWx1ZRpoCgVWYWx1ZRIoCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFY291bnQYAyABKAMi6gEKG0xpc3RNZXRlckV2ZW50Q291bnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKCnN0YXJ0X3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESNAoIZW5kX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESPQoEc3RlcBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIUukgRyAEBqgELIgQIgKMFMgMIkBwitQIKHExpc3RNZXRlckV2ZW50Q291bnRzUmVzcG9uc2USSAoMZXZlbnRfY291bnRzGAEgAygLMjIudGFpbG9yLnYxLkxpc3RNZXRlckV2ZW50Q291bnRzUmVzcG9uc2UuRXZlbnRDb3VudBphCgpFdmVudENvdW50EhQKDHNlcnZpY2VfbmFtZRgBIAEoCRI9CgZ2YWx1ZXMYAiADKAsyLS50YWlsb3IudjEuTGlzdE1ldGVyRXZlbnRDb3VudHNSZXNwb25zZS5WYWx1ZRpoCgVWYWx1ZRIoCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFY291bnQYAyABKANiBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsRequest.\n * Use `create(ListMeterRequestCountsRequestSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsResponse.\n * Use `create(ListMeterRequestCountsResponseSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 1);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsResponse.RequestCount.\n * Use `create(ListMeterRequestCountsResponse_RequestCountSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsResponse_RequestCountSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 1, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsResponse.Value.\n * Use `create(ListMeterRequestCountsResponse_ValueSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsResponse_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 1, 1);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsRequest.\n * Use `create(ListMeterExecutionCountsRequestSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 2);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsResponse.\n * Use `create(ListMeterExecutionCountsResponseSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 3);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsResponse.ExecutionCount.\n * Use `create(ListMeterExecutionCountsResponse_ExecutionCountSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsResponse_ExecutionCountSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 3, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsResponse.Value.\n * Use `create(ListMeterExecutionCountsResponse_ValueSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsResponse_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 3, 1);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsRequest.\n * Use `create(ListMeterEventCountsRequestSchema)` to create a new message.\n */\nexport const ListMeterEventCountsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 4);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsResponse.\n * Use `create(ListMeterEventCountsResponseSchema)` to create a new message.\n */\nexport const ListMeterEventCountsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 5);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsResponse.EventCount.\n * Use `create(ListMeterEventCountsResponse_EventCountSchema)` to create a new message.\n */\nexport const ListMeterEventCountsResponse_EventCountSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 5, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsResponse.Value.\n * Use `create(ListMeterEventCountsResponse_ValueSchema)` to create a new message.\n */\nexport const ListMeterEventCountsResponse_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 5, 1);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/pipeline_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/pipeline_resource.proto.\n */\nexport const file_tailor_v1_pipeline_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvcGlwZWxpbmVfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJOCg9QaXBlbGluZVNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRISCgpjb21tb25fc2RsGAIgASgJIsEOChBQaXBlbGluZVJlc29sdmVyEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFQoNYXV0aG9yaXphdGlvbhgEIAEoCRIXCgpwcmVfc2NyaXB0GAUgASgJSACIAQESGAoLcG9zdF9zY3JpcHQYBiABKAlIAYgBARI3CglwaXBlbGluZXMYByADKAsyJC50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlci5QaXBlbGluZRIVCghvbl9lcnJvchgIIAEoCUgCiAEBEjEKBmlucHV0cxgJIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEjgKCHJlc3BvbnNlGAogASgLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuRmllbGRIA4gBARIbCg5vcGVyYXRpb25fdHlwZRgLIAEoCUgEiAEBEiMKCHByZV9ob29rGAwgASgLMhEudGFpbG9yLnYxLlNjcmlwdBIkCglwb3N0X2hvb2sYDSABKAsyES50YWlsb3IudjEuU2NyaXB0EiAKGHB1Ymxpc2hfZXhlY3V0aW9uX2V2ZW50cxgOIAEoCBILCgNzZGwYDyABKAkavQEKBFR5cGUSDAoEa2luZBgBIAEoCRIMCgRuYW1lGAIgASgJEjEKBmZpZWxkcxgEIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEhAKCHJlcXVpcmVkGAUgASgIEhMKC2Rlc2NyaXB0aW9uGAYgASgJEjkKDmFsbG93ZWRfdmFsdWVzGAcgAygLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVmFsdWVKBAgDEAQaewoFRmllbGQSDAoEbmFtZRgBIAEoCRIuCgR0eXBlGAIgASgLMiAudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVHlwZRINCgVhcnJheRgDIAEoCBIQCghyZXF1aXJlZBgEIAEoCBITCgtkZXNjcmlwdGlvbhgFIAEoCRpjCgVWYWx1ZRJFCgV2YWx1ZRgBIAEoCUI2ukgzcjEyHF5bYS16QS1aXVthLXpBLVowLTlfXXswLDYyfSRaBHRydWVaBWZhbHNlWgRudWxsEhMKC2Rlc2NyaXB0aW9uGAIgASgJGo0GCghQaXBlbGluZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEkEKDm9wZXJhdGlvbl90eXBlGAQgASgOMikudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuT3BlcmF0aW9uVHlwZRIdChBvcGVyYXRpb25fc291cmNlGAYgASgJSACIAQESHwoXc2tpcF9vcGVyYXRpb25fb25fZXJyb3IYByABKAgSEQoEdGVzdBgIIAEoCUgBiAEBEhsKDnByZV92YWxpZGF0aW9uGAkgASgJSAKIAQESFwoKcHJlX3NjcmlwdBgKIAEoCUgDiAEBEhgKC3Bvc3Rfc2NyaXB0GAsgASgJSASIAQESHAoPcG9zdF92YWxpZGF0aW9uGAwgASgJSAWIAQESGQoMY29udGV4dF9kYXRhGA0gASgJSAaIAQESFQoIZm9yX2VhY2gYDiABKAlIB4gBARIsCgdpbnZva2VyGA8gASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VySAiIAQESIwoIcHJlX2hvb2sYECABKAsyES50YWlsb3IudjEuU2NyaXB0EiQKCXBvc3RfaG9vaxgRIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSGwoOb3BlcmF0aW9uX25hbWUYEiABKAlICYgBARIpCg5vcGVyYXRpb25faG9vaxgTIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSIQoUb3BlcmF0aW9uX3NvdXJjZV9yZWYYFCABKAlICogBAUITChFfb3BlcmF0aW9uX3NvdXJjZUIHCgVfdGVzdEIRCg9fcHJlX3ZhbGlkYXRpb25CDQoLX3ByZV9zY3JpcHRCDgoMX3Bvc3Rfc2NyaXB0QhIKEF9wb3N0X3ZhbGlkYXRpb25CDwoNX2NvbnRleHRfZGF0YUILCglfZm9yX2VhY2hCCgoIX2ludm9rZXJCEQoPX29wZXJhdGlvbl9uYW1lQhcKFV9vcGVyYXRpb25fc291cmNlX3JlZkoECAEQAkoECAUQBiJoCg1PcGVyYXRpb25UeXBlEh4KGk9QRVJBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGgoWT1BFUkFUSU9OX1RZUEVfR1JBUEhRTBABEhsKF09QRVJBVElPTl9UWVBFX0ZVTkNUSU9OEAJCDQoLX3ByZV9zY3JpcHRCDgoMX3Bvc3Rfc2NyaXB0QgsKCV9vbl9lcnJvckILCglfcmVzcG9uc2VCEQoPX29wZXJhdGlvbl90eXBlSgQIARACIkMKEVBpcGVsaW5lUmVzb2x2ZXJzEi4KCXJlc29sdmVycxgBIAMoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIqgFCh9QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EgoKAmlkGAEgASgJEhsKE3NvdXJjZV9leGVjdXRpb25faWQYAiABKAkSFQoNcmVzb2x2ZXJfbmFtZRgDIAEoCRJHCgZzdGF0dXMYBCABKA4yNy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdC5SZXN1bHRTdGF0dXMSKAoHY29udGV4dBgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMAoPaW5pdGlhbF9jb250ZXh0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIaChJsYXN0X3BpcGVsaW5lX25hbWUYByABKAkSHAoUbGFzdF9waXBlbGluZV9hY3Rpb24YCCABKAkSDQoFZXJyb3IYCSABKAkSLgoKc3RhcnRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpUBCgxSZXN1bHRTdGF0dXMSHQoZUkVTVUxUX1NUQVRVU19VTlNQRUNJRklFRBAAEhYKElJFU1VMVF9TVEFUVVNfRE9ORRABEhgKFFJFU1VMVF9TVEFUVVNfRkFJTEVEEAISGQoVUkVTVUxUX1NUQVRVU19BQk9SVEVEEAMSGQoVUkVTVUxUX1NUQVRVU19SRVRSSUVEEARiBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_auth_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.PipelineService.\n * Use `create(PipelineServiceSchema)` to create a new message.\n */\nexport const PipelineServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 0);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.\n * Use `create(PipelineResolverSchema)` to create a new message.\n */\nexport const PipelineResolverSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Type.\n * Use `create(PipelineResolver_TypeSchema)` to create a new message.\n */\nexport const PipelineResolver_TypeSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Field.\n * Use `create(PipelineResolver_FieldSchema)` to create a new message.\n */\nexport const PipelineResolver_FieldSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Value.\n * Use `create(PipelineResolver_ValueSchema)` to create a new message.\n */\nexport const PipelineResolver_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Pipeline.\n * Use `create(PipelineResolver_PipelineSchema)` to create a new message.\n */\nexport const PipelineResolver_PipelineSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 3);\n\n/**\n * Describes the enum tailor.v1.PipelineResolver.OperationType.\n */\nexport const PipelineResolver_OperationTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.PipelineResolver.OperationType\n */\nexport const PipelineResolver_OperationType = /*@__PURE__*/\n tsEnum(PipelineResolver_OperationTypeSchema);\n\n/**\n * Describes the message tailor.v1.PipelineResolvers.\n * Use `create(PipelineResolversSchema)` to create a new message.\n */\nexport const PipelineResolversSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 2);\n\n/**\n * Describes the message tailor.v1.PipelineResolverExecutionResult.\n * Use `create(PipelineResolverExecutionResultSchema)` to create a new message.\n */\nexport const PipelineResolverExecutionResultSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 3);\n\n/**\n * Describes the enum tailor.v1.PipelineResolverExecutionResult.ResultStatus.\n */\nexport const PipelineResolverExecutionResult_ResultStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline_resource, 3, 0);\n\n/**\n * @generated from enum tailor.v1.PipelineResolverExecutionResult.ResultStatus\n */\nexport const PipelineResolverExecutionResult_ResultStatus = /*@__PURE__*/\n tsEnum(PipelineResolverExecutionResult_ResultStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/pipeline.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_pipeline_resource } from \"./pipeline_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/pipeline.proto.\n */\nexport const file_tailor_v1_pipeline = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvcGlwZWxpbmUucHJvdG8SCXRhaWxvci52MSKUAQocQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCmNvbW1vbl9zZGwYAyABKAkiVQodQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2USNAoQcGlwZWxpbmVfc2VydmljZRgBIAEoCzIaLnRhaWxvci52MS5QaXBlbGluZVNlcnZpY2UilAEKHFVwZGF0ZVBpcGVsaW5lU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpjb21tb25fc2RsGAMgASgJIlUKHVVwZGF0ZVBpcGVsaW5lU2VydmljZVJlc3BvbnNlEjQKEHBpcGVsaW5lX3NlcnZpY2UYASABKAsyGi50YWlsb3IudjEuUGlwZWxpbmVTZXJ2aWNlIoABChxEZWxldGVQaXBlbGluZVNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHwodRGVsZXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UifQoZR2V0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIlIKGkdldFBpcGVsaW5lU2VydmljZVJlc3BvbnNlEjQKEHBpcGVsaW5lX3NlcnZpY2UYASABKAsyGi50YWlsb3IudjEuUGlwZWxpbmVTZXJ2aWNlIpYBChtMaXN0UGlwZWxpbmVTZXJ2aWNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIoMBChxMaXN0UGlwZWxpbmVTZXJ2aWNlc1Jlc3BvbnNlEjUKEXBpcGVsaW5lX3NlcnZpY2VzGAEgAygLMhoudGFpbG9yLnYxLlBpcGVsaW5lU2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMiuQEKHUNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoRcGlwZWxpbmVfcmVzb2x2ZXIYAyABKAsyGy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlciJYCh5DcmVhdGVQaXBlbGluZVJlc29sdmVyUmVzcG9uc2USNgoRcGlwZWxpbmVfcmVzb2x2ZXIYASABKAsyGy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlciK5AQodVXBkYXRlUGlwZWxpbmVSZXNvbHZlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2ChFwaXBlbGluZV9yZXNvbHZlchgDIAEoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIlgKHlVwZGF0ZVBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZRI2ChFwaXBlbGluZV9yZXNvbHZlchgBIAEoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIpgBCh1EZWxldGVQaXBlbGluZVJlc29sdmVyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhUKDXJlc29sdmVyX25hbWUYAyABKAkiIAoeRGVsZXRlUGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIn0KGUNvbXBvc2VQaXBlbGluZVNETFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIcChpDb21wb3NlUGlwZWxpbmVTRExSZXNwb25zZSKVAQoaR2V0UGlwZWxpbmVSZXNvbHZlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIVCg1yZXNvbHZlcl9uYW1lGAMgASgJIlUKG0dldFBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZRI2ChFwaXBlbGluZV9yZXNvbHZlchgBIAEoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIr0CChxMaXN0UGlwZWxpbmVSZXNvbHZlcnNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEh4KDHdvcmtzcGFjZV9pZBgDIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYBCABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSPwoWcGlwZWxpbmVfcmVzb2x2ZXJfdmlldxgFIAEoDjIfLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyVmlldxIhCgZmaWx0ZXIYBiABKAsyES50YWlsb3IudjEuRmlsdGVyEjAKDnBhZ2VfZGlyZWN0aW9uGAcgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ihgEKHUxpc3RQaXBlbGluZVJlc29sdmVyc1Jlc3BvbnNlEhcKD25leHRfcGFnZV90b2tlbhgBIAEoCRI3ChJwaXBlbGluZV9yZXNvbHZlcnMYAiADKAsyGy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlchITCgt0b3RhbF9jb3VudBgDIAEoAyLHAgorTGlzdFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIeCgx3b3Jrc3BhY2VfaWQYAyABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAQgASgJEhUKDXJlc29sdmVyX25hbWUYBSABKAkSMAoOcGFnZV9kaXJlY3Rpb24YBiABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYByABKAsyES50YWlsb3IudjEuRmlsdGVyEjwKBHZpZXcYCCABKA4yLi50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFZpZXcSDwoHc29ydF9ieRgJIAEoCSKZAQosTGlzdFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRzUmVzcG9uc2USOwoHcmVzdWx0cxgBIAMoCzIqLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKqAQopR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIbCglyZXN1bHRfaWQYAiABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kImgKKkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRSZXNwb25zZRI6CgZyZXN1bHQYASABKAsyKi50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdCK6AQoeUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSGwoJcmVzdWx0X2lkGAMgASgJQgi6SAVyA7ABARIZChFzdGFydF9mcm9tX2ZhaWxlZBgEIAEoCCJdCh9SZXN0YXJ0UGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlEjoKBnJlc3VsdBgBIAEoCzIqLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0KoEBChRQaXBlbGluZVJlc29sdmVyVmlldxImCiJQSVBFTElORV9SRVNPTFZFUl9WSUVXX1VOU1BFQ0lGSUVEEAASIAocUElQRUxJTkVfUkVTT0xWRVJfVklFV19CQVNJQxABEh8KG1BJUEVMSU5FX1JFU09MVkVSX1ZJRVdfRlVMTBACKsMBCiNQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0VmlldxI3CjNQSVBFTElORV9SRVNPTFZFUl9FWEVDVVRJT05fUkVTVUxUX1ZJRVdfVU5TUEVDSUZJRUQQABIxCi1QSVBFTElORV9SRVNPTFZFUl9FWEVDVVRJT05fUkVTVUxUX1ZJRVdfQkFTSUMQARIwCixQSVBFTElORV9SRVNPTFZFUl9FWEVDVVRJT05fUkVTVUxUX1ZJRVdfRlVMTBACYgZwcm90bzM\", [file_buf_validate_validate, file_tailor_v1_pipeline_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreatePipelineServiceRequest.\n * Use `create(CreatePipelineServiceRequestSchema)` to create a new message.\n */\nexport const CreatePipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 0);\n\n/**\n * Describes the message tailor.v1.CreatePipelineServiceResponse.\n * Use `create(CreatePipelineServiceResponseSchema)` to create a new message.\n */\nexport const CreatePipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 1);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineServiceRequest.\n * Use `create(UpdatePipelineServiceRequestSchema)` to create a new message.\n */\nexport const UpdatePipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 2);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineServiceResponse.\n * Use `create(UpdatePipelineServiceResponseSchema)` to create a new message.\n */\nexport const UpdatePipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 3);\n\n/**\n * Describes the message tailor.v1.DeletePipelineServiceRequest.\n * Use `create(DeletePipelineServiceRequestSchema)` to create a new message.\n */\nexport const DeletePipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 4);\n\n/**\n * Describes the message tailor.v1.DeletePipelineServiceResponse.\n * Use `create(DeletePipelineServiceResponseSchema)` to create a new message.\n */\nexport const DeletePipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 5);\n\n/**\n * Describes the message tailor.v1.GetPipelineServiceRequest.\n * Use `create(GetPipelineServiceRequestSchema)` to create a new message.\n */\nexport const GetPipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 6);\n\n/**\n * Describes the message tailor.v1.GetPipelineServiceResponse.\n * Use `create(GetPipelineServiceResponseSchema)` to create a new message.\n */\nexport const GetPipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 7);\n\n/**\n * Describes the message tailor.v1.ListPipelineServicesRequest.\n * Use `create(ListPipelineServicesRequestSchema)` to create a new message.\n */\nexport const ListPipelineServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 8);\n\n/**\n * Describes the message tailor.v1.ListPipelineServicesResponse.\n * Use `create(ListPipelineServicesResponseSchema)` to create a new message.\n */\nexport const ListPipelineServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 9);\n\n/**\n * Describes the message tailor.v1.CreatePipelineResolverRequest.\n * Use `create(CreatePipelineResolverRequestSchema)` to create a new message.\n */\nexport const CreatePipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 10);\n\n/**\n * Describes the message tailor.v1.CreatePipelineResolverResponse.\n * Use `create(CreatePipelineResolverResponseSchema)` to create a new message.\n */\nexport const CreatePipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 11);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineResolverRequest.\n * Use `create(UpdatePipelineResolverRequestSchema)` to create a new message.\n */\nexport const UpdatePipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 12);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineResolverResponse.\n * Use `create(UpdatePipelineResolverResponseSchema)` to create a new message.\n */\nexport const UpdatePipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 13);\n\n/**\n * Describes the message tailor.v1.DeletePipelineResolverRequest.\n * Use `create(DeletePipelineResolverRequestSchema)` to create a new message.\n */\nexport const DeletePipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 14);\n\n/**\n * Describes the message tailor.v1.DeletePipelineResolverResponse.\n * Use `create(DeletePipelineResolverResponseSchema)` to create a new message.\n */\nexport const DeletePipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 15);\n\n/**\n * Describes the message tailor.v1.ComposePipelineSDLRequest.\n * Use `create(ComposePipelineSDLRequestSchema)` to create a new message.\n */\nexport const ComposePipelineSDLRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 16);\n\n/**\n * Describes the message tailor.v1.ComposePipelineSDLResponse.\n * Use `create(ComposePipelineSDLResponseSchema)` to create a new message.\n */\nexport const ComposePipelineSDLResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 17);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverRequest.\n * Use `create(GetPipelineResolverRequestSchema)` to create a new message.\n */\nexport const GetPipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 18);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverResponse.\n * Use `create(GetPipelineResolverResponseSchema)` to create a new message.\n */\nexport const GetPipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 19);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolversRequest.\n * Use `create(ListPipelineResolversRequestSchema)` to create a new message.\n */\nexport const ListPipelineResolversRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 20);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolversResponse.\n * Use `create(ListPipelineResolversResponseSchema)` to create a new message.\n */\nexport const ListPipelineResolversResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 21);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolverExecutionResultsRequest.\n * Use `create(ListPipelineResolverExecutionResultsRequestSchema)` to create a new message.\n */\nexport const ListPipelineResolverExecutionResultsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 22);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolverExecutionResultsResponse.\n * Use `create(ListPipelineResolverExecutionResultsResponseSchema)` to create a new message.\n */\nexport const ListPipelineResolverExecutionResultsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 23);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverExecutionResultRequest.\n * Use `create(GetPipelineResolverExecutionResultRequestSchema)` to create a new message.\n */\nexport const GetPipelineResolverExecutionResultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 24);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverExecutionResultResponse.\n * Use `create(GetPipelineResolverExecutionResultResponseSchema)` to create a new message.\n */\nexport const GetPipelineResolverExecutionResultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 25);\n\n/**\n * Describes the message tailor.v1.RestartPipelineResolverRequest.\n * Use `create(RestartPipelineResolverRequestSchema)` to create a new message.\n */\nexport const RestartPipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 26);\n\n/**\n * Describes the message tailor.v1.RestartPipelineResolverResponse.\n * Use `create(RestartPipelineResolverResponseSchema)` to create a new message.\n */\nexport const RestartPipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 27);\n\n/**\n * Describes the enum tailor.v1.PipelineResolverView.\n */\nexport const PipelineResolverViewSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline, 0);\n\n/**\n * @generated from enum tailor.v1.PipelineResolverView\n */\nexport const PipelineResolverView = /*@__PURE__*/\n tsEnum(PipelineResolverViewSchema);\n\n/**\n * Describes the enum tailor.v1.PipelineResolverExecutionResultView.\n */\nexport const PipelineResolverExecutionResultViewSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline, 1);\n\n/**\n * @generated from enum tailor.v1.PipelineResolverExecutionResultView\n */\nexport const PipelineResolverExecutionResultView = /*@__PURE__*/\n tsEnum(PipelineResolverExecutionResultViewSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/secret_manager.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/secret_manager.proto.\n */\nexport const file_tailor_v1_secret_manager = /*@__PURE__*/\n fileDesc(\"Ch50YWlsb3IvdjEvc2VjcmV0X21hbmFnZXIucHJvdG8SCXRhaWxvci52MSKNAQofQ3JlYXRlU2VjcmV0TWFuYWdlclZhdWx0UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkoKGHNlY3JldG1hbmFnZXJfdmF1bHRfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJQCiBDcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXNwb25zZRIsCgV2YXVsdBgBIAEoCzIdLnRhaWxvci52MS5TZWNyZXRNYW5hZ2VyVmF1bHQiigEKHEdldFNlY3JldE1hbmFnZXJWYXVsdFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJKChhzZWNyZXRtYW5hZ2VyX3ZhdWx0X25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiTQodR2V0U2VjcmV0TWFuYWdlclZhdWx0UmVzcG9uc2USLAoFdmF1bHQYASABKAsyHS50YWlsb3IudjEuU2VjcmV0TWFuYWdlclZhdWx0Io0BCh9EZWxldGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiIKIERlbGV0ZVNlY3JldE1hbmFnZXJWYXVsdFJlc3BvbnNlIpkBCh5MaXN0U2VjcmV0TWFuYWdlclZhdWx0c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIn4KH0xpc3RTZWNyZXRNYW5hZ2VyVmF1bHRzUmVzcG9uc2USLQoGdmF1bHRzGAEgAygLMh0udGFpbG9yLnYxLlNlY3JldE1hbmFnZXJWYXVsdBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMi/wEKIENyZWF0ZVNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEksKGXNlY3JldG1hbmFnZXJfc2VjcmV0X25hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIgoac2VjcmV0bWFuYWdlcl9zZWNyZXRfdmFsdWUYBCABKAkiUwohQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlEi4KBnNlY3JldBgBIAEoCzIeLnRhaWxvci52MS5TZWNyZXRNYW5hZ2VyU2VjcmV0Iv8BCiBVcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkoKGHNlY3JldG1hbmFnZXJfdmF1bHRfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJLChlzZWNyZXRtYW5hZ2VyX3NlY3JldF9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEiIKGnNlY3JldG1hbmFnZXJfc2VjcmV0X3ZhbHVlGAQgASgJIlMKIVVwZGF0ZVNlY3JldE1hbmFnZXJTZWNyZXRSZXNwb25zZRIuCgZzZWNyZXQYASABKAsyHi50YWlsb3IudjEuU2VjcmV0TWFuYWdlclNlY3JldCLbAQogRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJKChhzZWNyZXRtYW5hZ2VyX3ZhdWx0X25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSwoZc2VjcmV0bWFuYWdlcl9zZWNyZXRfbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIjCiFEZWxldGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2Ui2AEKHUdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEksKGXNlY3JldG1hbmFnZXJfc2VjcmV0X25hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUAoeR2V0U2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlEi4KBnNlY3JldBgBIAEoCzIeLnRhaWxvci52MS5TZWNyZXRNYW5hZ2VyU2VjcmV0IuYBCh9MaXN0U2VjcmV0TWFuYWdlclNlY3JldHNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24igQEKIExpc3RTZWNyZXRNYW5hZ2VyU2VjcmV0c1Jlc3BvbnNlEi8KB3NlY3JldHMYASADKAsyHi50YWlsb3IudjEuU2VjcmV0TWFuYWdlclNlY3JldBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKANiBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerVaultRequest.\n * Use `create(CreateSecretManagerVaultRequestSchema)` to create a new message.\n */\nexport const CreateSecretManagerVaultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 0);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerVaultResponse.\n * Use `create(CreateSecretManagerVaultResponseSchema)` to create a new message.\n */\nexport const CreateSecretManagerVaultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 1);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerVaultRequest.\n * Use `create(GetSecretManagerVaultRequestSchema)` to create a new message.\n */\nexport const GetSecretManagerVaultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 2);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerVaultResponse.\n * Use `create(GetSecretManagerVaultResponseSchema)` to create a new message.\n */\nexport const GetSecretManagerVaultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 3);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerVaultRequest.\n * Use `create(DeleteSecretManagerVaultRequestSchema)` to create a new message.\n */\nexport const DeleteSecretManagerVaultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 4);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerVaultResponse.\n * Use `create(DeleteSecretManagerVaultResponseSchema)` to create a new message.\n */\nexport const DeleteSecretManagerVaultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 5);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerVaultsRequest.\n * Use `create(ListSecretManagerVaultsRequestSchema)` to create a new message.\n */\nexport const ListSecretManagerVaultsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 6);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerVaultsResponse.\n * Use `create(ListSecretManagerVaultsResponseSchema)` to create a new message.\n */\nexport const ListSecretManagerVaultsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 7);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerSecretRequest.\n * Use `create(CreateSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const CreateSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 8);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerSecretResponse.\n * Use `create(CreateSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const CreateSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 9);\n\n/**\n * Describes the message tailor.v1.UpdateSecretManagerSecretRequest.\n * Use `create(UpdateSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const UpdateSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 10);\n\n/**\n * Describes the message tailor.v1.UpdateSecretManagerSecretResponse.\n * Use `create(UpdateSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const UpdateSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 11);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerSecretRequest.\n * Use `create(DeleteSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const DeleteSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 12);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerSecretResponse.\n * Use `create(DeleteSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const DeleteSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 13);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerSecretRequest.\n * Use `create(GetSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const GetSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 14);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerSecretResponse.\n * Use `create(GetSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const GetSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 15);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerSecretsRequest.\n * Use `create(ListSecretManagerSecretsRequestSchema)` to create a new message.\n */\nexport const ListSecretManagerSecretsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 16);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerSecretsResponse.\n * Use `create(ListSecretManagerSecretsResponseSchema)` to create a new message.\n */\nexport const ListSecretManagerSecretsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 17);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/stateflow_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/stateflow_resource.proto.\n */\nexport const file_tailor_v1_stateflow_resource = /*@__PURE__*/\n fileDesc(\"CiJ0YWlsb3IvdjEvc3RhdGVmbG93X3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEilQEKEFN0YXRlZmxvd1NlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRI6CgthZG1pbl91c2VycxgCIAMoCzIlLnRhaWxvci52MS5TdGF0ZWZsb3dTZXJ2aWNlLkFkbWluVXNlchocCglBZG1pblVzZXISDwoHdXNlcl9pZBgBIAEoCWIGcHJvdG8z\", [file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.StateflowService.\n * Use `create(StateflowServiceSchema)` to create a new message.\n */\nexport const StateflowServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow_resource, 0);\n\n/**\n * Describes the message tailor.v1.StateflowService.AdminUser.\n * Use `create(StateflowService_AdminUserSchema)` to create a new message.\n */\nexport const StateflowService_AdminUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow_resource, 0, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/stateflow.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_stateflow_resource } from \"./stateflow_resource_pb\";\n\n/**\n * Describes the file tailor/v1/stateflow.proto.\n */\nexport const file_tailor_v1_stateflow = /*@__PURE__*/\n fileDesc(\"Chl0YWlsb3IvdjEvc3RhdGVmbG93LnByb3RvEgl0YWlsb3IudjEiqAEKHUNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJQoOYWRtaW5fdXNlcl9pZHMYAyADKAlCDbpICpIBByIFcgOwAQEiWAoeQ3JlYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlEjYKEXN0YXRlZmxvd19zZXJ2aWNlGAEgASgLMhsudGFpbG9yLnYxLlN0YXRlZmxvd1NlcnZpY2UiqAEKHVVwZGF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJQoOYWRtaW5fdXNlcl9pZHMYAyADKAlCDbpICpIBByIFcgOwAQEiWAoeVXBkYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlEjYKEXN0YXRlZmxvd19zZXJ2aWNlGAEgASgLMhsudGFpbG9yLnYxLlN0YXRlZmxvd1NlcnZpY2UigQEKHURlbGV0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiIAoeRGVsZXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlIn4KGkdldFN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiVQobR2V0U3RhdGVmbG93U2VydmljZVJlc3BvbnNlEjYKEXN0YXRlZmxvd19zZXJ2aWNlGAEgASgLMhsudGFpbG9yLnYxLlN0YXRlZmxvd1NlcnZpY2UilwEKHExpc3RTdGF0ZWZsb3dTZXJ2aWNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIoYBCh1MaXN0U3RhdGVmbG93U2VydmljZXNSZXNwb25zZRI3ChJzdGF0ZWZsb3dfc2VydmljZXMYASADKAsyGy50YWlsb3IudjEuU3RhdGVmbG93U2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKANiBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_stateflow_resource]);\n\n/**\n * Describes the message tailor.v1.CreateStateflowServiceRequest.\n * Use `create(CreateStateflowServiceRequestSchema)` to create a new message.\n */\nexport const CreateStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 0);\n\n/**\n * Describes the message tailor.v1.CreateStateflowServiceResponse.\n * Use `create(CreateStateflowServiceResponseSchema)` to create a new message.\n */\nexport const CreateStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 1);\n\n/**\n * Describes the message tailor.v1.UpdateStateflowServiceRequest.\n * Use `create(UpdateStateflowServiceRequestSchema)` to create a new message.\n */\nexport const UpdateStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 2);\n\n/**\n * Describes the message tailor.v1.UpdateStateflowServiceResponse.\n * Use `create(UpdateStateflowServiceResponseSchema)` to create a new message.\n */\nexport const UpdateStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 3);\n\n/**\n * Describes the message tailor.v1.DeleteStateflowServiceRequest.\n * Use `create(DeleteStateflowServiceRequestSchema)` to create a new message.\n */\nexport const DeleteStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 4);\n\n/**\n * Describes the message tailor.v1.DeleteStateflowServiceResponse.\n * Use `create(DeleteStateflowServiceResponseSchema)` to create a new message.\n */\nexport const DeleteStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 5);\n\n/**\n * Describes the message tailor.v1.GetStateflowServiceRequest.\n * Use `create(GetStateflowServiceRequestSchema)` to create a new message.\n */\nexport const GetStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 6);\n\n/**\n * Describes the message tailor.v1.GetStateflowServiceResponse.\n * Use `create(GetStateflowServiceResponseSchema)` to create a new message.\n */\nexport const GetStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 7);\n\n/**\n * Describes the message tailor.v1.ListStateflowServicesRequest.\n * Use `create(ListStateflowServicesRequestSchema)` to create a new message.\n */\nexport const ListStateflowServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 8);\n\n/**\n * Describes the message tailor.v1.ListStateflowServicesResponse.\n * Use `create(ListStateflowServicesResponseSchema)` to create a new message.\n */\nexport const ListStateflowServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 9);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/staticwebsite_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\n\n/**\n * Describes the file tailor/v1/staticwebsite_resource.proto.\n */\nexport const file_tailor_v1_staticwebsite_resource = /*@__PURE__*/\n fileDesc(\"CiZ0YWlsb3IvdjEvc3RhdGljd2Vic2l0ZV9yZXNvdXJjZS5wcm90bxIJdGFpbG9yLnYxIowBCg1TdGF0aWNXZWJzaXRlEjYKBG5hbWUYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEwoLZGVzY3JpcHRpb24YAiABKAkSHAoUYWxsb3dlZF9pcF9hZGRyZXNzZXMYAyADKAkSEAoDdXJsGAQgASgJQgPgQQNiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior]);\n\n/**\n * Describes the message tailor.v1.StaticWebsite.\n * Use `create(StaticWebsiteSchema)` to create a new message.\n */\nexport const StaticWebsiteSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite_resource, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/staticwebsite.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_staticwebsite_resource } from \"./staticwebsite_resource_pb\";\n\n/**\n * Describes the file tailor/v1/staticwebsite.proto.\n */\nexport const file_tailor_v1_staticwebsite = /*@__PURE__*/\n fileDesc(\"Ch10YWlsb3IvdjEvc3RhdGljd2Vic2l0ZS5wcm90bxIJdGFpbG9yLnYxInUKGkNyZWF0ZVN0YXRpY1dlYnNpdGVSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESNwoNc3RhdGljd2Vic2l0ZRgCIAEoCzIYLnRhaWxvci52MS5TdGF0aWNXZWJzaXRlQga6SAPIAQEiTgobQ3JlYXRlU3RhdGljV2Vic2l0ZVJlc3BvbnNlEi8KDXN0YXRpY3dlYnNpdGUYASABKAsyGC50YWlsb3IudjEuU3RhdGljV2Vic2l0ZSJ1ChpVcGRhdGVTdGF0aWNXZWJzaXRlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjcKDXN0YXRpY3dlYnNpdGUYAiABKAsyGC50YWlsb3IudjEuU3RhdGljV2Vic2l0ZUIGukgDyAEBIk4KG1VwZGF0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZRIvCg1zdGF0aWN3ZWJzaXRlGAEgASgLMhgudGFpbG9yLnYxLlN0YXRpY1dlYnNpdGUicQoXR2V0U3RhdGljV2Vic2l0ZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIksKGEdldFN0YXRpY1dlYnNpdGVSZXNwb25zZRIvCg1zdGF0aWN3ZWJzaXRlGAEgASgLMhgudGFpbG9yLnYxLlN0YXRpY1dlYnNpdGUidAoaRGVsZXRlU3RhdGljV2Vic2l0ZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIh0KG0RlbGV0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZSKUAQoZTGlzdFN0YXRpY1dlYnNpdGVzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ifAoaTGlzdFN0YXRpY1dlYnNpdGVzUmVzcG9uc2USMAoOc3RhdGljd2Vic2l0ZXMYASADKAsyGC50YWlsb3IudjEuU3RhdGljV2Vic2l0ZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMicQoXQ3JlYXRlRGVwbG95bWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIjsKGENyZWF0ZURlcGxveW1lbnRSZXNwb25zZRIfCg1kZXBsb3ltZW50X2lkGAEgASgJQgi6SAVyA7ABASK9AgoRVXBsb2FkRmlsZVJlcXVlc3QSTgoQaW5pdGlhbF9tZXRhZGF0YRgBIAEoCzIyLnRhaWxvci52MS5VcGxvYWRGaWxlUmVxdWVzdC5Jbml0aWFsVXBsb2FkTWV0YWRhdGFIABIUCgpjaHVua19kYXRhGAIgASgMSAAatgEKFUluaXRpYWxVcGxvYWRNZXRhZGF0YRIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh8KDWRlcGxveW1lbnRfaWQYAiABKAlCCLpIBXIDsAEBEioKCWZpbGVfcGF0aBgDIAEoCUIXukgUchIyEF5bXi9dKygvW14vXSspKiQSMAoMY29udGVudF90eXBlGAQgASgJQhq6SBdyFTITXlteL10rL1teL10rKDsuKik/JEIJCgdwYXlsb2FkIhQKElVwbG9hZEZpbGVSZXNwb25zZSJbChhQdWJsaXNoRGVwbG95bWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIfCg1kZXBsb3ltZW50X2lkGAIgASgJQgi6SAVyA7ABASIoChlQdWJsaXNoRGVwbG95bWVudFJlc3BvbnNlEgsKA3VybBgBIAEoCWIGcHJvdG8z\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_staticwebsite_resource]);\n\n/**\n * Describes the message tailor.v1.CreateStaticWebsiteRequest.\n * Use `create(CreateStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const CreateStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 0);\n\n/**\n * Describes the message tailor.v1.CreateStaticWebsiteResponse.\n * Use `create(CreateStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const CreateStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 1);\n\n/**\n * Describes the message tailor.v1.UpdateStaticWebsiteRequest.\n * Use `create(UpdateStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const UpdateStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 2);\n\n/**\n * Describes the message tailor.v1.UpdateStaticWebsiteResponse.\n * Use `create(UpdateStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const UpdateStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 3);\n\n/**\n * Describes the message tailor.v1.GetStaticWebsiteRequest.\n * Use `create(GetStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const GetStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 4);\n\n/**\n * Describes the message tailor.v1.GetStaticWebsiteResponse.\n * Use `create(GetStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const GetStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 5);\n\n/**\n * Describes the message tailor.v1.DeleteStaticWebsiteRequest.\n * Use `create(DeleteStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const DeleteStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 6);\n\n/**\n * Describes the message tailor.v1.DeleteStaticWebsiteResponse.\n * Use `create(DeleteStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const DeleteStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 7);\n\n/**\n * Describes the message tailor.v1.ListStaticWebsitesRequest.\n * Use `create(ListStaticWebsitesRequestSchema)` to create a new message.\n */\nexport const ListStaticWebsitesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 8);\n\n/**\n * Describes the message tailor.v1.ListStaticWebsitesResponse.\n * Use `create(ListStaticWebsitesResponseSchema)` to create a new message.\n */\nexport const ListStaticWebsitesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 9);\n\n/**\n * Describes the message tailor.v1.CreateDeploymentRequest.\n * Use `create(CreateDeploymentRequestSchema)` to create a new message.\n */\nexport const CreateDeploymentRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 10);\n\n/**\n * Describes the message tailor.v1.CreateDeploymentResponse.\n * Use `create(CreateDeploymentResponseSchema)` to create a new message.\n */\nexport const CreateDeploymentResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 11);\n\n/**\n * Describes the message tailor.v1.UploadFileRequest.\n * Use `create(UploadFileRequestSchema)` to create a new message.\n */\nexport const UploadFileRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 12);\n\n/**\n * Describes the message tailor.v1.UploadFileRequest.InitialUploadMetadata.\n * Use `create(UploadFileRequest_InitialUploadMetadataSchema)` to create a new message.\n */\nexport const UploadFileRequest_InitialUploadMetadataSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 12, 0);\n\n/**\n * Describes the message tailor.v1.UploadFileResponse.\n * Use `create(UploadFileResponseSchema)` to create a new message.\n */\nexport const UploadFileResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 13);\n\n/**\n * Describes the message tailor.v1.PublishDeploymentRequest.\n * Use `create(PublishDeploymentRequestSchema)` to create a new message.\n */\nexport const PublishDeploymentRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 14);\n\n/**\n * Describes the message tailor.v1.PublishDeploymentResponse.\n * Use `create(PublishDeploymentResponseSchema)` to create a new message.\n */\nexport const PublishDeploymentResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 15);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/tailordb_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/tailordb_resource.proto.\n */\nexport const file_tailor_v1_tailordb_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvdGFpbG9yZGJfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJUCg9UYWlsb3JEQlNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRIYChBkZWZhdWx0X3RpbWV6b25lGAIgASgJIr4nCgxUYWlsb3JEQlR5cGUSLQoEbmFtZRgBIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBIyCgZzY2hlbWEYAiABKAsyIi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWca3gcKClR5cGVDb25maWcSPgoGZmllbGRzGAEgAygLMi4udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlQ29uZmlnLkZpZWxkc0VudHJ5EhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCHNldHRpbmdzGAMgASgLMiMudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlU2V0dGluZxI/Cg90eXBlX3Blcm1pc3Npb24YBCABKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVQZXJtaXNzaW9uEg8KB2V4dGVuZHMYBSABKAgSNQoKZGlyZWN0aXZlcxgGIAMoCzIhLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlyZWN0aXZlEkAKB2luZGV4ZXMYByADKAsyLy50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWcuSW5kZXhlc0VudHJ5EkgKEXJlY29yZF9wZXJtaXNzaW9uGAggASgLMigudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWNvcmRQZXJtaXNzaW9uSACIAQESTAoNcmVsYXRpb25zaGlwcxgJIAMoCzI1LnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5SZWxhdGlvbnNoaXBzRW50cnkSNgoKcGVybWlzc2lvbhgKIAEoCzIiLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbhI8CgVmaWxlcxgLIAMoCzItLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5GaWxlc0VudHJ5GlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBGk0KDEluZGV4ZXNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS50YWlsb3IudjEuVGFpbG9yREJUeXBlLkluZGV4OgI4ARpgChJSZWxhdGlvbnNoaXBzRW50cnkSCwoDa2V5GAEgASgJEjkKBXZhbHVlGAIgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWxhdGlvbnNoaXBDb25maWc6AjgBGlAKCkZpbGVzRW50cnkSCwoDa2V5GAEgASgJEjEKBXZhbHVlGAIgASgLMiIudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWxlQ29uZmlnOgI4AUIUChJfcmVjb3JkX3Blcm1pc3Npb24ahwMKC1R5cGVTZXR0aW5nEhMKC2FnZ3JlZ2F0aW9uGAIgASgIEhMKC2J1bGtfdXBzZXJ0GAMgASgIEiUKGGRlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZRgEIAEoA0gAiAEBEiEKFG1heF9idWxrX3Vwc2VydF9zaXplGAUgASgDSAGIAQESPAoLcGx1cmFsX2Zvcm0YBiABKAlCIrpIH3IdMhteJHxeW2Etel1bYS16QS1aMC05XXswLDYyfSRIAogBARIdChVwdWJsaXNoX3JlY29yZF9ldmVudHMYByABKAgSDQoFZHJhZnQYCCABKAgSTAoWZGlzYWJsZV9ncWxfb3BlcmF0aW9ucxgJIAEoCzIsLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlzYWJsZUdxbE9wZXJhdGlvbnNCGwoZX2RlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZUIXChVfbWF4X2J1bGtfdXBzZXJ0X3NpemVCDgoMX3BsdXJhbF9mb3JtSgQIARACGlQKFERpc2FibGVHcWxPcGVyYXRpb25zEg4KBmNyZWF0ZRgBIAEoCBIOCgZ1cGRhdGUYAiABKAgSDgoGZGVsZXRlGAMgASgIEgwKBHJlYWQYBCABKAgaTQoJRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSMgoEYXJncxgCIAMoCzIkLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlyZWN0aXZlQXJnGisKDERpcmVjdGl2ZUFyZxIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJGiwKBUluZGV4EhMKC2ZpZWxkX25hbWVzGAEgAygJEg4KBnVuaXF1ZRgCIAEoCBrLBQoLRmllbGRDb25maWcSDAoEdHlwZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIWCglzb3VyY2VfaWQYBCABKAlIAIgBARIQCghyZXF1aXJlZBgFIAEoCBINCgVhcnJheRgGIAEoCBI4Cgh2YWxpZGF0ZRgHIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVmFsaWRhdGVDb25maWcSPwoGZmllbGRzGAggAygLMi8udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWVsZENvbmZpZy5GaWVsZHNFbnRyeRINCgVpbmRleBgJIAEoCBIOCgZ1bmlxdWUYCiABKAgSEwoLZm9yZWlnbl9rZXkYCyABKAgSHQoQZm9yZWlnbl9rZXlfdHlwZRgMIAEoCUgBiAEBEh4KEWZvcmVpZ25fa2V5X2ZpZWxkGA0gASgJSAKIAQESNQoFaG9va3MYDiABKAsyIS50YWlsb3IudjEuVGFpbG9yREJUeXBlLkZpZWxkSG9va0gDiAEBEjUKDmFsbG93ZWRfdmFsdWVzGA8gAygLMh0udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5WYWx1ZRIOCgZ2ZWN0b3IYECABKAgSLgoGc2VyaWFsGBEgASgLMh4udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5TZXJpYWwSHQoFc2NhbGUYEiABKAVCCbpIBhoEGAwoAEgEiAEBGlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBQgwKCl9zb3VyY2VfaWRCEwoRX2ZvcmVpZ25fa2V5X3R5cGVCFAoSX2ZvcmVpZ25fa2V5X2ZpZWxkQggKBl9ob29rc0IICgZfc2NhbGVKBAgCEAMacAoSUmVsYXRpb25zaGlwQ29uZmlnEhAKCHJlZl90eXBlGAEgASgJEhEKCXJlZl9maWVsZBgCIAEoCRIRCglzcmNfZmllbGQYAyABKAkSDQoFYXJyYXkYBCABKAgSEwoLZGVzY3JpcHRpb24YBSABKAkaIQoKRmlsZUNvbmZpZxITCgtkZXNjcmlwdGlvbhgBIAEoCRpjCgVWYWx1ZRJFCgV2YWx1ZRgBIAEoCUI2ukgzcjEyHF5bYS16QS1aXVthLXpBLVowLTlfXXswLDYyfSRaBHRydWVaBWZhbHNlWgRudWxsEhMKC2Rlc2NyaXB0aW9uGAIgASgJGqUBCglGaWVsZEhvb2sSGAoLY3JlYXRlX2V4cHIYASABKAlIAIgBARIYCgt1cGRhdGVfZXhwchgCIAEoCUgBiAEBEiEKBmNyZWF0ZRgDIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSIQoGdXBkYXRlGAQgASgLMhEudGFpbG9yLnYxLlNjcmlwdEIOCgxfY3JlYXRlX2V4cHJCDgoMX3VwZGF0ZV9leHByGq4BCgZTZXJpYWwSFgoFc3RhcnQYASABKANCB7pIBCICIAASHwoJbWF4X3ZhbHVlGAIgASgDQge6SAQiAiAASACIAQESUgoGZm9ybWF0GAMgASgJQj26SDpyOBggMjReKD86KD86JSV8W14lXSkqKSUoPzpbMC05XSspP1tkb3hYXSg/Oig/OiUlfFteJV0pKikkSAGIAQFCDAoKX21heF92YWx1ZUIJCgdfZm9ybWF0GrEBCg5WYWxpZGF0ZUNvbmZpZxIMCgRleHByGAEgASgJEkAKBmFjdGlvbhgCIAEoDjIkLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWl0QWN0aW9uQgq6SAeCAQQQASAAEhoKDWVycm9yX21lc3NhZ2UYAyABKAlIAIgBARIhCgZzY3JpcHQYBCABKAsyES50YWlsb3IudjEuU2NyaXB0QhAKDl9lcnJvcl9tZXNzYWdlGqUCCg5UeXBlUGVybWlzc2lvbhI2CgZjcmVhdGUYASADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjQKBHJlYWQYAiADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjYKBnVwZGF0ZRgDIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNgoGZGVsZXRlGAQgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI1CgVhZG1pbhgFIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0auAEKEFJlY29yZFBlcm1pc3Npb24SNAoEcmVhZBgBIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNgoGdXBkYXRlGAIgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI2CgZkZWxldGUYAyADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtGmsKDlBlcm1pc3Npb25JdGVtEkAKBnBlcm1pdBgBIAEoDjIkLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWl0QWN0aW9uQgq6SAeCAQQQASAAEgoKAmlkGAIgASgJEgsKA2lkcxgDIAMoCRq+CAoKUGVybWlzc2lvbhI5CgZjcmVhdGUYASADKAsyKS50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uUG9saWN5EjcKBHJlYWQYAiADKAsyKS50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uUG9saWN5EjkKBnVwZGF0ZRgDIAMoCzIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Qb2xpY3kSOQoGZGVsZXRlGAQgAygLMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBvbGljeRq7AQoGUG9saWN5EkAKCmNvbmRpdGlvbnMYASADKAsyLC50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uQ29uZGl0aW9uEkUKBnBlcm1pdBgCIAEoDjIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5QZXJtaXRCCrpIB4IBBBABIAASGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24a2wEKCUNvbmRpdGlvbhJACgRsZWZ0GAEgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARJJCghvcGVyYXRvchgCIAEoDjIrLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5PcGVyYXRvckIKukgHggEEEAEgABJBCgVyaWdodBgDIAEoCzIqLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5PcGVyYW5kQga6SAPIAQEaywEKB09wZXJhbmQSHQoKdXNlcl9maWVsZBgBIAEoCUIHukgEcgIQAUgAEh8KDHJlY29yZF9maWVsZBgCIAEoCUIHukgEcgIQAUgAEiMKEG9sZF9yZWNvcmRfZmllbGQYAyABKAlCB7pIBHICEAFIABIjChBuZXdfcmVjb3JkX2ZpZWxkGAQgASgJQge6SARyAhABSAASJwoFdmFsdWUYBSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVIAEINCgRraW5kEgW6SAIIASKWAQoIT3BlcmF0b3ISGAoUT1BFUkFUT1JfVU5TUEVDSUZJRUQQABIPCgtPUEVSQVRPUl9FURABEg8KC09QRVJBVE9SX05FEAISDwoLT1BFUkFUT1JfSU4QAxIQCgxPUEVSQVRPUl9OSU4QBBIUChBPUEVSQVRPUl9IQVNfQU5ZEAUSFQoRT1BFUkFUT1JfTkhBU19BTlkQBiJDCgZQZXJtaXQSFgoSUEVSTUlUX1VOU1BFQ0lGSUVEEAASEAoMUEVSTUlUX0FMTE9XEAESDwoLUEVSTUlUX0RFTlkQAiJ6CgxQZXJtaXRBY3Rpb24SHQoZUEVSTUlUX0FDVElPTl9VTlNQRUNJRklFRBAAEhcKE1BFUk1JVF9BQ1RJT05fQUxMT1cQARIaChJQRVJNSVRfQUNUSU9OX1NLSVAQAhoCCAESFgoSUEVSTUlUX0FDVElPTl9ERU5ZEAMirQgKFVRhaWxvckRCR1FMUGVybWlzc2lvbhIPCgJpZBgBIAEoCUID4EEDEjkKCHBvbGljaWVzGAIgAygLMicudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5Qb2xpY3kahAIKBlBvbGljeRI+Cgpjb25kaXRpb25zGAEgAygLMioudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5Db25kaXRpb24SSwoHYWN0aW9ucxgCIAMoDjInLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uQWN0aW9uQhG6SA6SAQsIASIHggEEEAEgABJDCgZwZXJtaXQYAyABKA4yJy50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLlBlcm1pdEIKukgHggEEEAEgABIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbhrVAQoJQ29uZGl0aW9uEj4KBGxlZnQYASABKAsyKC50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARJHCghvcGVyYXRvchgCIAEoDjIpLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uT3BlcmF0b3JCCrpIB4IBBBABIAASPwoFcmlnaHQYAyABKAsyKC50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARpgCgdPcGVyYW5kEh0KCnVzZXJfZmllbGQYASABKAlCB7pIBHICEAFIABInCgV2YWx1ZRgFIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgAQg0KBGtpbmQSBbpIAggBIpYBCghPcGVyYXRvchIYChRPUEVSQVRPUl9VTlNQRUNJRklFRBAAEg8KC09QRVJBVE9SX0VREAESDwoLT1BFUkFUT1JfTkUQAhIPCgtPUEVSQVRPUl9JThADEhAKDE9QRVJBVE9SX05JThAEEhQKEE9QRVJBVE9SX0hBU19BTlkQBRIVChFPUEVSQVRPUl9OSEFTX0FOWRAGIqgBCgZBY3Rpb24SFgoSQUNUSU9OX1VOU1BFQ0lGSUVEEAASDgoKQUNUSU9OX0FMTBABEhEKDUFDVElPTl9DUkVBVEUQAhIPCgtBQ1RJT05fUkVBRBADEhEKDUFDVElPTl9VUERBVEUQBBIRCg1BQ1RJT05fREVMRVRFEAUSFAoQQUNUSU9OX0FHR1JFR0FURRAGEhYKEkFDVElPTl9CVUxLX1VQU0VSVBAHIkMKBlBlcm1pdBIWChJQRVJNSVRfVU5TUEVDSUZJRUQQABIQCgxQRVJNSVRfQUxMT1cQARIPCgtQRVJNSVRfREVOWRACYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_struct, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.TailorDBService.\n * Use `create(TailorDBServiceSchema)` to create a new message.\n */\nexport const TailorDBServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBType.\n * Use `create(TailorDBTypeSchema)` to create a new message.\n */\nexport const TailorDBTypeSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBType.TypeConfig.\n * Use `create(TailorDBType_TypeConfigSchema)` to create a new message.\n */\nexport const TailorDBType_TypeConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBType.TypeSetting.\n * Use `create(TailorDBType_TypeSettingSchema)` to create a new message.\n */\nexport const TailorDBType_TypeSettingSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBType.DisableGqlOperations.\n * Use `create(TailorDBType_DisableGqlOperationsSchema)` to create a new message.\n */\nexport const TailorDBType_DisableGqlOperationsSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Directive.\n * Use `create(TailorDBType_DirectiveSchema)` to create a new message.\n */\nexport const TailorDBType_DirectiveSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 3);\n\n/**\n * Describes the message tailor.v1.TailorDBType.DirectiveArg.\n * Use `create(TailorDBType_DirectiveArgSchema)` to create a new message.\n */\nexport const TailorDBType_DirectiveArgSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 4);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Index.\n * Use `create(TailorDBType_IndexSchema)` to create a new message.\n */\nexport const TailorDBType_IndexSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 5);\n\n/**\n * Describes the message tailor.v1.TailorDBType.FieldConfig.\n * Use `create(TailorDBType_FieldConfigSchema)` to create a new message.\n */\nexport const TailorDBType_FieldConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 6);\n\n/**\n * Describes the message tailor.v1.TailorDBType.RelationshipConfig.\n * Use `create(TailorDBType_RelationshipConfigSchema)` to create a new message.\n */\nexport const TailorDBType_RelationshipConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 7);\n\n/**\n * Describes the message tailor.v1.TailorDBType.FileConfig.\n * Use `create(TailorDBType_FileConfigSchema)` to create a new message.\n */\nexport const TailorDBType_FileConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 8);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Value.\n * Use `create(TailorDBType_ValueSchema)` to create a new message.\n */\nexport const TailorDBType_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 9);\n\n/**\n * Describes the message tailor.v1.TailorDBType.FieldHook.\n * Use `create(TailorDBType_FieldHookSchema)` to create a new message.\n */\nexport const TailorDBType_FieldHookSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 10);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Serial.\n * Use `create(TailorDBType_SerialSchema)` to create a new message.\n */\nexport const TailorDBType_SerialSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 11);\n\n/**\n * Describes the message tailor.v1.TailorDBType.ValidateConfig.\n * Use `create(TailorDBType_ValidateConfigSchema)` to create a new message.\n */\nexport const TailorDBType_ValidateConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 12);\n\n/**\n * Describes the message tailor.v1.TailorDBType.TypePermission.\n * Use `create(TailorDBType_TypePermissionSchema)` to create a new message.\n */\nexport const TailorDBType_TypePermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 13);\n\n/**\n * Describes the message tailor.v1.TailorDBType.RecordPermission.\n * Use `create(TailorDBType_RecordPermissionSchema)` to create a new message.\n */\nexport const TailorDBType_RecordPermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 14);\n\n/**\n * Describes the message tailor.v1.TailorDBType.PermissionItem.\n * Use `create(TailorDBType_PermissionItemSchema)` to create a new message.\n */\nexport const TailorDBType_PermissionItemSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 15);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.\n * Use `create(TailorDBType_PermissionSchema)` to create a new message.\n */\nexport const TailorDBType_PermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 16);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.Policy.\n * Use `create(TailorDBType_Permission_PolicySchema)` to create a new message.\n */\nexport const TailorDBType_Permission_PolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 16, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.Condition.\n * Use `create(TailorDBType_Permission_ConditionSchema)` to create a new message.\n */\nexport const TailorDBType_Permission_ConditionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 16, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.Operand.\n * Use `create(TailorDBType_Permission_OperandSchema)` to create a new message.\n */\nexport const TailorDBType_Permission_OperandSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 16, 2);\n\n/**\n * Describes the enum tailor.v1.TailorDBType.Permission.Operator.\n */\nexport const TailorDBType_Permission_OperatorSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 1, 16, 0);\n\n/**\n * @generated from enum tailor.v1.TailorDBType.Permission.Operator\n */\nexport const TailorDBType_Permission_Operator = /*@__PURE__*/\n tsEnum(TailorDBType_Permission_OperatorSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBType.Permission.Permit.\n */\nexport const TailorDBType_Permission_PermitSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 1, 16, 1);\n\n/**\n * @generated from enum tailor.v1.TailorDBType.Permission.Permit\n */\nexport const TailorDBType_Permission_Permit = /*@__PURE__*/\n tsEnum(TailorDBType_Permission_PermitSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBType.PermitAction.\n */\nexport const TailorDBType_PermitActionSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.TailorDBType.PermitAction\n */\nexport const TailorDBType_PermitAction = /*@__PURE__*/\n tsEnum(TailorDBType_PermitActionSchema);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.\n * Use `create(TailorDBGQLPermissionSchema)` to create a new message.\n */\nexport const TailorDBGQLPermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.Policy.\n * Use `create(TailorDBGQLPermission_PolicySchema)` to create a new message.\n */\nexport const TailorDBGQLPermission_PolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.Condition.\n * Use `create(TailorDBGQLPermission_ConditionSchema)` to create a new message.\n */\nexport const TailorDBGQLPermission_ConditionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.Operand.\n * Use `create(TailorDBGQLPermission_OperandSchema)` to create a new message.\n */\nexport const TailorDBGQLPermission_OperandSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2, 2);\n\n/**\n * Describes the enum tailor.v1.TailorDBGQLPermission.Operator.\n */\nexport const TailorDBGQLPermission_OperatorSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.TailorDBGQLPermission.Operator\n */\nexport const TailorDBGQLPermission_Operator = /*@__PURE__*/\n tsEnum(TailorDBGQLPermission_OperatorSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBGQLPermission.Action.\n */\nexport const TailorDBGQLPermission_ActionSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 2, 1);\n\n/**\n * @generated from enum tailor.v1.TailorDBGQLPermission.Action\n */\nexport const TailorDBGQLPermission_Action = /*@__PURE__*/\n tsEnum(TailorDBGQLPermission_ActionSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBGQLPermission.Permit.\n */\nexport const TailorDBGQLPermission_PermitSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 2, 2);\n\n/**\n * @generated from enum tailor.v1.TailorDBGQLPermission.Permit\n */\nexport const TailorDBGQLPermission_Permit = /*@__PURE__*/\n tsEnum(TailorDBGQLPermission_PermitSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/tailordb.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_field_mask } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_fieldmask_v1_option } from \"../fieldmask/v1/option_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_tailordb_resource } from \"./tailordb_resource_pb\";\n\n/**\n * Describes the file tailor/v1/tailordb.proto.\n */\nexport const file_tailor_v1_tailordb = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvdGFpbG9yZGIucHJvdG8SCXRhaWxvci52MSJ9ChlDb21wb3NlVGFpbG9yREJTRExSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHAoaQ29tcG9zZVRhaWxvckRCU0RMUmVzcG9uc2UiowEKHENyZWF0ZVRhaWxvckRCU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhChBkZWZhdWx0X3RpbWV6b25lGAMgASgJQge6SARyAhggIlUKHUNyZWF0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlEjQKEHRhaWxvcmRiX3NlcnZpY2UYASABKAsyGi50YWlsb3IudjEuVGFpbG9yREJTZXJ2aWNlIqMBChxVcGRhdGVUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIQoQZGVmYXVsdF90aW1lem9uZRgDIAEoCUIHukgEcgIYICJVCh1VcGRhdGVUYWlsb3JEQlNlcnZpY2VSZXNwb25zZRI0ChB0YWlsb3JkYl9zZXJ2aWNlGAEgASgLMhoudGFpbG9yLnYxLlRhaWxvckRCU2VydmljZSKAAQocRGVsZXRlVGFpbG9yREJTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIh8KHURlbGV0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlIn0KGUdldFRhaWxvckRCU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJSChpHZXRUYWlsb3JEQlNlcnZpY2VSZXNwb25zZRI0ChB0YWlsb3JkYl9zZXJ2aWNlGAEgASgLMhoudGFpbG9yLnYxLlRhaWxvckRCU2VydmljZSKWAQobTGlzdFRhaWxvckRCU2VydmljZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiKDAQocTGlzdFRhaWxvckRCU2VydmljZXNSZXNwb25zZRI1ChF0YWlsb3JkYl9zZXJ2aWNlcxgBIAMoCzIaLnRhaWxvci52MS5UYWlsb3JEQlNlcnZpY2USFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIq0BChlDcmVhdGVUYWlsb3JEQlR5cGVSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLgoNdGFpbG9yZGJfdHlwZRgDIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUiTAoaQ3JlYXRlVGFpbG9yREJUeXBlUmVzcG9uc2USLgoNdGFpbG9yZGJfdHlwZRgBIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUiyQcKGVVwZGF0ZVRhaWxvckRCVHlwZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIuCg10YWlsb3JkYl90eXBlGAMgASgLMhcudGFpbG9yLnYxLlRhaWxvckRCVHlwZRKZBgoLdXBkYXRlX21hc2sYZCABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQucFivkrBmZpZWxkc4r5Kw1yZWxhdGlvbnNoaXBzivkrBWZpbGVzivkrC2Rlc2NyaXB0aW9uivkrCHNldHRpbmdzivkrFHNldHRpbmdzLmFnZ3JlZ2F0aW9uivkrFHNldHRpbmdzLmJ1bGtfdXBzZXJ0ivkrIXNldHRpbmdzLmRlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZYr5Kx1zZXR0aW5ncy5tYXhfYnVsa191cHNlcnRfc2l6ZYr5KxRzZXR0aW5ncy5wbHVyYWxfZm9ybYr5Kx5zZXR0aW5ncy5wdWJsaXNoX3JlY29yZF9ldmVudHOK+SsOc2V0dGluZ3MuZHJhZnSK+Ssfc2V0dGluZ3MuZGlzYWJsZV9ncWxfb3BlcmF0aW9uc4r5KyZzZXR0aW5ncy5kaXNhYmxlX2dxbF9vcGVyYXRpb25zLmNyZWF0ZYr5KyZzZXR0aW5ncy5kaXNhYmxlX2dxbF9vcGVyYXRpb25zLnVwZGF0ZYr5KyZzZXR0aW5ncy5kaXNhYmxlX2dxbF9vcGVyYXRpb25zLmRlbGV0ZYr5KyRzZXR0aW5ncy5kaXNhYmxlX2dxbF9vcGVyYXRpb25zLnJlYWSK+SsPdHlwZV9wZXJtaXNzaW9uivkrFnR5cGVfcGVybWlzc2lvbi5jcmVhdGWK+SsUdHlwZV9wZXJtaXNzaW9uLnJlYWSK+SsWdHlwZV9wZXJtaXNzaW9uLnVwZGF0ZYr5KxZ0eXBlX3Blcm1pc3Npb24uZGVsZXRlivkrFXR5cGVfcGVybWlzc2lvbi5hZG1pbor5KwdleHRlbmRzivkrCmRpcmVjdGl2ZXOK+SsHaW5kZXhlc4r5KxFyZWNvcmRfcGVybWlzc2lvbor5KxZyZWNvcmRfcGVybWlzc2lvbi5yZWFkivkrGHJlY29yZF9wZXJtaXNzaW9uLnVwZGF0ZYr5KxhyZWNvcmRfcGVybWlzc2lvbi5kZWxldGUiTAoaVXBkYXRlVGFpbG9yREJUeXBlUmVzcG9uc2USLgoNdGFpbG9yZGJfdHlwZRgBIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUimQEKGURlbGV0ZVRhaWxvckRCVHlwZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIaChJ0YWlsb3JkYl90eXBlX25hbWUYAyABKAkiHAoaRGVsZXRlVGFpbG9yREJUeXBlUmVzcG9uc2UivAEKG1RydW5jYXRlVGFpbG9yREJUeXBlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjsKEnRhaWxvcmRiX3R5cGVfbmFtZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JCIeChxUcnVuY2F0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIoABChxUcnVuY2F0ZVRhaWxvckRCVHlwZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHwodVHJ1bmNhdGVUYWlsb3JEQlR5cGVzUmVzcG9uc2Ui+AEKGExpc3RUYWlsb3JEQlR5cGVzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEiEKBmZpbHRlchgFIAEoCzIRLnRhaWxvci52MS5GaWx0ZXISMAoOcGFnZV9kaXJlY3Rpb24YBiABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ6ChlMaXN0VGFpbG9yREJUeXBlc1Jlc3BvbnNlEi8KDnRhaWxvcmRiX3R5cGVzGAEgAygLMhcudGFpbG9yLnYxLlRhaWxvckRCVHlwZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMitwEKFkdldFRhaWxvckRCVHlwZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI7ChJ0YWlsb3JkYl90eXBlX25hbWUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQiSQoXR2V0VGFpbG9yREJUeXBlUmVzcG9uc2USLgoNdGFpbG9yZGJfdHlwZRgBIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUi+AEKIkNyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIyCgl0eXBlX25hbWUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQSPAoKcGVybWlzc2lvbhgEIAEoCzIgLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb25CBrpIA8gBASJbCiNDcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXNwb25zZRI0CgpwZXJtaXNzaW9uGAEgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbiK3AQofR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKCXR5cGVfbmFtZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JCJYCiBHZXRUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXNwb25zZRI0CgpwZXJtaXNzaW9uGAEgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbiLeAQohTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEgoKcGFnZV90b2tlbhgDIAEoCRIRCglwYWdlX3NpemUYBCABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBSABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiKmAgoiTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXNwb25zZRJkCgtwZXJtaXNzaW9ucxgBIAMoCzJPLnRhaWxvci52MS5MaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9uc1Jlc3BvbnNlLlRhaWxvckRCR1FMUGVybWlzc2lvbldpdGhUeXBlTmFtZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMabAohVGFpbG9yREJHUUxQZXJtaXNzaW9uV2l0aFR5cGVOYW1lEhEKCXR5cGVfbmFtZRgBIAEoCRI0CgpwZXJtaXNzaW9uGAIgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbiL4AQoiVXBkYXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKCXR5cGVfbmFtZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBI8CgpwZXJtaXNzaW9uGAQgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbkIGukgDyAEBIlsKI1VwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlEjQKCnBlcm1pc3Npb24YASABKAsyIC50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uIroBCiJEZWxldGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSMgoJdHlwZV9uYW1lGAMgASgJQh+6SBxyGjIYXltBLVpdW2EtekEtWjAtOV17MCw2Mn0kIiUKI0RlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_tailor_fieldmask_v1_option, file_tailor_v1_resource, file_tailor_v1_tailordb_resource]);\n\n/**\n * Describes the message tailor.v1.ComposeTailorDBSDLRequest.\n * Use `create(ComposeTailorDBSDLRequestSchema)` to create a new message.\n */\nexport const ComposeTailorDBSDLRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 0);\n\n/**\n * Describes the message tailor.v1.ComposeTailorDBSDLResponse.\n * Use `create(ComposeTailorDBSDLResponseSchema)` to create a new message.\n */\nexport const ComposeTailorDBSDLResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 1);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBServiceRequest.\n * Use `create(CreateTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const CreateTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 2);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBServiceResponse.\n * Use `create(CreateTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const CreateTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 3);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBServiceRequest.\n * Use `create(UpdateTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const UpdateTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 4);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBServiceResponse.\n * Use `create(UpdateTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const UpdateTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 5);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBServiceRequest.\n * Use `create(DeleteTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const DeleteTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 6);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBServiceResponse.\n * Use `create(DeleteTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const DeleteTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 7);\n\n/**\n * Describes the message tailor.v1.GetTailorDBServiceRequest.\n * Use `create(GetTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const GetTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 8);\n\n/**\n * Describes the message tailor.v1.GetTailorDBServiceResponse.\n * Use `create(GetTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const GetTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 9);\n\n/**\n * Describes the message tailor.v1.ListTailorDBServicesRequest.\n * Use `create(ListTailorDBServicesRequestSchema)` to create a new message.\n */\nexport const ListTailorDBServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 10);\n\n/**\n * Describes the message tailor.v1.ListTailorDBServicesResponse.\n * Use `create(ListTailorDBServicesResponseSchema)` to create a new message.\n */\nexport const ListTailorDBServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 11);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBTypeRequest.\n * Use `create(CreateTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const CreateTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 12);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBTypeResponse.\n * Use `create(CreateTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const CreateTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 13);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBTypeRequest.\n * Use `create(UpdateTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const UpdateTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 14);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBTypeResponse.\n * Use `create(UpdateTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const UpdateTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 15);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBTypeRequest.\n * Use `create(DeleteTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const DeleteTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 16);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBTypeResponse.\n * Use `create(DeleteTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const DeleteTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 17);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypeRequest.\n * Use `create(TruncateTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 18);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypeResponse.\n * Use `create(TruncateTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 19);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypesRequest.\n * Use `create(TruncateTailorDBTypesRequestSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 20);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypesResponse.\n * Use `create(TruncateTailorDBTypesResponseSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 21);\n\n/**\n * Describes the message tailor.v1.ListTailorDBTypesRequest.\n * Use `create(ListTailorDBTypesRequestSchema)` to create a new message.\n */\nexport const ListTailorDBTypesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 22);\n\n/**\n * Describes the message tailor.v1.ListTailorDBTypesResponse.\n * Use `create(ListTailorDBTypesResponseSchema)` to create a new message.\n */\nexport const ListTailorDBTypesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 23);\n\n/**\n * Describes the message tailor.v1.GetTailorDBTypeRequest.\n * Use `create(GetTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const GetTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 24);\n\n/**\n * Describes the message tailor.v1.GetTailorDBTypeResponse.\n * Use `create(GetTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const GetTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 25);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBGQLPermissionRequest.\n * Use `create(CreateTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const CreateTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 26);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBGQLPermissionResponse.\n * Use `create(CreateTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const CreateTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 27);\n\n/**\n * Describes the message tailor.v1.GetTailorDBGQLPermissionRequest.\n * Use `create(GetTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const GetTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 28);\n\n/**\n * Describes the message tailor.v1.GetTailorDBGQLPermissionResponse.\n * Use `create(GetTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const GetTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 29);\n\n/**\n * Describes the message tailor.v1.ListTailorDBGQLPermissionsRequest.\n * Use `create(ListTailorDBGQLPermissionsRequestSchema)` to create a new message.\n */\nexport const ListTailorDBGQLPermissionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 30);\n\n/**\n * Describes the message tailor.v1.ListTailorDBGQLPermissionsResponse.\n * Use `create(ListTailorDBGQLPermissionsResponseSchema)` to create a new message.\n */\nexport const ListTailorDBGQLPermissionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 31);\n\n/**\n * Describes the message tailor.v1.ListTailorDBGQLPermissionsResponse.TailorDBGQLPermissionWithTypeName.\n * Use `create(ListTailorDBGQLPermissionsResponse_TailorDBGQLPermissionWithTypeNameSchema)` to create a new message.\n */\nexport const ListTailorDBGQLPermissionsResponse_TailorDBGQLPermissionWithTypeNameSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 31, 0);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBGQLPermissionRequest.\n * Use `create(UpdateTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const UpdateTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 32);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBGQLPermissionResponse.\n * Use `create(UpdateTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const UpdateTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 33);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBGQLPermissionRequest.\n * Use `create(DeleteTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const DeleteTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 34);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBGQLPermissionResponse.\n * Use `create(DeleteTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const DeleteTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 35);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/telemetry_export_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/telemetry_export_resource.proto.\n */\nexport const file_tailor_v1_telemetry_export_resource = /*@__PURE__*/\n fileDesc(\"Cil0YWlsb3IvdjEvdGVsZW1ldHJ5X2V4cG9ydF9yZXNvdXJjZS5wcm90bxIJdGFpbG9yLnYxIrgECg9UZWxlbWV0cnlFeHBvcnQSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIPCgdlbmFibGVkGAIgASgIEhkKCGVuZHBvaW50GAMgASgJQge6SARyAhABEkAKCHByb3RvY29sGAQgASgOMiIudGFpbG9yLnYxLlRlbGVtZXRyeUV4cG9ydFByb3RvY29sQgq6SAeCAQQQASAAEjgKB2hlYWRlcnMYBSADKAsyJy50YWlsb3IudjEuVGVsZW1ldHJ5RXhwb3J0LkhlYWRlcnNFbnRyeRIyCgRhdXRoGAYgASgLMiQudGFpbG9yLnYxLlRlbGVtZXRyeUV4cG9ydEF1dGhDb25maWcSJwoGdHJhY2VzGAcgASgLMhcudGFpbG9yLnYxLlRyYWNlc0NvbmZpZxIpCgdtZXRyaWNzGAggASgLMhgudGFpbG9yLnYxLk1ldHJpY3NDb25maWcSIwoEbG9ncxgJIAEoCzIVLnRhaWxvci52MS5Mb2dzQ29uZmlnEjMKCmNyZWF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSMwoKdXBkYXRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxouCgxIZWFkZXJzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIfCgxUcmFjZXNDb25maWcSDwoHZW5hYmxlZBgBIAEoCCIgCg1NZXRyaWNzQ29uZmlnEg8KB2VuYWJsZWQYASABKAgiHQoKTG9nc0NvbmZpZxIPCgdlbmFibGVkGAEgASgIIqEBChlUZWxlbWV0cnlFeHBvcnRBdXRoQ29uZmlnEjcKB2FwaV9rZXkYASABKAsyJC50YWlsb3IudjEuVGVsZW1ldHJ5RXhwb3J0QXBpS2V5QXV0aEgAEkEKDGJlYXJlcl90b2tlbhgCIAEoCzIpLnRhaWxvci52MS5UZWxlbWV0cnlFeHBvcnRCZWFyZXJUb2tlbkF1dGhIAEIICgZtZXRob2QibwoZVGVsZW1ldHJ5RXhwb3J0QXBpS2V5QXV0aBIcCgtoZWFkZXJfbmFtZRgBIAEoCUIHukgEcgIQARI0CgxzZWNyZXRfdmFsdWUYAiABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWVCBrpIA8gBASJWCh5UZWxlbWV0cnlFeHBvcnRCZWFyZXJUb2tlbkF1dGgSNAoMc2VjcmV0X3ZhbHVlGAEgASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlQga6SAPIAQEqjAEKF1RlbGVtZXRyeUV4cG9ydFByb3RvY29sEikKJVRFTEVNRVRSWV9FWFBPUlRfUFJPVE9DT0xfVU5TUEVDSUZJRUQQABIiCh5URUxFTUVUUllfRVhQT1JUX1BST1RPQ09MX0dSUEMQARIiCh5URUxFTUVUUllfRVhQT1JUX1BST1RPQ09MX0hUVFAQAmIGcHJvdG8z\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.TelemetryExport.\n * Use `create(TelemetryExportSchema)` to create a new message.\n */\nexport const TelemetryExportSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 0);\n\n/**\n * Describes the message tailor.v1.TracesConfig.\n * Use `create(TracesConfigSchema)` to create a new message.\n */\nexport const TracesConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 1);\n\n/**\n * Describes the message tailor.v1.MetricsConfig.\n * Use `create(MetricsConfigSchema)` to create a new message.\n */\nexport const MetricsConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 2);\n\n/**\n * Describes the message tailor.v1.LogsConfig.\n * Use `create(LogsConfigSchema)` to create a new message.\n */\nexport const LogsConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 3);\n\n/**\n * Describes the message tailor.v1.TelemetryExportAuthConfig.\n * Use `create(TelemetryExportAuthConfigSchema)` to create a new message.\n */\nexport const TelemetryExportAuthConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 4);\n\n/**\n * Describes the message tailor.v1.TelemetryExportApiKeyAuth.\n * Use `create(TelemetryExportApiKeyAuthSchema)` to create a new message.\n */\nexport const TelemetryExportApiKeyAuthSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 5);\n\n/**\n * Describes the message tailor.v1.TelemetryExportBearerTokenAuth.\n * Use `create(TelemetryExportBearerTokenAuthSchema)` to create a new message.\n */\nexport const TelemetryExportBearerTokenAuthSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export_resource, 6);\n\n/**\n * Describes the enum tailor.v1.TelemetryExportProtocol.\n */\nexport const TelemetryExportProtocolSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_telemetry_export_resource, 0);\n\n/**\n * @generated from enum tailor.v1.TelemetryExportProtocol\n */\nexport const TelemetryExportProtocol = /*@__PURE__*/\n tsEnum(TelemetryExportProtocolSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/telemetry_export.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_telemetry_export_resource } from \"./telemetry_export_resource_pb\";\n\n/**\n * Describes the file tailor/v1/telemetry_export.proto.\n */\nexport const file_tailor_v1_telemetry_export = /*@__PURE__*/\n fileDesc(\"CiB0YWlsb3IvdjEvdGVsZW1ldHJ5X2V4cG9ydC5wcm90bxIJdGFpbG9yLnYxInwKHENyZWF0ZVRlbGVtZXRyeUV4cG9ydFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI8ChB0ZWxlbWV0cnlfZXhwb3J0GAIgASgLMhoudGFpbG9yLnYxLlRlbGVtZXRyeUV4cG9ydEIGukgDyAEBIlUKHUNyZWF0ZVRlbGVtZXRyeUV4cG9ydFJlc3BvbnNlEjQKEHRlbGVtZXRyeV9leHBvcnQYASABKAsyGi50YWlsb3IudjEuVGVsZW1ldHJ5RXhwb3J0InwKHFVwZGF0ZVRlbGVtZXRyeUV4cG9ydFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI8ChB0ZWxlbWV0cnlfZXhwb3J0GAIgASgLMhoudGFpbG9yLnYxLlRlbGVtZXRyeUV4cG9ydEIGukgDyAEBIlUKHVVwZGF0ZVRlbGVtZXRyeUV4cG9ydFJlc3BvbnNlEjQKEHRlbGVtZXRyeV9leHBvcnQYASABKAsyGi50YWlsb3IudjEuVGVsZW1ldHJ5RXhwb3J0InMKGUdldFRlbGVtZXRyeUV4cG9ydFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIlIKGkdldFRlbGVtZXRyeUV4cG9ydFJlc3BvbnNlEjQKEHRlbGVtZXRyeV9leHBvcnQYASABKAsyGi50YWlsb3IudjEuVGVsZW1ldHJ5RXhwb3J0IpYBChtMaXN0VGVsZW1ldHJ5RXhwb3J0c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIoMBChxMaXN0VGVsZW1ldHJ5RXhwb3J0c1Jlc3BvbnNlEjUKEXRlbGVtZXRyeV9leHBvcnRzGAEgAygLMhoudGFpbG9yLnYxLlRlbGVtZXRyeUV4cG9ydBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMidgocRGVsZXRlVGVsZW1ldHJ5RXhwb3J0UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKBG5hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHwodRGVsZXRlVGVsZW1ldHJ5RXhwb3J0UmVzcG9uc2UidAoaVGVzdFRlbGVtZXRyeUV4cG9ydFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIj8KG1Rlc3RUZWxlbWV0cnlFeHBvcnRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIEg8KB21lc3NhZ2UYAiABKAliBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_telemetry_export_resource]);\n\n/**\n * Describes the message tailor.v1.CreateTelemetryExportRequest.\n * Use `create(CreateTelemetryExportRequestSchema)` to create a new message.\n */\nexport const CreateTelemetryExportRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 0);\n\n/**\n * Describes the message tailor.v1.CreateTelemetryExportResponse.\n * Use `create(CreateTelemetryExportResponseSchema)` to create a new message.\n */\nexport const CreateTelemetryExportResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 1);\n\n/**\n * Describes the message tailor.v1.UpdateTelemetryExportRequest.\n * Use `create(UpdateTelemetryExportRequestSchema)` to create a new message.\n */\nexport const UpdateTelemetryExportRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 2);\n\n/**\n * Describes the message tailor.v1.UpdateTelemetryExportResponse.\n * Use `create(UpdateTelemetryExportResponseSchema)` to create a new message.\n */\nexport const UpdateTelemetryExportResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 3);\n\n/**\n * Describes the message tailor.v1.GetTelemetryExportRequest.\n * Use `create(GetTelemetryExportRequestSchema)` to create a new message.\n */\nexport const GetTelemetryExportRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 4);\n\n/**\n * Describes the message tailor.v1.GetTelemetryExportResponse.\n * Use `create(GetTelemetryExportResponseSchema)` to create a new message.\n */\nexport const GetTelemetryExportResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 5);\n\n/**\n * Describes the message tailor.v1.ListTelemetryExportsRequest.\n * Use `create(ListTelemetryExportsRequestSchema)` to create a new message.\n */\nexport const ListTelemetryExportsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 6);\n\n/**\n * Describes the message tailor.v1.ListTelemetryExportsResponse.\n * Use `create(ListTelemetryExportsResponseSchema)` to create a new message.\n */\nexport const ListTelemetryExportsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 7);\n\n/**\n * Describes the message tailor.v1.DeleteTelemetryExportRequest.\n * Use `create(DeleteTelemetryExportRequestSchema)` to create a new message.\n */\nexport const DeleteTelemetryExportRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 8);\n\n/**\n * Describes the message tailor.v1.DeleteTelemetryExportResponse.\n * Use `create(DeleteTelemetryExportResponseSchema)` to create a new message.\n */\nexport const DeleteTelemetryExportResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 9);\n\n/**\n * Describes the message tailor.v1.TestTelemetryExportRequest.\n * Use `create(TestTelemetryExportRequestSchema)` to create a new message.\n */\nexport const TestTelemetryExportRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 10);\n\n/**\n * Describes the message tailor.v1.TestTelemetryExportResponse.\n * Use `create(TestTelemetryExportResponseSchema)` to create a new message.\n */\nexport const TestTelemetryExportResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_telemetry_export, 11);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workflow_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/workflow_resource.proto.\n */\nexport const file_tailor_v1_workflow_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvd29ya2Zsb3dfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSKtAQoTV29ya2Zsb3dKb2JGdW5jdGlvbhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg4KBnNjcmlwdBgDIAEoCRIPCgd2ZXJzaW9uGAQgASgDEjMKCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSFwoKc2NyaXB0X3JlZhgGIAEoCUgAiAEBQg0KC19zY3JpcHRfcmVmIpMECgtSZXRyeVBvbGljeRIeCgttYXhfcmV0cmllcxgBIAEoBUIJukgGGgQYCigAEkEKD2luaXRpYWxfYmFja29mZhgCIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkINukgKqgEHIgMIkBwyABI+CgttYXhfYmFja29mZhgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIOukgLqgEIIgQIgKMFMgASKgoSYmFja29mZl9tdWx0aXBsaWVyGAQgASgBQg66SAsSCSkAAAAAAADwPzq0ArpIsAIakwEKE2JhY2tvZmZfY29uc2lzdGVuY3kSOWluaXRpYWxfYmFja29mZiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXhfYmFja29mZhpBdGhpcy5tYXhfcmV0cmllcyA9PSAwIHx8IHRoaXMuaW5pdGlhbF9iYWNrb2ZmIDw9IHRoaXMubWF4X2JhY2tvZmYalwEKGGluaXRpYWxfYmFja29mZl9yZXF1aXJlZBI7aW5pdGlhbF9iYWNrb2ZmIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgd2hlbiBtYXhfcmV0cmllcyA+IDAaPnRoaXMubWF4X3JldHJpZXMgPT0gMCB8fCB0aGlzLmluaXRpYWxfYmFja29mZiA+IGR1cmF0aW9uKCcwcycpIuUCCghXb3JrZmxvdxIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEh4KFm1haW5fam9iX2Z1bmN0aW9uX25hbWUYAyABKAkSPAoNam9iX2Z1bmN0aW9ucxgEIAMoCzIlLnRhaWxvci52MS5Xb3JrZmxvdy5Kb2JGdW5jdGlvbnNFbnRyeRIzCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjMKCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSMQoMcmV0cnlfcG9saWN5GAcgASgLMhYudGFpbG9yLnYxLlJldHJ5UG9saWN5SACIAQEaMwoRSm9iRnVuY3Rpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgDOgI4AUIPCg1fcmV0cnlfcG9saWN5ItwCChRXb3JrZmxvd0pvYkV4ZWN1dGlvbhIKCgJpZBgBIAEoCRIYChBzdGFja2VkX2pvYl9uYW1lGAIgASgJEjYKBnN0YXR1cxgDIAEoDjImLnRhaWxvci52MS5Xb3JrZmxvd0pvYkV4ZWN1dGlvbi5TdGF0dXMSFAoMZXhlY3V0aW9uX2lkGAQgASgJEi4KCnN0YXJ0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2ZpbmlzaGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJvCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASEgoOU1RBVFVTX1JVTk5JTkcQARISCg5TVEFUVVNfU1VTUEVORBACEhIKDlNUQVRVU19TVUNDRVNTEAMSEQoNU1RBVFVTX0ZBSUxFRBAEIvIDChFXb3JrZmxvd0V4ZWN1dGlvbhIKCgJpZBgBIAEoCRIVCg13b3JrZmxvd19uYW1lGAIgASgJEjMKBnN0YXR1cxgDIAEoDjIjLnRhaWxvci52MS5Xb3JrZmxvd0V4ZWN1dGlvbi5TdGF0dXMSNwoOam9iX2V4ZWN1dGlvbnMYBCADKAsyHy50YWlsb3IudjEuV29ya2Zsb3dKb2JFeGVjdXRpb24SLgoKc3RhcnRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC3JldHJ5X2NvdW50GAcgASgFEi8KC3JldHJ5X2FmdGVyGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKkAQoGU3RhdHVzEhYKElNUQVRVU19VTlNQRUNJRklFRBAAEhIKDlNUQVRVU19QRU5ESU5HEAESGQoVU1RBVFVTX1BFTkRJTkdfUkVTVU1FEAISEgoOU1RBVFVTX1JVTk5JTkcQAxISCg5TVEFUVVNfU1VDQ0VTUxAEEhEKDVNUQVRVU19GQUlMRUQQBRIYChRTVEFUVVNfUEVORElOR19SRVRSWRAGYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_duration, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.WorkflowJobFunction.\n * Use `create(WorkflowJobFunctionSchema)` to create a new message.\n */\nexport const WorkflowJobFunctionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 0);\n\n/**\n * Describes the message tailor.v1.RetryPolicy.\n * Use `create(RetryPolicySchema)` to create a new message.\n */\nexport const RetryPolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 1);\n\n/**\n * Describes the message tailor.v1.Workflow.\n * Use `create(WorkflowSchema)` to create a new message.\n */\nexport const WorkflowSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 2);\n\n/**\n * Describes the message tailor.v1.WorkflowJobExecution.\n * Use `create(WorkflowJobExecutionSchema)` to create a new message.\n */\nexport const WorkflowJobExecutionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 3);\n\n/**\n * Describes the enum tailor.v1.WorkflowJobExecution.Status.\n */\nexport const WorkflowJobExecution_StatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workflow_resource, 3, 0);\n\n/**\n * @generated from enum tailor.v1.WorkflowJobExecution.Status\n */\nexport const WorkflowJobExecution_Status = /*@__PURE__*/\n tsEnum(WorkflowJobExecution_StatusSchema);\n\n/**\n * Describes the message tailor.v1.WorkflowExecution.\n * Use `create(WorkflowExecutionSchema)` to create a new message.\n */\nexport const WorkflowExecutionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 4);\n\n/**\n * Describes the enum tailor.v1.WorkflowExecution.Status.\n */\nexport const WorkflowExecution_StatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workflow_resource, 4, 0);\n\n/**\n * @generated from enum tailor.v1.WorkflowExecution.Status\n */\nexport const WorkflowExecution_Status = /*@__PURE__*/\n tsEnum(WorkflowExecution_StatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workflow.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_workflow_resource } from \"./workflow_resource_pb\";\n\n/**\n * Describes the file tailor/v1/workflow.proto.\n */\nexport const file_tailor_v1_workflow = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvd29ya2Zsb3cucHJvdG8SCXRhaWxvci52MSKGAwoVQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5EjEKDHJldHJ5X3BvbGljeRgFIAEoCzIWLnRhaWxvci52MS5SZXRyeVBvbGljeUgAiAEBGjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAFCDwoNX3JldHJ5X3BvbGljeSI/ChZDcmVhdGVXb3JrZmxvd1Jlc3BvbnNlEiUKCHdvcmtmbG93GAEgASgLMhMudGFpbG9yLnYxLldvcmtmbG93IoYDChVVcGRhdGVXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg13b3JrZmxvd19uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkgKFm1haW5fam9iX2Z1bmN0aW9uX25hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSQoNam9iX2Z1bmN0aW9ucxgEIAMoCzIyLnRhaWxvci52MS5VcGRhdGVXb3JrZmxvd1JlcXVlc3QuSm9iRnVuY3Rpb25zRW50cnkSMQoMcmV0cnlfcG9saWN5GAUgASgLMhYudGFpbG9yLnYxLlJldHJ5UG9saWN5SACIAQEaMwoRSm9iRnVuY3Rpb25zRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgDOgI4AUIPCg1fcmV0cnlfcG9saWN5Ij8KFlVwZGF0ZVdvcmtmbG93UmVzcG9uc2USJQoId29ya2Zsb3cYASABKAsyEy50YWlsb3IudjEuV29ya2Zsb3ciVgoVRGVsZXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHQoLd29ya2Zsb3dfaWQYAiABKAlCCLpIBXIDsAEBIhgKFkRlbGV0ZVdvcmtmbG93UmVzcG9uc2UiUwoSR2V0V29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHQoLd29ya2Zsb3dfaWQYAiABKAlCCLpIBXIDsAEBIjwKE0dldFdvcmtmbG93UmVzcG9uc2USJQoId29ya2Zsb3cYASABKAsyEy50YWlsb3IudjEuV29ya2Zsb3ciewoYR2V0V29ya2Zsb3dCeU5hbWVSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJCChlHZXRXb3JrZmxvd0J5TmFtZVJlc3BvbnNlEiUKCHdvcmtmbG93GAEgASgLMhMudGFpbG9yLnYxLldvcmtmbG93Io8BChRMaXN0V29ya2Zsb3dzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ibQoVTGlzdFdvcmtmbG93c1Jlc3BvbnNlEiYKCXdvcmtmbG93cxgBIAMoCzITLnRhaWxvci52MS5Xb3JrZmxvdxIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMivwEKIENyZWF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoRam9iX2Z1bmN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSDgoGc2NyaXB0GAMgASgJEhcKCnNjcmlwdF9yZWYYBCABKAlIAIgBAUINCgtfc2NyaXB0X3JlZiJZCiFDcmVhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2USNAoMam9iX2Z1bmN0aW9uGAEgASgLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24ivwEKIFVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoRam9iX2Z1bmN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSDgoGc2NyaXB0GAMgASgJEhcKCnNjcmlwdF9yZWYYBCABKAlIAIgBAUINCgtfc2NyaXB0X3JlZiJZCiFVcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2USNAoMam9iX2Z1bmN0aW9uGAEgASgLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24iYgodR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIhCg9qb2JfZnVuY3Rpb25faWQYAiABKAlCCLpIBXIDsAEBIlYKHkdldFdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiKKAQojR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJcCiRHZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lUmVzcG9uc2USNAoMam9iX2Z1bmN0aW9uGAEgASgLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24imgEKH0xpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIocBCiBMaXN0V29ya2Zsb3dKb2JGdW5jdGlvbnNSZXNwb25zZRI1Cg1qb2JfZnVuY3Rpb25zGAEgAygLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIl0KG0dldFdvcmtmbG93RXhlY3V0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh4KDGV4ZWN1dGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiTwocR2V0V29ya2Zsb3dFeGVjdXRpb25SZXNwb25zZRIvCglleGVjdXRpb24YASABKAsyHC50YWlsb3IudjEuV29ya2Zsb3dFeGVjdXRpb24i/AEKHUxpc3RXb3JrZmxvd0V4ZWN1dGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgGIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKBmZpbHRlchgFIAEoCzIRLnRhaWxvci52MS5GaWx0ZXIigAEKHkxpc3RXb3JrZmxvd0V4ZWN1dGlvbnNSZXNwb25zZRIwCgpleGVjdXRpb25zGAEgAygLMhwudGFpbG9yLnYxLldvcmtmbG93RXhlY3V0aW9uEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKhAQoYVGVzdFN0YXJ0V29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHQoLd29ya2Zsb3dfaWQYAiABKAlCCLpIBXIDsAEBEiwKDGF1dGhfaW52b2tlchgDIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlchIQCgNhcmcYBCABKAlIAIgBAUIGCgRfYXJnIjEKGVRlc3RTdGFydFdvcmtmbG93UmVzcG9uc2USFAoMZXhlY3V0aW9uX2lkGAEgASgJIlsKGVRlc3RSZXN1bWVXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIeCgxleGVjdXRpb25faWQYAiABKAlCCLpIBXIDsAEBIjIKGlRlc3RSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlEhQKDGV4ZWN1dGlvbl9pZBgBIAEoCWIGcHJvdG8z\", [file_buf_validate_validate, file_tailor_v1_auth_resource, file_tailor_v1_resource, file_tailor_v1_workflow_resource]);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowRequest.\n * Use `create(CreateWorkflowRequestSchema)` to create a new message.\n */\nexport const CreateWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 0);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowResponse.\n * Use `create(CreateWorkflowResponseSchema)` to create a new message.\n */\nexport const CreateWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 1);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowRequest.\n * Use `create(UpdateWorkflowRequestSchema)` to create a new message.\n */\nexport const UpdateWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 2);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowResponse.\n * Use `create(UpdateWorkflowResponseSchema)` to create a new message.\n */\nexport const UpdateWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 3);\n\n/**\n * Describes the message tailor.v1.DeleteWorkflowRequest.\n * Use `create(DeleteWorkflowRequestSchema)` to create a new message.\n */\nexport const DeleteWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 4);\n\n/**\n * Describes the message tailor.v1.DeleteWorkflowResponse.\n * Use `create(DeleteWorkflowResponseSchema)` to create a new message.\n */\nexport const DeleteWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 5);\n\n/**\n * Describes the message tailor.v1.GetWorkflowRequest.\n * Use `create(GetWorkflowRequestSchema)` to create a new message.\n */\nexport const GetWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 6);\n\n/**\n * Describes the message tailor.v1.GetWorkflowResponse.\n * Use `create(GetWorkflowResponseSchema)` to create a new message.\n */\nexport const GetWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 7);\n\n/**\n * Describes the message tailor.v1.GetWorkflowByNameRequest.\n * Use `create(GetWorkflowByNameRequestSchema)` to create a new message.\n */\nexport const GetWorkflowByNameRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 8);\n\n/**\n * Describes the message tailor.v1.GetWorkflowByNameResponse.\n * Use `create(GetWorkflowByNameResponseSchema)` to create a new message.\n */\nexport const GetWorkflowByNameResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 9);\n\n/**\n * Describes the message tailor.v1.ListWorkflowsRequest.\n * Use `create(ListWorkflowsRequestSchema)` to create a new message.\n */\nexport const ListWorkflowsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 10);\n\n/**\n * Describes the message tailor.v1.ListWorkflowsResponse.\n * Use `create(ListWorkflowsResponseSchema)` to create a new message.\n */\nexport const ListWorkflowsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 11);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowJobFunctionRequest.\n * Use `create(CreateWorkflowJobFunctionRequestSchema)` to create a new message.\n */\nexport const CreateWorkflowJobFunctionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 12);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowJobFunctionResponse.\n * Use `create(CreateWorkflowJobFunctionResponseSchema)` to create a new message.\n */\nexport const CreateWorkflowJobFunctionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 13);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowJobFunctionRequest.\n * Use `create(UpdateWorkflowJobFunctionRequestSchema)` to create a new message.\n */\nexport const UpdateWorkflowJobFunctionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 14);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowJobFunctionResponse.\n * Use `create(UpdateWorkflowJobFunctionResponseSchema)` to create a new message.\n */\nexport const UpdateWorkflowJobFunctionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 15);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionRequest.\n * Use `create(GetWorkflowJobFunctionRequestSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 16);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionResponse.\n * Use `create(GetWorkflowJobFunctionResponseSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 17);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionByNameRequest.\n * Use `create(GetWorkflowJobFunctionByNameRequestSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionByNameRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 18);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionByNameResponse.\n * Use `create(GetWorkflowJobFunctionByNameResponseSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionByNameResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 19);\n\n/**\n * Describes the message tailor.v1.ListWorkflowJobFunctionsRequest.\n * Use `create(ListWorkflowJobFunctionsRequestSchema)` to create a new message.\n */\nexport const ListWorkflowJobFunctionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 20);\n\n/**\n * Describes the message tailor.v1.ListWorkflowJobFunctionsResponse.\n * Use `create(ListWorkflowJobFunctionsResponseSchema)` to create a new message.\n */\nexport const ListWorkflowJobFunctionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 21);\n\n/**\n * Describes the message tailor.v1.GetWorkflowExecutionRequest.\n * Use `create(GetWorkflowExecutionRequestSchema)` to create a new message.\n */\nexport const GetWorkflowExecutionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 22);\n\n/**\n * Describes the message tailor.v1.GetWorkflowExecutionResponse.\n * Use `create(GetWorkflowExecutionResponseSchema)` to create a new message.\n */\nexport const GetWorkflowExecutionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 23);\n\n/**\n * Describes the message tailor.v1.ListWorkflowExecutionsRequest.\n * Use `create(ListWorkflowExecutionsRequestSchema)` to create a new message.\n */\nexport const ListWorkflowExecutionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 24);\n\n/**\n * Describes the message tailor.v1.ListWorkflowExecutionsResponse.\n * Use `create(ListWorkflowExecutionsResponseSchema)` to create a new message.\n */\nexport const ListWorkflowExecutionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 25);\n\n/**\n * Describes the message tailor.v1.TestStartWorkflowRequest.\n * Use `create(TestStartWorkflowRequestSchema)` to create a new message.\n */\nexport const TestStartWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 26);\n\n/**\n * Describes the message tailor.v1.TestStartWorkflowResponse.\n * Use `create(TestStartWorkflowResponseSchema)` to create a new message.\n */\nexport const TestStartWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 27);\n\n/**\n * Describes the message tailor.v1.TestResumeWorkflowRequest.\n * Use `create(TestResumeWorkflowRequestSchema)` to create a new message.\n */\nexport const TestResumeWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 28);\n\n/**\n * Describes the message tailor.v1.TestResumeWorkflowResponse.\n * Use `create(TestResumeWorkflowResponseSchema)` to create a new message.\n */\nexport const TestResumeWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 29);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workspace_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/workspace_resource.proto.\n */\nexport const file_tailor_v1_workspace_resource = /*@__PURE__*/\n fileDesc(\"CiJ0YWlsb3IvdjEvd29ya3NwYWNlX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEilAEKDE9yZ2FuaXphdGlvbhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEjQKC2NyZWF0ZV90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjQKC3VwZGF0ZV90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDIpQDChJPcmdhbml6YXRpb25BY2Nlc3MSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEikKBHJvbGUYAiABKA4yGy50YWlsb3IudjEuT3JnYW5pemF0aW9uUm9sZRIyCgR0ZWFtGAMgASgLMiIudGFpbG9yLnYxLk9yZ2FuaXphdGlvbkFjY2Vzcy5UZWFtSAASQwoNcGxhdGZvcm1fdXNlchgEIAEoCzIqLnRhaWxvci52MS5Pcmdhbml6YXRpb25BY2Nlc3MuUGxhdGZvcm1Vc2VySAASQQoMbWFjaGluZV91c2VyGAUgASgLMikudGFpbG9yLnYxLk9yZ2FuaXphdGlvbkFjY2Vzcy5NYWNoaW5lVXNlckgAGikKDFBsYXRmb3JtVXNlchIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRogCgRUZWFtEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkaJwoLTWFjaGluZVVzZXISCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCUIICgZtZW1iZXIi1wEKBkZvbGRlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgDIAEoCRIYChBwYXJlbnRfZm9sZGVyX2lkGAQgASgJEhQKDGhhc19jaGlsZHJlbhgHIAEoCBI0CgtjcmVhdGVfdGltZRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxI0Cgt1cGRhdGVfdGltZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAyLwAgoMRm9sZGVyQWNjZXNzEhEKCWZvbGRlcl9pZBgBIAEoCRIjCgRyb2xlGAIgASgOMhUudGFpbG9yLnYxLkZvbGRlclJvbGUSLAoEdGVhbRgDIAEoCzIcLnRhaWxvci52MS5Gb2xkZXJBY2Nlc3MuVGVhbUgAEj0KDXBsYXRmb3JtX3VzZXIYBCABKAsyJC50YWlsb3IudjEuRm9sZGVyQWNjZXNzLlBsYXRmb3JtVXNlckgAEjsKDG1hY2hpbmVfdXNlchgFIAEoCzIjLnRhaWxvci52MS5Gb2xkZXJBY2Nlc3MuTWFjaGluZVVzZXJIABopCgxQbGF0Zm9ybVVzZXISCgoCaWQYASABKAkSDQoFZW1haWwYAiABKAkaIAoEVGVhbRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJGicKC01hY2hpbmVVc2VyEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAlCCAoGbWVtYmVyIqUBCgRUZWFtEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEjQKC2NyZWF0ZV90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjQKC3VwZGF0ZV90aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDIqsBCgpUZWFtTWVtYmVyEg8KB3RlYW1faWQYASABKAkSOQoNcGxhdGZvcm1fdXNlchgCIAEoCzIiLnRhaWxvci52MS5UZWFtTWVtYmVyLlBsYXRmb3JtVXNlchIhCgRyb2xlGAMgASgOMhMudGFpbG9yLnYxLlRlYW1Sb2xlGi4KDFBsYXRmb3JtVXNlchIPCgd1c2VyX2lkGAEgASgJEg0KBWVtYWlsGAIgASgJIq0CCglXb3Jrc3BhY2USCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIbCg5jcmVhdGVfdXNlcl9pZBgDIAEoCUID4EEDEhsKDnVwZGF0ZV91c2VyX2lkGAQgASgJQgPgQQMSNAoLY3JlYXRlX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSEwoGcmVnaW9uGAggASgJQgPgQQMSGQoRZGVsZXRlX3Byb3RlY3Rpb24YCSABKAgSFwoPb3JnYW5pemF0aW9uX2lkGAogASgJEhEKCWZvbGRlcl9pZBgLIAEoCUoECAcQCCLBAQoVV29ya3NwYWNlUGxhdGZvcm1Vc2VyEjIKBHJvbGUYASABKA4yJC50YWlsb3IudjEuV29ya3NwYWNlUGxhdGZvcm1Vc2VyUm9sZRJECg1wbGF0Zm9ybV91c2VyGAIgASgLMi0udGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlci5QbGF0Zm9ybVVzZXIaLgoMUGxhdGZvcm1Vc2VyEg8KB3VzZXJfaWQYASABKAkSDQoFZW1haWwYAiABKAkirgIKE1BsYXRmb3JtQWNjb3VudFBsYW4SNQoJcGxhbl90eXBlGAEgASgOMiIudGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW5UeXBlEkgKBXRyaWFsGAIgASgLMjcudGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW4uUGxhdGZvcm1BY2NvdW50UGxhblRyaWFsSAAaiAEKGFBsYXRmb3JtQWNjb3VudFBsYW5UcmlhbBIsCghzdGFydF9hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKgoGZW5kX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgppc19leHBpcmVkGAMgASgIQgsKCXBsYW5fbWV0YSqOAQoQT3JnYW5pemF0aW9uUm9sZRIhCh1PUkdBTklaQVRJT05fUk9MRV9VTlNQRUNJRklFRBAAEhsKF09SR0FOSVpBVElPTl9ST0xFX0FETUlOEAESHAoYT1JHQU5JWkFUSU9OX1JPTEVfRURJVE9SEAISHAoYT1JHQU5JWkFUSU9OX1JPTEVfVklFV0VSEAMqcAoKRm9sZGVyUm9sZRIbChdGT0xERVJfUk9MRV9VTlNQRUNJRklFRBAAEhUKEUZPTERFUl9ST0xFX0FETUlOEAESFgoSRk9MREVSX1JPTEVfRURJVE9SEAISFgoSRk9MREVSX1JPTEVfVklFV0VSEAMqZwoIVGVhbVJvbGUSGQoVVEVBTV9ST0xFX1VOU1BFQ0lGSUVEEAASEwoPVEVBTV9ST0xFX0FETUlOEAESFQoRVEVBTV9ST0xFX01BTkFHRVIQAhIUChBURUFNX1JPTEVfTUVNQkVSEAMqwwEKGVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUSLAooV09SS1NQQUNFX1BMQVRGT1JNX1VTRVJfUk9MRV9VTlNQRUNJRklFRBAAEiYKIldPUktTUEFDRV9QTEFURk9STV9VU0VSX1JPTEVfQURNSU4QARInCiNXT1JLU1BBQ0VfUExBVEZPUk1fVVNFUl9ST0xFX0VESVRPUhACEicKI1dPUktTUEFDRV9QTEFURk9STV9VU0VSX1JPTEVfVklFV0VSEAMqkQEKF1BsYXRmb3JtQWNjb3VudFBsYW5UeXBlEioKJlBMQVRGT1JNX0FDQ09VTlRfUExBTl9UWVBFX1VOU1BFQ0lGSUVEEAASJAogUExBVEZPUk1fQUNDT1VOVF9QTEFOX1RZUEVfVFJJQUwQARIkCiBQTEFURk9STV9BQ0NPVU5UX1BMQU5fVFlQRV9CQVNJQxACYgZwcm90bzM\", [file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.Organization.\n * Use `create(OrganizationSchema)` to create a new message.\n */\nexport const OrganizationSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 0);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.\n * Use `create(OrganizationAccessSchema)` to create a new message.\n */\nexport const OrganizationAccessSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.PlatformUser.\n * Use `create(OrganizationAccess_PlatformUserSchema)` to create a new message.\n */\nexport const OrganizationAccess_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.Team.\n * Use `create(OrganizationAccess_TeamSchema)` to create a new message.\n */\nexport const OrganizationAccess_TeamSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.MachineUser.\n * Use `create(OrganizationAccess_MachineUserSchema)` to create a new message.\n */\nexport const OrganizationAccess_MachineUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.Folder.\n * Use `create(FolderSchema)` to create a new message.\n */\nexport const FolderSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 2);\n\n/**\n * Describes the message tailor.v1.FolderAccess.\n * Use `create(FolderAccessSchema)` to create a new message.\n */\nexport const FolderAccessSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3);\n\n/**\n * Describes the message tailor.v1.FolderAccess.PlatformUser.\n * Use `create(FolderAccess_PlatformUserSchema)` to create a new message.\n */\nexport const FolderAccess_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3, 0);\n\n/**\n * Describes the message tailor.v1.FolderAccess.Team.\n * Use `create(FolderAccess_TeamSchema)` to create a new message.\n */\nexport const FolderAccess_TeamSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3, 1);\n\n/**\n * Describes the message tailor.v1.FolderAccess.MachineUser.\n * Use `create(FolderAccess_MachineUserSchema)` to create a new message.\n */\nexport const FolderAccess_MachineUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3, 2);\n\n/**\n * Describes the message tailor.v1.Team.\n * Use `create(TeamSchema)` to create a new message.\n */\nexport const TeamSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 4);\n\n/**\n * Describes the message tailor.v1.TeamMember.\n * Use `create(TeamMemberSchema)` to create a new message.\n */\nexport const TeamMemberSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 5);\n\n/**\n * Describes the message tailor.v1.TeamMember.PlatformUser.\n * Use `create(TeamMember_PlatformUserSchema)` to create a new message.\n */\nexport const TeamMember_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 5, 0);\n\n/**\n * Describes the message tailor.v1.Workspace.\n * Use `create(WorkspaceSchema)` to create a new message.\n */\nexport const WorkspaceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 6);\n\n/**\n * Describes the message tailor.v1.WorkspacePlatformUser.\n * Use `create(WorkspacePlatformUserSchema)` to create a new message.\n */\nexport const WorkspacePlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 7);\n\n/**\n * Describes the message tailor.v1.WorkspacePlatformUser.PlatformUser.\n * Use `create(WorkspacePlatformUser_PlatformUserSchema)` to create a new message.\n */\nexport const WorkspacePlatformUser_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 7, 0);\n\n/**\n * Describes the message tailor.v1.PlatformAccountPlan.\n * Use `create(PlatformAccountPlanSchema)` to create a new message.\n */\nexport const PlatformAccountPlanSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 8);\n\n/**\n * Describes the message tailor.v1.PlatformAccountPlan.PlatformAccountPlanTrial.\n * Use `create(PlatformAccountPlan_PlatformAccountPlanTrialSchema)` to create a new message.\n */\nexport const PlatformAccountPlan_PlatformAccountPlanTrialSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 8, 0);\n\n/**\n * Describes the enum tailor.v1.OrganizationRole.\n */\nexport const OrganizationRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 0);\n\n/**\n * @generated from enum tailor.v1.OrganizationRole\n */\nexport const OrganizationRole = /*@__PURE__*/\n tsEnum(OrganizationRoleSchema);\n\n/**\n * Describes the enum tailor.v1.FolderRole.\n */\nexport const FolderRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 1);\n\n/**\n * @generated from enum tailor.v1.FolderRole\n */\nexport const FolderRole = /*@__PURE__*/\n tsEnum(FolderRoleSchema);\n\n/**\n * Describes the enum tailor.v1.TeamRole.\n */\nexport const TeamRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 2);\n\n/**\n * @generated from enum tailor.v1.TeamRole\n */\nexport const TeamRole = /*@__PURE__*/\n tsEnum(TeamRoleSchema);\n\n/**\n * Describes the enum tailor.v1.WorkspacePlatformUserRole.\n */\nexport const WorkspacePlatformUserRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 3);\n\n/**\n * @generated from enum tailor.v1.WorkspacePlatformUserRole\n */\nexport const WorkspacePlatformUserRole = /*@__PURE__*/\n tsEnum(WorkspacePlatformUserRoleSchema);\n\n/**\n * Describes the enum tailor.v1.PlatformAccountPlanType.\n */\nexport const PlatformAccountPlanTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 4);\n\n/**\n * @generated from enum tailor.v1.PlatformAccountPlanType\n */\nexport const PlatformAccountPlanType = /*@__PURE__*/\n tsEnum(PlatformAccountPlanTypeSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workspace.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_field_mask } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_fieldmask_v1_option } from \"../fieldmask/v1/option_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_workspace_resource } from \"./workspace_resource_pb\";\n\n/**\n * Describes the file tailor/v1/workspace.proto.\n */\nexport const file_tailor_v1_workspace = /*@__PURE__*/\n fileDesc(\"Chl0YWlsb3IvdjEvd29ya3NwYWNlLnByb3RvEgl0YWlsb3IudjEiJgokTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVJlZ2lvbnNSZXF1ZXN0IjgKJUxpc3RBdmFpbGFibGVXb3Jrc3BhY2VSZWdpb25zUmVzcG9uc2USDwoHcmVnaW9ucxgBIAMoCSLVAQoWQ3JlYXRlV29ya3NwYWNlUmVxdWVzdBJACg53b3Jrc3BhY2VfbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIYChB3b3Jrc3BhY2VfcmVnaW9uGAIgASgJEiQKD29yZ2FuaXphdGlvbl9pZBgDIAEoCUILukgI2AEBcgOwAQESHgoJZm9sZGVyX2lkGAQgASgJQgu6SAjYAQFyA7ABARIZChFkZWxldGVfcHJvdGVjdGlvbhgFIAEoCCJCChdDcmVhdGVXb3Jrc3BhY2VSZXNwb25zZRInCgl3b3Jrc3BhY2UYASABKAsyFC50YWlsb3IudjEuV29ya3NwYWNlItgCChZVcGRhdGVXb3Jrc3BhY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoOd29ya3NwYWNlX25hbWUYAiABKAlCK7pIKNgBAXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQgu6SAjYAQFyA7ABARIeCglmb2xkZXJfaWQYBCABKAlCC7pICNgBAXIDsAEBEhkKEWRlbGV0ZV9wcm90ZWN0aW9uGAUgASgIEngKC3VwZGF0ZV9tYXNrGGQgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0JHivkrDndvcmtzcGFjZV9uYW1livkrD29yZ2FuaXphdGlvbl9pZIr5Kwlmb2xkZXJfaWSK+SsRZGVsZXRlX3Byb3RlY3Rpb24iQgoXVXBkYXRlV29ya3NwYWNlUmVzcG9uc2USJwoJd29ya3NwYWNlGAEgASgLMhQudGFpbG9yLnYxLldvcmtzcGFjZSI4ChZEZWxldGVXb3Jrc3BhY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQEiGQoXRGVsZXRlV29ya3NwYWNlUmVzcG9uc2Ui8wEKFUxpc3RXb3Jrc3BhY2VzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEkIKBHZpZXcYBCABKA4yJS50YWlsb3IudjEuTGlzdFdvcmtzcGFjZXNSZXF1ZXN0LlZpZXdCDbpICtgBAYIBBBABIAAiPQoEVmlldxIUChBWSUVXX1VOU1BFQ0lGSUVEEAASDAoIVklFV19BTEwQARIRCg1WSUVXX1BFUlNPTkFMEAIicAoWTGlzdFdvcmtzcGFjZXNSZXNwb25zZRIoCgp3b3Jrc3BhY2VzGAEgAygLMhQudGFpbG9yLnYxLldvcmtzcGFjZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMivwEKIUxpc3RPcmdhbml6YXRpb25Xb3Jrc3BhY2VzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKD29yZ2FuaXphdGlvbl9pZBgEIAEoCUIIukgFcgOwAQESHgoJZm9sZGVyX2lkGAUgASgJQgu6SAjYAQFyA7ABASJ8CiJMaXN0T3JnYW5pemF0aW9uV29ya3NwYWNlc1Jlc3BvbnNlEhcKD25leHRfcGFnZV90b2tlbhgBIAEoCRITCgt0b3RhbF9jb3VudBgCIAEoAxIoCgp3b3Jrc3BhY2VzGAMgAygLMhQudGFpbG9yLnYxLldvcmtzcGFjZSI5ChdSZXN0b3JlV29ya3NwYWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBIhoKGFJlc3RvcmVXb3Jrc3BhY2VSZXNwb25zZSI1ChNHZXRXb3Jrc3BhY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQEiPwoUR2V0V29ya3NwYWNlUmVzcG9uc2USJwoJd29ya3NwYWNlGAEgASgLMhQudGFpbG9yLnYxLldvcmtzcGFjZSKcAQohTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEh4KDHdvcmtzcGFjZV9pZBgDIAEoCUIIukgFcgOwAQESMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiKWAQoiTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXNwb25zZRIXCg9uZXh0X3BhZ2VfdG9rZW4YASABKAkSQgoYd29ya3NwYWNlX3BsYXRmb3JtX3VzZXJzGAIgAygLMiAudGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlchITCgt0b3RhbF9jb3VudBgDIAEoAyIwCi5MaXN0QXZhaWxhYmxlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUm9sZXNSZXF1ZXN0ImYKL0xpc3RBdmFpbGFibGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlc1Jlc3BvbnNlEjMKBXJvbGVzGAEgAygOMiQudGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUikAEKIkludml0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCgVlbWFpbBgCIAEoCUIHukgEcgJgARIyCgRyb2xlGAMgASgOMiQudGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUiJQojSW52aXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVzcG9uc2UiXAoiUmVtb3ZlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKBWVtYWlsGAIgASgJQge6SARyAmABIiUKI1JlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIpABCiJVcGRhdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESFgoFZW1haWwYAiABKAlCB7pIBHICYAESMgoEcm9sZRgDIAEoDjIkLnRhaWxvci52MS5Xb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlIiUKI1VwZGF0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIkEKH0dldFdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABASJlCiBHZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZRJBChd3b3Jrc3BhY2VfcGxhdGZvcm1fdXNlchgBIAEoCzIgLnRhaWxvci52MS5Xb3Jrc3BhY2VQbGF0Zm9ybVVzZXIiOQoXR2V0V29ya3NwYWNlUm9sZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABASJOChhHZXRXb3Jrc3BhY2VSb2xlUmVzcG9uc2USMgoEcm9sZRgBIAEoDjIkLnRhaWxvci52MS5Xb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlImIKGVVwZGF0ZU9yZ2FuaXphdGlvblJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIiChFvcmdhbml6YXRpb25fbmFtZRgCIAEoCUIHukgEcgIQASJLChpVcGRhdGVPcmdhbml6YXRpb25SZXNwb25zZRItCgxvcmdhbml6YXRpb24YASABKAsyFy50YWlsb3IudjEuT3JnYW5pemF0aW9uIjsKFkdldE9yZ2FuaXphdGlvblJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABASJIChdHZXRPcmdhbml6YXRpb25SZXNwb25zZRItCgxvcmdhbml6YXRpb24YASABKAsyFy50YWlsb3IudjEuT3JnYW5pemF0aW9uInMKGExpc3RPcmdhbml6YXRpb25zUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInkKGUxpc3RPcmdhbml6YXRpb25zUmVzcG9uc2USLgoNb3JnYW5pemF0aW9ucxgBIAMoCzIXLnRhaWxvci52MS5Pcmdhbml6YXRpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIh4KHExpc3RVc2VyT3JnYW5pemF0aW9uc1JlcXVlc3QihwIKHUxpc3RVc2VyT3JnYW5pemF0aW9uc1Jlc3BvbnNlElUKEnVzZXJfb3JnYW5pemF0aW9ucxgBIAMoCzI5LnRhaWxvci52MS5MaXN0VXNlck9yZ2FuaXphdGlvbnNSZXNwb25zZS5Vc2VyT3JnYW5pemF0aW9uGo4BChBVc2VyT3JnYW5pemF0aW9uEhcKD29yZ2FuaXphdGlvbl9pZBgBIAEoCRIZChFvcmdhbml6YXRpb25fbmFtZRgCIAEoCRIWCg5yb290X2ZvbGRlcl9pZBgDIAEoCRIYChByb290X2ZvbGRlcl9uYW1lGAQgASgJEhQKDGRpc3BsYXlfbmFtZRgFIAEoCSLnAQoeR3JhbnRPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESNQoEcm9sZRgCIAEoDjIbLnRhaWxvci52MS5Pcmdhbml6YXRpb25Sb2xlQgq6SAeCAQQQASAAEhsKB3RlYW1faWQYAyABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYBCABKAlCB7pIBHICYAFIABIjCg9tYWNoaW5lX3VzZXJfaWQYBSABKAlCCLpIBXIDsAEBSABCDwoGbWVtYmVyEgW6SAIIASIhCh9HcmFudE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIugBCh9VcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESNQoEcm9sZRgCIAEoDjIbLnRhaWxvci52MS5Pcmdhbml6YXRpb25Sb2xlQgq6SAeCAQQQASAAEhsKB3RlYW1faWQYAyABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYBCABKAlCB7pIBHICYAFIABIjCg9tYWNoaW5lX3VzZXJfaWQYBSABKAlCCLpIBXIDsAEBSABCDwoGbWVtYmVyEgW6SAIIASIiCiBVcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXNwb25zZSKxAQofUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYAyABKAlCB7pIBHICYAFIABIjCg9tYWNoaW5lX3VzZXJfaWQYBCABKAlCCLpIBXIDsAEBSABCDwoGbWVtYmVyEgW6SAIIASIiCiBSZXZva2VPcmdhbml6YXRpb25BY2Nlc3NSZXNwb25zZSKdAQofTGlzdE9yZ2FuaXphdGlvbkFjY2Vzc2VzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKD29yZ2FuaXphdGlvbl9pZBgEIAEoCUIIukgFcgOwAQEijgEKIExpc3RPcmdhbml6YXRpb25BY2Nlc3Nlc1Jlc3BvbnNlEjwKFW9yZ2FuaXphdGlvbl9hY2Nlc3NlcxgBIAMoCzIdLnRhaWxvci52MS5Pcmdhbml6YXRpb25BY2Nlc3MSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIq4BChxHZXRPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgDIAEoCUIHukgEcgJgAUgAEiMKD21hY2hpbmVfdXNlcl9pZBgEIAEoCUIIukgFcgOwAQFIAEIPCgZtZW1iZXISBbpIAggBIlsKHUdldE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlEjoKE29yZ2FuaXphdGlvbl9hY2Nlc3MYASABKAsyHS50YWlsb3IudjEuT3JnYW5pemF0aW9uQWNjZXNzIokBCh9DcmVhdGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESJQoQcGFyZW50X2ZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESHAoLZm9sZGVyX25hbWUYAyABKAlCB7pIBHICEAEiRQogQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2USIQoGZm9sZGVyGAEgASgLMhEudGFpbG9yLnYxLkZvbGRlciKmAQofVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKCWZvbGRlcl9pZBgCIAEoCUIIukgFcgOwAQESJQoQcGFyZW50X2ZvbGRlcl9pZBgDIAEoCUILukgI2AEBcgOwAQESHAoLZm9sZGVyX25hbWUYBCABKAlCB7pIBHICEAEiRQogVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2USIQoGZm9sZGVyGAEgASgLMhEudGFpbG9yLnYxLkZvbGRlciJhCh9EZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoJZm9sZGVyX2lkGAIgASgJQgi6SAVyA7ABASIiCiBEZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZSJeChxHZXRPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoJZm9sZGVyX2lkGAIgASgJQgi6SAVyA7ABASJCCh1HZXRPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZRIhCgZmb2xkZXIYASABKAsyES50YWlsb3IudjEuRm9sZGVyIsMBCh5MaXN0T3JnYW5pemF0aW9uRm9sZGVyc1JlcXVlc3QSEgoKcGFnZV90b2tlbhgBIAEoCRIRCglwYWdlX3NpemUYAiABKA0SMAoOcGFnZV9kaXJlY3Rpb24YAyABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCg9vcmdhbml6YXRpb25faWQYBCABKAlCCLpIBXIDsAEBEiUKEHBhcmVudF9mb2xkZXJfaWQYBSABKAlCC7pICNgBAXIDsAEBInMKH0xpc3RPcmdhbml6YXRpb25Gb2xkZXJzUmVzcG9uc2USFwoPbmV4dF9wYWdlX3Rva2VuGAEgASgJEhMKC3RvdGFsX2NvdW50GAIgASgDEiIKB2ZvbGRlcnMYAyADKAsyES50YWlsb3IudjEuRm9sZGVyIoQCCiRHcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIbCglmb2xkZXJfaWQYAiABKAlCCLpIBXIDsAEBEi8KBHJvbGUYAyABKA4yFS50YWlsb3IudjEuRm9sZGVyUm9sZUIKukgHggEEEAEgABIbCgd0ZWFtX2lkGAQgASgJQgi6SAVyA7ABAUgAEhgKBWVtYWlsGAUgASgJQge6SARyAmABSAASIwoPbWFjaGluZV91c2VyX2lkGAYgASgJQgi6SAVyA7ABAUgAQg8KBm1lbWJlchIFukgCCAEiJwolR3JhbnRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSKFAgolVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKCWZvbGRlcl9pZBgCIAEoCUIIukgFcgOwAQESLwoEcm9sZRgDIAEoDjIVLnRhaWxvci52MS5Gb2xkZXJSb2xlQgq6SAeCAQQQASAAEhsKB3RlYW1faWQYBCABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYBSABKAlCB7pIBHICYAFIABIjCg9tYWNoaW5lX3VzZXJfaWQYBiABKAlCCLpIBXIDsAEBSABCDwoGbWVtYmVyEgW6SAIIASIoCiZVcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSLUAQolUmV2b2tlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKCWZvbGRlcl9pZBgCIAEoCUIIukgFcgOwAQESGwoHdGVhbV9pZBgDIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgEIAEoCUIHukgEcgJgAUgAEiMKD21hY2hpbmVfdXNlcl9pZBgFIAEoCUIIukgFcgOwAQFIAEIPCgZtZW1iZXISBbpIAggBIigKJlJldm9rZU9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1Jlc3BvbnNlIsABCiVMaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAMgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoPb3JnYW5pemF0aW9uX2lkGAQgASgJQgi6SAVyA7ABARIbCglmb2xkZXJfaWQYBSABKAlCCLpIBXIDsAEBIogBCiZMaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXNwb25zZRIwCg9mb2xkZXJfYWNjZXNzZXMYASADKAsyFy50YWlsb3IudjEuRm9sZGVyQWNjZXNzEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLRAQoiR2V0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKCWZvbGRlcl9pZBgCIAEoCUIIukgFcgOwAQESGwoHdGVhbV9pZBgDIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgEIAEoCUIHukgEcgJgAUgAEiMKD21hY2hpbmVfdXNlcl9pZBgFIAEoCUIIukgFcgOwAQFIAEIPCgZtZW1iZXISBbpIAggBIlUKI0dldE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1Jlc3BvbnNlEi4KDWZvbGRlcl9hY2Nlc3MYASABKAsyFy50YWlsb3IudjEuRm9sZGVyQWNjZXNzIl4KHUNyZWF0ZU9yZ2FuaXphdGlvblRlYW1SZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGgoJdGVhbV9uYW1lGAIgASgJQge6SARyAhABIj8KHkNyZWF0ZU9yZ2FuaXphdGlvblRlYW1SZXNwb25zZRIdCgR0ZWFtGAEgASgLMg8udGFpbG9yLnYxLlRlYW0ieQodVXBkYXRlT3JnYW5pemF0aW9uVGVhbVJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIZCgd0ZWFtX2lkGAIgASgJQgi6SAVyA7ABARIaCgl0ZWFtX25hbWUYAyABKAlCB7pIBHICEAEiPwoeVXBkYXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlEh0KBHRlYW0YASABKAsyDy50YWlsb3IudjEuVGVhbSJdCh1EZWxldGVPcmdhbml6YXRpb25UZWFtUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhkKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBIiAKHkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXNwb25zZSKaAQocTGlzdE9yZ2FuaXphdGlvblRlYW1zUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKD29yZ2FuaXphdGlvbl9pZBgEIAEoCUIIukgFcgOwAQEibQodTGlzdE9yZ2FuaXphdGlvblRlYW1zUmVzcG9uc2USHgoFdGVhbXMYASADKAsyDy50YWlsb3IudjEuVGVhbRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMiWgoaR2V0T3JnYW5pemF0aW9uVGVhbVJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIZCgd0ZWFtX2lkGAIgASgJQgi6SAVyA7ABASI8ChtHZXRPcmdhbml6YXRpb25UZWFtUmVzcG9uc2USHQoEdGVhbRgBIAEoCzIPLnRhaWxvci52MS5UZWFtIqcBCiBBZGRPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhkKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBEhYKBWVtYWlsGAMgASgJQge6SARyAmABEi0KBHJvbGUYBCABKA4yEy50YWlsb3IudjEuVGVhbVJvbGVCCrpIB4IBBBABIAAiIwohQWRkT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIqoBCiNVcGRhdGVPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhkKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBEhYKBWVtYWlsGAMgASgJQge6SARyAmABEi0KBHJvbGUYBCABKA4yEy50YWlsb3IudjEuVGVhbVJvbGVCCrpIB4IBBBABIAAiJgokVXBkYXRlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlInsKI1JlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGQoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQESFgoFZW1haWwYAyABKAlCB7pIBHICYAEiJgokUmVtb3ZlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIrsBCiJMaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAMgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoPb3JnYW5pemF0aW9uX2lkGAQgASgJQgi6SAVyA7ABARIZCgd0ZWFtX2lkGAUgASgJQgi6SAVyA7ABASKAAQojTGlzdE9yZ2FuaXphdGlvblRlYW1NZW1iZXJzUmVzcG9uc2USKwoMdGVhbV9tZW1iZXJzGAEgAygLMhUudGFpbG9yLnYxLlRlYW1NZW1iZXISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIngKIEdldE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGQoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQESFgoFZW1haWwYAyABKAlCB7pIBHICYAEiTwohR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlEioKC3RlYW1fbWVtYmVyGAEgASgLMhUudGFpbG9yLnYxLlRlYW1NZW1iZXIiHwodR2V0UGxhdGZvcm1BY2NvdW50UGxhblJlcXVlc3QiVgoeR2V0UGxhdGZvcm1BY2NvdW50UGxhblJlc3BvbnNlEjQKDGN1cnJlbnRfcGxhbhgBIAEoCzIeLnRhaWxvci52MS5QbGF0Zm9ybUFjY291bnRQbGFuYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_tailor_fieldmask_v1_option, file_tailor_v1_resource, file_tailor_v1_workspace_resource]);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspaceRegionsRequest.\n * Use `create(ListAvailableWorkspaceRegionsRequestSchema)` to create a new message.\n */\nexport const ListAvailableWorkspaceRegionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 0);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspaceRegionsResponse.\n * Use `create(ListAvailableWorkspaceRegionsResponseSchema)` to create a new message.\n */\nexport const ListAvailableWorkspaceRegionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 1);\n\n/**\n * Describes the message tailor.v1.CreateWorkspaceRequest.\n * Use `create(CreateWorkspaceRequestSchema)` to create a new message.\n */\nexport const CreateWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 2);\n\n/**\n * Describes the message tailor.v1.CreateWorkspaceResponse.\n * Use `create(CreateWorkspaceResponseSchema)` to create a new message.\n */\nexport const CreateWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 3);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspaceRequest.\n * Use `create(UpdateWorkspaceRequestSchema)` to create a new message.\n */\nexport const UpdateWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 4);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspaceResponse.\n * Use `create(UpdateWorkspaceResponseSchema)` to create a new message.\n */\nexport const UpdateWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 5);\n\n/**\n * Describes the message tailor.v1.DeleteWorkspaceRequest.\n * Use `create(DeleteWorkspaceRequestSchema)` to create a new message.\n */\nexport const DeleteWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 6);\n\n/**\n * Describes the message tailor.v1.DeleteWorkspaceResponse.\n * Use `create(DeleteWorkspaceResponseSchema)` to create a new message.\n */\nexport const DeleteWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 7);\n\n/**\n * Describes the message tailor.v1.ListWorkspacesRequest.\n * Use `create(ListWorkspacesRequestSchema)` to create a new message.\n */\nexport const ListWorkspacesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 8);\n\n/**\n * Describes the enum tailor.v1.ListWorkspacesRequest.View.\n */\nexport const ListWorkspacesRequest_ViewSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace, 8, 0);\n\n/**\n * @generated from enum tailor.v1.ListWorkspacesRequest.View\n */\nexport const ListWorkspacesRequest_View = /*@__PURE__*/\n tsEnum(ListWorkspacesRequest_ViewSchema);\n\n/**\n * Describes the message tailor.v1.ListWorkspacesResponse.\n * Use `create(ListWorkspacesResponseSchema)` to create a new message.\n */\nexport const ListWorkspacesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 9);\n\n/**\n * Describes the message tailor.v1.ListOrganizationWorkspacesRequest.\n * Use `create(ListOrganizationWorkspacesRequestSchema)` to create a new message.\n */\nexport const ListOrganizationWorkspacesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 10);\n\n/**\n * Describes the message tailor.v1.ListOrganizationWorkspacesResponse.\n * Use `create(ListOrganizationWorkspacesResponseSchema)` to create a new message.\n */\nexport const ListOrganizationWorkspacesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 11);\n\n/**\n * Describes the message tailor.v1.RestoreWorkspaceRequest.\n * Use `create(RestoreWorkspaceRequestSchema)` to create a new message.\n */\nexport const RestoreWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 12);\n\n/**\n * Describes the message tailor.v1.RestoreWorkspaceResponse.\n * Use `create(RestoreWorkspaceResponseSchema)` to create a new message.\n */\nexport const RestoreWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 13);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceRequest.\n * Use `create(GetWorkspaceRequestSchema)` to create a new message.\n */\nexport const GetWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 14);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceResponse.\n * Use `create(GetWorkspaceResponseSchema)` to create a new message.\n */\nexport const GetWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 15);\n\n/**\n * Describes the message tailor.v1.ListWorkspacePlatformUsersRequest.\n * Use `create(ListWorkspacePlatformUsersRequestSchema)` to create a new message.\n */\nexport const ListWorkspacePlatformUsersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 16);\n\n/**\n * Describes the message tailor.v1.ListWorkspacePlatformUsersResponse.\n * Use `create(ListWorkspacePlatformUsersResponseSchema)` to create a new message.\n */\nexport const ListWorkspacePlatformUsersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 17);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspacePlatformUserRolesRequest.\n * Use `create(ListAvailableWorkspacePlatformUserRolesRequestSchema)` to create a new message.\n */\nexport const ListAvailableWorkspacePlatformUserRolesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 18);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspacePlatformUserRolesResponse.\n * Use `create(ListAvailableWorkspacePlatformUserRolesResponseSchema)` to create a new message.\n */\nexport const ListAvailableWorkspacePlatformUserRolesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 19);\n\n/**\n * Describes the message tailor.v1.InviteWorkspacePlatformUserRequest.\n * Use `create(InviteWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const InviteWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 20);\n\n/**\n * Describes the message tailor.v1.InviteWorkspacePlatformUserResponse.\n * Use `create(InviteWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const InviteWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 21);\n\n/**\n * Describes the message tailor.v1.RemoveWorkspacePlatformUserRequest.\n * Use `create(RemoveWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const RemoveWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 22);\n\n/**\n * Describes the message tailor.v1.RemoveWorkspacePlatformUserResponse.\n * Use `create(RemoveWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const RemoveWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 23);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspacePlatformUserRequest.\n * Use `create(UpdateWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const UpdateWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 24);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspacePlatformUserResponse.\n * Use `create(UpdateWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const UpdateWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 25);\n\n/**\n * Describes the message tailor.v1.GetWorkspacePlatformUserRequest.\n * Use `create(GetWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const GetWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 26);\n\n/**\n * Describes the message tailor.v1.GetWorkspacePlatformUserResponse.\n * Use `create(GetWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const GetWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 27);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceRoleRequest.\n * Use `create(GetWorkspaceRoleRequestSchema)` to create a new message.\n */\nexport const GetWorkspaceRoleRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 28);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceRoleResponse.\n * Use `create(GetWorkspaceRoleResponseSchema)` to create a new message.\n */\nexport const GetWorkspaceRoleResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 29);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationRequest.\n * Use `create(UpdateOrganizationRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 30);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationResponse.\n * Use `create(UpdateOrganizationResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 31);\n\n/**\n * Describes the message tailor.v1.GetOrganizationRequest.\n * Use `create(GetOrganizationRequestSchema)` to create a new message.\n */\nexport const GetOrganizationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 32);\n\n/**\n * Describes the message tailor.v1.GetOrganizationResponse.\n * Use `create(GetOrganizationResponseSchema)` to create a new message.\n */\nexport const GetOrganizationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 33);\n\n/**\n * Describes the message tailor.v1.ListOrganizationsRequest.\n * Use `create(ListOrganizationsRequestSchema)` to create a new message.\n */\nexport const ListOrganizationsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 34);\n\n/**\n * Describes the message tailor.v1.ListOrganizationsResponse.\n * Use `create(ListOrganizationsResponseSchema)` to create a new message.\n */\nexport const ListOrganizationsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 35);\n\n/**\n * Describes the message tailor.v1.ListUserOrganizationsRequest.\n * Use `create(ListUserOrganizationsRequestSchema)` to create a new message.\n */\nexport const ListUserOrganizationsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 36);\n\n/**\n * Describes the message tailor.v1.ListUserOrganizationsResponse.\n * Use `create(ListUserOrganizationsResponseSchema)` to create a new message.\n */\nexport const ListUserOrganizationsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 37);\n\n/**\n * Describes the message tailor.v1.ListUserOrganizationsResponse.UserOrganization.\n * Use `create(ListUserOrganizationsResponse_UserOrganizationSchema)` to create a new message.\n */\nexport const ListUserOrganizationsResponse_UserOrganizationSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 37, 0);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationAccessRequest.\n * Use `create(GrantOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const GrantOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 38);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationAccessResponse.\n * Use `create(GrantOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const GrantOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 39);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationAccessRequest.\n * Use `create(UpdateOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 40);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationAccessResponse.\n * Use `create(UpdateOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 41);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationAccessRequest.\n * Use `create(RevokeOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const RevokeOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 42);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationAccessResponse.\n * Use `create(RevokeOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const RevokeOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 43);\n\n/**\n * Describes the message tailor.v1.ListOrganizationAccessesRequest.\n * Use `create(ListOrganizationAccessesRequestSchema)` to create a new message.\n */\nexport const ListOrganizationAccessesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 44);\n\n/**\n * Describes the message tailor.v1.ListOrganizationAccessesResponse.\n * Use `create(ListOrganizationAccessesResponseSchema)` to create a new message.\n */\nexport const ListOrganizationAccessesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 45);\n\n/**\n * Describes the message tailor.v1.GetOrganizationAccessRequest.\n * Use `create(GetOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const GetOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 46);\n\n/**\n * Describes the message tailor.v1.GetOrganizationAccessResponse.\n * Use `create(GetOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const GetOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 47);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationFolderRequest.\n * Use `create(CreateOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const CreateOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 48);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationFolderResponse.\n * Use `create(CreateOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const CreateOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 49);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderRequest.\n * Use `create(UpdateOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 50);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderResponse.\n * Use `create(UpdateOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 51);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationFolderRequest.\n * Use `create(DeleteOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const DeleteOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 52);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationFolderResponse.\n * Use `create(DeleteOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const DeleteOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 53);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderRequest.\n * Use `create(GetOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const GetOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 54);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderResponse.\n * Use `create(GetOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const GetOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 55);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFoldersRequest.\n * Use `create(ListOrganizationFoldersRequestSchema)` to create a new message.\n */\nexport const ListOrganizationFoldersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 56);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFoldersResponse.\n * Use `create(ListOrganizationFoldersResponseSchema)` to create a new message.\n */\nexport const ListOrganizationFoldersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 57);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationFolderAccessRequest.\n * Use `create(GrantOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const GrantOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 58);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationFolderAccessResponse.\n * Use `create(GrantOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const GrantOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 59);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderAccessRequest.\n * Use `create(UpdateOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 60);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderAccessResponse.\n * Use `create(UpdateOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 61);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationFolderAccessRequest.\n * Use `create(RevokeOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const RevokeOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 62);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationFolderAccessResponse.\n * Use `create(RevokeOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const RevokeOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 63);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFolderAccessesRequest.\n * Use `create(ListOrganizationFolderAccessesRequestSchema)` to create a new message.\n */\nexport const ListOrganizationFolderAccessesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 64);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFolderAccessesResponse.\n * Use `create(ListOrganizationFolderAccessesResponseSchema)` to create a new message.\n */\nexport const ListOrganizationFolderAccessesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 65);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderAccessRequest.\n * Use `create(GetOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const GetOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 66);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderAccessResponse.\n * Use `create(GetOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const GetOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 67);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationTeamRequest.\n * Use `create(CreateOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const CreateOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 68);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationTeamResponse.\n * Use `create(CreateOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const CreateOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 69);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamRequest.\n * Use `create(UpdateOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 70);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamResponse.\n * Use `create(UpdateOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 71);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationTeamRequest.\n * Use `create(DeleteOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const DeleteOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 72);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationTeamResponse.\n * Use `create(DeleteOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const DeleteOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 73);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamsRequest.\n * Use `create(ListOrganizationTeamsRequestSchema)` to create a new message.\n */\nexport const ListOrganizationTeamsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 74);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamsResponse.\n * Use `create(ListOrganizationTeamsResponseSchema)` to create a new message.\n */\nexport const ListOrganizationTeamsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 75);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamRequest.\n * Use `create(GetOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const GetOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 76);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamResponse.\n * Use `create(GetOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const GetOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 77);\n\n/**\n * Describes the message tailor.v1.AddOrganizationTeamMemberRequest.\n * Use `create(AddOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const AddOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 78);\n\n/**\n * Describes the message tailor.v1.AddOrganizationTeamMemberResponse.\n * Use `create(AddOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const AddOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 79);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamMemberRequest.\n * Use `create(UpdateOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 80);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamMemberResponse.\n * Use `create(UpdateOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 81);\n\n/**\n * Describes the message tailor.v1.RemoveOrganizationTeamMemberRequest.\n * Use `create(RemoveOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const RemoveOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 82);\n\n/**\n * Describes the message tailor.v1.RemoveOrganizationTeamMemberResponse.\n * Use `create(RemoveOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const RemoveOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 83);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamMembersRequest.\n * Use `create(ListOrganizationTeamMembersRequestSchema)` to create a new message.\n */\nexport const ListOrganizationTeamMembersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 84);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamMembersResponse.\n * Use `create(ListOrganizationTeamMembersResponseSchema)` to create a new message.\n */\nexport const ListOrganizationTeamMembersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 85);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamMemberRequest.\n * Use `create(GetOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const GetOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 86);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamMemberResponse.\n * Use `create(GetOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const GetOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 87);\n\n/**\n * Describes the message tailor.v1.GetPlatformAccountPlanRequest.\n * Use `create(GetPlatformAccountPlanRequestSchema)` to create a new message.\n */\nexport const GetPlatformAccountPlanRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 88);\n\n/**\n * Describes the message tailor.v1.GetPlatformAccountPlanResponse.\n * Use `create(GetPlatformAccountPlanResponseSchema)` to create a new message.\n */\nexport const GetPlatformAccountPlanResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 89);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/service.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_tailor_v1_application } from \"./application_pb\";\nimport { file_tailor_v1_auth } from \"./auth_pb\";\nimport { file_tailor_v1_events } from \"./events_pb\";\nimport { file_tailor_v1_executor } from \"./executor_pb\";\nimport { file_tailor_v1_function } from \"./function_pb\";\nimport { file_tailor_v1_function_registry } from \"./function_registry_pb\";\nimport { file_tailor_v1_idp } from \"./idp_pb\";\nimport { file_tailor_v1_metadata } from \"./metadata_pb\";\nimport { file_tailor_v1_meter } from \"./meter_pb\";\nimport { file_tailor_v1_pipeline } from \"./pipeline_pb\";\nimport { file_tailor_v1_secret_manager } from \"./secret_manager_pb\";\nimport { file_tailor_v1_stateflow } from \"./stateflow_pb\";\nimport { file_tailor_v1_staticwebsite } from \"./staticwebsite_pb\";\nimport { file_tailor_v1_tailordb } from \"./tailordb_pb\";\nimport { file_tailor_v1_telemetry_export } from \"./telemetry_export_pb\";\nimport { file_tailor_v1_workflow } from \"./workflow_pb\";\nimport { file_tailor_v1_workspace } from \"./workspace_pb\";\n\n/**\n * Describes the file tailor/v1/service.proto.\n */\nexport const file_tailor_v1_service = /*@__PURE__*/\n fileDesc(\"Chd0YWlsb3IvdjEvc2VydmljZS5wcm90bxIJdGFpbG9yLnYxIg0KC1BpbmdSZXF1ZXN0Ig4KDFBpbmdSZXNwb25zZTL7vAEKD09wZXJhdG9yU2VydmljZRI5CgRQaW5nEhYudGFpbG9yLnYxLlBpbmdSZXF1ZXN0GhcudGFpbG9yLnYxLlBpbmdSZXNwb25zZSIAEocBCh1MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9ucxIvLnRhaWxvci52MS5MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9uc1JlcXVlc3QaMC50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVJlZ2lvbnNSZXNwb25zZSIDkAIBEloKD0NyZWF0ZVdvcmtzcGFjZRIhLnRhaWxvci52MS5DcmVhdGVXb3Jrc3BhY2VSZXF1ZXN0GiIudGFpbG9yLnYxLkNyZWF0ZVdvcmtzcGFjZVJlc3BvbnNlIgASWgoPVXBkYXRlV29ya3NwYWNlEiEudGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVJlcXVlc3QaIi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUmVzcG9uc2UiABJaCg9EZWxldGVXb3Jrc3BhY2USIS50YWlsb3IudjEuRGVsZXRlV29ya3NwYWNlUmVxdWVzdBoiLnRhaWxvci52MS5EZWxldGVXb3Jrc3BhY2VSZXNwb25zZSIAEloKDkxpc3RXb3Jrc3BhY2VzEiAudGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdBohLnRhaWxvci52MS5MaXN0V29ya3NwYWNlc1Jlc3BvbnNlIgOQAgESfgoaTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXMSLC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25Xb3Jrc3BhY2VzUmVzcG9uc2UiA5ACARJdChBSZXN0b3JlV29ya3NwYWNlEiIudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXF1ZXN0GiMudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXNwb25zZSIAElQKDEdldFdvcmtzcGFjZRIeLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VSZXF1ZXN0Gh8udGFpbG9yLnYxLkdldFdvcmtzcGFjZVJlc3BvbnNlIgOQAgESfgoaTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnMSLC50YWlsb3IudjEuTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJzUmVzcG9uc2UiA5ACARKlAQonTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzEjkudGFpbG9yLnYxLkxpc3RBdmFpbGFibGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlc1JlcXVlc3QaOi50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzUmVzcG9uc2UiA5ACARJ+ChtJbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISLS50YWlsb3IudjEuSW52aXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBouLnRhaWxvci52MS5JbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIAEn4KG1JlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlchItLnRhaWxvci52MS5SZW1vdmVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXF1ZXN0Gi4udGFpbG9yLnYxLlJlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIgASfgobVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyEi0udGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QaLi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVzcG9uc2UiABJ4ChhHZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISKi50YWlsb3IudjEuR2V0V29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBorLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIDkAIBEmAKEEdldFdvcmtzcGFjZVJvbGUSIi50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlcXVlc3QaIy50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlc3BvbnNlIgOQAgESYwoSVXBkYXRlT3JnYW5pemF0aW9uEiQudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblJlcXVlc3QaJS50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uUmVzcG9uc2UiABJdCg9HZXRPcmdhbml6YXRpb24SIS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uUmVxdWVzdBoiLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25SZXNwb25zZSIDkAIBEmMKEUxpc3RPcmdhbml6YXRpb25zEiMudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdBokLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlIgOQAgESbwoVTGlzdFVzZXJPcmdhbml6YXRpb25zEicudGFpbG9yLnYxLkxpc3RVc2VyT3JnYW5pemF0aW9uc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdFVzZXJPcmdhbml6YXRpb25zUmVzcG9uc2UiA5ACARJyChdHcmFudE9yZ2FuaXphdGlvbkFjY2VzcxIpLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKi50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25BY2Nlc3NSZXNwb25zZSIAEnUKGFVwZGF0ZU9yZ2FuaXphdGlvbkFjY2VzcxIqLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GisudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgASdQoYUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzEioudGFpbG9yLnYxLlJldm9rZU9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKy50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzUmVzcG9uc2UiABJ4ChhMaXN0T3JnYW5pemF0aW9uQWNjZXNzZXMSKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkFjY2Vzc2VzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uQWNjZXNzZXNSZXNwb25zZSIDkAIBEm8KFUdldE9yZ2FuaXphdGlvbkFjY2VzcxInLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GigudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgOQAgESdQoYQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyEioudGFpbG9yLnYxLkNyZWF0ZU9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKy50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiABJ1ChhVcGRhdGVPcmdhbml6YXRpb25Gb2xkZXISKi50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVxdWVzdBorLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZSIAEnUKGERlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlchIqLnRhaWxvci52MS5EZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0GisudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlclJlc3BvbnNlIgASbwoVR2V0T3JnYW5pemF0aW9uRm9sZGVyEicudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiA5ACARJ1ChdMaXN0T3JnYW5pemF0aW9uRm9sZGVycxIpLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyc1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlcnNSZXNwb25zZSIDkAIBEoQBCh1HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2VzcxIvLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QaMC50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEooBCh5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXMSMC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc2VzUmVxdWVzdBoxLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXNwb25zZSIDkAIBEoEBChtHZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSLS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBouLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIDkAIBEm8KFkNyZWF0ZU9yZ2FuaXphdGlvblRlYW0SKC50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgASbwoWVXBkYXRlT3JnYW5pemF0aW9uVGVhbRIoLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVzcG9uc2UiABJvChZEZWxldGVPcmdhbml6YXRpb25UZWFtEigudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXNwb25zZSIAEmkKE0dldE9yZ2FuaXphdGlvblRlYW0SJS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaJi50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgOQAgESbwoVTGlzdE9yZ2FuaXphdGlvblRlYW1zEicudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25UZWFtc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1zUmVzcG9uc2UiA5ACARJ4ChlBZGRPcmdhbml6YXRpb25UZWFtTWVtYmVyEisudGFpbG9yLnYxLkFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0GiwudGFpbG9yLnYxLkFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChxVcGRhdGVPcmdhbml6YXRpb25UZWFtTWVtYmVyEi4udGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0Gi8udGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChxSZW1vdmVPcmdhbml6YXRpb25UZWFtTWVtYmVyEi4udGFpbG9yLnYxLlJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0Gi8udGFpbG9yLnYxLlJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChtMaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnMSLS50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1NZW1iZXJzUmVxdWVzdBouLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnNSZXNwb25zZSIDkAIBEnsKGUdldE9yZ2FuaXphdGlvblRlYW1NZW1iZXISKy50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QaLC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIgOQAgEScgoWR2V0UGxhdGZvcm1BY2NvdW50UGxhbhIoLnRhaWxvci52MS5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVxdWVzdBopLnRhaWxvci52MS5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVzcG9uc2UiA5ACARJgChFDcmVhdGVBcHBsaWNhdGlvbhIjLnRhaWxvci52MS5DcmVhdGVBcHBsaWNhdGlvblJlcXVlc3QaJC50YWlsb3IudjEuQ3JlYXRlQXBwbGljYXRpb25SZXNwb25zZSIAEmAKEVVwZGF0ZUFwcGxpY2F0aW9uEiMudGFpbG9yLnYxLlVwZGF0ZUFwcGxpY2F0aW9uUmVxdWVzdBokLnRhaWxvci52MS5VcGRhdGVBcHBsaWNhdGlvblJlc3BvbnNlIgASYAoRRGVsZXRlQXBwbGljYXRpb24SIy50YWlsb3IudjEuRGVsZXRlQXBwbGljYXRpb25SZXF1ZXN0GiQudGFpbG9yLnYxLkRlbGV0ZUFwcGxpY2F0aW9uUmVzcG9uc2UiABJgChBMaXN0QXBwbGljYXRpb25zEiIudGFpbG9yLnYxLkxpc3RBcHBsaWNhdGlvbnNSZXF1ZXN0GiMudGFpbG9yLnYxLkxpc3RBcHBsaWNhdGlvbnNSZXNwb25zZSIDkAIBEloKDkdldEFwcGxpY2F0aW9uEiAudGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uUmVxdWVzdBohLnRhaWxvci52MS5HZXRBcHBsaWNhdGlvblJlc3BvbnNlIgOQAgESfgoaR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGgSLC50YWlsb3IudjEuR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXF1ZXN0Gi0udGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoUmVzcG9uc2UiA5ACARJjChJDb21wb3NlVGFpbG9yREJTREwSJC50YWlsb3IudjEuQ29tcG9zZVRhaWxvckRCU0RMUmVxdWVzdBolLnRhaWxvci52MS5Db21wb3NlVGFpbG9yREJTRExSZXNwb25zZSIAEmwKFUNyZWF0ZVRhaWxvckRCU2VydmljZRInLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlIgASbAoVVXBkYXRlVGFpbG9yREJTZXJ2aWNlEicudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuVXBkYXRlVGFpbG9yREJTZXJ2aWNlUmVzcG9uc2UiABJsChVEZWxldGVUYWlsb3JEQlNlcnZpY2USJy50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5EZWxldGVUYWlsb3JEQlNlcnZpY2VSZXNwb25zZSIAEmYKEkdldFRhaWxvckRCU2VydmljZRIkLnRhaWxvci52MS5HZXRUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GiUudGFpbG9yLnYxLkdldFRhaWxvckRCU2VydmljZVJlc3BvbnNlIgOQAgESbAoUTGlzdFRhaWxvckRCU2VydmljZXMSJi50YWlsb3IudjEuTGlzdFRhaWxvckRCU2VydmljZXNSZXF1ZXN0GicudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlNlcnZpY2VzUmVzcG9uc2UiA5ACARJjChJDcmVhdGVUYWlsb3JEQlR5cGUSJC50YWlsb3IudjEuQ3JlYXRlVGFpbG9yREJUeXBlUmVxdWVzdBolLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlR5cGVSZXNwb25zZSIAEmMKElVwZGF0ZVRhaWxvckRCVHlwZRIkLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQlR5cGVSZXF1ZXN0GiUudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASYwoSRGVsZXRlVGFpbG9yREJUeXBlEiQudGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCVHlwZVJlcXVlc3QaJS50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJUeXBlUmVzcG9uc2UiABJsChVUcnVuY2F0ZVRhaWxvckRCVHlwZXMSJy50YWlsb3IudjEuVHJ1bmNhdGVUYWlsb3JEQlR5cGVzUmVxdWVzdBooLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZXNSZXNwb25zZSIAEmkKFFRydW5jYXRlVGFpbG9yREJUeXBlEiYudGFpbG9yLnYxLlRydW5jYXRlVGFpbG9yREJUeXBlUmVxdWVzdBonLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASYwoRTGlzdFRhaWxvckRCVHlwZXMSIy50YWlsb3IudjEuTGlzdFRhaWxvckRCVHlwZXNSZXF1ZXN0GiQudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlR5cGVzUmVzcG9uc2UiA5ACARJdCg9HZXRUYWlsb3JEQlR5cGUSIS50YWlsb3IudjEuR2V0VGFpbG9yREJUeXBlUmVxdWVzdBoiLnRhaWxvci52MS5HZXRUYWlsb3JEQlR5cGVSZXNwb25zZSIDkAIBEn4KG0NyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASeAoYR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uEioudGFpbG9yLnYxLkdldFRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QaKy50YWlsb3IudjEuR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uUmVzcG9uc2UiA5ACARJ+ChpMaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9ucxIsLnRhaWxvci52MS5MaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9uc1JlcXVlc3QaLS50YWlsb3IudjEuTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXNwb25zZSIDkAIBEn4KG1VwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASfgobRGVsZXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uEi0udGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QaLi50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVzcG9uc2UiABJsChVDcmVhdGVQaXBlbGluZVNlcnZpY2USJy50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIAEmwKFVVwZGF0ZVBpcGVsaW5lU2VydmljZRInLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZVBpcGVsaW5lU2VydmljZVJlc3BvbnNlIgASbAoVRGVsZXRlUGlwZWxpbmVTZXJ2aWNlEicudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UiABJmChJHZXRQaXBlbGluZVNlcnZpY2USJC50YWlsb3IudjEuR2V0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBolLnRhaWxvci52MS5HZXRQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIDkAIBEmwKFExpc3RQaXBlbGluZVNlcnZpY2VzEiYudGFpbG9yLnYxLkxpc3RQaXBlbGluZVNlcnZpY2VzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0UGlwZWxpbmVTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESaQoTR2V0UGlwZWxpbmVSZXNvbHZlchIlLnRhaWxvci52MS5HZXRQaXBlbGluZVJlc29sdmVyUmVxdWVzdBomLnRhaWxvci52MS5HZXRQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiA5ACARJvChVMaXN0UGlwZWxpbmVSZXNvbHZlcnMSJy50YWlsb3IudjEuTGlzdFBpcGVsaW5lUmVzb2x2ZXJzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlcnNSZXNwb25zZSIDkAIBEm8KFkNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXISKC50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVSZXNvbHZlclJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIgASbwoWVXBkYXRlUGlwZWxpbmVSZXNvbHZlchIoLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVJlc29sdmVyUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJvChZEZWxldGVQaXBlbGluZVJlc29sdmVyEigudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZSIAEmMKEkNvbXBvc2VQaXBlbGluZVNETBIkLnRhaWxvci52MS5Db21wb3NlUGlwZWxpbmVTRExSZXF1ZXN0GiUudGFpbG9yLnYxLkNvbXBvc2VQaXBlbGluZVNETFJlc3BvbnNlIgASnAEKJExpc3RQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0cxI2LnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdHNSZXF1ZXN0GjcudGFpbG9yLnYxLkxpc3RQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0c1Jlc3BvbnNlIgOQAgESlgEKIkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHQSNC50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlcXVlc3QaNS50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlc3BvbnNlIgOQAgEScgoXUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXISKS50YWlsb3IudjEuUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GioudGFpbG9yLnYxLlJlc3RhcnRQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJvChZDcmVhdGVTdGF0ZWZsb3dTZXJ2aWNlEigudGFpbG9yLnYxLkNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIAEm8KFlVwZGF0ZVN0YXRlZmxvd1NlcnZpY2USKC50YWlsb3IudjEuVXBkYXRlU3RhdGVmbG93U2VydmljZVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlIgASbwoWRGVsZXRlU3RhdGVmbG93U2VydmljZRIoLnRhaWxvci52MS5EZWxldGVTdGF0ZWZsb3dTZXJ2aWNlUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVTdGF0ZWZsb3dTZXJ2aWNlUmVzcG9uc2UiABJpChNHZXRTdGF0ZWZsb3dTZXJ2aWNlEiUudGFpbG9yLnYxLkdldFN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GiYudGFpbG9yLnYxLkdldFN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIDkAIBEm8KFUxpc3RTdGF0ZWZsb3dTZXJ2aWNlcxInLnRhaWxvci52MS5MaXN0U3RhdGVmbG93U2VydmljZXNSZXF1ZXN0GigudGFpbG9yLnYxLkxpc3RTdGF0ZWZsb3dTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESbwoWQ3JlYXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJvChZVcGRhdGVFeGVjdXRvckV4ZWN1dG9yEigudGFpbG9yLnYxLlVwZGF0ZUV4ZWN1dG9yRXhlY3V0b3JSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUV4ZWN1dG9yRXhlY3V0b3JSZXNwb25zZSIAEmkKE0dldEV4ZWN1dG9yRXhlY3V0b3ISJS50YWlsb3IudjEuR2V0RXhlY3V0b3JFeGVjdXRvclJlcXVlc3QaJi50YWlsb3IudjEuR2V0RXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlIgOQAgESbwoWRGVsZXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5EZWxldGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJvChVMaXN0RXhlY3V0b3JFeGVjdXRvcnMSJy50YWlsb3IudjEuTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0RXhlY3V0b3JFeGVjdXRvcnNSZXNwb25zZSIDkAIBEloKDkdldEV4ZWN1dG9ySm9iEiAudGFpbG9yLnYxLkdldEV4ZWN1dG9ySm9iUmVxdWVzdBohLnRhaWxvci52MS5HZXRFeGVjdXRvckpvYlJlc3BvbnNlIgOQAgESYAoQTGlzdEV4ZWN1dG9ySm9icxIiLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JzUmVxdWVzdBojLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JzUmVzcG9uc2UiA5ACARJ1ChdMaXN0RXhlY3V0b3JKb2JBdHRlbXB0cxIpLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JBdHRlbXB0c1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdEV4ZWN1dG9ySm9iQXR0ZW1wdHNSZXNwb25zZSIDkAIBEoQBChxMaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzEi4udGFpbG9yLnYxLkxpc3RFeGVjdXRvckluY29taW5nV2ViaG9va3NSZXF1ZXN0Gi8udGFpbG9yLnYxLkxpc3RFeGVjdXRvckluY29taW5nV2ViaG9va3NSZXNwb25zZSIDkAIBEn4KGkdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rEiwudGFpbG9yLnYxLkdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rUmVxdWVzdBotLnRhaWxvci52MS5HZXRFeGVjdXRvckluY29taW5nV2ViaG9va1Jlc3BvbnNlIgOQAgESWgoPVHJpZ2dlckV4ZWN1dG9yEiEudGFpbG9yLnYxLlRyaWdnZXJFeGVjdXRvclJlcXVlc3QaIi50YWlsb3IudjEuVHJpZ2dlckV4ZWN1dG9yUmVzcG9uc2UiABJ1ChhDcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHQSKi50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclZhdWx0UmVxdWVzdBorLnRhaWxvci52MS5DcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXNwb25zZSIAEm8KFUdldFNlY3JldE1hbmFnZXJWYXVsdBInLnRhaWxvci52MS5HZXRTZWNyZXRNYW5hZ2VyVmF1bHRSZXF1ZXN0GigudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJWYXVsdFJlc3BvbnNlIgOQAgESdQoYRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0EioudGFpbG9yLnYxLkRlbGV0ZVNlY3JldE1hbmFnZXJWYXVsdFJlcXVlc3QaKy50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0UmVzcG9uc2UiABJ1ChdMaXN0U2VjcmV0TWFuYWdlclZhdWx0cxIpLnRhaWxvci52MS5MaXN0U2VjcmV0TWFuYWdlclZhdWx0c1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJWYXVsdHNSZXNwb25zZSIDkAIBEngKGUNyZWF0ZVNlY3JldE1hbmFnZXJTZWNyZXQSKy50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaLC50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoZVXBkYXRlU2VjcmV0TWFuYWdlclNlY3JldBIrLnRhaWxvci52MS5VcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBosLnRhaWxvci52MS5VcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2UiABJyChZHZXRTZWNyZXRNYW5hZ2VyU2VjcmV0EigudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0GikudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXNwb25zZSIDkAIBEngKGURlbGV0ZVNlY3JldE1hbmFnZXJTZWNyZXQSKy50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaLC50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoYTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzEioudGFpbG9yLnYxLkxpc3RTZWNyZXRNYW5hZ2VyU2VjcmV0c1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzUmVzcG9uc2UiA5ACARJgChFDcmVhdGVBdXRoU2VydmljZRIjLnRhaWxvci52MS5DcmVhdGVBdXRoU2VydmljZVJlcXVlc3QaJC50YWlsb3IudjEuQ3JlYXRlQXV0aFNlcnZpY2VSZXNwb25zZSIAEmAKEVVwZGF0ZUF1dGhTZXJ2aWNlEiMudGFpbG9yLnYxLlVwZGF0ZUF1dGhTZXJ2aWNlUmVxdWVzdBokLnRhaWxvci52MS5VcGRhdGVBdXRoU2VydmljZVJlc3BvbnNlIgASYAoRRGVsZXRlQXV0aFNlcnZpY2USIy50YWlsb3IudjEuRGVsZXRlQXV0aFNlcnZpY2VSZXF1ZXN0GiQudGFpbG9yLnYxLkRlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UiABJaCg5HZXRBdXRoU2VydmljZRIgLnRhaWxvci52MS5HZXRBdXRoU2VydmljZVJlcXVlc3QaIS50YWlsb3IudjEuR2V0QXV0aFNlcnZpY2VSZXNwb25zZSIDkAIBEmAKEExpc3RBdXRoU2VydmljZXMSIi50YWlsb3IudjEuTGlzdEF1dGhTZXJ2aWNlc1JlcXVlc3QaIy50YWlsb3IudjEuTGlzdEF1dGhTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESZgoTQ3JlYXRlQXV0aElEUENvbmZpZxIlLnRhaWxvci52MS5DcmVhdGVBdXRoSURQQ29uZmlnUmVxdWVzdBomLnRhaWxvci52MS5DcmVhdGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiABJmChNVcGRhdGVBdXRoSURQQ29uZmlnEiUudGFpbG9yLnYxLlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0GiYudGFpbG9yLnYxLlVwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZSIAEmYKE0RlbGV0ZUF1dGhJRFBDb25maWcSJS50YWlsb3IudjEuRGVsZXRlQXV0aElEUENvbmZpZ1JlcXVlc3QaJi50YWlsb3IudjEuRGVsZXRlQXV0aElEUENvbmZpZ1Jlc3BvbnNlIgASYAoQR2V0QXV0aElEUENvbmZpZxIiLnRhaWxvci52MS5HZXRBdXRoSURQQ29uZmlnUmVxdWVzdBojLnRhaWxvci52MS5HZXRBdXRoSURQQ29uZmlnUmVzcG9uc2UiA5ACARJmChJMaXN0QXV0aElEUENvbmZpZ3MSJC50YWlsb3IudjEuTGlzdEF1dGhJRFBDb25maWdzUmVxdWVzdBolLnRhaWxvci52MS5MaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZSIDkAIBEnIKF0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnEikudGFpbG9yLnYxLkNyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBoqLnRhaWxvci52MS5DcmVhdGVVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgAScgoXVXBkYXRlVXNlclByb2ZpbGVDb25maWcSKS50YWlsb3IudjEuVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0GioudGFpbG9yLnYxLlVwZGF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UiABJyChdEZWxldGVVc2VyUHJvZmlsZUNvbmZpZxIpLnRhaWxvci52MS5EZWxldGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QaKi50YWlsb3IudjEuRGVsZXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZSIAEmwKFEdldFVzZXJQcm9maWxlQ29uZmlnEiYudGFpbG9yLnYxLkdldFVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5HZXRVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgOQAgESYwoSQ3JlYXRlVGVuYW50Q29uZmlnEiQudGFpbG9yLnYxLkNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QaJS50YWlsb3IudjEuQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2UiABJjChJVcGRhdGVUZW5hbnRDb25maWcSJC50YWlsb3IudjEuVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBolLnRhaWxvci52MS5VcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZSIAEmMKEkRlbGV0ZVRlbmFudENvbmZpZxIkLnRhaWxvci52MS5EZWxldGVUZW5hbnRDb25maWdSZXF1ZXN0GiUudGFpbG9yLnYxLkRlbGV0ZVRlbmFudENvbmZpZ1Jlc3BvbnNlIgASXQoPR2V0VGVuYW50Q29uZmlnEiEudGFpbG9yLnYxLkdldFRlbmFudENvbmZpZ1JlcXVlc3QaIi50YWlsb3IudjEuR2V0VGVuYW50Q29uZmlnUmVzcG9uc2UiA5ACARJ4ChlDcmVhdGVQZXJzb25hbEFjY2Vzc1Rva2VuEisudGFpbG9yLnYxLkNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXF1ZXN0GiwudGFpbG9yLnYxLkNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZSIAEngKGURlbGV0ZVBlcnNvbmFsQWNjZXNzVG9rZW4SKy50YWlsb3IudjEuRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QaLC50YWlsb3IudjEuRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlc3BvbnNlIgASeAoYTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zEioudGFpbG9yLnYxLkxpc3RQZXJzb25hbEFjY2Vzc1Rva2Vuc1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVzcG9uc2UiA5ACARJsChVDcmVhdGVBdXRoTWFjaGluZVVzZXISJy50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIAEmwKFVVwZGF0ZUF1dGhNYWNoaW5lVXNlchInLnRhaWxvci52MS5VcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZUF1dGhNYWNoaW5lVXNlclJlc3BvbnNlIgASbAoVRGVsZXRlQXV0aE1hY2hpbmVVc2VyEicudGFpbG9yLnYxLkRlbGV0ZUF1dGhNYWNoaW5lVXNlclJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2UiABJmChJHZXRBdXRoTWFjaGluZVVzZXISJC50YWlsb3IudjEuR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBolLnRhaWxvci52MS5HZXRBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIDkAIBEmwKFExpc3RBdXRoTWFjaGluZVVzZXJzEiYudGFpbG9yLnYxLkxpc3RBdXRoTWFjaGluZVVzZXJzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0QXV0aE1hY2hpbmVVc2Vyc1Jlc3BvbnNlIgOQAgESaQoUQ3JlYXRlQXV0aFNDSU1Db25maWcSJi50YWlsb3IudjEuQ3JlYXRlQXV0aFNDSU1Db25maWdSZXF1ZXN0GicudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiABJpChRVcGRhdGVBdXRoU0NJTUNvbmZpZxImLnRhaWxvci52MS5VcGRhdGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QaJy50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1Db25maWdSZXNwb25zZSIAEmkKFERlbGV0ZUF1dGhTQ0lNQ29uZmlnEiYudGFpbG9yLnYxLkRlbGV0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIgASYwoRR2V0QXV0aFNDSU1Db25maWcSIy50YWlsb3IudjEuR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0GiQudGFpbG9yLnYxLkdldEF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiA5ACARJvChZDcmVhdGVBdXRoU0NJTVJlc291cmNlEigudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIAEm8KFlVwZGF0ZUF1dGhTQ0lNUmVzb3VyY2USKC50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1SZXNvdXJjZVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIgASbwoWRGVsZXRlQXV0aFNDSU1SZXNvdXJjZRIoLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2UiABJpChNHZXRBdXRoU0NJTVJlc291cmNlEiUudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GiYudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIDkAIBEmwKFEdldEF1dGhTQ0lNUmVzb3VyY2VzEiYudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VzUmVxdWVzdBonLnRhaWxvci52MS5HZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlIgOQAgESVwoOQ3JlYXRlQXV0aEhvb2sSIC50YWlsb3IudjEuQ3JlYXRlQXV0aEhvb2tSZXF1ZXN0GiEudGFpbG9yLnYxLkNyZWF0ZUF1dGhIb29rUmVzcG9uc2UiABJXCg5VcGRhdGVBdXRoSG9vaxIgLnRhaWxvci52MS5VcGRhdGVBdXRoSG9va1JlcXVlc3QaIS50YWlsb3IudjEuVXBkYXRlQXV0aEhvb2tSZXNwb25zZSIAElcKDkRlbGV0ZUF1dGhIb29rEiAudGFpbG9yLnYxLkRlbGV0ZUF1dGhIb29rUmVxdWVzdBohLnRhaWxvci52MS5EZWxldGVBdXRoSG9va1Jlc3BvbnNlIgASUQoLR2V0QXV0aEhvb2sSHS50YWlsb3IudjEuR2V0QXV0aEhvb2tSZXF1ZXN0Gh4udGFpbG9yLnYxLkdldEF1dGhIb29rUmVzcG9uc2UiA5ACARJpChRDcmVhdGVBdXRoQ29ubmVjdGlvbhImLnRhaWxvci52MS5DcmVhdGVBdXRoQ29ubmVjdGlvblJlcXVlc3QaJy50YWlsb3IudjEuQ3JlYXRlQXV0aENvbm5lY3Rpb25SZXNwb25zZSIAEmkKE0xpc3RBdXRoQ29ubmVjdGlvbnMSJS50YWlsb3IudjEuTGlzdEF1dGhDb25uZWN0aW9uc1JlcXVlc3QaJi50YWlsb3IudjEuTGlzdEF1dGhDb25uZWN0aW9uc1Jlc3BvbnNlIgOQAgESaQoUUmV2b2tlQXV0aENvbm5lY3Rpb24SJi50YWlsb3IudjEuUmV2b2tlQXV0aENvbm5lY3Rpb25SZXF1ZXN0GicudGFpbG9yLnYxLlJldm9rZUF1dGhDb25uZWN0aW9uUmVzcG9uc2UiABKEAQodUmVnaXN0ZXJBdXRoQ29ubmVjdGlvblNlc3Npb24SLy50YWlsb3IudjEuUmVnaXN0ZXJBdXRoQ29ubmVjdGlvblNlc3Npb25SZXF1ZXN0GjAudGFpbG9yLnYxLlJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVzcG9uc2UiABKiAQonRXhjaGFuZ2VBdXRoQ29ubmVjdGlvbkF1dGhvcml6YXRpb25Db2RlEjkudGFpbG9yLnYxLkV4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZVJlcXVlc3QaOi50YWlsb3IudjEuRXhjaGFuZ2VBdXRoQ29ubmVjdGlvbkF1dGhvcml6YXRpb25Db2RlUmVzcG9uc2UiABJvChZDcmVhdGVBdXRoT0F1dGgyQ2xpZW50EigudGFpbG9yLnYxLkNyZWF0ZUF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZSIAEm8KFlVwZGF0ZUF1dGhPQXV0aDJDbGllbnQSKC50YWlsb3IudjEuVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIgASbwoWRGVsZXRlQXV0aE9BdXRoMkNsaWVudBIoLnRhaWxvci52MS5EZWxldGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVBdXRoT0F1dGgyQ2xpZW50UmVzcG9uc2UiABJpChNHZXRBdXRoT0F1dGgyQ2xpZW50EiUudGFpbG9yLnYxLkdldEF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0GiYudGFpbG9yLnYxLkdldEF1dGhPQXV0aDJDbGllbnRSZXNwb25zZSIDkAIBEm8KFUxpc3RBdXRoT0F1dGgyQ2xpZW50cxInLnRhaWxvci52MS5MaXN0QXV0aE9BdXRoMkNsaWVudHNSZXF1ZXN0GigudGFpbG9yLnYxLkxpc3RBdXRoT0F1dGgyQ2xpZW50c1Jlc3BvbnNlIgOQAgESaQoTTGlzdERhdGFwbGFuZUV2ZW50cxIlLnRhaWxvci52MS5MaXN0RGF0YXBsYW5lRXZlbnRzUmVxdWVzdBomLnRhaWxvci52MS5MaXN0RGF0YXBsYW5lRXZlbnRzUmVzcG9uc2UiA5ACARKEAQocTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9ncxIuLnRhaWxvci52MS5MaXN0Q29udHJvbHBsYW5lQWN0aXZpdHlMb2dzUmVxdWVzdBovLnRhaWxvci52MS5MaXN0Q29udHJvbHBsYW5lQWN0aXZpdHlMb2dzUmVzcG9uc2UiA5ACARJXCg5UZXN0RXhlY1NjcmlwdBIgLnRhaWxvci52MS5UZXN0RXhlY1NjcmlwdFJlcXVlc3QaIS50YWlsb3IudjEuVGVzdEV4ZWNTY3JpcHRSZXNwb25zZSIAEmwKFEdldEZ1bmN0aW9uRXhlY3V0aW9uEiYudGFpbG9yLnYxLkdldEZ1bmN0aW9uRXhlY3V0aW9uUmVxdWVzdBonLnRhaWxvci52MS5HZXRGdW5jdGlvbkV4ZWN1dGlvblJlc3BvbnNlIgOQAgEScgoWTGlzdEZ1bmN0aW9uRXhlY3V0aW9ucxIoLnRhaWxvci52MS5MaXN0RnVuY3Rpb25FeGVjdXRpb25zUmVxdWVzdBopLnRhaWxvci52MS5MaXN0RnVuY3Rpb25FeGVjdXRpb25zUmVzcG9uc2UiA5ACARJxChZDcmVhdGVGdW5jdGlvblJlZ2lzdHJ5EigudGFpbG9yLnYxLkNyZWF0ZUZ1bmN0aW9uUmVnaXN0cnlSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZUZ1bmN0aW9uUmVnaXN0cnlSZXNwb25zZSIAKAEScQoWVXBkYXRlRnVuY3Rpb25SZWdpc3RyeRIoLnRhaWxvci52MS5VcGRhdGVGdW5jdGlvblJlZ2lzdHJ5UmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVGdW5jdGlvblJlZ2lzdHJ5UmVzcG9uc2UiACgBEmkKE0dldEZ1bmN0aW9uUmVnaXN0cnkSJS50YWlsb3IudjEuR2V0RnVuY3Rpb25SZWdpc3RyeVJlcXVlc3QaJi50YWlsb3IudjEuR2V0RnVuY3Rpb25SZWdpc3RyeVJlc3BvbnNlIgOQAgEScgoWTGlzdEZ1bmN0aW9uUmVnaXN0cmllcxIoLnRhaWxvci52MS5MaXN0RnVuY3Rpb25SZWdpc3RyaWVzUmVxdWVzdBopLnRhaWxvci52MS5MaXN0RnVuY3Rpb25SZWdpc3RyaWVzUmVzcG9uc2UiA5ACARJvChZEZWxldGVGdW5jdGlvblJlZ2lzdHJ5EigudGFpbG9yLnYxLkRlbGV0ZUZ1bmN0aW9uUmVnaXN0cnlSZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZUZ1bmN0aW9uUmVnaXN0cnlSZXNwb25zZSIAEowBCh5Eb3dubG9hZEZ1bmN0aW9uUmVnaXN0cnlTY3JpcHQSMC50YWlsb3IudjEuRG93bmxvYWRGdW5jdGlvblJlZ2lzdHJ5U2NyaXB0UmVxdWVzdBoxLnRhaWxvci52MS5Eb3dubG9hZEZ1bmN0aW9uUmVnaXN0cnlTY3JpcHRSZXNwb25zZSIDkAIBMAEScgoWTGlzdE1ldGVyUmVxdWVzdENvdW50cxIoLnRhaWxvci52MS5MaXN0TWV0ZXJSZXF1ZXN0Q291bnRzUmVxdWVzdBopLnRhaWxvci52MS5MaXN0TWV0ZXJSZXF1ZXN0Q291bnRzUmVzcG9uc2UiA5ACARJ4ChhMaXN0TWV0ZXJFeGVjdXRpb25Db3VudHMSKi50YWlsb3IudjEuTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0TWV0ZXJFeGVjdXRpb25Db3VudHNSZXNwb25zZSIDkAIBEmwKFExpc3RNZXRlckV2ZW50Q291bnRzEiYudGFpbG9yLnYxLkxpc3RNZXRlckV2ZW50Q291bnRzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0TWV0ZXJFdmVudENvdW50c1Jlc3BvbnNlIgOQAgESXQoPTGlzdElkUFNlcnZpY2VzEiEudGFpbG9yLnYxLkxpc3RJZFBTZXJ2aWNlc1JlcXVlc3QaIi50YWlsb3IudjEuTGlzdElkUFNlcnZpY2VzUmVzcG9uc2UiA5ACARJdChBDcmVhdGVJZFBTZXJ2aWNlEiIudGFpbG9yLnYxLkNyZWF0ZUlkUFNlcnZpY2VSZXF1ZXN0GiMudGFpbG9yLnYxLkNyZWF0ZUlkUFNlcnZpY2VSZXNwb25zZSIAEl0KEFVwZGF0ZUlkUFNlcnZpY2USIi50YWlsb3IudjEuVXBkYXRlSWRQU2VydmljZVJlcXVlc3QaIy50YWlsb3IudjEuVXBkYXRlSWRQU2VydmljZVJlc3BvbnNlIgASXQoQRGVsZXRlSWRQU2VydmljZRIiLnRhaWxvci52MS5EZWxldGVJZFBTZXJ2aWNlUmVxdWVzdBojLnRhaWxvci52MS5EZWxldGVJZFBTZXJ2aWNlUmVzcG9uc2UiABJXCg1HZXRJZFBTZXJ2aWNlEh8udGFpbG9yLnYxLkdldElkUFNlcnZpY2VSZXF1ZXN0GiAudGFpbG9yLnYxLkdldElkUFNlcnZpY2VSZXNwb25zZSIDkAIBEloKDkxpc3RJZFBDbGllbnRzEiAudGFpbG9yLnYxLkxpc3RJZFBDbGllbnRzUmVxdWVzdBohLnRhaWxvci52MS5MaXN0SWRQQ2xpZW50c1Jlc3BvbnNlIgOQAgESWgoPQ3JlYXRlSWRQQ2xpZW50EiEudGFpbG9yLnYxLkNyZWF0ZUlkUENsaWVudFJlcXVlc3QaIi50YWlsb3IudjEuQ3JlYXRlSWRQQ2xpZW50UmVzcG9uc2UiABJaCg9EZWxldGVJZFBDbGllbnQSIS50YWlsb3IudjEuRGVsZXRlSWRQQ2xpZW50UmVxdWVzdBoiLnRhaWxvci52MS5EZWxldGVJZFBDbGllbnRSZXNwb25zZSIAElQKDEdldElkUENsaWVudBIeLnRhaWxvci52MS5HZXRJZFBDbGllbnRSZXF1ZXN0Gh8udGFpbG9yLnYxLkdldElkUENsaWVudFJlc3BvbnNlIgOQAgESZgoTQ3JlYXRlU3RhdGljV2Vic2l0ZRIlLnRhaWxvci52MS5DcmVhdGVTdGF0aWNXZWJzaXRlUmVxdWVzdBomLnRhaWxvci52MS5DcmVhdGVTdGF0aWNXZWJzaXRlUmVzcG9uc2UiABJmChNVcGRhdGVTdGF0aWNXZWJzaXRlEiUudGFpbG9yLnYxLlVwZGF0ZVN0YXRpY1dlYnNpdGVSZXF1ZXN0GiYudGFpbG9yLnYxLlVwZGF0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZSIAEmYKE0RlbGV0ZVN0YXRpY1dlYnNpdGUSJS50YWlsb3IudjEuRGVsZXRlU3RhdGljV2Vic2l0ZVJlcXVlc3QaJi50YWlsb3IudjEuRGVsZXRlU3RhdGljV2Vic2l0ZVJlc3BvbnNlIgASYAoQR2V0U3RhdGljV2Vic2l0ZRIiLnRhaWxvci52MS5HZXRTdGF0aWNXZWJzaXRlUmVxdWVzdBojLnRhaWxvci52MS5HZXRTdGF0aWNXZWJzaXRlUmVzcG9uc2UiA5ACARJmChJMaXN0U3RhdGljV2Vic2l0ZXMSJC50YWlsb3IudjEuTGlzdFN0YXRpY1dlYnNpdGVzUmVxdWVzdBolLnRhaWxvci52MS5MaXN0U3RhdGljV2Vic2l0ZXNSZXNwb25zZSIDkAIBEl0KEENyZWF0ZURlcGxveW1lbnQSIi50YWlsb3IudjEuQ3JlYXRlRGVwbG95bWVudFJlcXVlc3QaIy50YWlsb3IudjEuQ3JlYXRlRGVwbG95bWVudFJlc3BvbnNlIgASTQoKVXBsb2FkRmlsZRIcLnRhaWxvci52MS5VcGxvYWRGaWxlUmVxdWVzdBodLnRhaWxvci52MS5VcGxvYWRGaWxlUmVzcG9uc2UiACgBEmAKEVB1Ymxpc2hEZXBsb3ltZW50EiMudGFpbG9yLnYxLlB1Ymxpc2hEZXBsb3ltZW50UmVxdWVzdBokLnRhaWxvci52MS5QdWJsaXNoRGVwbG95bWVudFJlc3BvbnNlIgASVwoOQ3JlYXRlV29ya2Zsb3cSIC50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0GiEudGFpbG9yLnYxLkNyZWF0ZVdvcmtmbG93UmVzcG9uc2UiABJXCg5VcGRhdGVXb3JrZmxvdxIgLnRhaWxvci52MS5VcGRhdGVXb3JrZmxvd1JlcXVlc3QaIS50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dSZXNwb25zZSIAElcKDkRlbGV0ZVdvcmtmbG93EiAudGFpbG9yLnYxLkRlbGV0ZVdvcmtmbG93UmVxdWVzdBohLnRhaWxvci52MS5EZWxldGVXb3JrZmxvd1Jlc3BvbnNlIgASUQoLR2V0V29ya2Zsb3cSHS50YWlsb3IudjEuR2V0V29ya2Zsb3dSZXF1ZXN0Gh4udGFpbG9yLnYxLkdldFdvcmtmbG93UmVzcG9uc2UiA5ACARJjChFHZXRXb3JrZmxvd0J5TmFtZRIjLnRhaWxvci52MS5HZXRXb3JrZmxvd0J5TmFtZVJlcXVlc3QaJC50YWlsb3IudjEuR2V0V29ya2Zsb3dCeU5hbWVSZXNwb25zZSIDkAIBElcKDUxpc3RXb3JrZmxvd3MSHy50YWlsb3IudjEuTGlzdFdvcmtmbG93c1JlcXVlc3QaIC50YWlsb3IudjEuTGlzdFdvcmtmbG93c1Jlc3BvbnNlIgOQAgESeAoZQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvbhIrLnRhaWxvci52MS5DcmVhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBosLnRhaWxvci52MS5DcmVhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2UiABJ4ChlVcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uEisudGFpbG9yLnYxLlVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXF1ZXN0GiwudGFpbG9yLnYxLlVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZSIAEnIKFkdldFdvcmtmbG93Sm9iRnVuY3Rpb24SKC50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QaKS50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlIgOQAgEShAEKHEdldFdvcmtmbG93Sm9iRnVuY3Rpb25CeU5hbWUSLi50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZVJlcXVlc3QaLy50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZVJlc3BvbnNlIgOQAgESeAoYTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zEioudGFpbG9yLnYxLkxpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zUmVzcG9uc2UiA5ACARJsChRHZXRXb3JrZmxvd0V4ZWN1dGlvbhImLnRhaWxvci52MS5HZXRXb3JrZmxvd0V4ZWN1dGlvblJlcXVlc3QaJy50YWlsb3IudjEuR2V0V29ya2Zsb3dFeGVjdXRpb25SZXNwb25zZSIDkAIBEnIKFkxpc3RXb3JrZmxvd0V4ZWN1dGlvbnMSKC50YWlsb3IudjEuTGlzdFdvcmtmbG93RXhlY3V0aW9uc1JlcXVlc3QaKS50YWlsb3IudjEuTGlzdFdvcmtmbG93RXhlY3V0aW9uc1Jlc3BvbnNlIgOQAgESYAoRVGVzdFN0YXJ0V29ya2Zsb3cSIy50YWlsb3IudjEuVGVzdFN0YXJ0V29ya2Zsb3dSZXF1ZXN0GiQudGFpbG9yLnYxLlRlc3RTdGFydFdvcmtmbG93UmVzcG9uc2UiABJjChJUZXN0UmVzdW1lV29ya2Zsb3cSJC50YWlsb3IudjEuVGVzdFJlc3VtZVdvcmtmbG93UmVxdWVzdBolLnRhaWxvci52MS5UZXN0UmVzdW1lV29ya2Zsb3dSZXNwb25zZSIAEk4KC1NldE1ldGFkYXRhEh0udGFpbG9yLnYxLlNldE1ldGFkYXRhUmVxdWVzdBoeLnRhaWxvci52MS5TZXRNZXRhZGF0YVJlc3BvbnNlIgASUQoLR2V0TWV0YWRhdGESHS50YWlsb3IudjEuR2V0TWV0YWRhdGFSZXF1ZXN0Gh4udGFpbG9yLnYxLkdldE1ldGFkYXRhUmVzcG9uc2UiA5ACARKEAQodQ3JlYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXISLy50YWlsb3IudjEuQ3JlYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0GjAudGFpbG9yLnYxLkNyZWF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2UiABKEAQodVXBkYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXISLy50YWlsb3IudjEuVXBkYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0GjAudGFpbG9yLnYxLlVwZGF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2UiABJ+ChpHZXRDb250cm9scGxhbmVNYWNoaW5lVXNlchIsLnRhaWxvci52MS5HZXRDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QaLS50YWlsb3IudjEuR2V0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZSIDkAIBEpABCiBHZXRDb250cm9scGxhbmVNYWNoaW5lVXNlckJ5TmFtZRIyLnRhaWxvci52MS5HZXRDb250cm9scGxhbmVNYWNoaW5lVXNlckJ5TmFtZVJlcXVlc3QaMy50YWlsb3IudjEuR2V0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJCeU5hbWVSZXNwb25zZSIDkAIBEoQBChxMaXN0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJzEi4udGFpbG9yLnYxLkxpc3RDb250cm9scGxhbmVNYWNoaW5lVXNlcnNSZXF1ZXN0Gi8udGFpbG9yLnYxLkxpc3RDb250cm9scGxhbmVNYWNoaW5lVXNlcnNSZXNwb25zZSIDkAIBEoQBCh1EZWxldGVDb250cm9scGxhbmVNYWNoaW5lVXNlchIvLnRhaWxvci52MS5EZWxldGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QaMC50YWlsb3IudjEuRGVsZXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZSIAEmwKFUNyZWF0ZVRlbGVtZXRyeUV4cG9ydBInLnRhaWxvci52MS5DcmVhdGVUZWxlbWV0cnlFeHBvcnRSZXF1ZXN0GigudGFpbG9yLnYxLkNyZWF0ZVRlbGVtZXRyeUV4cG9ydFJlc3BvbnNlIgASbAoVVXBkYXRlVGVsZW1ldHJ5RXhwb3J0EicudGFpbG9yLnYxLlVwZGF0ZVRlbGVtZXRyeUV4cG9ydFJlcXVlc3QaKC50YWlsb3IudjEuVXBkYXRlVGVsZW1ldHJ5RXhwb3J0UmVzcG9uc2UiABJmChJHZXRUZWxlbWV0cnlFeHBvcnQSJC50YWlsb3IudjEuR2V0VGVsZW1ldHJ5RXhwb3J0UmVxdWVzdBolLnRhaWxvci52MS5HZXRUZWxlbWV0cnlFeHBvcnRSZXNwb25zZSIDkAIBEmwKFExpc3RUZWxlbWV0cnlFeHBvcnRzEiYudGFpbG9yLnYxLkxpc3RUZWxlbWV0cnlFeHBvcnRzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0VGVsZW1ldHJ5RXhwb3J0c1Jlc3BvbnNlIgOQAgESbAoVRGVsZXRlVGVsZW1ldHJ5RXhwb3J0EicudGFpbG9yLnYxLkRlbGV0ZVRlbGVtZXRyeUV4cG9ydFJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlVGVsZW1ldHJ5RXhwb3J0UmVzcG9uc2UiABJmChNUZXN0VGVsZW1ldHJ5RXhwb3J0EiUudGFpbG9yLnYxLlRlc3RUZWxlbWV0cnlFeHBvcnRSZXF1ZXN0GiYudGFpbG9yLnYxLlRlc3RUZWxlbWV0cnlFeHBvcnRSZXNwb25zZSIAYgZwcm90bzM\", [file_tailor_v1_application, file_tailor_v1_auth, file_tailor_v1_events, file_tailor_v1_executor, file_tailor_v1_function, file_tailor_v1_function_registry, file_tailor_v1_idp, file_tailor_v1_metadata, file_tailor_v1_meter, file_tailor_v1_pipeline, file_tailor_v1_secret_manager, file_tailor_v1_stateflow, file_tailor_v1_staticwebsite, file_tailor_v1_tailordb, file_tailor_v1_telemetry_export, file_tailor_v1_workflow, file_tailor_v1_workspace]);\n\n/**\n * Describes the message tailor.v1.PingRequest.\n * Use `create(PingRequestSchema)` to create a new message.\n */\nexport const PingRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_service, 0);\n\n/**\n * Describes the message tailor.v1.PingResponse.\n * Use `create(PingResponseSchema)` to create a new message.\n */\nexport const PingResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_service, 1);\n\n/**\n * @generated from service tailor.v1.OperatorService\n */\nexport const OperatorService = /*@__PURE__*/\n serviceDesc(file_tailor_v1_service, 0);\n\n","import { OAuth2Client } from \"@badgateway/oauth2-client\";\nimport { MethodOptions_IdempotencyLevel } from \"@bufbuild/protobuf/wkt\";\nimport {\n type Client,\n Code,\n ConnectError,\n createClient,\n type Interceptor,\n} from \"@connectrpc/connect\";\nimport { createConnectTransport } from \"@connectrpc/connect-node\";\nimport { OperatorService } from \"@tailor-proto/tailor/v1/service_pb\";\nimport { z } from \"zod\";\nimport { logger } from \"./logger\";\nimport { readPackageJson } from \"./package-json\";\n\nexport const platformBaseUrl = process.env.PLATFORM_URL ?? \"https://api.tailor.tech\";\n\nconst oauth2ClientId =\n process.env.PLATFORM_OAUTH2_CLIENT_ID ?? \"cpoc_0Iudir72fqSpqC6GQ58ri1cLAqcq5vJl\";\nconst oauth2DiscoveryEndpoint = \"/.well-known/oauth-authorization-server/oauth2/platform\";\n\n/**\n * Initialize an OAuth2 client for Tailor Platform.\n * @returns Configured OAuth2 client\n */\nexport function initOAuth2Client() {\n return new OAuth2Client({\n clientId: oauth2ClientId,\n server: platformBaseUrl,\n discoveryEndpoint: oauth2DiscoveryEndpoint,\n });\n}\n\nexport type OperatorClient = Client<typeof OperatorService>;\n\n/**\n * Initialize an Operator client with the given access token.\n * @param accessToken - Access token for authentication\n * @returns Configured Operator client\n */\nexport async function initOperatorClient(accessToken: string) {\n const { createTracingInterceptor } = await import(\"@/cli/telemetry/interceptor\");\n\n const transport = createConnectTransport({\n httpVersion: \"2\",\n baseUrl: platformBaseUrl,\n interceptors: [\n await userAgentInterceptor(),\n await bearerTokenInterceptor(accessToken),\n retryInterceptor(),\n errorHandlingInterceptor(),\n createTracingInterceptor(),\n ],\n });\n return createClient(OperatorService, transport);\n}\n\n/**\n * Create an interceptor that sets a User-Agent header.\n * @returns User-Agent interceptor\n */\nasync function userAgentInterceptor(): Promise<Interceptor> {\n const ua = await userAgent();\n return (next) => async (req) => {\n req.header.set(\"User-Agent\", ua);\n return await next(req);\n };\n}\n\n/**\n * Build the User-Agent string for CLI requests.\n * @returns User-Agent header value\n */\nexport async function userAgent() {\n const packageJson = await readPackageJson();\n return `tailor-sdk/${packageJson.version ?? \"unknown\"}`;\n}\n\n/**\n * Create an interceptor that sets the Authorization bearer token.\n * @param accessToken - Access token to use\n * @returns Bearer token interceptor\n */\nasync function bearerTokenInterceptor(accessToken: string): Promise<Interceptor> {\n return (next) => async (req) => {\n req.header.set(\"Authorization\", `Bearer ${accessToken}`);\n return await next(req);\n };\n}\n\n/**\n * Create an interceptor that retries idempotent requests with backoff.\n * @returns Retry interceptor\n */\nfunction retryInterceptor(): Interceptor {\n return (next) => async (req) => {\n if (req.stream) {\n return await next(req);\n }\n\n let lastError: unknown;\n for (let i = 0; i < 3; i++) {\n if (i > 0) {\n await waitRetryBackoff(i);\n }\n\n try {\n return await next(req);\n } catch (error) {\n if (isRetirable(error, req.method.idempotency)) {\n lastError = error;\n continue;\n }\n throw error;\n }\n }\n throw lastError;\n };\n}\n\n/**\n * Wait for an exponential backoff delay with jitter.\n * @param attempt - Current retry attempt number (1-based)\n * @returns Promise that resolves after the delay\n */\nfunction waitRetryBackoff(attempt: number) {\n const base = 50 * 2 ** (attempt - 1);\n const jitter = 0.1 * (Math.random() * 2 - 1);\n const backoff = base * (1 + jitter);\n return new Promise((resolve) => setTimeout(resolve, backoff));\n}\n\n/**\n * Determine whether the given error is retriable for the method idempotency.\n * @param error - Error thrown by the request\n * @param idempotency - Method idempotency level\n * @returns True if the error should be retried\n */\nfunction isRetirable(error: unknown, idempotency: MethodOptions_IdempotencyLevel) {\n if (!(error instanceof ConnectError)) {\n return false;\n }\n\n switch (error.code) {\n case Code.ResourceExhausted:\n case Code.Unavailable:\n return true;\n case Code.Internal:\n return (\n idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS ||\n idempotency === MethodOptions_IdempotencyLevel.IDEMPOTENT\n );\n default:\n return false;\n }\n}\n\n/**\n * Create an interceptor that enhances error messages from the Operator API.\n * @returns Error handling interceptor\n */\nfunction errorHandlingInterceptor(): Interceptor {\n return (next) => async (req) => {\n try {\n return await next(req);\n } catch (error) {\n if (error instanceof ConnectError) {\n const { operation, resourceType } = parseMethodName(req.method.name);\n const requestParams = formatRequestParams(req.message);\n\n // Re-throw as ConnectError with enhanced message to avoid re-wrapping\n // Use rawMessage to avoid duplicating the error code prefix\n throw new ConnectError(\n `Failed to ${operation} ${resourceType}: ${error.rawMessage}\\nRequest: ${requestParams}`,\n error.code,\n error.metadata,\n );\n }\n throw error;\n }\n };\n}\n\n/**\n * @internal\n * @param methodName - RPC method name (e.g., \"CreateWorkspace\")\n * @returns Parsed operation and resource type\n */\nexport function parseMethodName(methodName: string): {\n operation: string;\n resourceType: string;\n} {\n const match = methodName.match(/^(Create|Update|Delete|Set|List|Get)(.+)$/);\n if (!match) {\n return { operation: \"perform\", resourceType: \"resource\" };\n }\n\n const [, action, resource] = match;\n return { operation: action.toLowerCase(), resourceType: resource };\n}\n\n/**\n * JSON.stringify replacer that converts BigInt values to strings.\n * @param _key - Object key (unused)\n * @param value - Value to serialize\n * @returns Serializable value\n */\nfunction bigIntReplacer(_key: string, value: unknown): unknown {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n}\n\n/**\n * @internal\n * @param message - Request message to format\n * @returns Pretty-printed JSON or error placeholder\n */\nexport function formatRequestParams(message: unknown): string {\n try {\n if (message && typeof message === \"object\" && \"toJson\" in message) {\n return JSON.stringify((message as { toJson: () => unknown }).toJson(), bigIntReplacer, 2);\n }\n return JSON.stringify(message, bigIntReplacer, 2);\n } catch {\n return \"(unable to serialize request)\";\n }\n}\n\nexport const MAX_PAGE_SIZE = 1000;\n\n/**\n * Fetch all paginated resources by repeatedly calling the given function.\n * @template T\n * @param fn - Page fetcher returning items and next page token\n * @returns All fetched items\n */\nexport async function fetchAll<T>(\n fn: (pageToken: string, maxPageSize: number) => Promise<[T[], string]>,\n) {\n const items: T[] = [];\n let pageToken = \"\";\n\n while (true) {\n const [batch, nextPageToken] = await fn(pageToken, MAX_PAGE_SIZE);\n items.push(...batch);\n if (!nextPageToken) break;\n pageToken = nextPageToken;\n }\n return items;\n}\n\n/**\n * Fetch user info from the Tailor Platform userinfo endpoint.\n * @param accessToken - Access token for the current user\n * @returns Parsed user info\n */\nexport async function fetchUserInfo(accessToken: string) {\n const userInfoUrl = new URL(\"/auth/platform/userinfo\", platformBaseUrl).href;\n const resp = await fetch(userInfoUrl, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"User-Agent\": await userAgent(),\n },\n });\n if (!resp.ok) {\n throw new Error(`Failed to fetch user info: ${resp.statusText}`);\n }\n\n const rawJson = await resp.json();\n const schema = z.object({\n email: z.string(),\n });\n return schema.parse(rawJson);\n}\n\n// Converting \"name:url\" patterns to actual Static Website URLs\n/**\n * Resolve \"name:url\" patterns to actual Static Website URLs.\n * @param client - Operator client instance\n * @param workspaceId - Workspace ID\n * @param urls - URLs or name:url patterns\n * @param context - Logging context (e.g., \"CORS\", \"OAuth2 redirect URIs\")\n * @returns Resolved URLs\n */\nexport async function resolveStaticWebsiteUrls(\n client: OperatorClient,\n workspaceId: string,\n urls: string[] | undefined,\n context: string, // for logging context (e.g., \"CORS\", \"OAuth2 redirect URIs\")\n): Promise<string[]> {\n if (!urls) {\n return [];\n }\n\n const results = await Promise.all(\n urls.map(async (url) => {\n const urlPattern = /:url(\\/.*)?$/;\n const match = url.match(urlPattern);\n\n if (match && match.index !== undefined) {\n const siteName = url.substring(0, match.index);\n const pathSuffix = match[1] || \"\";\n\n try {\n const response = await client.getStaticWebsite({\n workspaceId,\n name: siteName,\n });\n\n if (response.staticwebsite?.url) {\n return [response.staticwebsite.url + pathSuffix];\n } else {\n logger.warn(\n `Static website \"${siteName}\" has no URL assigned yet. Excluding from ${context}.`,\n );\n return [];\n }\n } catch {\n logger.warn(\n `Static website \"${siteName}\" not found for ${context} configuration. Excluding from ${context}.`,\n );\n return [];\n }\n }\n return [url];\n }),\n );\n\n return results.flat();\n}\n\n/**\n * Fetch an OAuth2 access token for a machine user.\n * @param url - OAuth2 server base URL\n * @param clientId - Client ID for the machine user\n * @param clientSecret - Client secret for the machine user\n * @returns Access token\n */\nexport async function fetchMachineUserToken(url: string, clientId: string, clientSecret: string) {\n const tokenEndpoint = new URL(\"/oauth2/token\", url).href;\n const formData = new URLSearchParams();\n formData.append(\"grant_type\", \"client_credentials\");\n formData.append(\"client_id\", clientId);\n formData.append(\"client_secret\", clientSecret);\n\n const resp = await fetch(tokenEndpoint, {\n method: \"POST\",\n headers: {\n \"User-Agent\": await userAgent(),\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: formData,\n });\n if (!resp.ok) {\n throw new Error(\"Failed to fetch machine user token\");\n }\n const rawJson = await resp.json();\n\n const schema = z.object({\n token_type: z.string(),\n access_token: z.string(),\n expires_in: z.number(),\n });\n return schema.parse(rawJson);\n}\n","import * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport { parseYAML, stringifyYAML, parseTOML } from \"confbox\";\nimport { findUpSync } from \"find-up-simple\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { xdgConfig } from \"xdg-basedir\";\nimport { z } from \"zod\";\nimport { initOAuth2Client } from \"./client\";\nimport { logger } from \"./logger\";\n\nconst pfConfigSchema = z.object({\n version: z.literal(1),\n users: z.partialRecord(\n z.string(),\n z.object({\n access_token: z.string(),\n refresh_token: z.string(),\n token_expires_at: z.string(),\n }),\n ),\n profiles: z.partialRecord(\n z.string(),\n z.object({\n user: z.string(),\n workspace_id: z.string(),\n }),\n ),\n // null if no user is currently selected\n current_user: z.string().nullable(),\n});\n\ntype PfConfig = z.output<typeof pfConfigSchema>;\ntype LoadWorkspaceIdOptions = {\n workspaceId?: string;\n profile?: string;\n};\ntype LoadAccessTokenOptions = {\n useProfile?: boolean;\n profile?: string;\n};\n\nfunction platformConfigPath() {\n if (!xdgConfig) {\n throw new Error(\"User home directory not found\");\n }\n return path.join(xdgConfig, \"tailor-platform\", \"config.yaml\");\n}\n\n/**\n * Read Tailor Platform CLI configuration, migrating from tailorctl if necessary.\n * @returns Parsed platform configuration\n */\nexport function readPlatformConfig(): PfConfig {\n const configPath = platformConfigPath();\n\n // If platform config doesn't exist, try to read tailorctl config and migrate\n if (!fs.existsSync(configPath)) {\n logger.warn(`Config not found at ${configPath}, migrating from tailorctl config...`);\n const tcConfig = readTailorctlConfig();\n const pfConfig = tcConfig\n ? fromTailorctlConfig(tcConfig)\n : ({ version: 1, users: {}, profiles: {}, current_user: null } as const);\n writePlatformConfig(pfConfig);\n return pfConfig;\n }\n const rawConfig = parseYAML(fs.readFileSync(configPath, \"utf-8\"));\n return pfConfigSchema.parse(rawConfig);\n}\n\n/**\n * Write Tailor Platform CLI configuration to disk.\n * @param config - Platform configuration to write\n */\nexport function writePlatformConfig(config: PfConfig) {\n const configPath = platformConfigPath();\n fs.mkdirSync(path.dirname(configPath), { recursive: true });\n fs.writeFileSync(configPath, stringifyYAML(config));\n}\n\nconst tcContextConfigSchema = z.object({\n username: z.string().optional(),\n controlplaneaccesstoken: z.string().optional(),\n controlplanerefreshtoken: z.string().optional(),\n controlplanetokenexpiresat: z.string().optional(),\n workspaceid: z.string().optional(),\n});\n\nconst tcConfigSchema = z\n .object({\n global: z\n .object({\n context: z.string().optional(),\n })\n .optional(),\n })\n .catchall(tcContextConfigSchema.optional());\n\ntype TcConfig = z.output<typeof tcConfigSchema>;\ntype TcContextConfig = z.output<typeof tcContextConfigSchema>;\n\nfunction readTailorctlConfig(): TcConfig | undefined {\n const configPath = path.join(os.homedir(), \".tailorctl\", \"config\");\n if (!fs.existsSync(configPath)) {\n return;\n }\n const rawConfig = parseTOML(fs.readFileSync(configPath, \"utf-8\"));\n return tcConfigSchema.parse(rawConfig);\n}\n\nfunction fromTailorctlConfig(config: TcConfig): PfConfig {\n const users: PfConfig[\"users\"] = {};\n const profiles: PfConfig[\"profiles\"] = {};\n let currentUser: PfConfig[\"current_user\"] = null;\n\n const currentContext = config.global?.context || \"default\";\n for (const [key, val] of Object.entries(config)) {\n if (key === \"global\") {\n continue;\n }\n const context = val as TcContextConfig;\n if (\n !context.username ||\n !context.controlplaneaccesstoken ||\n !context.controlplanerefreshtoken ||\n !context.controlplanetokenexpiresat ||\n !context.workspaceid\n ) {\n continue;\n }\n if (key === currentContext) {\n currentUser = context.username;\n }\n profiles[key] = {\n user: context.username,\n workspace_id: context.workspaceid,\n };\n const user = users[context.username];\n if (!user || new Date(user.token_expires_at) < new Date(context.controlplanetokenexpiresat)) {\n users[context.username] = {\n access_token: context.controlplaneaccesstoken,\n refresh_token: context.controlplanerefreshtoken,\n token_expires_at: context.controlplanetokenexpiresat,\n };\n }\n }\n return { version: 1, users, profiles, current_user: currentUser };\n}\n\nfunction validateUUID(value: string, source: string): string {\n const result = z.uuid().safeParse(value);\n if (!result.success) {\n throw new Error(`Invalid value from ${source}: must be a valid UUID`);\n }\n return result.data;\n}\n\n/**\n * Load workspace ID from command options, environment variables, or platform config.\n * In CLI context, env fallback is also handled by politty's arg env option.\n * Priority: opts/workspaceId > env/workspaceId > opts/profile > error\n * @param opts - Workspace and profile options\n * @returns Resolved workspace ID\n */\nexport function loadWorkspaceId(opts?: LoadWorkspaceIdOptions): string {\n if (opts?.workspaceId) {\n return validateUUID(opts.workspaceId, \"--workspace-id option\");\n }\n\n if (process.env.TAILOR_PLATFORM_WORKSPACE_ID) {\n return validateUUID(\n process.env.TAILOR_PLATFORM_WORKSPACE_ID,\n \"TAILOR_PLATFORM_WORKSPACE_ID environment variable\",\n );\n }\n\n const profile = opts?.profile || process.env.TAILOR_PLATFORM_PROFILE;\n if (profile) {\n const pfConfig = readPlatformConfig();\n const wsId = pfConfig.profiles[profile]?.workspace_id;\n if (!wsId) {\n throw new Error(`Profile \"${profile}\" not found`);\n }\n return validateUUID(wsId, `profile \"${profile}\"`);\n }\n\n throw new Error(ml`\n Workspace ID not found.\n Please specify workspace ID via --workspace-id option or TAILOR_PLATFORM_WORKSPACE_ID environment variable.\n `);\n}\n\n/**\n * Load access token from environment variables, command options, or platform config.\n * In CLI context, profile env fallback is also handled by politty's arg env option.\n * Priority: env/TAILOR_PLATFORM_TOKEN > env/TAILOR_TOKEN (deprecated) > opts/profile > env/profile > config/currentUser > error\n * @param opts - Profile options\n * @returns Resolved access token\n */\nexport async function loadAccessToken(opts?: LoadAccessTokenOptions) {\n // env/pat - TAILOR_PLATFORM_TOKEN takes precedence\n if (process.env.TAILOR_PLATFORM_TOKEN) {\n return process.env.TAILOR_PLATFORM_TOKEN;\n }\n // TAILOR_TOKEN is deprecated\n if (process.env.TAILOR_TOKEN) {\n logger.warn(\"TAILOR_TOKEN is deprecated. Please use TAILOR_PLATFORM_TOKEN instead.\");\n return process.env.TAILOR_TOKEN;\n }\n\n const pfConfig = readPlatformConfig();\n let user;\n const profile = opts?.useProfile\n ? opts.profile || process.env.TAILOR_PLATFORM_PROFILE\n : undefined;\n if (profile) {\n const u = pfConfig.profiles[profile]?.user;\n if (!u) {\n throw new Error(`Profile \"${profile}\" not found`);\n }\n user = u;\n } else {\n // config/currentUser\n const u = pfConfig.current_user;\n if (!u) {\n // error\n throw new Error(ml`\n Tailor Platform token not found.\n Please specify token via TAILOR_PLATFORM_TOKEN environment variable or login using 'tailor-sdk login' command.\n `);\n }\n user = u;\n }\n\n return await fetchLatestToken(pfConfig, user);\n}\n\n/**\n * Fetch the latest access token, refreshing if necessary.\n * @param config - Platform config\n * @param user - User name\n * @returns Latest access token\n */\nexport async function fetchLatestToken(config: PfConfig, user: string): Promise<string> {\n const tokens = config.users[user];\n if (!tokens) {\n throw new Error(ml`\n User \"${user}\" not found.\n Please verify your user name and login using 'tailor-sdk login' command.\n `);\n }\n if (new Date(tokens.token_expires_at) > new Date()) {\n return tokens.access_token;\n }\n\n const client = initOAuth2Client();\n let resp;\n try {\n resp = await client.refreshToken({\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n expiresAt: Date.parse(tokens.token_expires_at),\n });\n } catch {\n throw new Error(ml`\n Failed to refresh token. Your session may have expired.\n Please run 'tailor-sdk login' and try again.\n `);\n }\n config.users[user] = {\n access_token: resp.accessToken,\n refresh_token: resp.refreshToken!,\n token_expires_at: new Date(resp.expiresAt!).toISOString(),\n };\n writePlatformConfig(config);\n return resp.accessToken;\n}\n\nconst DEFAULT_CONFIG_FILENAME = \"tailor.config.ts\";\n\n/**\n * Load config path from command options, environment variables, or search parent directories.\n * In CLI context, env fallback is also handled by politty's arg env option.\n * Priority: opts/config > env/config > search parent directories\n * @param configPath - Optional explicit config path\n * @returns Resolved config path or undefined\n */\nexport function loadConfigPath(configPath?: string): string | undefined {\n if (configPath) {\n return configPath;\n }\n if (process.env.TAILOR_PLATFORM_SDK_CONFIG_PATH) {\n return process.env.TAILOR_PLATFORM_SDK_CONFIG_PATH;\n }\n\n // Search for config file in current directory and parent directories\n return findUpSync(DEFAULT_CONFIG_FILENAME);\n}\n","import * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\n\n/**\n * Compute the SHA-256 hex digest of an arbitrary string.\n * @param content - The string content to hash\n * @returns Hex-encoded SHA-256 hash\n */\nfunction hashContent(content: string): string {\n return crypto.createHash(\"sha256\").update(content, \"utf-8\").digest(\"hex\");\n}\n\n/**\n * Read a file and return its SHA-256 hex digest.\n * @param filePath - Absolute path to the file\n * @returns Hex-encoded SHA-256 hash of the file content\n */\nfunction hashFile(filePath: string): string {\n const content = fs.readFileSync(filePath);\n return crypto.createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\n/**\n * Compute a deterministic SHA-256 hash for multiple files.\n *\n * Paths are sorted alphabetically before hashing so that the result\n * is independent of the order the paths are supplied (e.g. glob ordering).\n * Each file's individual hash is concatenated and then hashed again.\n * @param filePaths - Array of absolute file paths\n * @returns Hex-encoded SHA-256 hash representing all files\n */\nfunction hashFiles(filePaths: string[]): string {\n const sorted = [...filePaths].sort();\n const combined = sorted.map((fp) => hashFile(fp)).join(\"\");\n return hashContent(combined);\n}\n\nexport { hashContent, hashFile, hashFiles };\n","let distPath: string | null = null;\n\nexport const getDistDir = (): string => {\n const configured = process.env.TAILOR_SDK_OUTPUT_DIR;\n if (configured && configured !== distPath) {\n distPath = configured;\n } else if (distPath === null) {\n distPath = configured || \".tailor-sdk\";\n }\n return distPath;\n};\n","import type { Plugin } from \"rolldown\";\n\ntype DepCollectorResult = {\n plugin: Plugin;\n getResult: () => string[];\n};\n\n/**\n * Create a rolldown plugin that collects all resolved module paths during a build.\n * The plugin is purely observational and does not modify any code or behavior.\n * Collected paths exclude node_modules and generated entry files.\n * node_modules changes (package upgrades) are not tracked per-bundle;\n * lockfile hash and SDK version changes invalidate the entire cache.\n * @returns An object containing the plugin and a getResult function that returns sorted, deduplicated paths\n */\nexport function createDepCollectorPlugin(): DepCollectorResult {\n const collectedPaths = new Set<string>();\n\n const plugin: Plugin = {\n name: \"cache-dep-collector\",\n load: {\n filter: {\n id: {\n // Match all file types (not just JS/TS) so that JSON, CJS,\n // and other imported files are tracked for cache invalidation.\n include: [/\\.[^/]+$/],\n },\n },\n handler(id) {\n if (!id.includes(\"node_modules\") && !id.endsWith(\".entry.js\")) {\n collectedPaths.add(id);\n }\n return null;\n },\n },\n };\n\n function getResult(): string[] {\n return Array.from(collectedPaths).sort();\n }\n\n return { plugin, getResult };\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { createDepCollectorPlugin } from \"./dep-collector-plugin\";\nimport { hashContent, hashFile, hashFiles } from \"./hasher\";\nimport type { CacheStore } from \"./store\";\nimport type { Plugin } from \"rolldown\";\n\ntype BundleKind = \"resolver\" | \"executor\" | \"workflow-job\" | \"auth-hook\";\n\ntype BundleCacheRestoreParams = {\n kind: BundleKind;\n name: string;\n outputPath: string;\n /** Optional hash of non-file context (e.g., env variables) to include in cache validation. */\n contextHash?: string;\n};\n\ntype BundleCacheSaveParams = {\n kind: BundleKind;\n name: string;\n sourceFile: string;\n outputPath: string;\n dependencyPaths: string[];\n /** Optional hash of non-file context (e.g., env variables) to include in cache key computation. */\n contextHash?: string;\n};\n\n/**\n * Cache strategy that determines whether a bundled output can be\n * restored from cache or needs rebuilding.\n */\ntype BundleCache = {\n /** Attempt to restore a cached bundle. Returns true if the cache was valid and output was restored. */\n tryRestore(params: BundleCacheRestoreParams): boolean;\n /** Save a bundle output and its metadata to the cache. */\n save(params: BundleCacheSaveParams): void;\n};\n\nfunction buildCacheKey(kind: string, name: string): string {\n return `${kind}:${name}`;\n}\n\nfunction combineHash(fileHash: string, contextHash?: string): string {\n if (!contextHash) return fileHash;\n return hashContent(fileHash + contextHash);\n}\n\ntype ComputeBundlerContextHashParams = {\n sourceFile: string;\n serializedTriggerContext: string;\n tsconfig?: string;\n inlineSourcemap?: boolean;\n prefix?: string;\n};\n\n/**\n * Compute a context hash for cache invalidation across bundlers.\n *\n * Combines the source file path, serialized trigger context, tsconfig hash,\n * sourcemap mode, and an optional prefix (e.g., serialized env variables)\n * into a single SHA-256 hash.\n * @param params - Context hash computation parameters\n * @returns SHA-256 hex digest of the combined context\n */\nfunction computeBundlerContextHash(params: ComputeBundlerContextHashParams): string {\n const { sourceFile, serializedTriggerContext, tsconfig, inlineSourcemap, prefix } = params;\n return hashContent(\n (prefix ?? \"\") +\n path.resolve(sourceFile) +\n serializedTriggerContext +\n (tsconfig ? hashFile(tsconfig) : \"\") +\n String(inlineSourcemap ?? false),\n );\n}\n\ntype WithCacheParams = {\n cache: BundleCache | undefined;\n kind: BundleKind;\n name: string;\n sourceFile: string;\n outputPath: string;\n contextHash: string | undefined;\n build: (plugins: Plugin[]) => Promise<void>;\n};\n\n/**\n * Run a build with optional cache restore/save around it.\n * When caching is active, attempts to restore from cache first,\n * and saves the build result (with collected dependencies) on a cache miss.\n * @param params - Cache and build parameters\n */\nasync function withCache(params: WithCacheParams): Promise<void> {\n const { cache, kind, name, sourceFile, outputPath, contextHash, build } = params;\n\n if (!cache) {\n await build([]);\n return;\n }\n\n const restored = cache.tryRestore({ kind, name, outputPath, contextHash });\n if (restored) {\n logger.debug(` ${styles.dim(\"cached\")}: ${name}`);\n return;\n }\n\n const { plugin, getResult } = createDepCollectorPlugin();\n await build([plugin]);\n\n cache.save({ kind, name, sourceFile, outputPath, dependencyPaths: getResult(), contextHash });\n}\n\n/**\n * Create a bundle cache backed by the given store.\n * @param store - The cache store for persistence\n * @returns A BundleCache instance\n */\nfunction createBundleCache(store: CacheStore): BundleCache {\n function tryRestore(params: BundleCacheRestoreParams): boolean {\n const cacheKey = buildCacheKey(params.kind, params.name);\n const entry = store.getEntry(cacheKey);\n\n if (!entry) {\n return false;\n }\n\n // Recompute hash of all stored dependency paths.\n // If any file is missing or unreadable, treat as cache miss.\n let currentHash: string;\n try {\n currentHash = combineHash(hashFiles(entry.dependencyPaths), params.contextHash);\n } catch {\n return false;\n }\n\n if (currentHash !== entry.inputHash) {\n return false;\n }\n\n return store.restoreBundleOutput(cacheKey, params.outputPath);\n }\n\n function save(params: BundleCacheSaveParams): void {\n const { kind, name, sourceFile, outputPath, dependencyPaths, contextHash } = params;\n const cacheKey = buildCacheKey(kind, name);\n // Always include sourceFile in dependency paths so that changes to the\n // source file itself are detected even when dep-collector only finds\n // node_modules imports (which are filtered out).\n const allDeps = dependencyPaths.includes(sourceFile)\n ? dependencyPaths\n : [sourceFile, ...dependencyPaths];\n const inputHash = combineHash(hashFiles(allDeps), contextHash);\n // Stored for future integrity verification (detect corrupted cache files)\n const contentHash = hashFile(outputPath);\n\n store.storeBundleOutput(cacheKey, outputPath);\n\n const outputFiles = [{ outputPath, contentHash }];\n const mapPath = `${outputPath}.map`;\n if (fs.existsSync(mapPath)) {\n outputFiles.push({ outputPath: mapPath, contentHash: hashFile(mapPath) });\n }\n\n store.setEntry(cacheKey, {\n kind: \"bundle\",\n inputHash,\n dependencyPaths: allDeps,\n outputFiles,\n createdAt: new Date().toISOString(),\n });\n }\n\n return { tryRestore, save };\n}\n\nexport { computeBundlerContextHash, createBundleCache, withCache };\nexport type { BundleCache, BundleCacheRestoreParams, BundleCacheSaveParams };\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\n\n/**\n * Collect base directories for resolving plugin import paths.\n * @param configPath - Path to tailor.config.ts\n * @returns Ordered list of base directories\n */\nexport function getPluginImportBaseDirs(configPath?: string): string[] {\n if (configPath) {\n return [path.dirname(configPath)];\n }\n\n return [process.cwd()];\n}\n\n/**\n * Resolve a relative plugin import path against candidate base directories.\n * @param pluginImportPath - Relative plugin import path\n * @param baseDirs - Candidate base directories\n * @returns Absolute path if found, otherwise null\n */\nexport function resolveRelativePluginImportPath(\n pluginImportPath: string,\n baseDirs: string[],\n): string | null {\n if (!pluginImportPath.startsWith(\".\")) {\n return null;\n }\n\n for (const baseDir of baseDirs) {\n const absolutePath = path.resolve(baseDir, pluginImportPath);\n if (fs.existsSync(absolutePath)) {\n return absolutePath;\n }\n }\n\n return null;\n}\n","import type {\n TailorDBReadyContext,\n ResolverReadyContext,\n ExecutorReadyContext,\n GeneratorResult,\n} from \"./plugin-generation\";\nimport type { TailorAnyDBField, TailorAnyDBType } from \"@/configure/services/tailordb\";\n\nexport type TypeConfigRequired<PluginConfig = unknown> =\n | boolean\n | ((pluginConfig: PluginConfig | undefined) => boolean);\n\n/**\n * Interface for plugin configuration mapping.\n * Extend this interface via declaration merging to add typed plugin configs.\n */\n// oxlint-disable-next-line no-unused-vars, no-empty-object-type\nexport interface PluginConfigs<Fields extends string = string> {\n // Extend this interface via declaration merging to add typed plugin configs\n}\n\n/**\n * Plugin attachment stored on TailorAnyDBType instances.\n */\nexport interface PluginAttachment {\n pluginId: string;\n config: unknown;\n}\n\n/**\n * Context passed to plugin's process method\n */\nexport interface PluginProcessContext<TypeConfig = unknown, PluginConfig = unknown> {\n type: TailorAnyDBType;\n typeConfig: TypeConfig;\n pluginConfig: PluginConfig;\n namespace: string;\n}\n\n/**\n * Context passed to plugin's onNamespaceLoaded hook.\n */\nexport interface PluginNamespaceProcessContext<PluginConfig = unknown> {\n pluginConfig: PluginConfig;\n namespace: string;\n}\n\n/**\n * Interface representing a TailorDB type for plugin output.\n */\nexport interface TailorDBTypeForPlugin {\n readonly name: string;\n readonly fields: Record<string, unknown>;\n}\n\nexport type PluginGeneratedType = TailorDBTypeForPlugin;\n\nexport type PluginGeneratedTypes = Record<string, PluginGeneratedType>;\n\nexport interface PluginGeneratedResolver {\n name: string;\n operation: \"query\" | \"mutation\";\n inputFields?: Record<string, unknown>;\n outputFields: Record<string, unknown>;\n body: string;\n}\n\nexport interface PluginRecordTriggerConfig {\n kind: \"recordCreated\" | \"recordUpdated\" | \"recordDeleted\";\n typeName: string;\n}\n\nexport interface PluginScheduleTriggerConfig {\n kind: \"schedule\";\n cron: string;\n timezone?: string;\n}\n\nexport interface PluginIncomingWebhookTriggerConfig {\n kind: \"incomingWebhook\";\n}\n\nexport type PluginTriggerConfig =\n | PluginRecordTriggerConfig\n | PluginScheduleTriggerConfig\n | PluginIncomingWebhookTriggerConfig;\n\nexport type PluginInjectValue = string | number | boolean | null;\nexport type PluginInjectMap = Record<string, PluginInjectValue>;\n\nexport interface PluginFunctionOperationConfig {\n kind: \"function\";\n body: string;\n inject?: PluginInjectMap;\n}\n\nexport interface PluginGraphQLOperationConfig {\n kind: \"graphql\";\n query: string;\n appName?: string;\n variables?: string;\n}\n\nexport interface PluginWebhookOperationConfig {\n kind: \"webhook\";\n url: string;\n}\n\nexport interface PluginWorkflowOperationConfig {\n kind: \"workflow\";\n workflowName: string;\n}\n\nexport type PluginOperationConfig =\n | PluginFunctionOperationConfig\n | PluginGraphQLOperationConfig\n | PluginWebhookOperationConfig\n | PluginWorkflowOperationConfig;\n\nexport type PluginExecutorContextValue =\n | TailorAnyDBType\n | string\n | number\n | boolean\n | null\n | undefined;\n\nexport interface PluginExecutorContextBase {\n sourceType: TailorAnyDBType | null;\n namespace: string;\n}\n\nexport type PluginExecutorContext = PluginExecutorContextBase & {\n [key: string]: PluginExecutorContextValue;\n};\n\nexport interface PluginExecutorModule {\n default: unknown;\n}\n\nexport interface PluginGeneratedExecutorWithFile<Ctx = PluginExecutorContext> {\n name: string;\n resolve: () => Promise<PluginExecutorModule>;\n context: Ctx;\n}\n\nexport interface PluginGeneratedExecutorLegacy {\n name: string;\n description?: string;\n trigger: PluginTriggerConfig;\n operation: PluginOperationConfig;\n}\n\nexport type PluginGeneratedExecutor =\n | PluginGeneratedExecutorWithFile\n | PluginGeneratedExecutorLegacy;\n\n/**\n * Checks if a plugin executor uses file-based resolution.\n * @param executor - The plugin executor to check.\n * @returns True if the executor uses file-based resolution.\n */\nexport function isPluginExecutorWithFile(\n executor: PluginGeneratedExecutor,\n): executor is PluginGeneratedExecutorWithFile {\n return \"resolve\" in executor && \"context\" in executor;\n}\n\nexport interface PluginExtends {\n fields?: Record<string, TailorAnyDBField>;\n}\n\nexport interface PluginOutput {\n types?: PluginGeneratedTypes;\n resolvers?: PluginGeneratedResolver[];\n executors?: PluginGeneratedExecutor[];\n}\n\nexport interface TypePluginOutput extends PluginOutput {\n extends?: PluginExtends;\n}\n\nexport type NamespacePluginOutput = PluginOutput;\n\n/**\n * Plugin interface that all plugins must implement.\n * @template TypeConfig - Type for per-type configuration passed via .plugin() method\n * @template PluginConfig - Type for plugin-level configuration passed via definePlugins()\n */\nexport interface Plugin<TypeConfig = unknown, PluginConfig = unknown> {\n readonly id: string;\n readonly description: string;\n readonly importPath?: string;\n readonly typeConfigRequired?: TypeConfigRequired<PluginConfig>;\n readonly pluginConfig?: PluginConfig;\n\n onTypeLoaded?(\n context: PluginProcessContext<TypeConfig, PluginConfig>,\n ): TypePluginOutput | Promise<TypePluginOutput>;\n\n onNamespaceLoaded?(\n context: PluginNamespaceProcessContext<PluginConfig>,\n ): NamespacePluginOutput | Promise<NamespacePluginOutput>;\n\n onTailorDBReady?(\n context: TailorDBReadyContext<PluginConfig>,\n ): GeneratorResult | Promise<GeneratorResult>;\n\n onResolverReady?(\n context: ResolverReadyContext<PluginConfig>,\n ): GeneratorResult | Promise<GeneratorResult>;\n\n onExecutorReady?(\n context: ExecutorReadyContext<PluginConfig>,\n ): GeneratorResult | Promise<GeneratorResult>;\n}\n","/**\n * Plugin Executor Generator\n *\n * Generates TypeScript files for plugin-generated executors.\n * Supports both legacy format (inline trigger/operation) and new format (executorFile/context).\n */\n\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport {\n getPluginImportBaseDirs,\n resolveRelativePluginImportPath,\n} from \"@/cli/shared/plugin-import\";\nimport {\n isPluginExecutorWithFile,\n type PluginGeneratedExecutorLegacy,\n type PluginGeneratedExecutorWithFile,\n type PluginTriggerConfig,\n type PluginOperationConfig,\n type PluginInjectMap,\n type PluginExecutorContext,\n} from \"@/types/plugin\";\nimport type {\n PluginExecutorInfoExtended,\n PluginTypeGenerationResult,\n SourceTypeInfo,\n} from \"@/plugin/manager\";\n\n/**\n * Information needed for type import resolution.\n */\ninterface TypeImportInfo {\n /** Variable name to use in generated code */\n variableName: string;\n /** Import path for the type */\n importPath: string;\n /** Whether this is a generated type (vs user-defined) */\n isGeneratedType: boolean;\n}\n\n/**\n * Generate TypeScript files for plugin-generated executors.\n * These files will be processed by the standard executor bundler.\n * @param executors - Array of plugin executor information\n * @param outputDir - Base output directory (e.g., .tailor-sdk)\n * @param typeGenerationResult - Result from plugin type generation (for import resolution)\n * @param sourceTypeInfoMap - Map of source type names to their source info\n * @param configPath - Path to tailor.config.ts (used for resolving plugin import paths)\n * @returns Array of generated file paths\n */\nexport function generatePluginExecutorFiles(\n executors: ReadonlyArray<PluginExecutorInfoExtended>,\n outputDir: string,\n typeGenerationResult?: PluginTypeGenerationResult,\n sourceTypeInfoMap?: Map<string, SourceTypeInfo>,\n configPath?: string,\n): string[] {\n if (executors.length === 0) {\n return [];\n }\n\n const generatedFiles: string[] = [];\n const baseDirs = getPluginImportBaseDirs(configPath);\n\n for (const info of executors) {\n const filePath = generateSingleExecutorFile(\n info,\n outputDir,\n typeGenerationResult,\n sourceTypeInfoMap,\n baseDirs,\n );\n generatedFiles.push(filePath);\n\n const relativePath = path.relative(process.cwd(), filePath);\n logger.log(\n ` Plugin Executor File: ${styles.success(relativePath)} from plugin ${styles.info(info.pluginId)}`,\n );\n }\n\n return generatedFiles;\n}\n\n/**\n * Generate a single executor file.\n * @param info - Plugin executor metadata and definition\n * @param outputDir - Base output directory (e.g., .tailor-sdk)\n * @param typeGenerationResult - Result from plugin type generation\n * @param sourceTypeInfoMap - Map of source type names to their source info\n * @param baseDirs - Base directories for resolving plugin import paths\n * @returns Absolute path to the generated file\n */\nfunction generateSingleExecutorFile(\n info: PluginExecutorInfoExtended,\n outputDir: string,\n typeGenerationResult?: PluginTypeGenerationResult,\n sourceTypeInfoMap?: Map<string, SourceTypeInfo>,\n baseDirs: string[] = [],\n): string {\n const pluginDir = sanitizePluginId(info.pluginId);\n const executorOutputDir = path.join(outputDir, pluginDir, \"executors\");\n fs.mkdirSync(executorOutputDir, { recursive: true });\n\n const fileName = sanitizeExecutorFileName(info.executor.name);\n const filePath = path.join(executorOutputDir, `${fileName}.ts`);\n\n let content: string;\n if (isPluginExecutorWithFile(info.executor)) {\n content = generateExecutorFileContentNew(\n info,\n info.executor,\n outputDir,\n typeGenerationResult,\n sourceTypeInfoMap,\n baseDirs,\n );\n } else {\n content = generateExecutorFileContentLegacy(info.executor);\n }\n\n fs.writeFileSync(filePath, content);\n return filePath;\n}\n\n/**\n * Generate TypeScript file content for new format executor (dynamic import).\n * Uses the executor's resolve function to dynamically import the module.\n * @param info - Plugin executor information\n * @param executor - Executor definition with resolve\n * @param outputDir - Base output directory\n * @param typeGenerationResult - Result from plugin type generation\n * @param sourceTypeInfoMap - Map of source type names to their source info\n * @param baseDirs - Base directories for resolving plugin import paths\n * @returns TypeScript source code for executor file\n */\nfunction generateExecutorFileContentNew(\n info: PluginExecutorInfoExtended,\n executor: PluginGeneratedExecutorWithFile,\n outputDir: string,\n typeGenerationResult?: PluginTypeGenerationResult,\n sourceTypeInfoMap?: Map<string, SourceTypeInfo>,\n baseDirs: string[] = [],\n): string {\n const { resolve, context } = executor;\n const pluginDir = sanitizePluginId(info.pluginId);\n const executorOutputDir = path.join(outputDir, pluginDir, \"executors\");\n\n const executorImportPath = resolveExecutorImportPath(\n resolve,\n info.pluginImportPath,\n executorOutputDir,\n baseDirs,\n );\n\n // Collect type imports from context\n const typeImports = collectTypeImports(\n context,\n outputDir,\n info.pluginId,\n typeGenerationResult,\n sourceTypeInfoMap,\n );\n\n // Generate import statements\n const imports: string[] = [];\n\n for (const [, importInfo] of typeImports) {\n imports.push(`import { ${importInfo.variableName} } from \"${importInfo.importPath}\";`);\n }\n\n // Generate context object code\n const contextCode = generateContextCode(context, typeImports);\n\n return ml /* ts */ `\n /**\n * Auto-generated executor by plugin: ${info.pluginId}\n * DO NOT EDIT - This file is generated by @tailor-platform/sdk\n */\n ${imports.join(\"\\n\")}\n\n const { default: executorFactory } = await import(${JSON.stringify(executorImportPath)});\n if (typeof executorFactory !== \"function\") {\n throw new Error(\n \"Plugin executor module must export a default function created by withPluginContext().\",\n );\n }\n export default executorFactory(${contextCode});\n `;\n}\n\n/**\n * Collect type imports needed for context.\n * @param context - Executor context values from plugin\n * @param outputDir - Base output directory for generated files\n * @param pluginId - Plugin identifier used for output paths\n * @param typeGenerationResult - Result from plugin type generation\n * @param sourceTypeInfoMap - Map of source type names to their source info\n * @returns Map of context keys to their import information\n */\nfunction collectTypeImports(\n context: PluginExecutorContext,\n outputDir: string,\n pluginId: string,\n typeGenerationResult?: PluginTypeGenerationResult,\n sourceTypeInfoMap?: Map<string, SourceTypeInfo>,\n): Map<string, TypeImportInfo> {\n const typeImports = new Map<string, TypeImportInfo>();\n const pluginDir = sanitizePluginId(pluginId);\n const executorDir = path.join(outputDir, pluginDir, \"executors\");\n\n for (const [key, value] of Object.entries(context)) {\n if (isTypeObject(value)) {\n const typeName = value.name;\n const sourceInfo = sourceTypeInfoMap?.get(typeName);\n const variableName = sourceInfo?.exportName ?? toCamelCase(typeName);\n\n // Check if it's a generated type\n let importPath: string;\n let isGeneratedType = false;\n\n if (typeGenerationResult?.typeFilePaths.has(typeName)) {\n // It's a generated type - import from plugin types directory\n const typeFilePath = typeGenerationResult.typeFilePaths.get(typeName)!;\n const absoluteTypePath = path.join(outputDir, typeFilePath);\n importPath = path.relative(executorDir, absoluteTypePath).replace(/\\.ts$/, \"\");\n if (!importPath.startsWith(\".\")) {\n importPath = `./${importPath}`;\n }\n isGeneratedType = true;\n } else if (sourceInfo) {\n // It's a user-defined type\n const sourceFilePath = sourceInfo.filePath;\n importPath = path.relative(executorDir, sourceFilePath).replace(/\\.ts$/, \"\");\n if (!importPath.startsWith(\".\")) {\n importPath = `./${importPath}`;\n }\n } else {\n // Fallback: generate relative path assumption\n // This might need adjustment based on actual project structure\n importPath = `../../../../tailordb/${toKebabCase(typeName)}`;\n }\n\n typeImports.set(key, {\n variableName,\n importPath,\n isGeneratedType,\n });\n }\n }\n\n return typeImports;\n}\n\n/**\n * Generate TypeScript code for context object.\n * @param context - Executor context values from plugin\n * @param typeImports - Resolved type import information for context keys\n * @returns TypeScript object literal code\n */\nfunction generateContextCode(\n context: PluginExecutorContext,\n typeImports: Map<string, TypeImportInfo>,\n): string {\n const entries: string[] = [];\n\n for (const [key, value] of Object.entries(context)) {\n if (isTypeObject(value)) {\n const importInfo = typeImports.get(key);\n if (importInfo) {\n entries.push(` ${key}: ${importInfo.variableName}`);\n }\n } else if (value !== undefined) {\n entries.push(` ${key}: ${JSON.stringify(value)}`);\n }\n }\n\n return `{\\n${entries.join(\",\\n\")},\\n}`;\n}\n\n/**\n * Check if a value is a TailorDB type object.\n * @param value - Value to inspect\n * @returns True if value is a type object with name and fields\n */\nfunction isTypeObject(value: unknown): value is { name: string; fields: Record<string, unknown> } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"name\" in value &&\n \"fields\" in value &&\n typeof (value as { name: unknown }).name === \"string\"\n );\n}\n\n// ============================================================================\n// Legacy format support\n// ============================================================================\n\n/**\n * Generate TypeScript file content for legacy format executor (trigger/operation).\n * @param executor - Legacy executor definition\n * @returns TypeScript source code for executor file\n */\nfunction generateExecutorFileContentLegacy(executor: PluginGeneratedExecutorLegacy): string {\n const triggerCode = generateTriggerCode(executor.trigger);\n const operationCode = generateOperationCode(executor.operation);\n\n // Extract inject from function operation\n const inject = executor.operation.kind === \"function\" ? executor.operation.inject : undefined;\n const injectDeclarations = generateInjectDeclarations(inject);\n\n const descriptionLine = executor.description\n ? `\\n description: ${JSON.stringify(executor.description)},`\n : \"\";\n\n return ml /* ts */ `\n /**\n * Auto-generated executor by plugin\n * DO NOT EDIT - This file is generated by @tailor-platform/sdk\n */\n import { createExecutor } from \"@tailor-platform/sdk\";\n ${injectDeclarations}\n export default createExecutor({\n name: ${JSON.stringify(executor.name)},${descriptionLine}\n trigger: ${triggerCode},\n operation: ${operationCode},\n });\n `;\n}\n\n/**\n * Generate const declarations for injected variables.\n * @param inject - Map of injected values keyed by variable name\n * @returns TypeScript const declarations or empty string\n */\nfunction generateInjectDeclarations(inject: PluginInjectMap | undefined): string {\n if (!inject || Object.keys(inject).length === 0) {\n return \"\";\n }\n\n const declarations = Object.entries(inject)\n .map(([name, value]) => `const ${name} = ${JSON.stringify(value)};`)\n .join(\"\\n\");\n\n return `\\n// Injected variables from plugin\\n${declarations}\\n`;\n}\n\n/**\n * Generate TypeScript code for trigger configuration.\n * @param trigger - Trigger configuration for executor\n * @returns TypeScript code for trigger object\n */\nfunction generateTriggerCode(trigger: PluginTriggerConfig): string {\n switch (trigger.kind) {\n case \"recordCreated\":\n case \"recordUpdated\":\n case \"recordDeleted\":\n return `{\n kind: ${JSON.stringify(trigger.kind)},\n typeName: ${JSON.stringify(trigger.typeName)},\n }`;\n\n case \"schedule\":\n return `{\n kind: \"schedule\",\n cron: ${JSON.stringify(trigger.cron)},\n timezone: ${JSON.stringify(trigger.timezone ?? \"UTC\")},\n }`;\n\n case \"incomingWebhook\":\n return `{\n kind: \"incomingWebhook\",\n }`;\n\n default:\n throw new Error(`Unknown trigger kind: ${(trigger as PluginTriggerConfig).kind}`);\n }\n}\n\n/**\n * Generate TypeScript code for operation configuration.\n * @param operation - Operation configuration for executor\n * @returns TypeScript code for operation object\n */\nfunction generateOperationCode(operation: PluginOperationConfig): string {\n switch (operation.kind) {\n case \"graphql\": {\n const appNameLine = operation.appName\n ? `\\n appName: ${JSON.stringify(operation.appName)},`\n : \"\";\n const variablesLine = operation.variables ? `\\n variables: ${operation.variables},` : \"\";\n\n return `{\n kind: \"graphql\",\n query: \\`${escapeTemplateLiteral(operation.query)}\\`,${appNameLine}${variablesLine}\n }`;\n }\n\n case \"function\":\n return `{\n kind: \"function\",\n body: ${operation.body},\n }`;\n\n case \"webhook\":\n return `{\n kind: \"webhook\",\n url: () => ${JSON.stringify(operation.url)},\n }`;\n\n case \"workflow\":\n return `{\n kind: \"workflow\",\n workflowName: ${JSON.stringify(operation.workflowName)},\n }`;\n\n default:\n throw new Error(`Unknown operation kind: ${(operation as PluginOperationConfig).kind}`);\n }\n}\n\n/**\n * Escape special characters in template literal content.\n * @param str - Raw template literal content\n * @returns Escaped string safe for template literals\n */\nfunction escapeTemplateLiteral(str: string): string {\n return str.replace(/\\\\/g, \"\\\\\\\\\").replace(/`/g, \"\\\\`\").replace(/\\$\\{/g, \"\\\\${\");\n}\n\n// ============================================================================\n// Utility functions\n// ============================================================================\n\nconst require = createRequire(import.meta.url);\n\n/**\n * Resolve the import path for a plugin executor module.\n * @param resolve - Executor resolve function\n * @param pluginImportPath - Plugin's import path\n * @param executorOutputDir - Directory where the generated executor will be written\n * @param baseDirs - Base directories for resolving plugin import paths\n * @returns Import path string for the executor module\n */\nfunction resolveExecutorImportPath(\n resolve: () => Promise<{ default: unknown }>,\n pluginImportPath: string,\n executorOutputDir: string,\n baseDirs: string[],\n): string {\n const specifier = extractDynamicImportSpecifier(resolve);\n if (!specifier.startsWith(\".\")) {\n return specifier;\n }\n\n const pluginBaseDir = resolvePluginBaseDir(pluginImportPath, baseDirs);\n if (!pluginBaseDir) {\n throw new Error(\n `Unable to resolve plugin import base for \"${pluginImportPath}\". ` +\n `Tried base dirs: ${baseDirs.join(\", \") || \"(none)\"}. ` +\n `Use an absolute import specifier in resolve(), or ensure the plugin path is resolvable.`,\n );\n }\n\n const absolutePath = path.resolve(pluginBaseDir, specifier);\n let relativePath = path.relative(executorOutputDir, absolutePath).replace(/\\\\/g, \"/\");\n relativePath = stripSourceExtension(relativePath);\n if (!relativePath.startsWith(\".\")) {\n relativePath = `./${relativePath}`;\n }\n return relativePath;\n}\n\n/**\n * Extract the dynamic import specifier from a resolve function.\n * @param resolve - Executor resolve function\n * @returns The module specifier string\n */\nfunction extractDynamicImportSpecifier(resolve: () => Promise<{ default: unknown }>): string {\n const source = resolve.toString();\n const match = source.match(/import\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/);\n if (!match) {\n throw new Error(\n `resolve() must return a dynamic import, e.g. \\`async () => await import(\"./executors/on-create\")\\`.`,\n );\n }\n return match[1];\n}\n\n/**\n * Resolve plugin base directory for relative imports.\n * @param pluginImportPath - Plugin import path\n * @param baseDirs - Base directories for resolving plugin import paths\n * @returns Directory path or null if not resolvable\n */\nfunction resolvePluginBaseDir(pluginImportPath: string, baseDirs: string[]): string | null {\n if (pluginImportPath.startsWith(\".\")) {\n const resolvedPath =\n resolveRelativePluginImportPath(pluginImportPath, baseDirs) ??\n path.resolve(baseDirs[0] ?? process.cwd(), pluginImportPath);\n if (fs.existsSync(resolvedPath)) {\n const stats = fs.statSync(resolvedPath);\n return stats.isDirectory() ? resolvedPath : path.dirname(resolvedPath);\n }\n return path.extname(resolvedPath) ? path.dirname(resolvedPath) : resolvedPath;\n }\n\n for (const baseDir of baseDirs) {\n try {\n const resolved = require.resolve(pluginImportPath, { paths: [baseDir] });\n return path.dirname(resolved);\n } catch {\n continue;\n }\n }\n return null;\n}\n\n/**\n * Strip TypeScript source extensions from import paths.\n * @param importPath - Path to normalize\n * @returns Path without .ts/.tsx extension\n */\nfunction stripSourceExtension(importPath: string): string {\n return importPath.replace(/\\.(ts|tsx)$/, \"\");\n}\n\n/**\n * Convert plugin ID to safe directory name.\n * @param pluginId - Plugin identifier (e.g., \"@scope/name\")\n * @returns Safe directory name\n */\nfunction sanitizePluginId(pluginId: string): string {\n return pluginId.replace(/^@/, \"\").replace(/\\//g, \"-\");\n}\n\n/**\n * Convert executor name to safe filename.\n * @param executorName - Executor name\n * @returns Safe filename without extension\n */\nfunction sanitizeExecutorFileName(executorName: string): string {\n const baseName = path.basename(executorName);\n const withoutExtension = baseName.replace(/\\.[^/.]+$/, \"\");\n const sanitized = withoutExtension.replace(/[^a-zA-Z0-9_-]/g, \"-\");\n if (!sanitized) {\n throw new Error(`Invalid executor name: \"${executorName}\"`);\n }\n return sanitized;\n}\n\n/**\n * Convert string to camelCase.\n * @param str - Input string to convert\n * @returns camelCase string\n */\nfunction toCamelCase(str: string): string {\n const result = str.replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : \"\"));\n return result.charAt(0).toLowerCase() + result.slice(1);\n}\n\n/**\n * Convert string to kebab-case.\n * @param str - Input string to convert\n * @returns kebab-case string\n */\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n}\n","/**\n * Plugin Type Generator\n *\n * Generates TypeScript files for plugin-generated types (TailorDB types).\n * These files can be imported by plugin executors to reference generated types.\n */\n\nimport * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport type { PluginGeneratedTypeInfo, PluginTypeGenerationResult } from \"@/plugin/manager\";\nimport type { PluginGeneratedType } from \"@/types/plugin\";\n\ntype FieldMetadata = {\n required?: boolean;\n index?: boolean;\n unique?: boolean;\n description?: string;\n allowedValues?: ReadonlyArray<{ value: string }>;\n};\n\ntype FieldDefinition = {\n type?: string;\n _metadata?: FieldMetadata;\n metadata?: FieldMetadata;\n};\n\nfunction isFieldDefinition(value: unknown): value is FieldDefinition {\n return typeof value === \"object\" && value !== null;\n}\n\n/**\n * Generate TypeScript files for plugin-generated types.\n * These files export the type definition and can be imported by executor files.\n * @param types - Array of plugin type information\n * @param outputDir - Base output directory (e.g., .tailor-sdk)\n * @returns Generation result with file paths\n */\nexport function generatePluginTypeFiles(\n types: ReadonlyArray<PluginGeneratedTypeInfo>,\n outputDir: string,\n): PluginTypeGenerationResult {\n const typeFilePaths = new Map<string, string>();\n const generatedFiles: string[] = [];\n\n if (types.length === 0) {\n return { typeFilePaths, generatedFiles };\n }\n\n const seenTypeNames = new Map<string, PluginGeneratedTypeInfo>();\n\n for (const info of types) {\n const existing = seenTypeNames.get(info.type.name);\n if (existing) {\n throw new Error(\n `Duplicate plugin-generated type name \"${info.type.name}\" detected. ` +\n `First: plugin \"${existing.pluginId}\" (kind: \"${existing.kind}\", source type: \"${existing.sourceTypeName}\"), ` +\n `Second: plugin \"${info.pluginId}\" (kind: \"${info.kind}\", source type: \"${info.sourceTypeName}\"). ` +\n `Plugin-generated type names must be unique.`,\n );\n }\n seenTypeNames.set(info.type.name, info);\n\n const pluginDir = sanitizePluginId(info.pluginId);\n const typeOutputDir = path.join(outputDir, pluginDir, \"types\");\n fs.mkdirSync(typeOutputDir, { recursive: true });\n\n const fileName = `${toKebabCase(info.type.name)}.ts`;\n const filePath = path.join(typeOutputDir, fileName);\n const content = generateTypeFileContent(info);\n\n fs.writeFileSync(filePath, content);\n generatedFiles.push(filePath);\n\n // Store relative path from outputDir for import resolution\n const relativePath = path.relative(outputDir, filePath);\n typeFilePaths.set(info.type.name, relativePath);\n\n const displayPath = path.relative(process.cwd(), filePath);\n logger.log(\n ` Plugin Type File: ${styles.success(displayPath)} (${styles.dim(info.kind)}) from plugin ${styles.info(info.pluginId)}`,\n );\n }\n\n return { typeFilePaths, generatedFiles };\n}\n\n/**\n * Generate TypeScript file content for a single type.\n * @param info - Plugin type information\n * @returns TypeScript source code\n */\nfunction generateTypeFileContent(info: PluginGeneratedTypeInfo): string {\n const { type, pluginId, sourceTypeName, kind } = info;\n const variableName = toCamelCase(type.name);\n const fieldsCode = generateFieldsCode(type);\n\n return ml /* ts */ `\n /**\n * Auto-generated type by plugin: ${pluginId}\n * Source type: ${sourceTypeName}\n * Kind: ${kind}\n *\n * DO NOT EDIT - This file is generated by @tailor-platform/sdk\n */\n import { db } from \"@tailor-platform/sdk\";\n\n export const ${variableName} = db.type(${JSON.stringify(type.name)}, ${fieldsCode});\n\n export type ${type.name} = typeof ${variableName};\n `;\n}\n\n/**\n * Generate TypeScript code for field definitions.\n * This creates a simplified version of the type's fields.\n * @param type - TailorDB type\n * @returns TypeScript code for fields object\n */\nfunction generateFieldsCode(type: PluginGeneratedType): string {\n const fieldEntries: string[] = [];\n\n for (const [fieldName, field] of Object.entries(type.fields)) {\n if (!isFieldDefinition(field)) continue;\n const fieldCode = generateSingleFieldCode(field);\n if (fieldCode) {\n fieldEntries.push(` ${fieldName}: ${fieldCode}`);\n }\n }\n\n return `{\\n${fieldEntries.join(\",\\n\")},\\n}`;\n}\n\n/**\n * Map from TailorDB type to SDK method name.\n */\nconst typeToMethodMap: Record<string, string> = {\n string: \"string\",\n integer: \"int\",\n float: \"float\",\n boolean: \"bool\",\n uuid: \"uuid\",\n datetime: \"datetime\",\n date: \"date\",\n time: \"time\",\n enum: \"enum\",\n nested: \"nested\",\n};\n\n/**\n * Generate TypeScript code for a single field definition.\n * @param field - Field definition object\n * @returns TypeScript code for the field\n */\nfunction generateSingleFieldCode(field: FieldDefinition): string | null {\n const fieldType = field.type;\n if (!fieldType) {\n return null;\n }\n\n const method = typeToMethodMap[fieldType] ?? fieldType;\n const metadata: FieldMetadata = field._metadata ?? field.metadata ?? {};\n\n // Build options object\n const optionParts: string[] = [];\n if (metadata.required === false) {\n optionParts.push(\"optional: true\");\n }\n\n const optionsArg = optionParts.length > 0 ? `{ ${optionParts.join(\", \")} }` : \"\";\n\n // Handle enum type with values\n if (fieldType === \"enum\") {\n // Extract enum values from allowedValues array\n const allowedValues = metadata.allowedValues;\n let enumValues: string[] = [];\n if (Array.isArray(allowedValues)) {\n enumValues = allowedValues.map((v: { value: string }) => v.value);\n }\n\n let code = `db.enum(${JSON.stringify(enumValues)}${optionsArg ? `, ${optionsArg}` : \"\"})`;\n if (metadata.index) {\n code += \".index()\";\n }\n if (metadata.unique) {\n code += \".unique()\";\n }\n if (metadata.description) {\n code += `.description(${JSON.stringify(metadata.description)})`;\n }\n return code;\n }\n\n // Build method chain for other types\n let code = `db.${method}(${optionsArg})`;\n\n // Add index if present\n if (metadata.index) {\n code += \".index()\";\n }\n\n // Add unique if present\n if (metadata.unique) {\n code += \".unique()\";\n }\n\n // Add description if present\n if (metadata.description) {\n code += `.description(${JSON.stringify(metadata.description)})`;\n }\n\n return code;\n}\n\n/**\n * Convert plugin ID to safe directory name.\n * @param pluginId - Plugin identifier (e.g., \"@tailor-platform/change-history\")\n * @returns Safe directory name (e.g., \"tailor-platform-change-history\")\n */\nfunction sanitizePluginId(pluginId: string): string {\n return pluginId.replace(/^@/, \"\").replace(/\\//g, \"-\");\n}\n\n/**\n * Convert string to kebab-case.\n * @param str - Input string\n * @returns kebab-case string\n */\nfunction toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n}\n\n/**\n * Convert string to camelCase.\n * @param str - Input string\n * @returns camelCase string\n */\nfunction toCamelCase(str: string): string {\n const result = str.replace(/[-_\\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : \"\"));\n return result.charAt(0).toLowerCase() + result.slice(1);\n}\n","import * as fs from \"node:fs/promises\";\nimport * as path from \"pathe\";\n\n/**\n * Remove stale `.entry.js` files from the output directory.\n *\n * Must be called before parallel bundling; concurrent builds\n * sharing the same output directory would otherwise conflict.\n * @param outputDir - Directory to clean\n */\nexport async function removeStaleEntryFiles(outputDir: string): Promise<void> {\n const files = await fs.readdir(outputDir);\n await Promise.all(\n files\n .filter((file) => file.endsWith(\".entry.js\"))\n .map((file) => fs.rm(path.join(outputDir, file), { force: true })),\n );\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport interface FileLoadConfig {\n files: string[];\n ignores?: string[];\n}\n\nconst DEFAULT_IGNORE_PATTERNS = [\"**/*.test.ts\", \"**/*.spec.ts\"];\n\n/**\n * Load files matching the given patterns, excluding files that match ignore patterns.\n * By default, test files (*.test.ts, *.spec.ts) are excluded unless ignores is explicitly specified.\n * @param config - Configuration with files patterns and optional ignores patterns\n * @returns Array of absolute file paths\n */\nexport function loadFilesWithIgnores(config: FileLoadConfig): string[] {\n // Use user-provided patterns if specified, otherwise use defaults\n const ignorePatterns = config.ignores ?? DEFAULT_IGNORE_PATTERNS;\n\n const ignoreFiles = new Set<string>();\n for (const ignorePattern of ignorePatterns) {\n const absoluteIgnorePattern = path.resolve(process.cwd(), ignorePattern);\n try {\n const matchedIgnoreFiles = fs.globSync(absoluteIgnorePattern);\n matchedIgnoreFiles.forEach((file) => ignoreFiles.add(file));\n } catch (error) {\n logger.warn(`Failed to glob ignore pattern \"${ignorePattern}\": ${String(error)}`);\n }\n }\n\n const files: string[] = [];\n for (const pattern of config.files) {\n const absolutePattern = path.resolve(process.cwd(), pattern);\n try {\n const matchedFiles = fs.globSync(absolutePattern);\n // Filter out ignored files\n const filteredFiles = matchedFiles.filter((file) => !ignoreFiles.has(file));\n files.push(...filteredFiles);\n } catch (error) {\n logger.warn(`Failed to glob pattern \"${pattern}\": ${String(error)}`);\n }\n }\n\n return files;\n}\n","import type {\n Expression,\n AwaitExpression,\n ImportExpression,\n CallExpression,\n ObjectPropertyKind,\n ObjectProperty,\n ArrowFunctionExpression,\n Function as FunctionExpression,\n} from \"@oxc-project/types\";\n\n/** A generic AST node for walking purposes */\nexport type ASTNode = Record<string, unknown>;\n\nexport interface Replacement {\n start: number;\n end: number;\n text: string;\n}\n\nexport interface FoundProperty {\n key: ObjectProperty[\"key\"];\n value: Expression;\n start: number;\n end: number;\n}\n\n/**\n * Check if a module source is from the Tailor SDK package (including subpaths)\n * @param source - Module source string\n * @returns True if the source is from the Tailor SDK package\n */\nexport function isTailorSdkSource(source: string): boolean {\n return /^@tailor-platform\\/sdk(\\/|$)/.test(source);\n}\n\n/**\n * Get the source string from a dynamic import or require call\n * @param node - AST node to inspect\n * @returns Resolved import/require source string or null\n */\nexport function getImportSource(node: Expression | null | undefined): string | null {\n if (!node) return null;\n // await import(\"@tailor-platform/sdk\")\n if (node.type === \"ImportExpression\") {\n const importExpr = node as ImportExpression;\n const source = importExpr.source;\n if (source.type === \"Literal\" && typeof source.value === \"string\") {\n return source.value;\n }\n }\n // require(\"@tailor-platform/sdk\")\n if (node.type === \"CallExpression\") {\n const callExpr = node as CallExpression;\n if (callExpr.callee.type === \"Identifier\" && callExpr.callee.name === \"require\") {\n const arg = callExpr.arguments[0];\n if (\n arg &&\n \"type\" in arg &&\n arg.type === \"Literal\" &&\n \"value\" in arg &&\n typeof arg.value === \"string\"\n ) {\n return arg.value;\n }\n }\n }\n return null;\n}\n\n/**\n * Unwrap AwaitExpression to get the inner expression\n * @param node - AST expression node\n * @returns Inner expression if node is an AwaitExpression\n */\nexport function unwrapAwait(node: Expression | null | undefined): Expression | null | undefined {\n if (node?.type === \"AwaitExpression\") {\n return (node as AwaitExpression).argument;\n }\n return node;\n}\n\n/**\n * Check if a node is a string literal\n * @param node - AST expression node\n * @returns True if node is a string literal\n */\nexport function isStringLiteral(\n node: Expression | null | undefined,\n): node is Expression & { type: \"Literal\"; value: string } {\n // Note: oxc uses \"Literal\" for all literals, distinguishing by value type\n return node?.type === \"Literal\" && typeof (node as { value?: unknown }).value === \"string\";\n}\n\n/**\n * Check if a node is a function expression (arrow or regular)\n * @param node - AST expression node\n * @returns True if node is a function expression\n */\nexport function isFunctionExpression(\n node: Expression | null | undefined,\n): node is ArrowFunctionExpression | FunctionExpression {\n return node?.type === \"ArrowFunctionExpression\" || node?.type === \"FunctionExpression\";\n}\n\n/**\n * Find a property in an object expression\n * @param properties - Object properties to search\n * @param name - Property name to find\n * @returns Found property info or null\n */\nexport function findProperty(properties: ObjectPropertyKind[], name: string): FoundProperty | null {\n for (const prop of properties) {\n // Note: oxc uses \"Property\" for object properties\n if (prop.type === \"Property\") {\n const objProp = prop as ObjectProperty;\n const keyName =\n objProp.key.type === \"Identifier\"\n ? objProp.key.name\n : objProp.key.type === \"Literal\"\n ? (objProp.key as { value?: string }).value\n : null;\n if (keyName === name) {\n return {\n key: objProp.key,\n value: objProp.value,\n start: objProp.start,\n end: objProp.end,\n };\n }\n }\n }\n return null;\n}\n\n/**\n * Apply string replacements to source code\n * Replacements are applied from end to start to maintain positions\n * @param source - Original source code\n * @param replacements - Replacements to apply\n * @returns Transformed source code\n */\nexport function applyReplacements(source: string, replacements: Replacement[]): string {\n const sorted = [...replacements].sort((a, b) => b.start - a.start);\n let result = source;\n for (const r of sorted) {\n result = result.slice(0, r.start) + r.text + result.slice(r.end);\n }\n return result;\n}\n\n/**\n * Find the end of a statement including any trailing newline\n * @param source - Source code\n * @param position - Start position of the statement\n * @returns Index of the end of the statement including trailing newline\n */\nexport function findStatementEnd(source: string, position: number): number {\n let i = position;\n // Skip any trailing semicolons and whitespace on the same line\n while (i < source.length && (source[i] === \";\" || source[i] === \" \" || source[i] === \"\\t\")) {\n i++;\n }\n // Include the newline if present\n if (i < source.length && source[i] === \"\\n\") {\n i++;\n }\n return i;\n}\n\n/**\n * Resolve a relative path from a base directory\n * Simple implementation that handles ./ and ../ prefixes\n * @param baseDir - Base directory\n * @param relativePath - Relative path to resolve\n * @returns Resolved absolute path\n */\nexport function resolvePath(baseDir: string, relativePath: string): string {\n // Normalize separators to forward slash\n const normalized = relativePath.replace(/\\\\/g, \"/\");\n\n // Split into parts\n const parts = normalized.split(\"/\");\n const baseParts = baseDir.replace(/\\\\/g, \"/\").split(\"/\");\n\n for (const part of parts) {\n if (part === \".\") {\n // Current directory, do nothing\n } else if (part === \"..\") {\n // Go up one directory\n baseParts.pop();\n } else {\n // Add the part\n baseParts.push(part);\n }\n }\n\n return baseParts.join(\"/\");\n}\n","import { type ASTNode, isTailorSdkSource, getImportSource, unwrapAwait } from \"./ast-utils\";\nimport type {\n Program,\n ImportDeclaration,\n VariableDeclaration,\n ImportSpecifier,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ObjectPattern,\n BindingProperty,\n CallExpression,\n StaticMemberExpression,\n IdentifierReference,\n} from \"@oxc-project/types\";\n\n/**\n * Collect all import bindings for a specific function from the Tailor SDK package\n * Returns a Set of local names that refer to the function\n * @param program - Parsed TypeScript program\n * @param functionName - Function name to collect bindings for\n * @returns Set of local names bound to the SDK function\n */\nexport function collectSdkBindings(program: Program, functionName: string): Set<string> {\n const bindings = new Set<string>();\n\n function walk(node: ASTNode | null | undefined): void {\n if (!node || typeof node !== \"object\") return;\n\n const nodeType = node.type as string | undefined;\n\n // Static imports: import { createWorkflowJob } from \"@tailor-platform/sdk\"\n if (nodeType === \"ImportDeclaration\") {\n const importDecl = node as unknown as ImportDeclaration;\n const source = importDecl.source?.value;\n if (typeof source === \"string\" && isTailorSdkSource(source)) {\n for (const specifier of importDecl.specifiers || []) {\n // import { createWorkflowJob } from \"@tailor-platform/sdk\"\n // import { createWorkflowJob as create } from \"@tailor-platform/sdk\"\n if (specifier.type === \"ImportSpecifier\") {\n const importSpec = specifier as ImportSpecifier;\n const imported =\n importSpec.imported.type === \"Identifier\"\n ? importSpec.imported.name\n : (importSpec.imported as { value?: string }).value;\n if (imported === functionName) {\n bindings.add(importSpec.local?.name || imported);\n }\n }\n // import sdk from \"@tailor-platform/sdk\" → sdk.createWorkflowJob\n // import * as sdk from \"@tailor-platform/sdk\" → sdk.createWorkflowJob\n else if (\n specifier.type === \"ImportDefaultSpecifier\" ||\n specifier.type === \"ImportNamespaceSpecifier\"\n ) {\n const spec = specifier as ImportDefaultSpecifier | ImportNamespaceSpecifier;\n // Store namespace/default with special prefix to track member access\n bindings.add(`__namespace__:${spec.local?.name}`);\n }\n }\n }\n }\n\n // Dynamic imports and require:\n // const sdk = await import(\"@tailor-platform/sdk\")\n // const sdk = require(\"@tailor-platform/sdk\")\n // const { createWorkflowJob } = await import(\"@tailor-platform/sdk\")\n // const { createWorkflowJob } = require(\"@tailor-platform/sdk\")\n if (nodeType === \"VariableDeclaration\") {\n const varDecl = node as unknown as VariableDeclaration;\n for (const decl of varDecl.declarations || []) {\n const init = unwrapAwait(decl.init);\n const source = getImportSource(init);\n\n if (source && isTailorSdkSource(source)) {\n const id = decl.id;\n\n // const sdk = await import(...) / const sdk = require(...)\n if (id?.type === \"Identifier\") {\n bindings.add(`__namespace__:${id.name}`);\n }\n // const { createWorkflowJob } = await import(...) / require(...)\n // const { createWorkflowJob: create } = await import(...) / require(...)\n else if (id?.type === \"ObjectPattern\") {\n const objPattern = id as unknown as ObjectPattern;\n for (const prop of objPattern.properties || []) {\n if (prop.type === \"Property\") {\n const bindingProp = prop as BindingProperty;\n const keyName =\n bindingProp.key.type === \"Identifier\"\n ? bindingProp.key.name\n : (bindingProp.key as { value?: string }).value;\n if (keyName === functionName) {\n const localName =\n bindingProp.value.type === \"Identifier\" ? bindingProp.value.name : keyName;\n bindings.add(localName ?? \"\");\n }\n }\n }\n }\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return bindings;\n}\n\n/**\n * Check if a CallExpression is a call to a specific SDK function\n * @param node - AST node to inspect\n * @param bindings - Collected SDK bindings\n * @param functionName - SDK function name\n * @returns True if node is a call to the SDK function\n */\nexport function isSdkFunctionCall(\n node: ASTNode,\n bindings: Set<string>,\n functionName: string,\n): node is ASTNode & { type: \"CallExpression\" } {\n if (node.type !== \"CallExpression\") return false;\n\n const callExpr = node as unknown as CallExpression;\n const callee = callExpr.callee;\n\n // Direct call: createWorkflowJob(...) or create(...)\n if (callee.type === \"Identifier\") {\n const identifier = callee as IdentifierReference;\n return bindings.has(identifier.name);\n }\n\n // Member access: sdk.createWorkflowJob(...)\n // Note: oxc uses MemberExpression with computed: false for static member access\n if (callee.type === \"MemberExpression\") {\n const memberExpr = callee as unknown as StaticMemberExpression;\n if (!memberExpr.computed) {\n const object = memberExpr.object;\n const property = memberExpr.property;\n if (\n object.type === \"Identifier\" &&\n bindings.has(`__namespace__:${(object as IdentifierReference).name}`) &&\n property.name === functionName\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n","import { type ASTNode, isStringLiteral, isFunctionExpression, findProperty } from \"./ast-utils\";\nimport { collectSdkBindings, isSdkFunctionCall } from \"./sdk-binding-collector\";\nimport type {\n Program,\n CallExpression,\n ObjectExpression,\n StaticMemberExpression,\n IdentifierReference,\n AwaitExpression,\n} from \"@oxc-project/types\";\n\nexport interface JobLocation {\n name: string;\n exportName?: string;\n nameRange: { start: number; end: number };\n bodyValueRange: { start: number; end: number };\n // Range of the entire variable declaration statement (for removal)\n statementRange?: { start: number; end: number };\n}\n\nexport interface TriggerCall {\n identifierName: string;\n callRange: { start: number; end: number };\n argsText: string;\n // If true, the call is wrapped in an await expression\n hasAwait: boolean;\n // The range including the await keyword (if present)\n fullRange: { start: number; end: number };\n}\n\n/**\n * Find all workflow jobs by detecting createWorkflowJob calls from `@tailor-platform/sdk`\n * @param program - Parsed TypeScript program\n * @param _sourceText - Source code text (currently unused)\n * @returns Detected job locations\n */\nexport function findAllJobs(program: Program, _sourceText: string): JobLocation[] {\n const jobs: JobLocation[] = [];\n const bindings = collectSdkBindings(program, \"createWorkflowJob\");\n\n function walk(node: ASTNode | null | undefined, parents: ASTNode[] = []): void {\n if (!node || typeof node !== \"object\") return;\n\n // Detect createWorkflowJob(...) calls\n if (isSdkFunctionCall(node, bindings, \"createWorkflowJob\")) {\n const callExpr = node as unknown as CallExpression;\n const args = callExpr.arguments;\n if (args?.length >= 1 && args[0]?.type === \"ObjectExpression\") {\n const configObj = args[0] as ObjectExpression;\n const nameProp = findProperty(configObj.properties, \"name\");\n const bodyProp = findProperty(configObj.properties, \"body\");\n\n if (\n nameProp &&\n isStringLiteral(nameProp.value) &&\n bodyProp &&\n isFunctionExpression(bodyProp.value)\n ) {\n // Find the outermost enclosing statement and export name\n // Iterate from closest parent (end of array) to farthest (start of array)\n let statementRange: { start: number; end: number } | undefined;\n let exportName: string | undefined;\n for (let i = parents.length - 1; i >= 0; i--) {\n const parent = parents[i];\n if (parent.type === \"VariableDeclarator\") {\n const declarator = parent as unknown as {\n id?: { type?: string; name?: string };\n };\n if (declarator.id?.type === \"Identifier\") {\n exportName = declarator.id.name;\n }\n }\n // Keep track of the outermost statement (ExportNamedDeclaration > VariableDeclaration)\n if (parent.type === \"ExportNamedDeclaration\" || parent.type === \"VariableDeclaration\") {\n statementRange = {\n start: parent.start as number,\n end: parent.end as number,\n };\n // Don't break - continue to find ExportNamedDeclaration if it exists\n }\n }\n\n jobs.push({\n name: nameProp.value.value,\n exportName,\n nameRange: { start: nameProp.start, end: nameProp.end },\n bodyValueRange: {\n start: bodyProp.value.start,\n end: bodyProp.value.end,\n },\n statementRange,\n });\n }\n }\n }\n\n const newParents = [...parents, node];\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null, newParents));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode, newParents);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return jobs;\n}\n\n/**\n * Build a map from export name to job name from detected jobs\n * @param jobs - Detected job locations\n * @returns Map from export name to job name\n */\nexport function buildJobNameMap(jobs: JobLocation[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const job of jobs) {\n if (job.exportName) {\n map.set(job.exportName, job.name);\n }\n }\n return map;\n}\n\n/**\n * Detect all .trigger() calls in the source code\n * Returns information about each trigger call for transformation\n * @param program - Parsed TypeScript program\n * @param sourceText - Source code text\n * @returns Detected trigger calls\n */\nexport function detectTriggerCalls(program: Program, sourceText: string): TriggerCall[] {\n const calls: TriggerCall[] = [];\n\n function walk(node: ASTNode | null | undefined, parent: ASTNode | null = null): void {\n if (!node || typeof node !== \"object\") return;\n\n // Detect pattern: identifier.trigger(args)\n if (node.type === \"CallExpression\") {\n const callExpr = node as unknown as CallExpression;\n const callee = callExpr.callee;\n\n if (callee.type === \"MemberExpression\") {\n const memberExpr = callee as unknown as StaticMemberExpression;\n if (\n !memberExpr.computed &&\n memberExpr.object.type === \"Identifier\" &&\n memberExpr.property.name === \"trigger\"\n ) {\n const identifierName = (memberExpr.object as IdentifierReference).name;\n\n // Extract arguments text\n let argsText = \"\";\n if (callExpr.arguments.length > 0) {\n const firstArg = callExpr.arguments[0];\n const lastArg = callExpr.arguments[callExpr.arguments.length - 1];\n if (firstArg && lastArg && \"start\" in firstArg && \"end\" in lastArg) {\n argsText = sourceText.slice(firstArg.start as number, lastArg.end as number);\n }\n }\n\n // Check if this call is wrapped in an await expression\n // triggerJobFunction is synchronous, so we need to remove await\n const hasAwait = parent?.type === \"AwaitExpression\";\n const awaitExpr = hasAwait ? (parent as unknown as AwaitExpression) : null;\n\n const callRange = { start: callExpr.start, end: callExpr.end };\n const fullRange = awaitExpr ? { start: awaitExpr.start, end: awaitExpr.end } : callRange;\n\n calls.push({\n identifierName,\n callRange,\n argsText,\n hasAwait,\n fullRange,\n });\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null, node));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode, node);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return calls;\n}\n","import { type ASTNode, isStringLiteral, findProperty } from \"./ast-utils\";\nimport { collectSdkBindings, isSdkFunctionCall } from \"./sdk-binding-collector\";\nimport type {\n Program,\n CallExpression,\n ObjectExpression,\n ImportDeclaration,\n ImportDefaultSpecifier,\n} from \"@oxc-project/types\";\n\nexport interface WorkflowLocation {\n name: string;\n exportName?: string;\n isDefaultExport?: boolean;\n}\n\n/**\n * Find all workflows by detecting createWorkflow calls from `@tailor-platform/sdk`\n * @param program - Parsed TypeScript program\n * @param _sourceText - Source code text (currently unused)\n * @returns Detected workflows\n */\nexport function findAllWorkflows(program: Program, _sourceText: string): WorkflowLocation[] {\n const workflows: WorkflowLocation[] = [];\n const bindings = collectSdkBindings(program, \"createWorkflow\");\n\n function walk(node: ASTNode | null | undefined, parents: ASTNode[] = []): void {\n if (!node || typeof node !== \"object\") return;\n\n // Detect createWorkflow(...) calls\n if (isSdkFunctionCall(node, bindings, \"createWorkflow\")) {\n const callExpr = node as unknown as CallExpression;\n const args = callExpr.arguments;\n if (args?.length >= 1 && args[0]?.type === \"ObjectExpression\") {\n const configObj = args[0] as ObjectExpression;\n const nameProp = findProperty(configObj.properties, \"name\");\n\n if (nameProp && isStringLiteral(nameProp.value)) {\n // Find export name from parent declarations\n let exportName: string | undefined;\n let isDefaultExport = false;\n for (let i = parents.length - 1; i >= 0; i--) {\n const parent = parents[i];\n if (parent.type === \"VariableDeclarator\") {\n const declarator = parent as unknown as {\n id?: { type?: string; name?: string };\n };\n if (declarator.id?.type === \"Identifier\") {\n exportName = declarator.id.name;\n break;\n }\n }\n // Check for export default createWorkflow(...)\n if (parent.type === \"ExportDefaultDeclaration\") {\n isDefaultExport = true;\n }\n }\n\n workflows.push({\n name: nameProp.value.value,\n exportName,\n isDefaultExport,\n });\n }\n }\n }\n\n const newParents = [...parents, node];\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null, newParents));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode, newParents);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return workflows;\n}\n\n/**\n * Build a map from export name to workflow name from detected workflows\n * @param workflows - Detected workflows\n * @returns Map from export name to workflow name\n */\nexport function buildWorkflowNameMap(workflows: WorkflowLocation[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const workflow of workflows) {\n if (workflow.exportName) {\n map.set(workflow.exportName, workflow.name);\n }\n }\n return map;\n}\n\n/**\n * Detect default imports in a source file and return a map from local name to import source\n * @param program - Parsed TypeScript program\n * @returns Map from local name to import source\n */\nexport function detectDefaultImports(program: Program): Map<string, string> {\n const imports = new Map<string, string>();\n\n function walk(node: ASTNode | null | undefined): void {\n if (!node || typeof node !== \"object\") return;\n\n const nodeType = node.type as string | undefined;\n\n if (nodeType === \"ImportDeclaration\") {\n const importDecl = node as unknown as ImportDeclaration;\n const source = importDecl.source?.value;\n\n if (typeof source === \"string\") {\n for (const specifier of importDecl.specifiers || []) {\n // import foo from \"module\"\n if (specifier.type === \"ImportDefaultSpecifier\") {\n const spec = specifier as ImportDefaultSpecifier;\n if (spec.local?.name) {\n imports.set(spec.local.name, source);\n }\n }\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return imports;\n}\n","import { parseSync } from \"oxc-parser\";\nimport { type ASTNode, type Replacement, applyReplacements, resolvePath } from \"./ast-utils\";\nimport { detectDefaultImports } from \"./workflow-detector\";\nimport type {\n Program,\n CallExpression,\n ObjectExpression,\n ObjectProperty,\n StaticMemberExpression,\n IdentifierReference,\n AwaitExpression,\n} from \"@oxc-project/types\";\n\ninterface AuthInvokerInfo {\n isShorthand: boolean;\n valueText: string;\n}\n\ninterface ExtendedTriggerCall {\n kind: \"job\" | \"workflow\";\n identifierName: string;\n callRange: { start: number; end: number };\n argsText: string;\n // For workflow triggers, extracted authInvoker info from config\n authInvoker?: AuthInvokerInfo;\n // If true, the call is wrapped in an await expression that should be removed\n hasAwait?: boolean;\n // The range including the await keyword (if present)\n fullRange?: { start: number; end: number };\n}\n\n/**\n * Extract authInvoker info from a config object expression\n * Returns the authInvoker value text and whether it's a shorthand property\n * @param configArg - Config argument node\n * @param sourceText - Source code text\n * @returns Extracted authInvoker info, if any\n */\nfunction extractAuthInvokerInfo(\n configArg: unknown,\n sourceText: string,\n): AuthInvokerInfo | undefined {\n if (!configArg || typeof configArg !== \"object\") return undefined;\n\n const arg = configArg as { type?: string };\n if (arg.type !== \"ObjectExpression\") return undefined;\n\n const objExpr = configArg as ObjectExpression;\n\n // Find authInvoker property\n for (const prop of objExpr.properties) {\n if (prop.type !== \"Property\") continue;\n\n const objProp = prop as ObjectProperty;\n const keyName =\n objProp.key.type === \"Identifier\"\n ? objProp.key.name\n : objProp.key.type === \"Literal\"\n ? (objProp.key as { value?: string }).value\n : null;\n\n if (keyName === \"authInvoker\") {\n if (objProp.shorthand) {\n return { isShorthand: true, valueText: \"authInvoker\" };\n }\n // Extract value text directly from source\n const valueText = sourceText.slice(objProp.value.start, objProp.value.end);\n return { isShorthand: false, valueText };\n }\n }\n\n return undefined;\n}\n\n/**\n * Detect .trigger() calls for known workflows and jobs\n * Only detects calls where the identifier is in workflowNames or jobNames\n * @param program - The parsed AST program\n * @param sourceText - The source code text\n * @param workflowNames - Set of known workflow identifier names\n * @param jobNames - Set of known job identifier names\n * @returns Detected trigger call metadata\n */\nfunction detectExtendedTriggerCalls(\n program: Program,\n sourceText: string,\n workflowNames: Set<string>,\n jobNames: Set<string>,\n): ExtendedTriggerCall[] {\n const calls: ExtendedTriggerCall[] = [];\n\n function walk(node: ASTNode | null | undefined, parent: ASTNode | null = null): void {\n if (!node || typeof node !== \"object\") return;\n\n // Detect pattern: identifier.trigger(args) or identifier.trigger(args, config)\n if (node.type === \"CallExpression\") {\n const callExpr = node as unknown as CallExpression;\n const callee = callExpr.callee;\n\n if (callee.type === \"MemberExpression\") {\n const memberExpr = callee as unknown as StaticMemberExpression;\n if (\n !memberExpr.computed &&\n memberExpr.object.type === \"Identifier\" &&\n memberExpr.property.name === \"trigger\"\n ) {\n const identifierName = (memberExpr.object as IdentifierReference).name;\n\n // Only process if this is a known workflow or job\n const isWorkflow = workflowNames.has(identifierName);\n const isJob = jobNames.has(identifierName);\n if (!isWorkflow && !isJob) {\n // Skip unknown identifiers to prevent false positives\n return;\n }\n\n const argCount = callExpr.arguments.length;\n\n // Extract first argument text\n let argsText = \"\";\n if (argCount > 0) {\n const firstArg = callExpr.arguments[0];\n if (firstArg && \"start\" in firstArg && \"end\" in firstArg) {\n argsText = sourceText.slice(firstArg.start as number, firstArg.end as number);\n }\n }\n\n // Check if this call is wrapped in an await expression\n // For job triggers, we need to remove the await since triggerJobFunction is synchronous\n const hasAwait = parent?.type === \"AwaitExpression\";\n const awaitExpr = hasAwait ? (parent as unknown as AwaitExpression) : null;\n\n // Determine kind based on known identifier type\n if (isWorkflow && argCount >= 2) {\n // Workflow trigger requires 2 arguments (args, config)\n const secondArg = callExpr.arguments[1];\n // Extract authInvoker directly from the config object\n const authInvoker = extractAuthInvokerInfo(secondArg, sourceText);\n if (authInvoker) {\n calls.push({\n kind: \"workflow\",\n identifierName,\n callRange: { start: callExpr.start, end: callExpr.end },\n argsText,\n authInvoker,\n // workflow.trigger uses async triggerWorkflow, so keep await\n hasAwait: false,\n });\n }\n } else if (isJob) {\n // Job trigger (0-1 arguments)\n // triggerJobFunction is synchronous, so we need to remove await\n calls.push({\n kind: \"job\",\n identifierName,\n callRange: { start: callExpr.start, end: callExpr.end },\n argsText,\n hasAwait,\n fullRange: awaitExpr ? { start: awaitExpr.start, end: awaitExpr.end } : undefined,\n });\n }\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null, node));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode, node);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return calls;\n}\n\n/**\n * Transform trigger calls for resolver/executor/workflow functions\n * Handles both job.trigger() and workflow.trigger() calls\n * @param source - The source code to transform\n * @param workflowNameMap - Map from variable name to workflow name\n * @param jobNameMap - Map from variable name to job name\n * @param workflowFileMap - Map from file path (without extension) to workflow name for default exports\n * @param currentFilePath - Path of the current file being transformed (for resolving relative imports)\n * @returns Transformed source code with trigger calls rewritten\n */\nexport function transformFunctionTriggers(\n source: string,\n workflowNameMap: Map<string, string>,\n jobNameMap: Map<string, string>,\n workflowFileMap?: Map<string, string>,\n currentFilePath?: string,\n): string {\n const { program } = parseSync(\"input.ts\", source);\n\n // Build a map from local identifier name to workflow name\n // This includes both named exports (from workflowNameMap) and default imports (resolved via workflowFileMap)\n const localWorkflowNameMap = new Map(workflowNameMap);\n\n if (workflowFileMap && currentFilePath) {\n // Detect default imports and resolve them to workflow names\n const defaultImports = detectDefaultImports(program);\n const currentDir = currentFilePath.replace(/[/\\\\][^/\\\\]+$/, \"\");\n\n for (const [localName, importSource] of defaultImports) {\n // Skip non-relative imports\n if (!importSource.startsWith(\".\")) continue;\n\n // Resolve the import path relative to the current file\n const resolvedPath = resolvePath(currentDir, importSource);\n const workflowName = workflowFileMap.get(resolvedPath);\n if (workflowName) {\n localWorkflowNameMap.set(localName, workflowName);\n }\n }\n }\n\n // Build sets of known workflow and job identifier names for filtering\n const workflowNames = new Set(localWorkflowNameMap.keys());\n const jobNames = new Set(jobNameMap.keys());\n\n // Detect trigger calls only for known workflows and jobs\n const triggerCalls = detectExtendedTriggerCalls(program, source, workflowNames, jobNames);\n\n const replacements: Replacement[] = [];\n\n for (const call of triggerCalls) {\n if (call.kind === \"workflow\" && call.authInvoker) {\n // Workflow trigger - get workflow name from map\n const workflowName = localWorkflowNameMap.get(call.identifierName);\n if (workflowName) {\n // Use authInvoker info extracted during detection\n const authInvokerExpr = call.authInvoker.isShorthand\n ? \"authInvoker\"\n : call.authInvoker.valueText;\n // Transform to tailor.workflow.triggerWorkflow\n const transformedCall = `tailor.workflow.triggerWorkflow(\"${workflowName}\", ${call.argsText || \"undefined\"}, { authInvoker: ${authInvokerExpr} })`;\n replacements.push({\n start: call.callRange.start,\n end: call.callRange.end,\n text: transformedCall,\n });\n }\n } else if (call.kind === \"job\") {\n // Job trigger - get job name from map\n const jobName = jobNameMap.get(call.identifierName);\n if (jobName) {\n // Transform to tailor.workflow.triggerJobFunction\n // triggerJobFunction is synchronous, so we remove await if present\n const transformedCall = `tailor.workflow.triggerJobFunction(\"${jobName}\", ${call.argsText || \"undefined\"})`;\n\n // If the call was wrapped in await, replace the entire await expression\n // Otherwise just replace the call\n const range = call.hasAwait && call.fullRange ? call.fullRange : call.callRange;\n replacements.push({\n start: range.start,\n end: range.end,\n text: transformedCall,\n });\n }\n }\n }\n\n return applyReplacements(source, replacements);\n}\n","import * as fs from \"node:fs\";\nimport { parseSync } from \"oxc-parser\";\nimport * as path from \"pathe\";\nimport { loadFilesWithIgnores, type FileLoadConfig } from \"@/cli/services/file-loader\";\nimport { findAllJobs, buildJobNameMap } from \"@/cli/services/workflow/job-detector\";\nimport { transformFunctionTriggers } from \"@/cli/services/workflow/trigger-transformer\";\nimport { findAllWorkflows, buildWorkflowNameMap } from \"@/cli/services/workflow/workflow-detector\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { Plugin } from \"rolldown\";\n\n/**\n * Context for trigger transformation\n * Maps variable names to workflow/job names\n */\nexport interface TriggerContext {\n workflowNameMap: Map<string, string>;\n jobNameMap: Map<string, string>;\n /** Maps file path (without extension) to workflow name for default exports */\n workflowFileMap: Map<string, string>;\n}\n\n/**\n * Normalize a file path by removing extension and resolving to absolute path\n * @param filePath - File path to normalize\n * @returns Normalized absolute path without extension\n */\nfunction normalizeFilePath(filePath: string): string {\n const absolutePath = path.resolve(filePath);\n const ext = path.extname(absolutePath);\n return absolutePath.slice(0, -ext.length);\n}\n\n/**\n * Build trigger context from workflow configuration\n * Scans workflow files to collect workflow and job mappings\n * @param workflowConfig - Workflow file loading configuration\n * @returns Trigger context built from workflow sources\n */\nexport async function buildTriggerContext(\n workflowConfig: FileLoadConfig | undefined,\n): Promise<TriggerContext> {\n const workflowNameMap = new Map<string, string>();\n const jobNameMap = new Map<string, string>();\n const workflowFileMap = new Map<string, string>();\n\n if (!workflowConfig) {\n return { workflowNameMap, jobNameMap, workflowFileMap };\n }\n\n const workflowFiles = loadFilesWithIgnores(workflowConfig);\n\n for (const file of workflowFiles) {\n try {\n const source = await fs.promises.readFile(file, \"utf-8\");\n const { program } = parseSync(\"input.ts\", source);\n\n // Detect workflows\n const workflows = findAllWorkflows(program, source);\n const workflowMap = buildWorkflowNameMap(workflows);\n for (const [exportName, workflowName] of workflowMap) {\n workflowNameMap.set(exportName, workflowName);\n }\n\n // Also track default exported workflows by file path\n for (const workflow of workflows) {\n if (workflow.isDefaultExport) {\n const normalizedPath = normalizeFilePath(file);\n workflowFileMap.set(normalizedPath, workflow.name);\n }\n }\n\n // Detect jobs\n const jobs = findAllJobs(program, source);\n const jobMap = buildJobNameMap(jobs);\n for (const [exportName, jobName] of jobMap) {\n jobNameMap.set(exportName, jobName);\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n logger.warn(`Failed to process workflow file ${file}: ${errorMessage}`, {\n mode: \"stream\",\n });\n continue;\n }\n }\n\n return { workflowNameMap, jobNameMap, workflowFileMap };\n}\n\nfunction sortedMapToJson(m: Map<string, string>): string {\n return JSON.stringify([...m.entries()].sort(([a], [b]) => a.localeCompare(b)));\n}\n\n/**\n * Serialize trigger context to a deterministic string for cache hashing.\n * Returns an empty string if no context is provided.\n * @param ctx - Trigger context to serialize\n * @returns Deterministic string representation\n */\nexport function serializeTriggerContext(ctx: TriggerContext | undefined): string {\n if (!ctx) return \"\";\n return (\n sortedMapToJson(ctx.workflowNameMap) +\n sortedMapToJson(ctx.jobNameMap) +\n sortedMapToJson(ctx.workflowFileMap)\n );\n}\n\n/**\n * Create a rolldown plugin for transforming trigger calls\n * Returns undefined if no trigger context is provided\n * @param triggerContext - Trigger context to use for transformations\n * @returns Rolldown plugin or undefined when no context\n */\nexport function createTriggerTransformPlugin(\n triggerContext: TriggerContext | undefined,\n): Plugin | undefined {\n if (!triggerContext) {\n return undefined;\n }\n\n return {\n name: \"trigger-transform\",\n transform: {\n filter: {\n id: {\n include: [/\\.ts$/, /\\.js$/],\n },\n },\n handler(code, id) {\n // Only transform source files that contain trigger calls\n if (!code.includes(\".trigger(\")) {\n return null;\n }\n const transformed = transformFunctionTriggers(\n code,\n triggerContext.workflowNameMap,\n triggerContext.jobNameMap,\n triggerContext.workflowFileMap,\n id,\n );\n return { code: transformed };\n },\n },\n };\n}\n","import * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { computeBundlerContextHash, withCache, type BundleCache } from \"@/cli/cache/bundle-cache\";\nimport { removeStaleEntryFiles } from \"@/cli/services/stale-cleanup\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport {\n createTriggerTransformPlugin,\n serializeTriggerContext,\n type TriggerContext,\n} from \"@/cli/shared/trigger-context\";\n\n/**\n * Options for bundling auth hooks\n */\nexport interface BundleAuthHooksOptions {\n /** Absolute path to the config file that exports the auth definition */\n configPath: string;\n /** Auth namespace name */\n authName: string;\n /** Dot-path expression to reach the handler from the config's default export */\n handlerAccessPath: string;\n /** Trigger context for workflow/job transformations */\n triggerContext?: TriggerContext;\n /** Optional bundle cache for skipping unchanged builds */\n cache?: BundleCache;\n /** Whether to enable inline sourcemaps */\n inlineSourcemap?: boolean;\n}\n\n/**\n * Bundle a single auth hook handler into dist/auth-hooks/.\n *\n * Follows the same pattern as the executor bundler:\n * 1. Generate an entry file that re-exports the handler as `main`\n * 2. Bundle with rolldown + tree-shaking\n * @param options - Bundle options\n */\nexport async function bundleAuthHooks(options: BundleAuthHooksOptions): Promise<void> {\n const { configPath, authName, handlerAccessPath, triggerContext, cache, inlineSourcemap } =\n options;\n\n logger.newline();\n logger.log(`Bundling auth hook for ${styles.info(`\"${authName}\"`)}`);\n\n const outputDir = path.resolve(getDistDir(), \"auth-hooks\");\n fs.mkdirSync(outputDir, { recursive: true });\n\n await removeStaleEntryFiles(outputDir);\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n const functionName = `auth-hook--${authName}--before-login`;\n const outputPath = path.join(outputDir, `${functionName}.js`);\n const absoluteConfigPath = path.resolve(configPath);\n\n const serializedTriggerContext = serializeTriggerContext(triggerContext);\n const contextHash = computeBundlerContextHash({\n sourceFile: absoluteConfigPath,\n serializedTriggerContext,\n tsconfig,\n inlineSourcemap,\n });\n\n await withCache({\n cache,\n kind: \"auth-hook\",\n name: functionName,\n sourceFile: absoluteConfigPath,\n outputPath,\n contextHash,\n async build(cachePlugins) {\n const entryPath = path.join(outputDir, `${functionName}.entry.js`);\n\n const entryContent = ml /* js */ `\n import _config from \"${absoluteConfigPath}\";\n const __auth_hook_function = _config.${handlerAccessPath};\n export { __auth_hook_function as main };\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n const triggerPlugin = createTriggerTransformPlugin(triggerContext);\n const plugins: rolldown.Plugin[] = triggerPlugin ? [triggerPlugin] : [];\n plugins.push(...cachePlugins);\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: inlineSourcemap ? \"inline\" : true,\n minify: inlineSourcemap\n ? {\n mangle: {\n keepNames: true,\n },\n }\n : true,\n codeSplitting: false,\n },\n tsconfig,\n plugins,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n },\n });\n\n logger.log(`${styles.success(\"Bundled\")} auth hook for ${styles.info(`\"${authName}\"`)}`);\n}\n","const PRECOMPILED_EXPR_KEY = \"__precompiledScriptExpr\";\n\ntype AnyFunction = (...args: never[]) => unknown;\n\n/**\n * Attach a precompiled script expression to a function object.\n * @param fn - Function metadata object.\n * @param expr - Precompiled script expression.\n */\nexport function setPrecompiledScriptExpr(fn: AnyFunction, expr: string) {\n (fn as unknown as Record<string, unknown>)[PRECOMPILED_EXPR_KEY] = expr;\n}\n\n/**\n * Read a precompiled script expression from a function object.\n * @param fn - Function metadata object.\n * @returns Precompiled script expression if attached.\n */\nexport function getPrecompiledScriptExpr(fn: AnyFunction): string | undefined {\n const value = (fn as unknown as Record<string, unknown>)[PRECOMPILED_EXPR_KEY];\n return typeof value === \"string\" ? value : undefined;\n}\n","import { getPrecompiledScriptExpr } from \"./hooks-validate-precompiled-expr\";\nimport type {\n TailorAnyDBField,\n DBFieldMetadata,\n Hook,\n OperatorFieldConfig,\n RawRelationConfig,\n} from \"@/types/tailordb\";\nimport type { TailorDBTypeRaw as TailorDBTypeSchemaOutput } from \"@/types/tailordb.generated\";\n\n// Since there's naming difference between platform and sdk,\n// use this mapping in all scripts to provide variables that match sdk types.\nexport const tailorUserMap = /* js */ `{ id: user.id, type: user.type, workspaceId: user.workspace_id, attributes: user.attribute_map, attributeList: user.attributes }`;\n\n/**\n * Convert a function to a string representation.\n * Handles method shorthand syntax (e.g., `create() { ... }`) by converting it to\n * a function expression (e.g., `function create() { ... }`).\n * @param fn - Function to stringify\n * @returns Stringified function source\n */\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const stringifyFunction = (fn: Function): string => {\n const src = fn.toString().trim();\n // Method shorthand pattern: methodName(...) { ... }\n // Needs to be converted to: function methodName(...) { ... }\n if (\n /^[a-zA-Z_$][a-zA-Z0-9_$]*\\s*\\(/.test(src) &&\n !src.startsWith(\"function\") &&\n !src.startsWith(\"(\") &&\n !src.includes(\"=>\")\n ) {\n return `function ${src}`;\n }\n return src;\n};\n\n/**\n * Convert a hook function to a script expression.\n * @param fn - Hook function\n * @returns JavaScript expression calling the hook\n */\nconst convertHookToExpr = (\n fn: NonNullable<Hook<unknown, unknown>[\"create\"] | Hook<unknown, unknown>[\"update\"]>,\n): string => {\n const precompiledExpr = getPrecompiledScriptExpr(fn);\n if (precompiledExpr) {\n return precompiledExpr;\n }\n const normalized = stringifyFunction(fn);\n return `(${normalized})({ value: _value, data: _data, user: ${tailorUserMap} })`;\n};\n\n/**\n * Parse TailorDBField into OperatorFieldConfig.\n * This transforms user-defined functions into script expressions.\n * @param field - TailorDB field definition\n * @returns Parsed operator field configuration\n */\nexport function parseFieldConfig(\n field: TailorDBTypeSchemaOutput[\"fields\"][string],\n): OperatorFieldConfig {\n const metadata = field.metadata as DBFieldMetadata;\n const fieldType = field.type;\n // Access rawRelation via getter (if available)\n const rawRelation = (field as unknown as { rawRelation?: RawRelationConfig }).rawRelation;\n\n const nestedFields = field.fields as Record<string, TailorAnyDBField> | undefined;\n return {\n type: fieldType,\n ...metadata,\n rawRelation,\n ...(fieldType === \"nested\" && nestedFields && Object.keys(nestedFields).length > 0\n ? {\n fields: Object.entries(nestedFields).reduce(\n (acc, [key, nestedField]) => {\n acc[key] = parseFieldConfig(nestedField);\n return acc;\n },\n {} as Record<string, OperatorFieldConfig>,\n ),\n }\n : {}),\n validate: metadata.validate?.map((v) => {\n const { fn, message } =\n typeof v === \"function\"\n ? { fn: v, message: `failed by \\`${v.toString().trim()}\\`` }\n : { fn: v[0], message: v[1] };\n\n return {\n script: {\n expr:\n getPrecompiledScriptExpr(fn) ??\n `(${fn.toString().trim()})({ value: _value, data: _data, user: ${tailorUserMap} })`,\n },\n errorMessage: message,\n };\n }),\n hooks: metadata.hooks\n ? {\n create: metadata.hooks.create\n ? {\n expr: convertHookToExpr(metadata.hooks.create),\n }\n : undefined,\n update: metadata.hooks.update\n ? {\n expr: convertHookToExpr(metadata.hooks.update),\n }\n : undefined,\n }\n : undefined,\n serial: metadata.serial\n ? {\n start: metadata.serial.start,\n maxValue: metadata.serial.maxValue,\n format: \"format\" in metadata.serial ? metadata.serial.format : undefined,\n }\n : undefined,\n };\n}\n","import type {\n StandardTailorTypePermission,\n StandardTailorTypeGqlPermission,\n StandardActionPermission,\n StandardPermissionCondition,\n StandardGqlPermissionPolicy,\n Permissions,\n} from \"@/types/tailordb\";\nimport type { RawPermissions } from \"@/types/tailordb.generated\";\n\n// Raw permission types for normalize function parameters\ntype PermissionOperator = \"=\" | \"!=\" | \"in\" | \"not in\" | \"hasAny\" | \"not hasAny\";\n\ntype ObjectOperand =\n | { user: string }\n | { record: string }\n | { oldRecord: string }\n | { newRecord: string }\n | { value: unknown };\n\ntype ValueOperand = string | boolean | string[] | boolean[];\n\n// GQL string reference pattern (e.g., \"user.id\", \"user.roles\")\ntype GqlStringRef = `user.${string}`;\n\ntype PermissionOperand = ObjectOperand | ValueOperand | GqlStringRef;\n\ntype PermissionCondition = readonly [PermissionOperand, PermissionOperator, PermissionOperand];\n\nconst operatorMap: Record<PermissionOperator, string> = {\n \"=\": \"eq\",\n \"!=\": \"ne\",\n in: \"in\",\n \"not in\": \"nin\",\n hasAny: \"hasAny\",\n \"not hasAny\": \"nhasAny\",\n};\n\ntype GqlPermissionPolicy = {\n conditions: readonly PermissionCondition[];\n actions: \"all\" | readonly GqlPermissionAction[];\n permit?: boolean;\n description?: string;\n};\n\ntype GqlPermissionAction = \"read\" | \"create\" | \"update\" | \"delete\" | \"aggregate\" | \"bulkUpsert\";\n\nfunction normalizeOperand(operand: PermissionOperand): PermissionOperand {\n if (typeof operand === \"object\" && \"user\" in operand) {\n const mapped = operand.user === \"id\" ? \"_id\" : operand.user;\n return { user: mapped };\n }\n return operand;\n}\n\nfunction normalizeConditions(\n conditions: readonly PermissionCondition[],\n): StandardPermissionCondition[] {\n return conditions.map((cond) => {\n const [left, operator, right] = cond;\n return [normalizeOperand(left), operatorMap[operator], normalizeOperand(right)];\n }) as StandardPermissionCondition[];\n}\n\nfunction isObjectFormat(\n p: unknown,\n): p is { conditions: unknown; permit?: boolean; description?: string } {\n return typeof p === \"object\" && p !== null && \"conditions\" in p;\n}\n\nfunction isSingleArrayConditionFormat(cond: readonly unknown[]): boolean {\n return cond.length >= 2 && typeof cond[1] === \"string\"; // Check if middle element is an operator\n}\n\n/**\n * Normalize record-level permissions into a standard structure.\n * @param permission - Tailor type permission\n * @returns Normalized record permissions\n */\nfunction normalizePermission(\n permission: NonNullable<RawPermissions[\"record\"]>,\n): StandardTailorTypePermission {\n const keys = Object.keys(permission) as Array<keyof typeof permission>;\n return keys.reduce((acc, action) => {\n acc[action] = permission[action].map((p) => normalizeActionPermission(p));\n return acc;\n // oxlint-disable-next-line no-explicit-any\n }, {} as any);\n}\n\n/**\n * Normalize GraphQL permissions into a standard structure.\n * @param permission - Tailor GQL permission\n * @returns Normalized GQL permissions\n */\nexport function normalizeGqlPermission(\n permission: NonNullable<RawPermissions[\"gql\"]>,\n): StandardTailorTypeGqlPermission {\n return (permission as readonly GqlPermissionPolicy[]).map((policy) =>\n normalizeGqlPolicy(policy),\n ) as StandardTailorTypeGqlPermission;\n}\n\nfunction normalizeGqlPolicy(policy: GqlPermissionPolicy): StandardGqlPermissionPolicy {\n return {\n conditions: policy.conditions ? normalizeConditions(policy.conditions) : [],\n actions: policy.actions === \"all\" ? [\"all\"] : policy.actions,\n permit: policy.permit ? \"allow\" : \"deny\",\n description: policy.description,\n } as StandardGqlPermissionPolicy;\n}\n\n/**\n * Parse raw permissions into normalized permissions.\n * This is the main entry point for permission parsing in the parser layer.\n * @param rawPermissions - Raw permissions definition\n * @returns Normalized permissions\n */\nexport function parsePermissions(rawPermissions: RawPermissions): Permissions {\n return {\n ...(rawPermissions.record && {\n record: normalizePermission(rawPermissions.record),\n }),\n ...(rawPermissions.gql && {\n gql: normalizeGqlPermission(rawPermissions.gql),\n }),\n };\n}\n\n/**\n * Normalize a single action permission into the standard format.\n * @param permission - Raw permission definition\n * @returns Normalized action permission\n */\nexport function normalizeActionPermission(permission: unknown): StandardActionPermission {\n // object format\n if (isObjectFormat(permission)) {\n const conditions = permission.conditions as\n | PermissionCondition\n | readonly PermissionCondition[];\n return {\n conditions: normalizeConditions(\n isSingleArrayConditionFormat(conditions)\n ? [conditions as PermissionCondition]\n : (conditions as readonly PermissionCondition[]),\n ),\n permit: permission.permit ? \"allow\" : \"deny\",\n description: permission.description,\n };\n }\n\n if (!Array.isArray(permission)) {\n throw new Error(\"Invalid permission format\");\n }\n\n if (isSingleArrayConditionFormat(permission)) {\n const [op1, operator, op2, permit] = [...permission, true] as [\n PermissionOperand,\n string,\n PermissionOperand,\n boolean,\n ];\n return {\n conditions: normalizeConditions([[op1, operator, op2] as PermissionCondition]),\n permit: permit ? \"allow\" : \"deny\",\n };\n }\n\n // Array of conditions format\n const conditions: PermissionCondition[] = [];\n const conditionArray = permission as readonly unknown[];\n let conditionArrayPermit = true;\n\n for (const item of conditionArray) {\n if (typeof item === \"boolean\") {\n conditionArrayPermit = item;\n continue;\n }\n conditions.push(item as PermissionCondition);\n }\n\n return {\n conditions: normalizeConditions(conditions),\n permit: conditionArrayPermit ? \"allow\" : \"deny\",\n };\n}\n","import * as inflection from \"inflection\";\nimport type { RawRelationConfig, OperatorFieldConfig } from \"@/types/tailordb\";\nimport type { UnionToTuple } from \"type-fest\";\n\nconst relationTypes = {\n \"1-1\": \"1-1\",\n oneToOne: \"1-1\",\n \"n-1\": \"n-1\",\n manyToOne: \"n-1\",\n \"N-1\": \"n-1\",\n keyOnly: \"keyOnly\",\n} as const;\nexport const relationTypesKeys = Object.keys(relationTypes) as UnionToTuple<\n keyof typeof relationTypes\n>;\n\nexport interface RelationProcessingContext {\n typeName: string;\n fieldName: string;\n allTypeNames: Set<string>;\n}\n\nexport interface ProcessedRelationMetadata {\n index: boolean;\n foreignKey: boolean;\n relationType: string;\n unique: boolean;\n foreignKeyType: string;\n foreignKeyField: string;\n}\n\nexport interface RelationInfo {\n targetType: string;\n forwardName: string;\n backwardName: string;\n key: string;\n unique: boolean;\n}\n\nfunction fieldRef(context: RelationProcessingContext): string {\n return `Field \"${context.fieldName}\" on type \"${context.typeName}\"`;\n}\n\n/**\n * Validate relation configuration.\n * @param rawRelation - Raw relation configuration from TailorDB type definition\n * @param context - Context information for the relation (type name, field name, all type names)\n */\nexport function validateRelationConfig(\n rawRelation: RawRelationConfig,\n context: RelationProcessingContext,\n): void {\n if (!rawRelation.type) {\n throw new Error(\n `${fieldRef(context)} has a relation but is missing the required 'type' property. ` +\n `Valid values: ${relationTypesKeys.join(\", \")}.`,\n );\n }\n if (!(rawRelation.type in relationTypes)) {\n throw new Error(\n `${fieldRef(context)} has invalid relation type '${rawRelation.type}'. ` +\n `Valid values: ${relationTypesKeys.join(\", \")}.`,\n );\n }\n\n // Validate target type exists (for non-self relations)\n if (rawRelation.toward.type !== \"self\" && !context.allTypeNames.has(rawRelation.toward.type)) {\n throw new Error(`${fieldRef(context)} references unknown type \"${rawRelation.toward.type}\".`);\n }\n}\n\n/**\n * Process raw relation config and compute derived metadata values.\n * @param rawRelation - Raw relation configuration\n * @param context - Context information for the relation\n * @param isArrayField - Whether the target field is an array field\n * @returns Computed relation metadata to apply to field config\n */\nexport function processRelationMetadata(\n rawRelation: RawRelationConfig,\n context: RelationProcessingContext,\n isArrayField: boolean = false,\n): ProcessedRelationMetadata {\n const isUnique = relationTypes[rawRelation.type] === \"1-1\";\n const key = rawRelation.toward.key ?? \"id\";\n\n // Resolve target type name (handle \"self\" reference)\n const targetTypeName =\n rawRelation.toward.type === \"self\" ? context.typeName : rawRelation.toward.type;\n\n // Index and unique are not supported on array fields\n const shouldSetIndex = !isArrayField;\n const shouldSetUnique = !isArrayField && isUnique;\n\n return {\n index: shouldSetIndex,\n foreignKey: true,\n relationType: rawRelation.type,\n unique: shouldSetUnique,\n foreignKeyType: targetTypeName,\n foreignKeyField: key,\n };\n}\n\n/**\n * Build relation info for creating forward/backward relationships.\n * Returns undefined for keyOnly relations.\n * @param rawRelation - Raw relation configuration\n * @param context - Context information for the relation\n * @returns Relation information or undefined for keyOnly relations\n */\nexport function buildRelationInfo(\n rawRelation: RawRelationConfig,\n context: RelationProcessingContext,\n): RelationInfo | undefined {\n // keyOnly relations don't create forward/backward relationships\n if (rawRelation.type === \"keyOnly\") {\n return undefined;\n }\n\n const isUnique = relationTypes[rawRelation.type] === \"1-1\";\n const key = rawRelation.toward.key ?? \"id\";\n\n // Resolve target type name (handle \"self\" reference)\n const targetTypeName =\n rawRelation.toward.type === \"self\" ? context.typeName : rawRelation.toward.type;\n\n // Compute forward name\n let forwardName = rawRelation.toward.as;\n if (!forwardName) {\n if (rawRelation.toward.type === \"self\") {\n // For self-relations, derive from field name by removing ID suffix\n forwardName = context.fieldName.replace(/(ID|Id|id)$/u, \"\");\n } else {\n // Use inflection to generate default forward name\n forwardName = inflection.camelize(targetTypeName, true);\n }\n }\n\n return {\n targetType: targetTypeName,\n forwardName,\n backwardName: rawRelation.backward ?? \"\",\n key,\n unique: isUnique,\n };\n}\n\n/**\n * Apply processed relation metadata to field config.\n * @param fieldConfig - Original operator field configuration\n * @param metadata - Processed relation metadata to apply\n * @returns Field config with relation metadata applied\n */\nexport function applyRelationMetadataToFieldConfig(\n fieldConfig: OperatorFieldConfig,\n metadata: ProcessedRelationMetadata,\n): OperatorFieldConfig {\n return {\n ...fieldConfig,\n index: metadata.index,\n foreignKey: metadata.foreignKey,\n unique: metadata.unique,\n foreignKeyType: metadata.foreignKeyType,\n foreignKeyField: metadata.foreignKeyField,\n };\n}\n","import * as inflection from \"inflection\";\nimport { isPluginGeneratedType } from \"@/types/tailordb\";\nimport { parseFieldConfig } from \"./field\";\nimport { parsePermissions } from \"./permission\";\nimport {\n validateRelationConfig,\n processRelationMetadata,\n buildRelationInfo,\n applyRelationMetadataToFieldConfig,\n} from \"./relation\";\nimport type {\n TailorDBField,\n TypeSourceInfo,\n ParsedField,\n ParsedRelationship,\n TailorDBType,\n} from \"@/types/tailordb\";\nimport type { TailorDBTypeRaw as TailorDBTypeSchemaOutput } from \"@/types/tailordb.generated\";\n\n/**\n * Parse multiple TailorDB types, build relationships, and validate uniqueness.\n * This is the main entry point for parsing TailorDB types.\n * @param rawTypes - Raw TailorDB types keyed by name\n * @param namespace - TailorDB namespace name\n * @param typeSourceInfo - Optional type source information\n * @returns Parsed types\n */\nexport function parseTypes(\n rawTypes: Record<string, TailorDBTypeSchemaOutput>,\n namespace: string,\n typeSourceInfo?: TypeSourceInfo,\n): Record<string, TailorDBType> {\n const types: Record<string, TailorDBType> = {};\n const allTypeNames = new Set(Object.keys(rawTypes));\n\n for (const [typeName, type] of Object.entries(rawTypes)) {\n types[typeName] = parseTailorDBType(type, allTypeNames, rawTypes);\n }\n\n buildBackwardRelationships(types, namespace, typeSourceInfo);\n validatePluralFormUniqueness(types, namespace, typeSourceInfo);\n\n return types;\n}\n\n/**\n * Parse a TailorDBTypeSchemaOutput into a TailorDBType.\n * @param type - TailorDB type to parse\n * @param allTypeNames - Set of all TailorDB type names\n * @param rawTypes - All raw TailorDB types keyed by name\n * @returns Parsed TailorDB type\n */\nfunction parseTailorDBType(\n type: TailorDBTypeSchemaOutput,\n allTypeNames: Set<string>,\n rawTypes: Record<string, TailorDBTypeSchemaOutput>,\n): TailorDBType {\n const metadata = type.metadata;\n const pluralForm = metadata.settings?.pluralForm || inflection.pluralize(type.name);\n\n const fields: Record<string, ParsedField> = {};\n const forwardRelationships: Record<string, ParsedRelationship> = {};\n\n for (const [fieldName, fieldDef] of Object.entries(type.fields) as [\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TailorDBField requires generic type parameters\n TailorDBField<any, any>,\n ][]) {\n let fieldConfig = parseFieldConfig(fieldDef);\n const rawRelation = fieldConfig.rawRelation;\n const context = { typeName: type.name, fieldName, allTypeNames };\n\n // Process relation if rawRelation is present\n if (rawRelation) {\n validateRelationConfig(rawRelation, context);\n\n // Validate that n-1/manyToOne relations cannot have explicit unique\n const isNToOne = [\"n-1\", \"manyToOne\", \"N-1\"].includes(rawRelation.type);\n if (isNToOne && fieldConfig.unique) {\n throw new Error(\n `Field \"${fieldName}\" on type \"${type.name}\": cannot set unique on n-1 (manyToOne) relation. ` +\n `Use 1-1 (oneToOne) relation instead, or remove the unique constraint.`,\n );\n }\n\n const relationMetadata = processRelationMetadata(rawRelation, context, fieldConfig.array);\n fieldConfig = applyRelationMetadataToFieldConfig(fieldConfig, relationMetadata);\n }\n\n // Validate that index/unique are not set on array fields\n if (fieldConfig.array && fieldConfig.index) {\n throw new Error(\n `Field \"${fieldName}\" on type \"${type.name}\": index cannot be set on array fields`,\n );\n }\n if (fieldConfig.array && fieldConfig.unique) {\n throw new Error(\n `Field \"${fieldName}\" on type \"${type.name}\": unique cannot be set on array fields`,\n );\n }\n\n const parsedField: ParsedField = { name: fieldName, config: fieldConfig };\n\n // Build relation info for forward/backward relationships\n const relationInfo = rawRelation ? buildRelationInfo(rawRelation, context) : undefined;\n if (relationInfo) {\n parsedField.relation = { ...relationInfo };\n\n const targetType = rawTypes[relationInfo.targetType];\n forwardRelationships[relationInfo.forwardName] = {\n name: relationInfo.forwardName,\n targetType: relationInfo.targetType,\n targetField: fieldName,\n sourceField: relationInfo.key,\n isArray: false,\n description: targetType?.metadata?.description || \"\",\n };\n }\n\n fields[fieldName] = parsedField;\n }\n\n return {\n name: type.name,\n pluralForm,\n description: metadata.description,\n fields,\n forwardRelationships,\n backwardRelationships: {},\n settings: metadata.settings || {},\n permissions: parsePermissions(metadata.permissions || {}),\n indexes: metadata.indexes,\n files: metadata.files,\n };\n}\n\n/**\n * Build backward relationships between parsed types.\n * Also validates that backward relation names are unique within each type.\n * @param types - Parsed types\n * @param namespace - TailorDB namespace name\n * @param typeSourceInfo - Optional type source information\n */\nfunction buildBackwardRelationships(\n types: Record<string, TailorDBType>,\n namespace: string,\n typeSourceInfo?: TypeSourceInfo,\n): void {\n // Track backward name sources for duplicate detection\n // Map: targetTypeName -> backwardName -> array of source info\n const backwardNameSources: Record<\n string,\n Record<string, { sourceType: string; fieldName: string }[]>\n > = {};\n\n // Initialize tracking for all types\n for (const typeName of Object.keys(types)) {\n backwardNameSources[typeName] = {};\n }\n\n // Build backward relationships and track sources\n for (const [typeName, type] of Object.entries(types)) {\n for (const [otherTypeName, otherType] of Object.entries(types)) {\n for (const [fieldName, field] of Object.entries(otherType.fields)) {\n if (field.relation && field.relation.targetType === typeName) {\n let backwardName = field.relation.backwardName;\n\n if (!backwardName) {\n const lowerName = inflection.camelize(otherTypeName, true);\n backwardName = field.relation.unique\n ? inflection.singularize(lowerName)\n : inflection.pluralize(lowerName);\n }\n\n // Track the source of this backward name\n if (!backwardNameSources[typeName][backwardName]) {\n backwardNameSources[typeName][backwardName] = [];\n }\n backwardNameSources[typeName][backwardName].push({\n sourceType: otherTypeName,\n fieldName,\n });\n\n type.backwardRelationships[backwardName] = {\n name: backwardName,\n targetType: otherTypeName,\n targetField: fieldName,\n sourceField: field.relation.key,\n isArray: !field.relation.unique,\n description: otherType.description || \"\",\n };\n }\n }\n }\n }\n\n // Check for duplicates and collect errors\n const errors: string[] = [];\n\n for (const [targetTypeName, backwardNames] of Object.entries(backwardNameSources)) {\n const targetType = types[targetTypeName];\n const targetTypeSourceInfo = typeSourceInfo?.[targetTypeName];\n const targetLocation = targetTypeSourceInfo\n ? isPluginGeneratedType(targetTypeSourceInfo)\n ? ` (plugin: ${targetTypeSourceInfo.pluginId})`\n : ` (${targetTypeSourceInfo.filePath})`\n : \"\";\n\n for (const [backwardName, sources] of Object.entries(backwardNames)) {\n // Check for duplicate backward relation names\n if (sources.length > 1) {\n const sourceList = sources\n .map((s) => {\n const sourceInfo = typeSourceInfo?.[s.sourceType];\n const location = sourceInfo\n ? isPluginGeneratedType(sourceInfo)\n ? ` (plugin: ${sourceInfo.pluginId})`\n : ` (${sourceInfo.filePath})`\n : \"\";\n return `${s.sourceType}.${s.fieldName}${location}`;\n })\n .join(\", \");\n errors.push(\n `Backward relation name \"${backwardName}\" on type \"${targetTypeName}\" is duplicated from: ${sourceList}. ` +\n `Use the \"backward\" option in .relation() to specify unique names.`,\n );\n }\n\n // Check for conflict with existing fields\n if (backwardName in targetType.fields) {\n const source = sources[0];\n const sourceInfo = typeSourceInfo?.[source.sourceType];\n const sourceLocation = sourceInfo\n ? isPluginGeneratedType(sourceInfo)\n ? ` (plugin: ${sourceInfo.pluginId})`\n : ` (${sourceInfo.filePath})`\n : \"\";\n errors.push(\n `Backward relation name \"${backwardName}\" from ${source.sourceType}.${source.fieldName}${sourceLocation} ` +\n `conflicts with existing field \"${backwardName}\" on type \"${targetTypeName}\"${targetLocation}. ` +\n `Use the \"backward\" option in .relation() to specify a different name.`,\n );\n }\n\n // Check for conflict with files fields\n if (targetType.files && backwardName in targetType.files) {\n const source = sources[0];\n const sourceInfo = typeSourceInfo?.[source.sourceType];\n const sourceLocation = sourceInfo\n ? isPluginGeneratedType(sourceInfo)\n ? ` (plugin: ${sourceInfo.pluginId})`\n : ` (${sourceInfo.filePath})`\n : \"\";\n errors.push(\n `Backward relation name \"${backwardName}\" from ${source.sourceType}.${source.fieldName}${sourceLocation} ` +\n `conflicts with files field \"${backwardName}\" on type \"${targetTypeName}\"${targetLocation}. ` +\n `Use the \"backward\" option in .relation() to specify a different name.`,\n );\n }\n }\n }\n\n if (errors.length > 0) {\n throw new Error(\n `Backward relation name conflicts detected in TailorDB service \"${namespace}\".\\n` +\n `${errors.map((e) => ` - ${e}`).join(\"\\n\")}`,\n );\n }\n}\n\n/**\n * Validate GraphQL query field name uniqueness.\n * Checks for:\n * 1. Each type's singular query name != plural query name\n * 2. No duplicate query names across all types\n * @param types - Parsed types\n * @param namespace - TailorDB namespace name\n * @param typeSourceInfo - Optional type source information\n */\nfunction validatePluralFormUniqueness(\n types: Record<string, TailorDBType>,\n namespace: string,\n typeSourceInfo?: TypeSourceInfo,\n): void {\n const errors: string[] = [];\n\n // Check 1: Each type's singular and plural query names must be different\n for (const [, parsedType] of Object.entries(types)) {\n const singularQuery = inflection.camelize(parsedType.name, true);\n const pluralQuery = inflection.camelize(parsedType.pluralForm, true);\n\n if (singularQuery === pluralQuery) {\n const sourceInfo = typeSourceInfo?.[parsedType.name];\n const location = sourceInfo\n ? isPluginGeneratedType(sourceInfo)\n ? ` (plugin: ${sourceInfo.pluginId})`\n : ` (${sourceInfo.filePath})`\n : \"\";\n errors.push(\n `Type \"${parsedType.name}\"${location} has identical singular and plural query names \"${singularQuery}\". ` +\n `Use db.type([\"${parsedType.name}\", \"UniquePluralForm\"], {...}) to set a unique pluralForm.`,\n );\n }\n }\n\n // Check 2: All query names must be unique across types\n const queryNameToSource: Record<string, { typeName: string; kind: string }[]> = {};\n\n for (const parsedType of Object.values(types)) {\n const singularQuery = inflection.camelize(parsedType.name, true);\n const pluralQuery = inflection.camelize(parsedType.pluralForm, true);\n\n if (!queryNameToSource[singularQuery]) {\n queryNameToSource[singularQuery] = [];\n }\n queryNameToSource[singularQuery].push({\n typeName: parsedType.name,\n kind: \"singular\",\n });\n\n if (singularQuery !== pluralQuery) {\n if (!queryNameToSource[pluralQuery]) {\n queryNameToSource[pluralQuery] = [];\n }\n queryNameToSource[pluralQuery].push({\n typeName: parsedType.name,\n kind: \"plural\",\n });\n }\n }\n\n const duplicates = Object.entries(queryNameToSource).filter(([, sources]) => sources.length > 1);\n\n for (const [queryName, sources] of duplicates) {\n const sourceList = sources\n .map((s) => {\n const sourceInfo = typeSourceInfo?.[s.typeName];\n const location = sourceInfo\n ? isPluginGeneratedType(sourceInfo)\n ? ` (plugin: ${sourceInfo.pluginId})`\n : ` (${sourceInfo.filePath})`\n : \"\";\n return `\"${s.typeName}\"${location} (${s.kind})`;\n })\n .join(\", \");\n errors.push(`GraphQL query field \"${queryName}\" conflicts between: ${sourceList}`);\n }\n\n if (errors.length > 0) {\n throw new Error(\n `GraphQL field name conflicts detected in TailorDB service \"${namespace}\".\\n` +\n `${errors.map((e) => ` - ${e}`).join(\"\\n\")}`,\n );\n }\n}\n","import { z } from \"zod\";\n\n// Use `z.custom` instead of `z.function`, since `z.function` changes `toString` representation.\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const functionSchema = z.custom<Function>((val) => typeof val === \"function\");\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\nimport { relationTypesKeys } from \"./relation\";\nimport type { TailorDBFieldOutput } from \"@/types/tailordb\";\n\n/**\n * Normalize GqlOperationsConfig (alias or object) to GqlOperations object.\n * \"query\" alias expands to read-only mode: { create: false, update: false, delete: false, read: true }\n * @param config - The config to normalize\n * @returns The normalized GqlOperations object\n */\nfunction normalizeGqlOperations(\n config: \"query\" | { create?: boolean; update?: boolean; delete?: boolean; read?: boolean },\n) {\n if (config === \"query\") {\n return { create: false, update: false, delete: false, read: true };\n }\n return config;\n}\n\n/**\n * Zod schema for GqlOperations configuration with normalization transform.\n * Accepts \"query\" alias or detailed object, normalizes to GqlOperations object.\n */\nexport const GqlOperationsSchema = z\n .union([\n z.literal(\"query\"),\n z.object({\n create: z.boolean().optional().describe(\"Enable create mutation (default: true)\"),\n update: z.boolean().optional().describe(\"Enable update mutation (default: true)\"),\n delete: z.boolean().optional().describe(\"Enable delete mutation (default: true)\"),\n read: z\n .boolean()\n .optional()\n .describe(\"Enable read queries - get, list, aggregation (default: true)\"),\n }),\n ])\n .describe(\n \"Configuration for GraphQL operations on a TailorDB type.\\nAll operations are enabled by default (undefined or true = enabled, false = disabled).\",\n )\n .transform((val) => normalizeGqlOperations(val));\n\nconst TailorFieldTypeSchema = z.enum([\n \"uuid\",\n \"string\",\n \"boolean\",\n \"integer\",\n \"float\",\n \"decimal\",\n \"enum\",\n \"date\",\n \"datetime\",\n \"time\",\n \"nested\",\n]);\n\nconst AllowedValueSchema = z.object({\n value: z.string(),\n description: z.string().optional(),\n});\n\nexport const DBFieldMetadataSchema = z.object({\n required: z.boolean().optional().describe(\"Whether the field is required\"),\n array: z.boolean().optional().describe(\"Whether the field is an array\"),\n description: z.string().optional().describe(\"Field description\"),\n typeName: z.string().optional().describe(\"Type name for nested or enum fields\"),\n allowedValues: z.array(AllowedValueSchema).optional().describe(\"Allowed values for enum fields\"),\n index: z.boolean().optional().describe(\"Whether the field is indexed for faster queries\"),\n unique: z.boolean().optional().describe(\"Whether the field value must be unique\"),\n vector: z\n .boolean()\n .optional()\n .describe(\"Whether the field is a vector field for similarity search\"),\n foreignKey: z.boolean().optional().describe(\"Whether the field is a foreign key\"),\n foreignKeyType: z.string().optional().describe(\"Target type name for foreign key relations\"),\n foreignKeyField: z.string().optional().describe(\"Target field name for foreign key relations\"),\n hooks: z\n .object({\n create: functionSchema.optional().describe(\"Hook function called on record creation\"),\n update: functionSchema.optional().describe(\"Hook function called on record update\"),\n })\n .optional()\n .describe(\"Lifecycle hooks for the field\"),\n validate: z\n .array(z.union([functionSchema, z.tuple([functionSchema, z.string()])]))\n .optional()\n .describe(\"Validation functions for the field\"),\n serial: z\n .object({\n start: z.number().describe(\"Starting value for the serial sequence\"),\n maxValue: z.number().optional().describe(\"Maximum value for the serial sequence\"),\n format: z.string().optional().describe(\"Format string for serial value (string type only)\"),\n })\n .optional()\n .describe(\"Serial (auto-increment) configuration\"),\n scale: z\n .number()\n .int()\n .min(0)\n .max(12)\n .optional()\n .describe(\"Decimal scale (number of digits after decimal point, 0-12)\"),\n});\n\nconst RelationTypeSchema = z.enum(relationTypesKeys);\n\nexport const RawRelationConfigSchema = z.object({\n type: RelationTypeSchema.describe(\"Relation cardinality type\"),\n toward: z.object({\n type: z.string().describe(\"Target type name, or 'self' for self-relations\"),\n as: z.string().optional().describe(\"Custom forward relation name\"),\n key: z.string().optional().describe(\"Target field to join on (default: 'id')\"),\n }),\n backward: z.string().optional().describe(\"Backward relation name on the target type\"),\n});\n\nconst TailorDBFieldSchema: z.ZodType<TailorDBFieldOutput> = z.lazy(() =>\n z.object({\n type: TailorFieldTypeSchema,\n fields: z.record(z.string(), TailorDBFieldSchema).optional(),\n metadata: DBFieldMetadataSchema,\n rawRelation: RawRelationConfigSchema.optional(),\n }),\n);\n\n/**\n * Schema for TailorDB type settings.\n * Normalizes gqlOperations from alias (\"query\") to object format.\n */\nexport const TailorDBTypeSettingsSchema = z.object({\n pluralForm: z.string().optional().describe(\"Custom plural form of the type name for GraphQL\"),\n aggregation: z.boolean().optional().describe(\"Enable aggregation queries for this type\"),\n bulkUpsert: z.boolean().optional().describe(\"Enable bulk upsert mutation for this type\"),\n gqlOperations: GqlOperationsSchema.optional().describe(\n 'Configure GraphQL operations for this type. Use \"query\" for read-only mode, or an object for granular control.',\n ),\n publishEvents: z\n .boolean()\n .optional()\n .describe(\n \"Enable publishing events for this type.\\nWhen enabled, record creation/update/deletion events are published.\\nIf not specified, this is automatically set to true when an executor uses this type\\nwith recordCreated/recordUpdated/recordDeleted triggers. If explicitly set to false\\nwhile an executor uses this type, an error will be thrown during apply.\",\n ),\n});\n\nexport const GQL_PERMISSION_INVALID_OPERAND_MESSAGE =\n \"operand is not supported in gqlPermission. Use permission() for record-level conditions.\";\n\nconst GqlPermissionOperandSchema = z.union(\n [\n z.object({ user: z.string() }).strict(),\n z.string(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.boolean()),\n ],\n {\n error: (issue) => {\n if (typeof issue.input === \"object\" && issue.input !== null) {\n const keys = Object.keys(issue.input);\n if (keys.length === 1) {\n return `\"${keys[0]}\" ${GQL_PERMISSION_INVALID_OPERAND_MESSAGE}`;\n }\n return \"Operand object must have exactly 1 key\";\n }\n return \"Invalid operand in gqlPermission\";\n },\n },\n);\n\nconst RecordPermissionOperandSchema = z.union([\n GqlPermissionOperandSchema,\n z.object({ record: z.string() }),\n z.object({ oldRecord: z.string() }),\n z.object({ newRecord: z.string() }),\n]);\n\nconst PermissionOperatorSchema = z.enum([\"=\", \"!=\", \"in\", \"not in\", \"hasAny\", \"not hasAny\"]);\n\nconst RecordPermissionConditionSchema = z\n .tuple([RecordPermissionOperandSchema, PermissionOperatorSchema, RecordPermissionOperandSchema])\n .readonly();\n\nconst GqlPermissionConditionSchema = z\n .tuple([GqlPermissionOperandSchema, PermissionOperatorSchema, GqlPermissionOperandSchema])\n .readonly();\n\nconst ActionPermissionSchema = z.union([\n // Object format: { conditions, description?, permit? }\n z.object({\n conditions: z.union([\n RecordPermissionConditionSchema,\n z.array(RecordPermissionConditionSchema).readonly(),\n ]),\n description: z.string().optional(),\n permit: z.boolean().optional(),\n }),\n // Single condition tuple: [operand, operator, operand]\n z\n .tuple([RecordPermissionOperandSchema, PermissionOperatorSchema, RecordPermissionOperandSchema])\n .readonly(),\n // Single condition tuple with permit: [operand, operator, operand, permit]\n z\n .tuple([\n RecordPermissionOperandSchema,\n PermissionOperatorSchema,\n RecordPermissionOperandSchema,\n z.boolean(),\n ])\n .readonly(),\n // Multiple conditions with optional trailing permit\n z\n .array(z.union([RecordPermissionConditionSchema, z.boolean()]))\n .refine(\n (arr) => {\n const boolIndex = arr.findIndex((item) => typeof item === \"boolean\");\n return boolIndex === -1 || boolIndex === arr.length - 1;\n },\n { message: \"Boolean permit flag must only appear at the end\" },\n )\n .readonly(),\n]);\n\nconst GqlPermissionActionSchema = z.enum([\n \"read\",\n \"create\",\n \"update\",\n \"delete\",\n \"aggregate\",\n \"bulkUpsert\",\n]);\n\nconst GqlPermissionPolicySchema = z.object({\n conditions: z.array(GqlPermissionConditionSchema).readonly(),\n actions: z.union([z.literal(\"all\"), z.array(GqlPermissionActionSchema).readonly()]),\n permit: z.boolean().optional(),\n description: z.string().optional(),\n});\n\nexport const RawPermissionsSchema = z.object({\n record: z\n .object({\n create: z.array(ActionPermissionSchema).readonly(),\n read: z.array(ActionPermissionSchema).readonly(),\n update: z.array(ActionPermissionSchema).readonly(),\n delete: z.array(ActionPermissionSchema).readonly(),\n })\n .optional(),\n gql: z.array(GqlPermissionPolicySchema).readonly().optional(),\n});\n\nexport const TailorDBTypeSchema = z.object({\n name: z.string(),\n fields: z.record(z.string(), TailorDBFieldSchema),\n metadata: z.object({\n name: z.string(),\n description: z.string().optional(),\n settings: TailorDBTypeSettingsSchema.optional(),\n permissions: RawPermissionsSchema,\n files: z.record(z.string(), z.string()),\n indexes: z\n .record(\n z.string(),\n z.object({\n fields: z.array(z.string()),\n unique: z.boolean().optional(),\n }),\n )\n .optional(),\n }),\n});\n\nconst TailorDBMigrationConfigSchema = z.object({\n directory: z.string().describe(\"Directory containing migration files\"),\n machineUser: z.string().optional().describe(\"Machine user name for migration execution\"),\n});\n\n/**\n * Schema for TailorDB service configuration.\n * Normalizes gqlOperations from alias (\"query\") to object format.\n */\nexport const TailorDBServiceConfigSchema = z.object({\n files: z.array(z.string()).describe(\"Glob patterns for TailorDB type definition files\"),\n ignores: z.array(z.string()).optional().describe(\"Glob patterns to exclude from type discovery\"),\n erdSite: z.string().optional().describe(\"URL for the ERD (Entity Relationship Diagram) site\"),\n migration: TailorDBMigrationConfigSchema.optional().describe(\"Migration configuration\"),\n gqlOperations: GqlOperationsSchema.optional().describe(\n \"Default GraphQL operations for all types in this service\",\n ),\n});\n","import * as globals from \"globals\";\n\ntype GlobalsShape = {\n builtin?: Record<string, boolean>;\n \"shared-node-browser\"?: Record<string, boolean>;\n};\n\nconst globalsMap: GlobalsShape =\n (globals as unknown as { default?: GlobalsShape }).default ??\n (globals as unknown as GlobalsShape);\n\n/**\n * Runtime globals available in the PF execution environment.\n * Identifiers in this set are excluded from free variable detection\n * since they are always available in the runtime environment.\n *\n * Combines globals.builtin (ECMAScript language builtins) and\n * globals['shared-node-browser'] (shared runtime globals like\n * console, fetch, setTimeout, etc.) from the `globals` npm package.\n */\nexport const ES_BUILTINS = new Set([\n ...Object.keys(globalsMap.builtin ?? {}),\n ...Object.keys(globalsMap[\"shared-node-browser\"] ?? {}),\n]);\n","import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { parseSync } from \"oxc-parser\";\nimport { join, resolve } from \"pathe\";\nimport * as rolldown from \"rolldown\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { stringifyFunction, tailorUserMap } from \"@/parser/service/tailordb/field\";\nimport { setPrecompiledScriptExpr } from \"@/parser/service/tailordb/hooks-validate-precompiled-expr\";\nimport { ES_BUILTINS } from \"./es-builtins\";\nimport type { TailorDBTypeRaw as TailorDBTypeSchemaOutput } from \"@/types/tailordb.generated\";\nimport type {\n BindingPattern,\n ExportNamedDeclaration,\n Function as OxcFunction,\n ImportDeclaration,\n Node,\n ParamPattern,\n VariableDeclaration,\n} from \"@oxc-project/types\";\n\ntype ScriptFunction = (...args: unknown[]) => unknown;\n\ntype ScriptTarget = {\n fn: ScriptFunction;\n kind: \"hooks\" | \"validate\";\n};\n\n/** Binding found in the source file: either an import or a top-level declaration */\nexport type SourceBinding = {\n name: string;\n /** The original source text of the import/declaration statement */\n sourceText: string;\n kind: \"import\" | \"declaration\";\n};\n\n/**\n * Recursively extract binding names from a destructuring pattern node.\n * @param pattern - The binding pattern AST node.\n * @param bindings - Set to collect binding names into.\n */\nfunction collectBindingsFromPattern(pattern: BindingPattern, bindings: Set<string>): void {\n switch (pattern.type) {\n case \"Identifier\":\n bindings.add(pattern.name);\n break;\n case \"ObjectPattern\":\n for (const prop of pattern.properties) {\n if (prop.type === \"RestElement\") {\n collectBindingsFromPattern(prop.argument, bindings);\n } else {\n collectBindingsFromPattern(prop.value, bindings);\n }\n }\n break;\n case \"ArrayPattern\":\n for (const elem of pattern.elements) {\n if (elem) {\n if (elem.type === \"RestElement\") {\n collectBindingsFromPattern(elem.argument, bindings);\n } else {\n collectBindingsFromPattern(elem, bindings);\n }\n }\n }\n break;\n case \"AssignmentPattern\":\n collectBindingsFromPattern(pattern.left, bindings);\n break;\n }\n}\n\n/** Fields that contain TypeScript type annotations (not runtime references). */\nconst TS_TYPE_FIELDS = new Set([\n \"typeAnnotation\",\n \"typeParameters\",\n \"returnType\",\n \"superTypeArguments\",\n \"typeArguments\",\n]);\n\nfunction isBindingPattern(param: ParamPattern): param is BindingPattern {\n return param.type !== \"TSParameterProperty\";\n}\n\nfunction toScriptFunction(value: unknown): ScriptFunction | undefined {\n if (typeof value !== \"function\") return undefined;\n return value as unknown as ScriptFunction;\n}\n\nfunction collectScriptTargets(type: TailorDBTypeSchemaOutput): ScriptTarget[] {\n const targets: ScriptTarget[] = [];\n\n const collectFieldTargets = (field: TailorDBTypeSchemaOutput[\"fields\"][string]) => {\n const metadata = field.metadata;\n\n const createHook = toScriptFunction(metadata.hooks?.create);\n if (createHook) {\n targets.push({ fn: createHook, kind: \"hooks\" });\n }\n const updateHook = toScriptFunction(metadata.hooks?.update);\n if (updateHook) {\n targets.push({ fn: updateHook, kind: \"hooks\" });\n }\n\n for (const validateInput of metadata.validate ?? []) {\n if (typeof validateInput === \"function\") {\n const validateFn = toScriptFunction(validateInput);\n if (validateFn) targets.push({ fn: validateFn, kind: \"validate\" });\n } else {\n const validateFn = toScriptFunction(validateInput[0]);\n if (validateFn) targets.push({ fn: validateFn, kind: \"validate\" });\n }\n }\n\n if (field.type === \"nested\" && field.fields) {\n for (const nestedField of Object.values(field.fields as TailorDBTypeSchemaOutput[\"fields\"])) {\n collectFieldTargets(nestedField);\n }\n }\n };\n\n for (const field of Object.values(type.fields)) {\n collectFieldTargets(field);\n }\n\n return targets;\n}\n\n/**\n * Parse a code string with oxc-parser and return identifiers that are referenced\n * but never bound anywhere in the snippet (free variables), excluding ES builtins.\n * @param code - Valid JavaScript code to analyze.\n * @returns Set of undefined variable names.\n */\nexport function findUndefinedReferences(code: string): Set<string> {\n const { program } = parseSync(\"_.js\", code);\n const references = new Set<string>();\n const bindings = new Set<string>();\n\n const walk = (node: Node | null | undefined): void => {\n if (!node) return;\n\n switch (node.type) {\n case \"VariableDeclarator\":\n collectBindingsFromPattern(node.id, bindings);\n walk(node.init);\n return;\n\n case \"FunctionDeclaration\":\n case \"FunctionExpression\":\n if (node.id) bindings.add(node.id.name);\n for (const param of node.params) {\n if (isBindingPattern(param)) {\n collectBindingsFromPattern(param, bindings);\n walk(param);\n }\n }\n walk(node.body);\n return;\n\n case \"ArrowFunctionExpression\":\n for (const param of node.params) {\n if (isBindingPattern(param)) {\n collectBindingsFromPattern(param, bindings);\n walk(param);\n }\n }\n walk(node.body);\n return;\n\n case \"ClassDeclaration\":\n case \"ClassExpression\":\n if (node.id) bindings.add(node.id.name);\n walk(node.superClass);\n walk(node.body);\n return;\n\n case \"CatchClause\":\n if (node.param) collectBindingsFromPattern(node.param, bindings);\n walk(node.body);\n return;\n\n case \"MemberExpression\":\n walk(node.object);\n if (node.computed) walk(node.property);\n return;\n\n case \"Property\":\n if (node.computed) walk(node.key);\n walk(node.value);\n return;\n\n case \"LabeledStatement\":\n walk(node.body);\n return;\n\n case \"Identifier\":\n references.add(node.name);\n return;\n }\n\n // Generic child walk for all other node types, skipping TS type-annotation fields\n const rec = node as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(rec)) {\n if (key === \"type\" || TS_TYPE_FIELDS.has(key)) continue;\n if (Array.isArray(value)) {\n for (const item of value) walk(item as Node);\n } else if (value && typeof value === \"object\" && \"type\" in value) {\n walk(value as Node);\n }\n }\n };\n\n walk(program);\n\n // Free variables = references - bindings - builtins\n const freeVars = new Set<string>();\n for (const ref of references) {\n if (!bindings.has(ref) && !ES_BUILTINS.has(ref)) {\n freeVars.add(ref);\n }\n }\n return freeVars;\n}\n\n/**\n * Collect all Identifier names from a TypeScript/JavaScript code string using oxc-parser.\n * @param code - Code string to analyze.\n * @returns Set of identifier names found in the code.\n */\nfunction collectIdentifierNames(code: string): Set<string> {\n const { program } = parseSync(\"_.ts\", code);\n const names = new Set<string>();\n const walk = (node: unknown): void => {\n if (!node || typeof node !== \"object\") return;\n const record = node as Record<string, unknown>;\n if (record.type === \"Identifier\" && typeof record.name === \"string\") {\n names.add(record.name);\n }\n for (const [key, value] of Object.entries(record)) {\n // Skip non-computed MemberExpression property (e.g. `length` in `value.length`)\n // but keep computed properties (e.g. `foo` in `obj[foo]`) as they are real references\n if (key === \"property\" && record.type === \"MemberExpression\" && !record.computed) continue;\n // Skip non-computed Property keys (e.g. `format` in `{ format: \"x\" }` is not a reference)\n if (key === \"key\" && record.type === \"Property\" && !record.computed) continue;\n // Skip TypeScript type annotation fields (not runtime references)\n if (TS_TYPE_FIELDS.has(key)) continue;\n if (Array.isArray(value)) {\n for (const item of value) walk(item);\n } else if (value && typeof value === \"object\" && \"type\" in value) {\n walk(value);\n }\n }\n };\n walk(program);\n return names;\n}\n\n/**\n * Collect top-level bindings (imports and declarations) from a TypeScript source file.\n * @param sourceFilePath - Absolute path to the source file.\n * @returns Map of binding name to SourceBinding.\n */\nexport function collectSourceBindings(sourceFilePath: string): Map<string, SourceBinding> {\n const source = readFileSync(sourceFilePath, \"utf-8\");\n const { program } = parseSync(sourceFilePath, source);\n const bindings = new Map<string, SourceBinding>();\n\n for (const stmt of program.body) {\n if (stmt.type === \"ImportDeclaration\") {\n const importDecl = stmt as ImportDeclaration;\n const text = source.slice(importDecl.start, importDecl.end);\n if (importDecl.specifiers) {\n for (const spec of importDecl.specifiers) {\n bindings.set(spec.local.name, {\n name: spec.local.name,\n sourceText: text,\n kind: \"import\",\n });\n }\n }\n } else if (stmt.type === \"VariableDeclaration\") {\n const varDecl = stmt as VariableDeclaration;\n const text = source.slice(varDecl.start, varDecl.end);\n for (const decl of varDecl.declarations) {\n if (decl.id.type === \"Identifier\") {\n bindings.set(decl.id.name, { name: decl.id.name, sourceText: text, kind: \"declaration\" });\n }\n }\n } else if (stmt.type === \"FunctionDeclaration\") {\n const funcDecl = stmt as OxcFunction;\n if (funcDecl.id) {\n const text = source.slice(funcDecl.start, funcDecl.end);\n bindings.set(funcDecl.id.name, {\n name: funcDecl.id.name,\n sourceText: text,\n kind: \"declaration\",\n });\n }\n } else if (stmt.type === \"ExportNamedDeclaration\") {\n const exportDecl = stmt as ExportNamedDeclaration;\n const innerDecl = exportDecl.declaration;\n if (!innerDecl) continue;\n\n if (innerDecl.type === \"VariableDeclaration\") {\n const varDecl = innerDecl as VariableDeclaration;\n // Slice only the inner declaration (without export keyword) so it is valid standalone\n const text = source.slice(varDecl.start, varDecl.end);\n for (const decl of varDecl.declarations) {\n if (decl.id.type === \"Identifier\") {\n bindings.set(decl.id.name, {\n name: decl.id.name,\n sourceText: text,\n kind: \"declaration\",\n });\n }\n }\n } else if (innerDecl.type === \"FunctionDeclaration\") {\n const funcDecl = innerDecl as OxcFunction;\n if (funcDecl.id) {\n const text = source.slice(funcDecl.start, funcDecl.end);\n bindings.set(funcDecl.id.name, {\n name: funcDecl.id.name,\n sourceText: text,\n kind: \"declaration\",\n });\n }\n }\n }\n }\n\n return bindings;\n}\n\n/**\n * Resolve all bindings needed by a function, recursively including\n * dependencies of top-level declarations.\n * @param freeVars - Set of free variable names extracted from the function.\n * @param sourceBindings - Available bindings from the source file.\n * @returns Object with needed import statements and declaration texts.\n */\nexport function resolveNeededBindings(\n freeVars: Set<string>,\n sourceBindings: Map<string, SourceBinding>,\n): { imports: string[]; declarations: string[]; unresolved: string[] } {\n const neededImports = new Set<string>();\n const neededDeclarations = new Set<string>();\n const unresolved: string[] = [];\n const resolved = new Set<string>();\n\n const resolveVars = (vars: Set<string>): void => {\n for (const varName of vars) {\n if (resolved.has(varName)) continue;\n resolved.add(varName);\n\n const binding = sourceBindings.get(varName);\n if (!binding) {\n unresolved.push(varName);\n continue;\n }\n\n if (binding.kind === \"import\") {\n neededImports.add(binding.sourceText);\n } else {\n // Parse the declaration with oxc-parser (handles TypeScript) and collect\n // all Identifier names, then resolve those that match other source bindings.\n const identifiers = collectIdentifierNames(binding.sourceText);\n const referencedVars = new Set<string>();\n for (const id of identifiers) {\n if (id !== varName && sourceBindings.has(id)) {\n referencedVars.add(id);\n }\n }\n resolveVars(referencedVars);\n neededDeclarations.add(binding.sourceText);\n }\n }\n };\n\n resolveVars(freeVars);\n\n return {\n imports: [...neededImports],\n declarations: [...neededDeclarations],\n unresolved,\n };\n}\n\nfunction buildPrecompiledExpr(bundleCode: string): string {\n return (\n \"(() => {\\n\" +\n \" const module = { exports: {} };\\n\" +\n \" const exports = module.exports;\\n\" +\n `${bundleCode}\\n` +\n ` return module.exports.main({ value: _value, data: _data, user: ${tailorUserMap} });\\n` +\n \"})()\"\n );\n}\n\n/**\n * Build entry file content from already-resolved imports and declarations.\n * @param imports - Import statement texts.\n * @param declarations - Declaration statement texts.\n * @param fnSource - The function source code.\n * @param sourceFilePath - Path to the source file for resolving relative imports.\n * @returns Entry file content string.\n */\nexport function buildMinimalEntryFromResolved(\n imports: string[],\n declarations: string[],\n fnSource: string,\n sourceFilePath: string,\n): string {\n const sourceDir = resolve(sourceFilePath, \"..\").replace(/\\\\/g, \"/\");\n\n // Rewrite relative import paths to absolute paths so rolldown can resolve them\n const resolvedImports = imports.map((imp) =>\n imp.replace(\n /from\\s+[\"'](\\.[^\"']+)[\"']/g,\n (_match, relPath: string) => `from \"${resolve(sourceDir, relPath).replace(/\\\\/g, \"/\")}\"`,\n ),\n );\n\n const lines = [\n ...resolvedImports,\n ...declarations,\n `export function main(input) { return (${fnSource})(input); }`,\n ];\n return lines.join(\"\\n\");\n}\n\nasync function bundleScriptTarget(args: {\n fn: ScriptFunction;\n kind: \"hooks\" | \"validate\";\n sourceFilePath: string;\n sourceBindings: Map<string, SourceBinding>;\n tempDir: string;\n targetIndex: number;\n tsconfig: string | undefined;\n}): Promise<string> {\n const { fn, kind, sourceFilePath, sourceBindings, tempDir, targetIndex, tsconfig } = args;\n const fnSource = stringifyFunction(fn);\n const inlineExpr = `(${fnSource})({ value: _value, data: _data, user: ${tailorUserMap} })`;\n\n // Check if the function has free variables that need bundling\n const freeVars = findUndefinedReferences(`const __fn = ${fnSource};`);\n if (freeVars.size === 0) {\n // No external dependencies - use inline expression without bundling\n return inlineExpr;\n }\n\n const { imports, declarations, unresolved } = resolveNeededBindings(freeVars, sourceBindings);\n if (unresolved.length > 0) {\n throw new Error(\n `${kind} in ${sourceFilePath} captures unresolvable variables (${unresolved.join(\", \")}). ` +\n \"Hooks and validators must not reference variables that cannot be resolved from the source file.\\n\" +\n ` ${kind}: ${fnSource}`,\n );\n }\n\n const entryContent = buildMinimalEntryFromResolved(\n imports,\n declarations,\n fnSource,\n sourceFilePath,\n );\n const entryPath = join(tempDir, `tailordb-script-${targetIndex}.entry.ts`);\n const outputPath = join(tempDir, `tailordb-script-${targetIndex}.bundle.cjs`);\n\n writeFileSync(entryPath, entryContent);\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"cjs\",\n sourcemap: false,\n minify: true,\n codeSplitting: false,\n },\n tsconfig,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n\n const bundledCode = readFileSync(outputPath, \"utf-8\");\n return buildPrecompiledExpr(bundledCode);\n}\n\n/**\n * Precompile TailorDB hooks/validators into self-contained script expressions using rolldown.\n * Uses oxc-parser AST walking to extract free variables from functions, then builds\n * minimal entry points containing only the needed imports and declarations.\n * @param type - TailorDB type schema output.\n * @param sourceFilePath - Source file where the type is defined.\n * @param tsconfig - Resolved tsconfig path, or undefined if not found.\n */\nexport async function precompileTailorDBTypeScripts(\n type: TailorDBTypeSchemaOutput,\n sourceFilePath: string,\n tsconfig: string | undefined,\n): Promise<void> {\n const targets = collectScriptTargets(type);\n if (targets.length === 0) return;\n\n // Collect source bindings once for all targets in this file\n const sourceBindings = collectSourceBindings(sourceFilePath);\n\n // Use type name in temp dir to avoid race conditions when multiple type files\n // are precompiled concurrently via Promise.all in service.ts\n const tempDir = resolve(getDistDir(), \"hooks-validate-scripts\", type.name);\n mkdirSync(tempDir, { recursive: true });\n\n try {\n const results = await Promise.allSettled(\n targets.map((target, index) =>\n bundleScriptTarget({\n fn: target.fn,\n kind: target.kind,\n sourceFilePath,\n sourceBindings,\n tempDir,\n targetIndex: index,\n tsconfig,\n }),\n ),\n );\n const firstError = results.find((r) => r.status === \"rejected\");\n if (firstError && firstError.status === \"rejected\") {\n throw firstError.reason;\n }\n for (const [index, result] of results.entries()) {\n if (result.status === \"fulfilled\") {\n setPrecompiledScriptExpr(targets[index].fn, result.value);\n }\n }\n } finally {\n rmSync(tempDir, { recursive: true, force: true });\n }\n}\n","import { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport { loadFilesWithIgnores } from \"@/cli/services/file-loader\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { parseTypes, TailorDBTypeSchema } from \"@/parser/service/tailordb\";\nimport { isSdkBranded } from \"@/utils/brand\";\nimport { precompileTailorDBTypeScripts } from \"./hooks-validate-bundler\";\nimport type { PluginManager } from \"@/plugin/manager\";\nimport type { PluginAttachment } from \"@/types/plugin\";\nimport type { TypeSourceInfo, TailorAnyDBType, TailorDBType } from \"@/types/tailordb\";\nimport type {\n TailorDBServiceConfig,\n TailorDBTypeRaw as TailorDBTypeSchemaOutput,\n} from \"@/types/tailordb.generated\";\n\nexport type TailorDBService = {\n readonly namespace: string;\n readonly config: TailorDBServiceConfig;\n readonly types: Readonly<Record<string, TailorDBType>>;\n readonly typeSourceInfo: Readonly<TypeSourceInfo>;\n readonly pluginAttachments: ReadonlyMap<string, readonly PluginAttachment[]>;\n loadTypes: () => Promise<Record<string, TailorDBType> | undefined>;\n processNamespacePlugins: () => Promise<void>;\n};\n\n/**\n * Parameters for creating a TailorDBService\n */\nexport interface CreateTailorDBServiceParams {\n /** The namespace for this TailorDB service */\n namespace: string;\n /** The TailorDB service configuration */\n config: TailorDBServiceConfig;\n /** Plugin manager for processing plugins */\n pluginManager?: PluginManager;\n}\n\n/**\n * Creates a new TailorDBService instance.\n * @param params - Parameters for creating the service\n * @returns A new TailorDBService instance\n */\nexport function createTailorDBService(params: CreateTailorDBServiceParams): TailorDBService {\n const { namespace, config, pluginManager } = params;\n type TailorDBTypesByName = Record<string, TailorDBTypeSchemaOutput>;\n const rawTypes: Record<string, TailorDBTypesByName> = {};\n let types: Record<string, TailorDBType> = {};\n const typeSourceInfo: TypeSourceInfo = {};\n const pluginAttachments: Map<string, PluginAttachment[]> = new Map();\n let loadPromise: Promise<Record<string, TailorDBType> | undefined> | undefined;\n\n const doParseTypes = (): void => {\n const allTypes: TailorDBTypesByName = {};\n for (const fileTypes of Object.values(rawTypes)) {\n for (const [typeName, type] of Object.entries(fileTypes)) {\n allTypes[typeName] = type;\n }\n }\n\n types = parseTypes(allTypes, namespace, typeSourceInfo);\n };\n\n /**\n * Process plugins for a type and add generated types to rawTypes\n * @param rawType - The raw TailorDB type being processed\n * @param attachments - Plugin attachments for this type\n * @param sourceFilePath - The file path where the type was loaded from\n */\n const processPluginsForType = async (\n rawType: TailorAnyDBType,\n attachments: PluginAttachment[],\n sourceFilePath: string,\n ): Promise<void> => {\n if (!pluginManager) return;\n\n let currentType: TailorAnyDBType = rawType;\n\n for (const attachment of attachments) {\n const result = await pluginManager.processAttachment({\n type: currentType,\n typeConfig: attachment.config,\n namespace,\n pluginId: attachment.pluginId,\n });\n\n if (!result.success) {\n logger.error(result.error);\n throw new Error(result.error);\n }\n\n const output = result.output;\n\n // Extend the original type with new fields (if any)\n const extendFields = output.extends?.fields;\n if (extendFields && Object.keys(extendFields).length > 0) {\n const extendedType = pluginManager.extendType({\n originalType: currentType,\n extendFields,\n pluginId: attachment.pluginId,\n });\n rawTypes[sourceFilePath][currentType.name] = extendedType as TailorDBTypeSchemaOutput;\n currentType = extendedType;\n logger.log(\n ` Extended: ${styles.success(currentType.name)} with ${styles.highlight(Object.keys(extendFields).length.toString())} fields by plugin ${styles.info(attachment.pluginId)}`,\n );\n }\n\n // Add generated types to rawTypes\n const plugin = pluginManager.getPlugin(attachment.pluginId);\n for (const [kind, generatedType] of Object.entries(output.types ?? {})) {\n rawTypes[sourceFilePath][generatedType.name] = generatedType as TailorDBTypeSchemaOutput;\n // Plugin-generated types don't have a source file.\n // Generators that need to import these types should generate their own type files.\n typeSourceInfo[generatedType.name] = {\n exportName: generatedType.name,\n pluginId: attachment.pluginId,\n pluginImportPath: pluginManager.getPluginImportPath(attachment.pluginId) ?? \"\",\n originalFilePath: sourceFilePath,\n originalExportName: typeSourceInfo[rawType.name]?.exportName || rawType.name,\n generatedTypeKind: kind,\n pluginConfig: plugin?.pluginConfig,\n namespace,\n };\n\n logger.log(\n ` Generated: ${styles.success(generatedType.name)} by plugin ${styles.info(attachment.pluginId)}`,\n );\n }\n }\n };\n\n const loadTypeFile = async (\n typeFile: string,\n tsconfig: string | undefined,\n ): Promise<TailorDBTypesByName> => {\n rawTypes[typeFile] = {};\n const loadedTypes: TailorDBTypesByName = {};\n try {\n const module = await import(pathToFileURL(typeFile).href);\n\n for (const exportName of Object.keys(module)) {\n const exportedValue = module[exportName];\n\n const result = TailorDBTypeSchema.safeParse(exportedValue);\n if (!result.success) {\n if (isSdkBranded(exportedValue, \"tailordb-type\")) {\n throw result.error;\n }\n continue;\n }\n\n const relativePath = path.relative(process.cwd(), typeFile);\n logger.log(\n `Type: ${styles.successBright(`\"${result.data.name}\"`)} loaded from ${styles.path(relativePath)}`,\n );\n await precompileTailorDBTypeScripts(result.data, typeFile, tsconfig);\n rawTypes[typeFile][result.data.name] = result.data;\n loadedTypes[result.data.name] = result.data;\n // Store source info mapping\n typeSourceInfo[result.data.name] = {\n filePath: typeFile,\n exportName,\n };\n\n // Process plugins if any\n if (\n exportedValue.plugins &&\n Array.isArray(exportedValue.plugins) &&\n exportedValue.plugins.length > 0\n ) {\n pluginAttachments.set(exportedValue.name, [...exportedValue.plugins]);\n logger.log(\n ` Plugin attachments: ${styles.info(exportedValue.plugins.map((p: PluginAttachment) => p.pluginId).join(\", \"))}`,\n );\n\n await processPluginsForType(exportedValue, exportedValue.plugins, typeFile);\n }\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), typeFile);\n logger.error(`Failed to load type from ${styles.bold(relativePath)}`);\n logger.error(String(error));\n throw error;\n }\n return loadedTypes;\n };\n\n return {\n namespace,\n config,\n get types() {\n return types;\n },\n get typeSourceInfo() {\n return typeSourceInfo;\n },\n get pluginAttachments() {\n return pluginAttachments as ReadonlyMap<string, readonly PluginAttachment[]>;\n },\n loadTypes: async () => {\n if (!loadPromise) {\n loadPromise = (async () => {\n if (!config.files || config.files.length === 0) {\n return undefined;\n }\n\n const typeFiles = loadFilesWithIgnores(config);\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n logger.newline();\n logger.log(\n `Found ${styles.highlight(typeFiles.length.toString())} type files for TailorDB service ${styles.highlight(`\"${namespace}\"`)}`,\n );\n\n if (pluginManager) {\n for (const typeFile of typeFiles) {\n await loadTypeFile(typeFile, tsconfig);\n }\n } else {\n await Promise.all(typeFiles.map((typeFile) => loadTypeFile(typeFile, tsconfig)));\n }\n doParseTypes();\n return types;\n })();\n }\n return loadPromise;\n },\n processNamespacePlugins: async () => {\n if (!pluginManager) return;\n\n const results = await pluginManager.processNamespacePlugins(namespace);\n const pluginGeneratedKey = \"__plugin_generated__\";\n\n if (!rawTypes[pluginGeneratedKey]) {\n rawTypes[pluginGeneratedKey] = {};\n }\n\n let hasGeneratedTypes = false;\n for (const { pluginId, config, result } of results) {\n if (!result.success) {\n logger.error(result.error);\n throw new Error(result.error);\n }\n\n const output = result.output;\n\n // Add generated types to rawTypes\n for (const [kind, generatedType] of Object.entries(output.types ?? {})) {\n rawTypes[pluginGeneratedKey][generatedType.name] =\n generatedType as TailorDBTypeSchemaOutput;\n hasGeneratedTypes = true;\n typeSourceInfo[generatedType.name] = {\n exportName: generatedType.name,\n pluginId,\n pluginImportPath: pluginManager.getPluginImportPath(pluginId) ?? \"\",\n originalFilePath: \"\",\n originalExportName: \"\",\n generatedTypeKind: kind,\n pluginConfig: config,\n namespace,\n };\n\n logger.log(\n ` Generated: ${styles.success(generatedType.name)} by namespace plugin ${styles.info(pluginId)}`,\n );\n }\n }\n\n // Re-parse types to include namespace plugin types\n if (hasGeneratedTypes) {\n doParseTypes();\n }\n },\n };\n}\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\n\nconst TailorFieldTypeSchema = z.enum([\n \"uuid\",\n \"string\",\n \"boolean\",\n \"integer\",\n \"float\",\n \"decimal\",\n \"enum\",\n \"date\",\n \"datetime\",\n \"time\",\n \"nested\",\n]);\n\nexport const QueryTypeSchema = z\n .union([z.literal(\"query\"), z.literal(\"mutation\")])\n .describe(\"GraphQL operation type\");\n\nconst AllowedValueSchema = z.object({\n value: z.string().describe(\"The allowed value\"),\n description: z.string().optional().describe(\"Description of the allowed value\"),\n});\n\nconst FieldMetadataSchema = z.object({\n required: z.boolean().optional().describe(\"Whether the field is required\"),\n array: z.boolean().optional().describe(\"Whether the field is an array\"),\n description: z.string().optional().describe(\"Field description\"),\n allowedValues: z.array(AllowedValueSchema).optional().describe(\"Allowed values for enum fields\"),\n hooks: z\n .object({\n create: functionSchema.optional().describe(\"Hook function called on creation\"),\n update: functionSchema.optional().describe(\"Hook function called on update\"),\n })\n .optional()\n .describe(\"Lifecycle hooks\"),\n typeName: z.string().optional().describe(\"Type name for nested or enum fields\"),\n});\n\nexport const TailorFieldSchema = z.object({\n type: TailorFieldTypeSchema.describe(\"Field data type\"),\n metadata: FieldMetadataSchema.describe(\"Field metadata configuration\"),\n get fields() {\n return z.record(z.string(), TailorFieldSchema);\n },\n});\n\nexport const ResolverSchema = z.object({\n operation: QueryTypeSchema.describe(\"GraphQL operation type (query or mutation)\"),\n name: z.string().describe(\"Resolver name\"),\n description: z.string().optional().describe(\"Resolver description\"),\n input: z.record(z.string(), TailorFieldSchema).optional().describe(\"Input field definitions\"),\n body: functionSchema.describe(\"Resolver implementation function\"),\n output: TailorFieldSchema.describe(\"Output field definition\"),\n publishEvents: z.boolean().optional().describe(\"Enable publishing events from this resolver\"),\n});\n","import { z } from \"zod\";\nimport { TailorFieldSchema } from \"@/parser/service/resolver/schema\";\nimport type { ValueOperand } from \"@/types/auth\";\n\nexport const AuthInvokerSchema = z.object({\n namespace: z.string().describe(\"Auth namespace\"),\n machineUserName: z.string().describe(\"Machine user name for authentication\"),\n});\n\nconst secretValueSchema = z.object({\n vaultName: z.string().describe(\"Vault name containing the secret\"),\n secretKey: z.string().describe(\"Key of the secret in the vault\"),\n});\n\nexport const OIDCSchema = z.object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"OIDC\"),\n clientID: z.string().describe(\"OAuth2 client ID\"),\n clientSecret: secretValueSchema.describe(\"OAuth2 client secret\"),\n providerURL: z.string().describe(\"OIDC provider URL\"),\n issuerURL: z.string().optional().describe(\"OIDC issuer URL (defaults to providerURL)\"),\n usernameClaim: z.string().optional().describe(\"JWT claim to use as username\"),\n});\n\nexport const SAMLSchema = z\n .object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"SAML\"),\n enableSignRequest: z.boolean().default(false).describe(\"Enable signing of SAML requests\"),\n metadataURL: z\n .string()\n .optional()\n .describe(\"URL to fetch SAML metadata (mutually exclusive with rawMetadata)\"),\n rawMetadata: z\n .string()\n .optional()\n .describe(\"Raw SAML metadata XML (mutually exclusive with metadataURL)\"),\n })\n .refine((value) => {\n const hasMetadata = value.metadataURL !== undefined;\n const hasRaw = value.rawMetadata !== undefined;\n return hasMetadata !== hasRaw;\n }, \"Provide either metadataURL or rawMetadata\");\n\nexport const IDTokenSchema = z.object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"IDToken\"),\n providerURL: z.string().describe(\"ID token provider URL\"),\n issuerURL: z.string().optional().describe(\"ID token issuer URL\"),\n clientID: z.string().describe(\"Client ID for ID token validation\"),\n usernameClaim: z.string().optional().describe(\"JWT claim to use as username\"),\n});\n\nexport const BuiltinIdPSchema = z.object({\n name: z.string().describe(\"Identity provider name\"),\n kind: z.literal(\"BuiltInIdP\"),\n namespace: z.string().describe(\"IdP namespace\"),\n clientName: z.string().describe(\"OAuth2 client name in the IdP\"),\n});\n\nexport const IdProviderSchema = z.discriminatedUnion(\"kind\", [\n OIDCSchema,\n SAMLSchema,\n IDTokenSchema,\n BuiltinIdPSchema,\n]);\n\nexport const OAuth2ClientGrantTypeSchema = z\n .union([z.literal(\"authorization_code\"), z.literal(\"refresh_token\")])\n .describe(\"OAuth2 grant type\");\n\nexport const OAuth2ClientSchema = z\n .object({\n description: z.string().optional().describe(\"Client description\"),\n grantTypes: z\n .array(OAuth2ClientGrantTypeSchema)\n .default([\"authorization_code\", \"refresh_token\"])\n .describe(\"Allowed OAuth2 grant types\"),\n redirectURIs: z\n .array(\n z.union([\n z.templateLiteral([\"https://\", z.string()]),\n z.templateLiteral([\"http://\", z.string()]),\n z.templateLiteral([z.string(), \":url\"]),\n z.templateLiteral([z.string(), \":url/\", z.string()]),\n ]),\n )\n .describe(\"Allowed redirect URIs\"),\n clientType: z\n .union([z.literal(\"confidential\"), z.literal(\"public\"), z.literal(\"browser\")])\n .optional()\n .describe(\"OAuth2 client type\"),\n accessTokenLifetimeSeconds: z\n .number()\n .int()\n .min(60, \"Minimum access token lifetime is 60 seconds\")\n .max(86400, \"Maximum access token lifetime is 1 day (86400 seconds)\")\n .optional()\n .describe(\"Access token lifetime in seconds (60-86400)\")\n .transform((val) => (val ? { seconds: BigInt(val), nanos: 0 } : undefined)),\n refreshTokenLifetimeSeconds: z\n .number()\n .int()\n .min(60, \"Minimum refresh token lifetime is 60 seconds\")\n .max(604800, \"Maximum refresh token lifetime is 7 days (604800 seconds)\")\n .optional()\n .describe(\"Refresh token lifetime in seconds (60-604800)\")\n .transform((val) => (val ? { seconds: BigInt(val), nanos: 0 } : undefined)),\n requireDpop: z\n .boolean()\n .optional()\n .describe(\"Require DPoP (Demonstrating Proof-of-Possession) for token requests\"),\n })\n .refine((data) => !(data.clientType === \"browser\" && data.requireDpop === true), {\n message: \"requireDpop cannot be set to true for browser clients as they don't support DPoP\",\n path: [\"requireDpop\"],\n });\n\nexport const SCIMAuthorizationSchema = z.object({\n type: z.union([z.literal(\"oauth2\"), z.literal(\"bearer\")]).describe(\"SCIM authorization type\"),\n bearerSecret: secretValueSchema\n .optional()\n .describe(\"Bearer token secret (required for bearer type)\"),\n});\n\nexport const SCIMAttributeTypeSchema = z\n .union([\n z.literal(\"string\"),\n z.literal(\"number\"),\n z.literal(\"boolean\"),\n z.literal(\"datetime\"),\n z.literal(\"complex\"),\n ])\n .describe(\"SCIM attribute data type\");\n\nexport const SCIMAttributeSchema = z.object({\n type: SCIMAttributeTypeSchema.describe(\"Attribute data type\"),\n name: z.string().describe(\"Attribute name\"),\n description: z.string().optional().describe(\"Attribute description\"),\n mutability: z\n .union([z.literal(\"readOnly\"), z.literal(\"readWrite\"), z.literal(\"writeOnly\")])\n .optional()\n .describe(\"Attribute mutability\"),\n required: z.boolean().optional().describe(\"Whether the attribute is required\"),\n multiValued: z.boolean().optional().describe(\"Whether the attribute can have multiple values\"),\n uniqueness: z\n .union([z.literal(\"none\"), z.literal(\"server\"), z.literal(\"global\")])\n .optional()\n .describe(\"Uniqueness constraint\"),\n canonicalValues: z.array(z.string()).nullable().optional().describe(\"List of canonical values\"),\n get subAttributes() {\n return z.array(SCIMAttributeSchema).nullable().optional();\n },\n});\n\nconst SCIMSchemaSchema = z.object({\n name: z.string().describe(\"SCIM schema name\"),\n attributes: z.array(SCIMAttributeSchema).describe(\"Schema attributes\"),\n});\n\nexport const SCIMAttributeMappingSchema = z.object({\n tailorDBField: z.string().describe(\"TailorDB field name to map to\"),\n scimPath: z.string().describe(\"SCIM attribute path\"),\n});\n\nexport const SCIMResourceSchema = z.object({\n name: z.string().describe(\"SCIM resource name\"),\n tailorDBNamespace: z.string().describe(\"TailorDB namespace for the resource\"),\n tailorDBType: z.string().describe(\"TailorDB type name for the resource\"),\n coreSchema: SCIMSchemaSchema.describe(\"Core SCIM schema definition\"),\n attributeMapping: z.array(SCIMAttributeMappingSchema).describe(\"Attribute mapping configuration\"),\n});\n\nexport const SCIMSchema = z.object({\n machineUserName: z.string().describe(\"Machine user name for SCIM operations\"),\n authorization: SCIMAuthorizationSchema.describe(\"SCIM authorization configuration\"),\n resources: z.array(SCIMResourceSchema).describe(\"SCIM resource definitions\"),\n});\n\nexport const TenantProviderSchema = z.object({\n namespace: z.string().describe(\"TailorDB namespace for the tenant type\"),\n type: z.string().describe(\"TailorDB type name for tenants\"),\n signatureField: z.string().describe(\"Field used as the tenant signature\"),\n});\n\nconst UserProfileSchema = z.object({\n // FIXME: improve TailorDBInstance schema validation\n type: z.object({\n name: z.string(),\n fields: z.any(),\n metadata: z.any(),\n hooks: z.any(),\n validate: z.any(),\n features: z.any(),\n indexes: z.any(),\n files: z.any(),\n permission: z.any(),\n gqlPermission: z.any(),\n _output: z.any(),\n }),\n usernameField: z.string(),\n attributes: z.record(z.string(), z.literal(true)).optional(),\n attributeList: z.array(z.string()).optional(),\n});\n\nconst ValueOperandSchema: z.ZodType<ValueOperand> = z.union([\n z.string(),\n z.boolean(),\n z.array(z.string()),\n z.array(z.boolean()),\n]);\n\nconst MachineUserSchema = z.object({\n attributes: z.record(z.string(), ValueOperandSchema).optional(),\n attributeList: z.array(z.uuid()).optional(),\n});\n\nconst BeforeLoginHookSchema = z.object({\n handler: z.function(),\n invoker: z.string(),\n});\n\nconst AuthConfigBaseSchema = z.object({\n name: z.string().describe(\"Auth service name\"),\n hooks: z\n .object({\n beforeLogin: BeforeLoginHookSchema.optional().describe(\"Before login auth hook\"),\n })\n .optional()\n .describe(\"Auth hooks\"),\n machineUsers: z\n .record(z.string(), MachineUserSchema)\n .optional()\n .describe(\"Machine user definitions\"),\n oauth2Clients: z\n .record(z.string(), OAuth2ClientSchema)\n .optional()\n .describe(\"OAuth2 client definitions\"),\n idProvider: IdProviderSchema.optional().describe(\"Identity provider configuration\"),\n scim: SCIMSchema.optional().describe(\"SCIM provisioning configuration\"),\n tenantProvider: TenantProviderSchema.optional().describe(\"Multi-tenant provider configuration\"),\n publishSessionEvents: z.boolean().optional().describe(\"Enable publishing session events\"),\n});\n\nexport const AuthConfigSchema = z\n .union([\n AuthConfigBaseSchema.extend({\n userProfile: z.undefined().optional(),\n machineUserAttributes: z.undefined().optional(),\n }),\n z.xor([\n AuthConfigBaseSchema.extend({\n userProfile: UserProfileSchema,\n machineUserAttributes: z.undefined().optional(),\n }),\n AuthConfigBaseSchema.extend({\n userProfile: z.undefined().optional(),\n machineUserAttributes: z.record(z.string(), TailorFieldSchema),\n }),\n ]),\n ])\n .brand(\"AuthConfig\");\n","import { type TailorDBService } from \"@/cli/services/tailordb/service\";\nimport { IdProviderSchema } from \"@/parser/service/auth\";\nimport type { AuthOwnConfig } from \"@/types/auth\";\nimport type { IdProvider as IdProviderConfig } from \"@/types/auth.generated\";\n\ntype UserProfile = AuthOwnConfig[\"userProfile\"] & {\n namespace: string;\n};\n\nexport type AuthService = {\n readonly config: AuthOwnConfig;\n readonly tailorDBServices: ReadonlyArray<TailorDBService>;\n readonly externalTailorDBNamespaces: ReadonlyArray<string>;\n readonly parsedConfig: AuthOwnConfig & { idProvider?: IdProviderConfig };\n readonly userProfile: UserProfile | undefined;\n resolveNamespaces: () => Promise<void>;\n};\n\n/**\n * Creates a new AuthService instance.\n * @param config - The auth configuration\n * @param tailorDBServices - The TailorDB services\n * @param externalTailorDBNamespaces - External TailorDB namespaces\n * @returns A new AuthService instance\n */\nexport function createAuthService(\n config: AuthOwnConfig,\n tailorDBServices: ReadonlyArray<TailorDBService>,\n externalTailorDBNamespaces: ReadonlyArray<string>,\n): AuthService {\n const parsedConfig = {\n ...config,\n idProvider: IdProviderSchema.optional().parse(config.idProvider),\n };\n\n let userProfile: UserProfile | undefined;\n\n return {\n config,\n tailorDBServices,\n externalTailorDBNamespaces,\n parsedConfig,\n get userProfile() {\n return userProfile;\n },\n resolveNamespaces: async () => {\n // No userProfile defined\n if (!config.userProfile) {\n return;\n }\n\n // 1. Explicit namespace\n if (config.userProfile.namespace) {\n userProfile = {\n ...config.userProfile,\n namespace: config.userProfile.namespace,\n };\n return;\n }\n\n const totalNamespaceCount = tailorDBServices.length + externalTailorDBNamespaces.length;\n let userProfileNamespace: string | undefined;\n\n // 2. Single TailorDB\n if (totalNamespaceCount === 1) {\n userProfileNamespace = tailorDBServices[0]?.namespace ?? externalTailorDBNamespaces[0];\n } else {\n // 3. Multiple TailorDBs\n await Promise.all(tailorDBServices.map((tailordb) => tailordb.loadTypes()));\n\n const userProfileTypeName =\n typeof config.userProfile.type === \"object\" && \"name\" in config.userProfile.type\n ? config.userProfile.type.name\n : undefined;\n\n if (userProfileTypeName) {\n for (const service of tailorDBServices) {\n const types = service.types;\n if (Object.prototype.hasOwnProperty.call(types, userProfileTypeName)) {\n userProfileNamespace = service.namespace;\n break;\n }\n }\n }\n\n if (!userProfileNamespace) {\n throw new Error(\n `userProfile type \"${config.userProfile.type.name}\" not found in any TailorDB namespace`,\n );\n }\n }\n\n userProfile = {\n ...config.userProfile,\n namespace: userProfileNamespace,\n };\n },\n };\n}\n","import { z } from \"zod\";\nimport { AuthInvokerSchema } from \"../auth\";\nimport { functionSchema } from \"../common\";\n\nexport const RecordTriggerSchema = z.object({\n kind: z.enum([\"recordCreated\", \"recordUpdated\", \"recordDeleted\"]).describe(\"Record event type\"),\n typeName: z.string().describe(\"TailorDB type name to watch for events\"),\n condition: functionSchema.optional().describe(\"Condition function to filter events\"),\n});\n\nexport const ResolverExecutedTriggerSchema = z.object({\n kind: z.literal(\"resolverExecuted\"),\n resolverName: z.string().describe(\"Name of the resolver to trigger on\"),\n condition: functionSchema.optional().describe(\"Condition function to filter events\"),\n});\n\nexport const ScheduleTriggerSchema = z.object({\n kind: z.literal(\"schedule\"),\n cron: z.string().describe(\"CRON expression for the schedule\"),\n timezone: z\n .string()\n .optional()\n .default(\"UTC\")\n .describe(\"Timezone for the CRON schedule (default: UTC)\"),\n});\n\nexport const IncomingWebhookTriggerSchema = z.object({\n kind: z.literal(\"incomingWebhook\"),\n});\n\nexport const IdpUserTriggerSchema = z.object({\n kind: z\n .enum([\"idpUserCreated\", \"idpUserUpdated\", \"idpUserDeleted\"])\n .describe(\"IdP user event type\"),\n});\n\nexport const AuthAccessTokenTriggerSchema = z.object({\n kind: z\n .enum([\"authAccessTokenIssued\", \"authAccessTokenRefreshed\", \"authAccessTokenRevoked\"])\n .describe(\"Auth access token event type\"),\n});\n\nexport const TriggerSchema = z.discriminatedUnion(\"kind\", [\n RecordTriggerSchema,\n ResolverExecutedTriggerSchema,\n ScheduleTriggerSchema,\n IncomingWebhookTriggerSchema,\n IdpUserTriggerSchema,\n AuthAccessTokenTriggerSchema,\n]);\n\nexport const FunctionOperationSchema = z.object({\n kind: z.enum([\"function\", \"jobFunction\"]),\n body: functionSchema.describe(\"Function implementation\"),\n authInvoker: AuthInvokerSchema.optional().describe(\"Auth invoker for the function execution\"),\n});\n\nexport const GqlOperationSchema = z.object({\n kind: z.literal(\"graphql\"),\n appName: z.string().optional().describe(\"Target application name for the GraphQL query\"),\n query: z.preprocess((val) => String(val), z.string().describe(\"GraphQL query string\")),\n variables: functionSchema.optional().describe(\"Function to compute GraphQL variables\"),\n authInvoker: AuthInvokerSchema.optional().describe(\"Auth invoker for the GraphQL execution\"),\n});\n\nexport const WebhookOperationSchema = z.object({\n kind: z.literal(\"webhook\"),\n url: functionSchema.describe(\"Function returning the webhook URL\"),\n requestBody: functionSchema.optional().describe(\"Function to compute the request body\"),\n headers: z\n .record(z.string(), z.union([z.string(), z.object({ vault: z.string(), key: z.string() })]))\n .optional()\n .describe(\"HTTP headers for the webhook request\"),\n});\n\nexport const WorkflowOperationSchema = z.preprocess(\n (val) => {\n if (\n val == null ||\n typeof val !== \"object\" ||\n !(\"workflow\" in val) ||\n typeof val.workflow !== \"object\" ||\n val.workflow === null\n ) {\n return val;\n }\n\n const { workflow, ...rest } = val as { workflow: { name: string } };\n return { ...rest, workflowName: workflow.name };\n },\n z.object({\n kind: z.literal(\"workflow\"),\n workflowName: z.string().describe(\"Name of the workflow to execute\"),\n args: z\n .union([z.record(z.string(), z.unknown()), functionSchema])\n .optional()\n .describe(\"Arguments to pass to the workflow\"),\n authInvoker: AuthInvokerSchema.optional().describe(\"Auth invoker for the workflow execution\"),\n }),\n);\n\nconst OperationSchema = z.union([\n FunctionOperationSchema,\n GqlOperationSchema,\n WebhookOperationSchema,\n WorkflowOperationSchema,\n]);\n\nexport const ExecutorSchema = z.object({\n name: z.string().describe(\"Executor name\"),\n description: z.string().optional().describe(\"Executor description\"),\n disabled: z.boolean().optional().default(false).describe(\"Whether the executor is disabled\"),\n trigger: TriggerSchema.describe(\"Event trigger configuration\"),\n operation: OperationSchema.describe(\"Operation to execute when triggered\"),\n});\n","import { pathToFileURL } from \"node:url\";\nimport { ExecutorSchema } from \"@/parser/service/executor\";\nimport type { Executor } from \"@/types/executor.generated\";\n\n/**\n * Load and validate an executor definition from a file.\n * @param executorFilePath - Path to the executor file\n * @returns Parsed executor or null if invalid\n */\nexport async function loadExecutor(executorFilePath: string): Promise<Executor | null> {\n const executorModule = await import(pathToFileURL(executorFilePath).href);\n const executor = executorModule.default;\n\n const parseResult = ExecutorSchema.safeParse(executor);\n if (!parseResult.success) {\n return null;\n }\n\n return parseResult.data;\n}\n","import * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { computeBundlerContextHash, withCache, type BundleCache } from \"@/cli/cache/bundle-cache\";\nimport { loadFilesWithIgnores, type FileLoadConfig } from \"@/cli/services/file-loader\";\nimport { removeStaleEntryFiles } from \"@/cli/services/stale-cleanup\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport {\n createTriggerTransformPlugin,\n serializeTriggerContext,\n type TriggerContext,\n} from \"@/cli/shared/trigger-context\";\nimport { loadExecutor } from \"./loader\";\n\ninterface ExecutorInfo {\n name: string;\n sourceFile: string;\n}\n\n/**\n * Options for bundling executors\n */\nexport interface BundleExecutorsOptions {\n /** Executor file loading configuration */\n config: FileLoadConfig;\n /** Trigger context for workflow/job transformations */\n triggerContext?: TriggerContext;\n /** Additional files to bundle (e.g., plugin-generated executors) */\n additionalFiles?: string[];\n /** Optional bundle cache for skipping unchanged builds */\n cache?: BundleCache;\n /** Whether to enable inline sourcemaps */\n inlineSourcemap?: boolean;\n}\n\n/**\n * Bundle executors from the specified configuration\n *\n * This function:\n * 1. Creates entry file that extracts operation.body\n * 2. Bundles in a single step with tree-shaking\n * @param options - Bundle executor options\n * @returns Promise that resolves when bundling completes\n */\nexport async function bundleExecutors(options: BundleExecutorsOptions): Promise<void> {\n const { config, triggerContext, additionalFiles = [], cache, inlineSourcemap } = options;\n const configFiles = loadFilesWithIgnores(config);\n const files = [...configFiles, ...additionalFiles];\n if (files.length === 0) {\n logger.warn(`No executor files found for patterns: ${config.files?.join(\", \") ?? \"(none)\"}`);\n return;\n }\n\n logger.newline();\n logger.log(\n `Bundling ${styles.highlight(files.length.toString())} files for ${styles.info('\"executor\"')}`,\n );\n\n // Load all executors and filter to function/jobFunction only\n const executors: ExecutorInfo[] = [];\n for (const file of files) {\n const executor = await loadExecutor(file);\n if (!executor) {\n logger.debug(` Skipping: ${file} (could not be loaded)`);\n continue;\n }\n\n // Only bundle function and jobFunction executors\n if (![\"function\", \"jobFunction\"].includes(executor.operation.kind)) {\n logger.debug(` Skipping: ${executor.name} (not a function executor)`);\n continue;\n }\n\n executors.push({\n name: executor.name,\n sourceFile: file,\n });\n }\n\n if (executors.length === 0) {\n logger.debug(\" No function executors to bundle\");\n return;\n }\n\n const outputDir = path.resolve(getDistDir(), \"executors\");\n\n fs.mkdirSync(outputDir, { recursive: true });\n\n // Clean stale entry files from previous builds.\n // Must complete before Promise.all below; parallel processing\n // would require separate output directories.\n await removeStaleEntryFiles(outputDir);\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n // Process each executor\n await Promise.all(\n executors.map((executor) =>\n bundleSingleExecutor(executor, outputDir, tsconfig, triggerContext, cache, inlineSourcemap),\n ),\n );\n\n logger.log(`${styles.success(\"Bundled\")} ${styles.info('\"executor\"')}`);\n}\n\nasync function bundleSingleExecutor(\n executor: ExecutorInfo,\n outputDir: string,\n tsconfig: string | undefined,\n triggerContext?: TriggerContext,\n cache?: BundleCache,\n inlineSourcemap?: boolean,\n): Promise<void> {\n const outputPath = path.join(outputDir, `${executor.name}.js`);\n const serializedTriggerContext = serializeTriggerContext(triggerContext);\n\n const contextHash = computeBundlerContextHash({\n sourceFile: executor.sourceFile,\n serializedTriggerContext,\n tsconfig,\n inlineSourcemap,\n });\n\n await withCache({\n cache,\n kind: \"executor\",\n name: executor.name,\n sourceFile: executor.sourceFile,\n outputPath,\n contextHash,\n async build(cachePlugins) {\n // Step 1: Create entry file that imports and extracts operation.body\n const entryPath = path.join(outputDir, `${executor.name}.entry.js`);\n const absoluteSourcePath = path.resolve(executor.sourceFile);\n\n const entryContent = ml /* js */ `\n import _internalExecutor from \"${absoluteSourcePath}\";\n\n const __executor_function = _internalExecutor.operation.body;\n\n export { __executor_function as main };\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n // Step 2: Bundle with tree-shaking\n const triggerPlugin = createTriggerTransformPlugin(triggerContext);\n const plugins: rolldown.Plugin[] = triggerPlugin ? [triggerPlugin] : [];\n plugins.push(...cachePlugins);\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: inlineSourcemap ? \"inline\" : true,\n minify: inlineSourcemap\n ? {\n mangle: {\n keepNames: true,\n },\n }\n : true,\n codeSplitting: false,\n },\n tsconfig,\n plugins,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n },\n });\n}\n","import { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { loadFilesWithIgnores } from \"@/cli/services/file-loader\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { ExecutorSchema } from \"@/parser/service/executor\";\nimport { isSdkBranded } from \"@/utils/brand\";\nimport type { ExecutorServiceConfig } from \"@/types/app-config\";\nimport type { Executor } from \"@/types/executor.generated\";\n\n/**\n * Information about a plugin-generated executor converted to Executor format\n */\nexport interface PluginExecutor {\n /** The executor in standard Executor format */\n executor: Executor;\n /** Plugin ID that generated this executor */\n pluginId: string;\n /** Source type name (for type-attached executors) */\n sourceTypeName?: string;\n}\n\nexport type ExecutorService = {\n readonly config: ExecutorServiceConfig;\n readonly executors: Record<string, Executor>;\n readonly pluginExecutors: ReadonlyArray<PluginExecutor>;\n loadExecutors: () => Promise<Record<string, Executor> | undefined>;\n loadPluginExecutorFiles: (filePaths: string[]) => Promise<void>;\n};\n\n/**\n * Parameters for creating an ExecutorService\n */\nexport interface CreateExecutorServiceParams {\n /** The executor service configuration */\n config: ExecutorServiceConfig;\n}\n\n/**\n * Creates a new ExecutorService instance.\n * @param params - Parameters for creating the service\n * @returns A new ExecutorService instance\n */\nexport function createExecutorService(params: CreateExecutorServiceParams): ExecutorService {\n const { config } = params;\n const executors: Record<string, Executor> = {};\n const pluginExecutors: PluginExecutor[] = [];\n let loadPromise: Promise<Record<string, Executor> | undefined> | undefined;\n\n const loadExecutorForFile = async (executorFile: string): Promise<Executor | undefined> => {\n try {\n const executorModule = await import(pathToFileURL(executorFile).href);\n const result = ExecutorSchema.safeParse(executorModule.default);\n if (result.success) {\n const relativePath = path.relative(process.cwd(), executorFile);\n logger.log(\n `Executor: ${styles.successBright(`\"${result.data.name}\"`)} loaded from ${styles.path(relativePath)}`,\n );\n executors[executorFile] = result.data;\n return result.data;\n }\n if (isSdkBranded(executorModule.default, \"executor\")) {\n throw result.error;\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), executorFile);\n logger.error(`Failed to load executor from ${styles.bold(relativePath)}`);\n logger.error(String(error));\n throw error;\n }\n return undefined;\n };\n\n return {\n config,\n get executors() {\n return executors;\n },\n get pluginExecutors() {\n return pluginExecutors;\n },\n loadExecutors: async () => {\n if (!loadPromise) {\n loadPromise = (async () => {\n if (!config.files || config.files.length === 0) {\n return undefined;\n }\n\n const executorFiles = loadFilesWithIgnores(config);\n\n logger.newline();\n logger.log(`Found ${styles.highlight(executorFiles.length.toString())} executor files`);\n\n await Promise.all(executorFiles.map((executorFile) => loadExecutorForFile(executorFile)));\n return executors;\n })();\n }\n return loadPromise;\n },\n loadPluginExecutorFiles: async (filePaths: string[]) => {\n if (filePaths.length === 0) return;\n\n logger.newline();\n logger.log(\n `Loading ${styles.highlight(filePaths.length.toString())} plugin-generated executor files`,\n );\n\n for (const filePath of filePaths) {\n const executor = await loadExecutorForFile(filePath);\n if (executor) {\n // Track as plugin executor (plugin ID is extracted from file path)\n // File path format: .tailor-sdk/plugin/{executor-name}.ts\n pluginExecutors.push({\n executor,\n pluginId: \"plugin-generated\",\n sourceTypeName: undefined,\n });\n }\n }\n },\n };\n}\n","import { pathToFileURL } from \"node:url\";\nimport { ResolverSchema } from \"@/parser/service/resolver\";\nimport type { Resolver } from \"@/types/resolver.generated\";\n\n/**\n * Load and validate a resolver definition from a file.\n * @param resolverFilePath - Path to the resolver file\n * @returns Parsed resolver or null if invalid\n */\nexport async function loadResolver(resolverFilePath: string): Promise<Resolver | null> {\n const resolverModule = await import(pathToFileURL(resolverFilePath).href);\n const resolver = resolverModule.default;\n\n const parseResult = ResolverSchema.safeParse(resolver);\n if (!parseResult.success) {\n return null;\n }\n\n return parseResult.data;\n}\n","import * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { computeBundlerContextHash, withCache, type BundleCache } from \"@/cli/cache/bundle-cache\";\nimport { loadFilesWithIgnores, type FileLoadConfig } from \"@/cli/services/file-loader\";\nimport { removeStaleEntryFiles } from \"@/cli/services/stale-cleanup\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport {\n createTriggerTransformPlugin,\n serializeTriggerContext,\n type TriggerContext,\n} from \"@/cli/shared/trigger-context\";\nimport { loadResolver } from \"./loader\";\n\ninterface ResolverInfo {\n name: string;\n sourceFile: string;\n}\n\n/**\n * Bundle resolvers for the specified namespace\n *\n * This function:\n * 1. Uses a transform plugin to add validation wrapper during bundling\n * 2. Creates entry file\n * 3. Bundles in a single step with tree-shaking\n * @param namespace - Resolver namespace name\n * @param config - Resolver file loading configuration\n * @param triggerContext - Trigger context for workflow/job transformations\n * @param cache - Optional bundle cache for skipping unchanged builds\n * @param inlineSourcemap - Whether to enable inline sourcemaps\n * @returns Promise that resolves when bundling completes\n */\nexport async function bundleResolvers(\n namespace: string,\n config: FileLoadConfig,\n triggerContext?: TriggerContext,\n cache?: BundleCache,\n inlineSourcemap?: boolean,\n): Promise<void> {\n const files = loadFilesWithIgnores(config);\n if (files.length === 0) {\n logger.warn(`No resolver files found for patterns: ${config.files?.join(\", \") ?? \"(none)\"}`);\n return;\n }\n\n logger.newline();\n logger.log(\n `Bundling ${styles.highlight(files.length.toString())} files for ${styles.info(`\"${namespace}\"`)}`,\n );\n\n // Load all resolvers to get their names\n const resolvers: ResolverInfo[] = [];\n for (const file of files) {\n const resolver = await loadResolver(file);\n if (!resolver) {\n logger.debug(` Skipping: ${file} (could not be loaded)`);\n continue;\n }\n resolvers.push({\n name: resolver.name,\n sourceFile: file,\n });\n }\n\n const outputDir = path.resolve(getDistDir(), \"resolvers\");\n\n fs.mkdirSync(outputDir, { recursive: true });\n\n // Clean stale entry files from previous builds.\n // Must complete before Promise.all below; parallel namespace processing\n // would require separate output directories per namespace.\n await removeStaleEntryFiles(outputDir);\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n // Process each resolver\n await Promise.all(\n resolvers.map((resolver) =>\n bundleSingleResolver(resolver, outputDir, tsconfig, triggerContext, cache, inlineSourcemap),\n ),\n );\n\n logger.log(`${styles.success(\"Bundled\")} ${styles.info(`\"${namespace}\"`)}`);\n}\n\nasync function bundleSingleResolver(\n resolver: ResolverInfo,\n outputDir: string,\n tsconfig: string | undefined,\n triggerContext?: TriggerContext,\n cache?: BundleCache,\n inlineSourcemap?: boolean,\n): Promise<void> {\n const outputPath = path.join(outputDir, `${resolver.name}.js`);\n const serializedTriggerContext = serializeTriggerContext(triggerContext);\n\n const contextHash = computeBundlerContextHash({\n sourceFile: resolver.sourceFile,\n serializedTriggerContext,\n tsconfig,\n inlineSourcemap,\n });\n\n await withCache({\n cache,\n kind: \"resolver\",\n name: resolver.name,\n sourceFile: resolver.sourceFile,\n outputPath,\n contextHash,\n async build(cachePlugins) {\n // Step 1: Create entry file that imports from the original source\n const entryPath = path.join(outputDir, `${resolver.name}.entry.js`);\n const absoluteSourcePath = path.resolve(resolver.sourceFile);\n\n const entryContent = ml /* js */ `\n import _internalResolver from \"${absoluteSourcePath}\";\n import { t } from \"@tailor-platform/sdk\";\n\n const $tailor_resolver_body = async (context) => {\n if (_internalResolver.input) {\n const result = t.object(_internalResolver.input).parse({\n value: context.input,\n data: context.input,\n user: context.user,\n });\n\n if (result.issues) {\n const errorMessages = result.issues\n .map(issue => {\n const path = issue.path ? issue.path.join('.') : '';\n return path ? \\` \\${path}: \\${issue.message}\\` : issue.message;\n })\n .join('\\\\n');\n throw new Error(\\`Failed to input validation:\\\\n\\${errorMessages}\\`);\n }\n }\n\n return _internalResolver.body(context);\n };\n\n export { $tailor_resolver_body as main };\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n // Step 2: Bundle with tree-shaking\n const triggerPlugin = createTriggerTransformPlugin(triggerContext);\n const plugins: rolldown.Plugin[] = triggerPlugin ? [triggerPlugin] : [];\n plugins.push(...cachePlugins);\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: inlineSourcemap ? \"inline\" : true,\n minify: inlineSourcemap\n ? {\n mangle: {\n keepNames: true,\n },\n }\n : true,\n codeSplitting: false,\n },\n tsconfig,\n plugins,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n },\n });\n}\n","import { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { loadFilesWithIgnores } from \"@/cli/services/file-loader\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { ResolverSchema } from \"@/parser/service/resolver\";\nimport { isSdkBranded } from \"@/utils/brand\";\nimport type { ResolverServiceConfig } from \"@/types/app-config\";\nimport type { Resolver } from \"@/types/resolver.generated\";\n\nexport type ResolverService = {\n readonly namespace: string;\n readonly config: ResolverServiceConfig;\n readonly resolvers: Record<string, Resolver>;\n loadResolvers: () => Promise<void>;\n};\n\n/**\n * Creates a new ResolverService instance.\n * @param namespace - The namespace for this resolver service\n * @param config - The resolver service configuration\n * @returns A new ResolverService instance\n */\nexport function createResolverService(\n namespace: string,\n config: ResolverServiceConfig,\n): ResolverService {\n const resolvers: Record<string, Resolver> = {};\n\n const loadResolverForFile = async (resolverFile: string): Promise<Resolver | undefined> => {\n try {\n const resolverModule = await import(pathToFileURL(resolverFile).href);\n const result = ResolverSchema.safeParse(resolverModule.default);\n if (result.success) {\n const relativePath = path.relative(process.cwd(), resolverFile);\n logger.log(\n `Resolver: ${styles.successBright(`\"${result.data.name}\"`)} loaded from ${styles.path(relativePath)}`,\n );\n resolvers[resolverFile] = result.data;\n return result.data;\n }\n if (isSdkBranded(resolverModule.default, \"resolver\")) {\n throw result.error;\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), resolverFile);\n logger.error(`Failed to load resolver from ${styles.bold(relativePath)}`);\n logger.error(String(error));\n throw error;\n }\n return undefined;\n };\n\n return {\n namespace,\n config,\n get resolvers() {\n return resolvers;\n },\n loadResolvers: async () => {\n if (Object.keys(resolvers).length > 0) {\n return;\n }\n if (!config.files || config.files.length === 0) {\n return;\n }\n\n const resolverFiles = loadFilesWithIgnores(config);\n\n logger.log(\n `Found ${styles.highlight(resolverFiles.length.toString())} resolver files for service ${styles.highlight(`\"${namespace}\"`)}`,\n );\n\n await Promise.all(resolverFiles.map((resolverFile) => loadResolverForFile(resolverFile)));\n },\n };\n}\n","import { parseSync } from \"oxc-parser\";\nimport { type ASTNode, type Replacement, applyReplacements, findStatementEnd } from \"./ast-utils\";\nimport { findAllJobs, buildJobNameMap, detectTriggerCalls } from \"./job-detector\";\nimport { collectSdkBindings, isSdkFunctionCall } from \"./sdk-binding-collector\";\nimport type {\n Program,\n VariableDeclaration,\n ExportNamedDeclaration,\n ExportDefaultDeclaration,\n} from \"@oxc-project/types\";\n\n/**\n * Find variable declarations by export names\n * Returns a map of export name to statement range\n * @param program - Parsed TypeScript program\n * @returns Map of export name to statement range\n */\nfunction findVariableDeclarationsByName(\n program: Program,\n): Map<string, { start: number; end: number }> {\n const declarations = new Map<string, { start: number; end: number }>();\n\n function walk(node: ASTNode | null | undefined): void {\n if (!node || typeof node !== \"object\") return;\n\n const nodeType = node.type as string | undefined;\n\n // Handle variable declarations: const job1 = ...\n // Only set if not already set (ExportNamedDeclaration is processed first and sets the outer range)\n if (nodeType === \"VariableDeclaration\") {\n const varDecl = node as unknown as VariableDeclaration;\n for (const decl of varDecl.declarations || []) {\n if (decl.id?.type === \"Identifier\" && decl.id.name) {\n if (!declarations.has(decl.id.name)) {\n declarations.set(decl.id.name, {\n start: varDecl.start,\n end: varDecl.end,\n });\n }\n }\n }\n }\n\n // Handle export declarations: export const job1 = ...\n if (nodeType === \"ExportNamedDeclaration\") {\n const exportDecl = node as unknown as ExportNamedDeclaration;\n const declaration = exportDecl.declaration;\n if (declaration?.type === \"VariableDeclaration\") {\n const varDecl = declaration as VariableDeclaration;\n for (const decl of varDecl.declarations || []) {\n if (decl.id?.type === \"Identifier\" && decl.id.name) {\n declarations.set(decl.id.name, {\n start: exportDecl.start,\n end: exportDecl.end,\n });\n }\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return declarations;\n}\n\n/**\n * Find createWorkflow default export declarations\n * Returns the range of the export statement to remove\n * @param program - Parsed TypeScript program\n * @returns Range of the default export statement or null\n */\nfunction findWorkflowDefaultExport(program: Program): { start: number; end: number } | null {\n const bindings = collectSdkBindings(program, \"createWorkflow\");\n\n for (const statement of program.body) {\n if (statement.type === \"ExportDefaultDeclaration\") {\n const exportDecl = statement as ExportDefaultDeclaration;\n const declaration = exportDecl.declaration;\n\n // Check for direct createWorkflow call: export default createWorkflow({...})\n if (isSdkFunctionCall(declaration as unknown as ASTNode, bindings, \"createWorkflow\")) {\n return { start: exportDecl.start, end: exportDecl.end };\n }\n\n // Check for variable reference that was assigned from createWorkflow\n // This handles: const wf = createWorkflow({...}); export default wf;\n if (declaration.type === \"Identifier\") {\n return { start: exportDecl.start, end: exportDecl.end };\n }\n }\n }\n\n return null;\n}\n\n/**\n * Transform workflow source code\n * - Transform .trigger() calls to tailor.workflow.triggerJobFunction()\n * - Other jobs: remove entire variable declaration\n * @param source - The source code to transform\n * @param targetJobName - The name of the target job (from job config)\n * @param targetJobExportName - The export name of the target job (optional, for enhanced detection)\n * @param otherJobExportNames - Export names of other jobs to remove (optional, for enhanced detection)\n * @param allJobsMap - Map from export name to job name for trigger transformation (optional)\n * @returns Transformed workflow source code\n */\nexport function transformWorkflowSource(\n source: string,\n targetJobName: string,\n targetJobExportName?: string,\n otherJobExportNames?: string[],\n allJobsMap?: Map<string, string>,\n): string {\n // Use .ts extension to properly parse TypeScript code\n const { program } = parseSync(\"input.ts\", source);\n\n // Find all jobs using AST detection\n const detectedJobs = findAllJobs(program, source);\n\n // Build job name map from detected jobs if not provided\n const jobNameMap = allJobsMap ?? buildJobNameMap(detectedJobs);\n\n // Find all variable declarations for export name-based removal\n const allDeclarations = findVariableDeclarationsByName(program);\n\n // Detect all .trigger() calls\n const triggerCalls = detectTriggerCalls(program, source);\n\n const replacements: Replacement[] = [];\n const removedRanges: Array<{ start: number; end: number }> = [];\n\n // Helper to check if a position is inside any removed range\n const isInsideRemovedRange = (pos: number) => {\n return removedRanges.some((r) => pos >= r.start && pos < r.end);\n };\n\n // Helper to track removed ranges (avoid duplicate/overlapping removals)\n // Use start position only for comparison since end position may vary due to findStatementEnd\n const isAlreadyMarkedForRemoval = (start: number) => {\n return removedRanges.some((r) => r.start === start);\n };\n\n // Step 1: First, collect all ranges that will be removed (other job declarations)\n // This must happen before trigger transformation to know which trigger calls to skip\n for (const job of detectedJobs) {\n if (job.name === targetJobName) {\n continue;\n }\n\n if (job.statementRange && !isAlreadyMarkedForRemoval(job.statementRange.start)) {\n const endPos = findStatementEnd(source, job.statementRange.end);\n removedRanges.push({ start: job.statementRange.start, end: endPos });\n replacements.push({\n start: job.statementRange.start,\n end: endPos,\n text: \"\",\n });\n } else if (!job.statementRange) {\n // Fallback: replace body with empty function if we can't find the statement\n replacements.push({\n start: job.bodyValueRange.start,\n end: job.bodyValueRange.end,\n text: \"() => {}\",\n });\n }\n }\n\n // Step 2: Remove other jobs by export name (catches jobs missed by AST detection)\n if (otherJobExportNames) {\n for (const exportName of otherJobExportNames) {\n if (exportName === targetJobExportName) continue;\n\n const declRange = allDeclarations.get(exportName);\n if (declRange && !isAlreadyMarkedForRemoval(declRange.start)) {\n const endPos = findStatementEnd(source, declRange.end);\n removedRanges.push({ start: declRange.start, end: endPos });\n replacements.push({\n start: declRange.start,\n end: endPos,\n text: \"\",\n });\n }\n }\n }\n\n // Step 3: Remove createWorkflow default export (not needed in job bundles)\n const workflowExport = findWorkflowDefaultExport(program);\n if (workflowExport && !isAlreadyMarkedForRemoval(workflowExport.start)) {\n const endPos = findStatementEnd(source, workflowExport.end);\n removedRanges.push({ start: workflowExport.start, end: endPos });\n replacements.push({\n start: workflowExport.start,\n end: endPos,\n text: \"\",\n });\n }\n\n // Step 4: Transform .trigger() calls to tailor.workflow.triggerJobFunction()\n // Only transform trigger calls that are NOT inside ranges being removed\n // Also remove await keyword since triggerJobFunction is synchronous\n for (const call of triggerCalls) {\n // Skip trigger calls inside removed job declarations\n if (isInsideRemovedRange(call.callRange.start)) {\n continue;\n }\n\n const jobName = jobNameMap.get(call.identifierName);\n if (jobName) {\n // Transform to tailor.workflow.triggerJobFunction\n // triggerJobFunction is synchronous, so we use fullRange to remove await if present\n const transformedCall = `tailor.workflow.triggerJobFunction(\"${jobName}\", ${call.argsText || \"undefined\"})`;\n replacements.push({\n start: call.fullRange.start,\n end: call.fullRange.end,\n text: transformedCall,\n });\n }\n }\n\n return applyReplacements(source, replacements);\n}\n","import * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport { parseSync } from \"oxc-parser\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { computeBundlerContextHash, withCache, type BundleCache } from \"@/cli/cache/bundle-cache\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { serializeTriggerContext, type TriggerContext } from \"@/cli/shared/trigger-context\";\nimport { detectTriggerCalls, findAllJobs } from \"./job-detector\";\nimport { transformWorkflowSource } from \"./source-transformer\";\nimport { transformFunctionTriggers } from \"./trigger-transformer\";\n\ninterface JobInfo {\n name: string;\n exportName: string;\n sourceFile: string;\n}\n\nexport interface BundleWorkflowJobsResult {\n /** Maps mainJobName -> list of all job names it depends on (including itself) */\n mainJobDeps: Record<string, string[]>;\n}\n\n/**\n * Bundle workflow jobs\n *\n * This function:\n * 1. Detects which jobs are actually used (mainJobs + their dependencies)\n * 2. Uses a transform plugin to transform trigger calls during bundling\n * 3. Creates entry file and bundles with tree-shaking\n *\n * Returns metadata about which jobs each workflow uses.\n * @param allJobs - All available job infos\n * @param mainJobNames - Names of main jobs\n * @param env - Environment variables to inject\n * @param triggerContext - Trigger context for transformations\n * @param cache - Optional bundle cache for skipping unchanged builds\n * @param inlineSourcemap - Whether to enable inline sourcemaps\n * @returns Workflow job bundling result\n */\nexport async function bundleWorkflowJobs(\n allJobs: JobInfo[],\n mainJobNames: string[],\n env: Record<string, string | number | boolean> = {},\n triggerContext?: TriggerContext,\n cache?: BundleCache,\n inlineSourcemap?: boolean,\n): Promise<BundleWorkflowJobsResult> {\n if (allJobs.length === 0) {\n logger.warn(\"No workflow jobs to bundle\");\n return { mainJobDeps: {} };\n }\n\n // Filter to only used jobs and get per-mainJob dependencies\n const { usedJobs, mainJobDeps } = await filterUsedJobs(allJobs, mainJobNames);\n\n logger.newline();\n logger.log(\n `Bundling ${styles.highlight(usedJobs.length.toString())} files for ${styles.info('\"workflow-job\"')}`,\n );\n\n const outputDir = path.resolve(getDistDir(), \"workflow-jobs\");\n\n // Remove stale output files (those not in the current build set)\n fs.mkdirSync(outputDir, { recursive: true });\n const currentJobNames = new Set(usedJobs.map((j) => j.name));\n const existingFiles = fs.readdirSync(outputDir);\n for (const file of existingFiles) {\n // Remove .js and .js.map files not belonging to current jobs (covers entry files, stale outputs, and sourcemaps)\n if (file.endsWith(\".js\") && !currentJobNames.has(path.basename(file, \".js\"))) {\n fs.rmSync(path.join(outputDir, file), { force: true });\n } else if (file.endsWith(\".js.map\") && !currentJobNames.has(path.basename(file, \".js.map\"))) {\n fs.rmSync(path.join(outputDir, file), { force: true });\n }\n }\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n // Process each job\n await Promise.all(\n usedJobs.map((job) =>\n bundleSingleJob(\n job,\n usedJobs,\n outputDir,\n tsconfig,\n env,\n triggerContext,\n cache,\n inlineSourcemap,\n ),\n ),\n );\n\n logger.log(`${styles.success(\"Bundled\")} ${styles.info('\"workflow-job\"')}`);\n\n return { mainJobDeps };\n}\n\ninterface FilterUsedJobsResult {\n usedJobs: JobInfo[];\n mainJobDeps: Record<string, string[]>;\n}\n\n/**\n * Filter jobs to only include those that are actually used.\n * A job is \"used\" if:\n * - It's a mainJob of a workflow\n * - It's called via .trigger() from another used job (transitively)\n *\n * Also returns a map of mainJob -> all jobs it depends on (for metadata).\n * @param allJobs - All available job infos\n * @param mainJobNames - Names of main jobs\n * @returns Used jobs and main job dependency map\n */\nasync function filterUsedJobs(\n allJobs: JobInfo[],\n mainJobNames: string[],\n): Promise<FilterUsedJobsResult> {\n if (allJobs.length === 0 || mainJobNames.length === 0) {\n return { usedJobs: [], mainJobDeps: {} };\n }\n\n // Build maps for lookups\n const jobsBySourceFile = new Map<string, JobInfo[]>();\n for (const job of allJobs) {\n const existing = jobsBySourceFile.get(job.sourceFile) || [];\n existing.push(job);\n jobsBySourceFile.set(job.sourceFile, existing);\n }\n\n // Build export name -> job name map for all jobs\n const exportNameToJobName = new Map<string, string>();\n for (const job of allJobs) {\n exportNameToJobName.set(job.exportName, job.name);\n }\n\n // Detect trigger calls and build dependency graph\n // Maps job name -> set of job names it triggers\n const dependencies = new Map<string, Set<string>>();\n\n // Process all source files in parallel\n const fileResults = await Promise.all(\n Array.from(jobsBySourceFile.entries()).map(async ([sourceFile, jobs]) => {\n try {\n const source = await fs.promises.readFile(sourceFile, \"utf-8\");\n const { program } = parseSync(\"input.ts\", source);\n\n // Find all jobs in this file to get body ranges\n const detectedJobs = findAllJobs(program, source);\n const localExportNameToJobName = new Map<string, string>();\n for (const detected of detectedJobs) {\n if (detected.exportName) {\n localExportNameToJobName.set(detected.exportName, detected.name);\n }\n }\n\n // Detect trigger calls\n const triggerCalls = detectTriggerCalls(program, source);\n\n // For each job in this file, find which triggers are inside its body\n const jobDependencies: Array<{ jobName: string; deps: Set<string> }> = [];\n\n for (const job of jobs) {\n const detectedJob = detectedJobs.find((d) => d.name === job.name);\n if (!detectedJob) continue;\n\n const jobDeps = new Set<string>();\n\n for (const call of triggerCalls) {\n // Check if this trigger call is inside the job's body\n if (\n detectedJob.bodyValueRange &&\n call.callRange.start >= detectedJob.bodyValueRange.start &&\n call.callRange.end <= detectedJob.bodyValueRange.end\n ) {\n // Look up the job name from the identifier\n const triggeredJobName =\n localExportNameToJobName.get(call.identifierName) ||\n exportNameToJobName.get(call.identifierName);\n if (triggeredJobName) {\n jobDeps.add(triggeredJobName);\n }\n }\n }\n\n if (jobDeps.size > 0) {\n jobDependencies.push({ jobName: job.name, deps: jobDeps });\n }\n }\n\n return jobDependencies;\n } catch {\n // If we can't parse a file, assume no dependencies from it\n return [];\n }\n }),\n );\n\n // Merge results into dependencies map\n for (const jobDependencies of fileResults) {\n for (const { jobName, deps } of jobDependencies) {\n dependencies.set(jobName, deps);\n }\n }\n\n // Collect all used jobs and per-mainJob dependencies\n const usedJobNames = new Set<string>();\n const mainJobDeps: Record<string, string[]> = {};\n\n function collectDeps(jobName: string, collected: Set<string>) {\n if (collected.has(jobName)) return;\n collected.add(jobName);\n\n // Recursively collect dependencies\n const deps = dependencies.get(jobName);\n if (deps) {\n for (const dep of deps) {\n collectDeps(dep, collected);\n }\n }\n }\n\n // For each mainJob, collect all its dependencies\n for (const mainJobName of mainJobNames) {\n const depsForMainJob = new Set<string>();\n collectDeps(mainJobName, depsForMainJob);\n mainJobDeps[mainJobName] = Array.from(depsForMainJob);\n\n // Add to global used jobs\n for (const dep of depsForMainJob) {\n usedJobNames.add(dep);\n }\n }\n\n // Filter to only used jobs\n const usedJobs = allJobs.filter((job) => usedJobNames.has(job.name));\n return { usedJobs, mainJobDeps };\n}\n\nasync function bundleSingleJob(\n job: JobInfo,\n allJobs: JobInfo[],\n outputDir: string,\n tsconfig: string | undefined,\n env: Record<string, string | number | boolean>,\n triggerContext?: TriggerContext,\n cache?: BundleCache,\n inlineSourcemap?: boolean,\n): Promise<void> {\n const outputPath = path.join(outputDir, `${job.name}.js`);\n const serializedTriggerContext = serializeTriggerContext(triggerContext);\n\n // Include sorted env variables as a prefix so that env changes invalidate the cache\n const sortedEnvPrefix = JSON.stringify(\n Object.fromEntries(Object.entries(env).sort(([a], [b]) => a.localeCompare(b))),\n );\n const contextHash = computeBundlerContextHash({\n sourceFile: job.sourceFile,\n serializedTriggerContext,\n tsconfig,\n inlineSourcemap,\n prefix: sortedEnvPrefix,\n });\n\n await withCache({\n cache,\n kind: \"workflow-job\",\n name: job.name,\n sourceFile: job.sourceFile,\n outputPath,\n contextHash,\n async build(cachePlugins) {\n // Step 1: Create entry file that imports job by named export\n const entryPath = path.join(outputDir, `${job.name}.entry.js`);\n const absoluteSourcePath = path.resolve(job.sourceFile);\n\n const entryContent = ml /* js */ `\n import { ${job.exportName} } from \"${absoluteSourcePath}\";\n\n export async function main(input) {\n const env = ${JSON.stringify(env)};\n return await ${job.exportName}.body(input, { env });\n }\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n // Step 2: Bundle with a transform plugin that transforms trigger calls\n // Collect export names for enhanced AST removal (catches jobs missed by AST detection)\n const otherJobExportNames = allJobs\n .filter((j) => j.name !== job.name)\n .map((j) => j.exportName);\n\n // Build a map from export name to job name for trigger transformation\n const allJobsMap = new Map<string, string>();\n for (const j of allJobs) {\n allJobsMap.set(j.exportName, j.name);\n }\n\n // Create transform plugin to transform trigger calls and remove other job declarations\n const transformPlugin: rolldown.Plugin = {\n name: \"workflow-transform\",\n transform: {\n filter: {\n id: {\n include: [/\\.ts$/, /\\.js$/],\n },\n },\n handler(code, id) {\n // Only transform source files that contain workflow jobs or trigger calls\n if (\n !code.includes(\"createWorkflowJob\") &&\n !code.includes(\"createWorkflow\") &&\n !code.includes(\".trigger(\")\n ) {\n return null;\n }\n\n // First, apply existing workflow source transformation (removes other jobs, transforms job.trigger)\n let transformed = transformWorkflowSource(\n code,\n job.name,\n job.exportName,\n otherJobExportNames,\n allJobsMap,\n );\n\n // Then, apply workflow.trigger transformation if context is provided\n if (triggerContext && transformed.includes(\".trigger(\")) {\n transformed = transformFunctionTriggers(\n transformed,\n triggerContext.workflowNameMap,\n triggerContext.jobNameMap,\n triggerContext.workflowFileMap,\n id,\n );\n }\n\n return { code: transformed };\n },\n },\n };\n\n const plugins: rolldown.Plugin[] = [transformPlugin, ...cachePlugins];\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: inlineSourcemap ? \"inline\" : true,\n minify: inlineSourcemap\n ? {\n mangle: {\n keepNames: true,\n },\n }\n : true,\n codeSplitting: false,\n },\n tsconfig,\n plugins,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n },\n });\n}\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\n\nexport const WorkflowJobSchema = z.object({\n name: z.string().describe(\"Job name (must be unique across the project)\"),\n trigger: functionSchema.describe(\"Trigger function that initiates the job\"),\n body: functionSchema.describe(\"Job implementation function\"),\n});\n\nconst durationUnits = [\"ms\", \"s\", \"m\"] as const;\n\nconst unitToSeconds: Record<(typeof durationUnits)[number], number> = {\n ms: 1 / 1000,\n s: 1,\n m: 60,\n};\n\nfunction durationToSeconds(duration: string): number {\n const match = duration.match(/^(\\d+)(ms|s|m)$/);\n if (!match) return 0;\n return parseInt(match[1], 10) * unitToSeconds[match[2] as (typeof durationUnits)[number]];\n}\n\nconst baseDurationSchema = z.templateLiteral([z.number().int().positive(), z.enum(durationUnits)]);\n\nconst durationSchema = (maxSeconds: number) =>\n baseDurationSchema.refine((val) => durationToSeconds(val) <= maxSeconds, {\n message: `Duration must be at most ${maxSeconds} seconds`,\n });\n\nexport const RetryPolicySchema = z\n .object({\n maxRetries: z.number().int().min(1).max(10).describe(\"Maximum number of retries (1-10)\"),\n initialBackoff: durationSchema(3600).describe(\n \"Initial backoff duration (e.g., '1s', '500ms', '1m', max 1h)\",\n ),\n maxBackoff: durationSchema(86400).describe(\n \"Maximum backoff duration (e.g., '30s', '5m', max 24h)\",\n ),\n backoffMultiplier: z.number().min(1).describe(\"Backoff multiplier (>= 1)\"),\n })\n .refine((data) => durationToSeconds(data.initialBackoff) <= durationToSeconds(data.maxBackoff), {\n message: \"initialBackoff must be less than or equal to maxBackoff\",\n path: [\"initialBackoff\"],\n })\n .refine((data) => durationToSeconds(data.initialBackoff) > 0, {\n message: \"initialBackoff must be greater than 0\",\n path: [\"initialBackoff\"],\n });\n\nexport const WorkflowSchema = z.object({\n name: z.string().describe(\"Workflow name\"),\n mainJob: WorkflowJobSchema.describe(\"Main job that starts the workflow\"),\n retryPolicy: RetryPolicySchema.optional().describe(\"Retry policy for the workflow\"),\n});\n","import { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { loadFilesWithIgnores } from \"@/cli/services/file-loader\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { WorkflowJobSchema, WorkflowSchema } from \"@/parser/service/workflow\";\nimport { isSdkBranded } from \"@/utils/brand\";\nimport type { WorkflowServiceConfig } from \"@/types/app-config\";\nimport type { Workflow } from \"@/types/workflow.generated\";\n\nexport interface CollectedJob {\n name: string;\n exportName: string;\n sourceFile: string;\n}\n\ninterface WorkflowLoadResult {\n workflows: Record<string, Workflow>;\n workflowSources: Array<{ workflow: Workflow; sourceFile: string }>;\n jobs: CollectedJob[];\n fileCount: number;\n}\n\nexport type WorkflowService = {\n readonly config: WorkflowServiceConfig;\n readonly workflows: Record<string, Workflow>;\n readonly workflowSources: ReadonlyArray<{ workflow: Workflow; sourceFile: string }>;\n readonly jobs: CollectedJob[];\n readonly fileCount: number;\n loadWorkflows: () => Promise<void>;\n printLoadedWorkflows: () => void;\n};\n\n/**\n * Parameters for creating a WorkflowService\n */\nexport interface CreateWorkflowServiceParams {\n /** The workflow service configuration */\n config: WorkflowServiceConfig;\n}\n\n/**\n * Creates a new WorkflowService instance.\n * @param params - Parameters for creating the service\n * @returns A new WorkflowService instance\n */\nexport function createWorkflowService(params: CreateWorkflowServiceParams): WorkflowService {\n const { config } = params;\n let workflows: Record<string, Workflow> = {};\n let workflowSources: Array<{ workflow: Workflow; sourceFile: string }> = [];\n let jobs: CollectedJob[] = [];\n let fileCount = 0;\n let loaded = false;\n\n return {\n config,\n get workflows() {\n return workflows;\n },\n get workflowSources() {\n return workflowSources;\n },\n get jobs() {\n return jobs;\n },\n get fileCount() {\n return fileCount;\n },\n loadWorkflows: async () => {\n if (loaded) {\n return;\n }\n const result = await loadAndCollectJobs(config);\n workflows = result.workflows;\n workflowSources = result.workflowSources;\n jobs = result.jobs;\n fileCount = result.fileCount;\n loaded = true;\n },\n printLoadedWorkflows: () => {\n if (fileCount === 0) {\n return;\n }\n logger.newline();\n logger.log(`Found ${styles.highlight(fileCount.toString())} workflow files`);\n for (const { workflow, sourceFile } of workflowSources) {\n const relativePath = path.relative(process.cwd(), sourceFile);\n logger.log(\n `Workflow: ${styles.successBright(`\"${workflow.name}\"`)} loaded from ${styles.path(relativePath)}`,\n );\n }\n },\n };\n}\n\n/**\n * Load workflow files and collect all jobs in a single pass.\n * Dependencies are detected at bundle time via AST analysis.\n * @param config - Workflow service configuration\n * @returns Loaded workflows and collected jobs\n */\nasync function loadAndCollectJobs(config: WorkflowServiceConfig): Promise<WorkflowLoadResult> {\n const workflows: Record<string, Workflow> = {};\n const workflowSources: Array<{ workflow: Workflow; sourceFile: string }> = [];\n const collectedJobs: CollectedJob[] = [];\n\n if (!config.files || config.files.length === 0) {\n return {\n workflows,\n workflowSources,\n jobs: collectedJobs,\n fileCount: 0,\n };\n }\n\n const workflowFiles = loadFilesWithIgnores(config);\n const fileCount = workflowFiles.length;\n\n // Maps for collecting data\n const allJobsMap = new Map<string, { name: string; exportName: string; sourceFile: string }>();\n\n // Load all files in parallel and collect jobs and workflows\n const loadResults = await Promise.all(\n workflowFiles.map(async (workflowFile) => {\n const { jobs, workflow } = await loadFileContent(workflowFile);\n return { workflowFile, jobs, workflow };\n }),\n );\n\n for (const { workflowFile, jobs, workflow } of loadResults) {\n if (workflow) {\n workflowSources.push({ workflow, sourceFile: workflowFile });\n workflows[workflowFile] = workflow;\n }\n\n for (const job of jobs) {\n const existing = allJobsMap.get(job.name);\n if (existing) {\n throw new Error(\n `Duplicate job name \"${job.name}\" found:\\n` +\n ` - ${existing.sourceFile} (export: ${existing.exportName})\\n` +\n ` - ${job.sourceFile} (export: ${job.exportName})\\n` +\n `Each job must have a unique name.`,\n );\n }\n allJobsMap.set(job.name, job);\n collectedJobs.push(job);\n }\n }\n\n return {\n workflows,\n workflowSources,\n jobs: collectedJobs,\n fileCount,\n };\n}\n\n/**\n * Load a single file and extract jobs and workflow\n * @param filePath - Path to the workflow file\n * @returns Extracted jobs and workflow\n */\nasync function loadFileContent(filePath: string): Promise<{\n jobs: Array<{ name: string; exportName: string; sourceFile: string }>;\n workflow: Workflow | null;\n}> {\n const jobs: Array<{\n name: string;\n exportName: string;\n sourceFile: string;\n }> = [];\n let workflow: Workflow | null = null;\n\n try {\n const module = await import(pathToFileURL(filePath).href);\n\n for (const [exportName, exportValue] of Object.entries(module)) {\n // Check if it's a workflow (default export)\n if (exportName === \"default\") {\n const workflowResult = WorkflowSchema.safeParse(exportValue);\n if (workflowResult.success) {\n workflow = workflowResult.data;\n } else if (isSdkBranded(exportValue, [\"workflow\", \"workflow-job\"])) {\n throw workflowResult.error;\n }\n continue;\n }\n\n const jobResult = WorkflowJobSchema.safeParse(exportValue);\n if (jobResult.success) {\n jobs.push({\n name: jobResult.data.name,\n exportName,\n sourceFile: filePath,\n });\n } else if (isSdkBranded(exportValue, [\"workflow\", \"workflow-job\"])) {\n throw jobResult.error;\n }\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), filePath);\n logger.error(\n `${styles.error(\"Failed to load workflow from\")} ${styles.errorBright(relativePath)}`,\n );\n logger.error(String(error));\n throw error;\n }\n\n return { jobs, workflow };\n}\n","import { z } from \"zod\";\n\n// Dependency kind enum for generators\nconst DependencyKindSchema = z.enum([\"tailordb\", \"resolver\", \"executor\"]);\nexport type DependencyKind = z.infer<typeof DependencyKindSchema>;\n\n// Literal-based schemas for each generator\nconst KyselyTypeConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/kysely-type\"),\n z.object({ distPath: z.string() }),\n]);\n\nconst SeedConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/seed\"),\n z.object({ distPath: z.string(), machineUserName: z.string().optional() }),\n]);\n\nconst EnumConstantsConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/enum-constants\"),\n z.object({ distPath: z.string() }),\n]);\n\nconst FileUtilsConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/file-utils\"),\n z.object({ distPath: z.string() }),\n]);\n\n// Custom generator schema with dependencies\nexport const CodeGeneratorSchema = z.object({\n id: z.string(),\n description: z.string(),\n dependencies: z.array(DependencyKindSchema),\n processType: z.function().optional(),\n processResolver: z.function().optional(),\n processExecutor: z.function().optional(),\n processTailorDBNamespace: z.function().optional(),\n processResolverNamespace: z.function().optional(),\n aggregate: z.function({ output: z.any() }),\n});\n\n// Base schema for generator config (before transformation to actual Generator instances)\nexport const BaseGeneratorConfigSchema = z.union([\n KyselyTypeConfigSchema,\n SeedConfigSchema,\n EnumConstantsConfigSchema,\n FileUtilsConfigSchema,\n CodeGeneratorSchema,\n]);\n","import { z } from \"zod\";\nimport { functionSchema } from \"@/parser/service/common\";\nimport type { Plugin } from \"@/types/plugin\";\n\n// Custom plugin schema (object form)\n// Using passthrough() to preserve additional properties on Plugin instances\nexport const PluginConfigSchema = z\n .object({\n id: z.string(),\n description: z.string(),\n importPath: z.string().optional(),\n pluginConfig: z.unknown().optional(),\n typeConfigRequired: z.union([z.boolean(), functionSchema]).optional(),\n // Definition-time hooks\n onTypeLoaded: functionSchema.optional(),\n onNamespaceLoaded: functionSchema.optional(),\n // Generation-time hooks\n onTailorDBReady: functionSchema.optional(),\n onResolverReady: functionSchema.optional(),\n onExecutorReady: functionSchema.optional(),\n })\n .passthrough()\n .refine(\n (p) => {\n // importPath is required when plugin has definition-time hooks\n const hasDefineHooks = p.onTypeLoaded || p.onNamespaceLoaded;\n return !hasDefineHooks || !!p.importPath;\n },\n {\n message:\n \"importPath is required when plugin has definition-time hooks (onTypeLoaded/onNamespaceLoaded)\",\n },\n )\n .transform((plugin) => plugin as Plugin);\n","import { enumConstantsPlugin, EnumConstantsGeneratorID } from \"./enum-constants\";\nimport { fileUtilsPlugin, FileUtilsGeneratorID } from \"./file-utils\";\nimport { kyselyTypePlugin, KyselyGeneratorID } from \"./kysely-type\";\nimport { seedPlugin, SeedGeneratorID } from \"./seed\";\nimport type { Plugin } from \"@/types/plugin\";\n\n// Map of builtin generator IDs to plugin factory functions\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- builtin plugins accept heterogeneous options\nexport const builtinPlugins = new Map<string, (options: any) => Plugin<unknown, any>>([\n [KyselyGeneratorID, (options) => kyselyTypePlugin(options)],\n [SeedGeneratorID, (options) => seedPlugin(options)],\n [EnumConstantsGeneratorID, (options) => enumConstantsPlugin(options)],\n [FileUtilsGeneratorID, (options) => fileUtilsPlugin(options)],\n]);\n","// Mock tailordb Client for CLI environment\n(\n globalThis as unknown as {\n tailordb: {\n Client: typeof tailordb.Client;\n };\n }\n).tailordb = {\n Client: class {\n constructor(_config: { namespace: string }) {}\n async connect(): Promise<void> {}\n async end(): Promise<void> {}\n async queryObject<O>(): Promise<Tailordb.QueryResult<O>> {\n return {} as Promise<Tailordb.QueryResult<O>>;\n }\n },\n};\n","import * as fs from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { CodeGeneratorSchema, BaseGeneratorConfigSchema } from \"@/parser/generator-config\";\nimport { PluginConfigSchema } from \"@/parser/plugin-config\";\nimport { builtinPlugins } from \"@/plugin/builtin/registry\";\nimport { loadConfigPath } from \"./context\";\nimport type { AppConfig } from \"@/types/app-config\";\nimport type { Plugin } from \"@/types/plugin\";\nimport type { z } from \"zod\";\nimport \"./mock\";\n\n/**\n * Loaded configuration with resolved path\n */\nexport type LoadedConfig = AppConfig & { path: string };\n\n// Generator schema for custom CodeGenerator objects (builtin generators are handled as plugins)\nconst GeneratorConfigSchema = CodeGeneratorSchema.brand(\"CodeGenerator\");\n\nexport type Generator = z.output<typeof GeneratorConfigSchema>;\n\n/**\n * Load Tailor configuration file and associated generators and plugins.\n * @param configPath - Optional explicit config path\n * @returns Loaded config, generators, plugins, and config path\n */\nexport async function loadConfig(\n configPath?: string,\n): Promise<{ config: LoadedConfig; generators: Generator[]; plugins: Plugin[] }> {\n const foundPath = loadConfigPath(configPath);\n if (!foundPath) {\n throw new Error(\n \"Configuration file not found: tailor.config.ts not found in current or parent directories\",\n );\n }\n const resolvedPath = path.resolve(process.cwd(), foundPath);\n\n if (!fs.existsSync(resolvedPath)) {\n throw new Error(`Configuration file not found: ${configPath}`);\n }\n\n const configModule = await import(pathToFileURL(resolvedPath).href);\n if (!configModule || !configModule.default) {\n throw new Error(\"Invalid Tailor config module: default export not found\");\n }\n\n // Collect all generator exports (generators, generators2, etc.)\n const allGenerators: Generator[] = [];\n // Collect all plugin exports (plugins, plugins2, etc.)\n const allPlugins: Plugin[] = [];\n\n for (const value of Object.values(configModule)) {\n if (Array.isArray(value)) {\n // Try to parse as generators (converting builtin tuples to plugins)\n const generatorParsed = value.reduce(\n (acc, item) => {\n if (!acc.success) return acc;\n\n // Check if this is a builtin generator tuple that should be converted to a plugin\n const baseResult = BaseGeneratorConfigSchema.safeParse(item);\n if (baseResult.success && Array.isArray(baseResult.data)) {\n const [id, options] = baseResult.data as [string, Record<string, unknown>];\n const pluginFactory = builtinPlugins.get(id);\n if (pluginFactory) {\n acc.convertedPlugins.push(pluginFactory(options));\n return acc;\n }\n }\n\n // Try to parse as a custom CodeGenerator object\n const result = GeneratorConfigSchema.safeParse(item);\n if (result.success) {\n acc.items.push(result.data);\n } else {\n acc.success = false;\n }\n return acc;\n },\n { success: true, items: [] as Generator[], convertedPlugins: [] as Plugin[] },\n );\n if (\n generatorParsed.success &&\n (generatorParsed.items.length > 0 || generatorParsed.convertedPlugins.length > 0)\n ) {\n allGenerators.push(...generatorParsed.items);\n allPlugins.push(...generatorParsed.convertedPlugins);\n continue;\n }\n\n // Try to parse as plugins\n const pluginParsed = value.reduce(\n (acc, item) => {\n if (!acc.success) return acc;\n\n const result = PluginConfigSchema.safeParse(item);\n if (result.success) {\n acc.items.push(result.data);\n } else {\n acc.success = false;\n }\n return acc;\n },\n { success: true, items: [] as Plugin[] },\n );\n if (pluginParsed.success && pluginParsed.items.length > 0) {\n allPlugins.push(...pluginParsed.items);\n }\n }\n }\n\n return {\n config: { ...configModule.default, path: resolvedPath } as LoadedConfig,\n generators: allGenerators,\n plugins: allPlugins,\n };\n}\n","/**\n * Resolve whether inline sourcemaps should be enabled.\n *\n * Resolution order:\n * 1. Config value (`inlineSourcemap` in defineConfig) — if explicitly set\n * 2. Environment variable `TAILOR_ENABLE_INLINE_SOURCEMAP` — if explicitly set\n * 3. Default: `true`\n * @param configValue - The `inlineSourcemap` value from AppConfig\n * @returns Whether inline sourcemaps should be enabled\n */\nexport function resolveInlineSourcemap(configValue?: boolean): boolean {\n if (configValue !== undefined) return configValue;\n if (process.env.TAILOR_ENABLE_INLINE_SOURCEMAP !== undefined) {\n return process.env.TAILOR_ENABLE_INLINE_SOURCEMAP === \"true\";\n }\n return true;\n}\n","import { z } from \"zod\";\n\n/**\n * Normalize IdPGqlOperationsConfig (alias or object) to IdPGqlOperations object.\n * \"query\" alias expands to read-only mode: { create: false, update: false, delete: false, read: true, sendPasswordResetEmail: false }\n * @param config - The config to normalize\n * @returns The normalized IdPGqlOperations object\n */\nfunction normalizeIdPGqlOperations(\n config:\n | \"query\"\n | {\n create?: boolean;\n update?: boolean;\n delete?: boolean;\n read?: boolean;\n sendPasswordResetEmail?: boolean;\n },\n) {\n if (config === \"query\") {\n return {\n create: false,\n update: false,\n delete: false,\n read: true,\n sendPasswordResetEmail: false,\n };\n }\n return config;\n}\n\n/**\n * Zod schema for IdPGqlOperations configuration with normalization transform.\n * Accepts \"query\" alias or detailed object, normalizes to IdPGqlOperations object.\n */\nexport const IdPGqlOperationsSchema = z\n .union([\n z.literal(\"query\"),\n z.object({\n create: z.boolean().optional().describe(\"Enable _createUser mutation (default: true)\"),\n update: z.boolean().optional().describe(\"Enable _updateUser mutation (default: true)\"),\n delete: z.boolean().optional().describe(\"Enable _deleteUser mutation (default: true)\"),\n read: z.boolean().optional().describe(\"Enable _users and _user queries (default: true)\"),\n sendPasswordResetEmail: z\n .boolean()\n .optional()\n .describe(\"Enable _sendPasswordResetEmail mutation (default: true)\"),\n }),\n ])\n .describe(\n \"Configuration for GraphQL operations on IdP users.\\nAll operations are enabled by default (undefined or true = enabled, false = disabled).\",\n )\n .transform((val) => normalizeIdPGqlOperations(val));\n\nexport const IdPLangSchema = z.enum([\"en\", \"ja\"]).describe(\"IdP UI language\");\n\nexport const IdPUserAuthPolicySchema = z\n .object({\n useNonEmailIdentifier: z\n .boolean()\n .optional()\n .describe(\"Use non-email identifier for usernames\"),\n allowSelfPasswordReset: z\n .boolean()\n .optional()\n .describe(\"Allow users to reset their own passwords\"),\n passwordRequireUppercase: z\n .boolean()\n .optional()\n .describe(\"Require uppercase letters in passwords\"),\n passwordRequireLowercase: z\n .boolean()\n .optional()\n .describe(\"Require lowercase letters in passwords\"),\n passwordRequireNonAlphanumeric: z\n .boolean()\n .optional()\n .describe(\"Require non-alphanumeric characters in passwords\"),\n passwordRequireNumeric: z\n .boolean()\n .optional()\n .describe(\"Require numeric characters in passwords\"),\n passwordMinLength: z\n .number()\n .int()\n .refine((val) => val >= 6 && val <= 30, {\n message: \"passwordMinLength must be between 6 and 30\",\n })\n .optional()\n .describe(\"Minimum password length (6-30)\"),\n passwordMaxLength: z\n .number()\n .int()\n .refine((val) => val >= 6 && val <= 4096, {\n message: \"passwordMaxLength must be between 6 and 4096\",\n })\n .optional()\n .describe(\"Maximum password length (6-4096)\"),\n allowedEmailDomains: z\n .array(z.string())\n .optional()\n .describe(\"Restrict registration to these email domains\"),\n allowGoogleOauth: z.boolean().optional().describe(\"Enable Google OAuth login\"),\n allowMicrosoftOauth: z.boolean().optional().describe(\"Enable Microsoft OAuth login\"),\n disablePasswordAuth: z.boolean().optional().describe(\"Disable password-based authentication\"),\n })\n .refine(\n (data) =>\n data.passwordMinLength === undefined ||\n data.passwordMaxLength === undefined ||\n data.passwordMinLength <= data.passwordMaxLength,\n {\n message: \"passwordMinLength must be less than or equal to passwordMaxLength\",\n path: [\"passwordMinLength\"],\n },\n )\n .refine(\n (data) =>\n !data.allowedEmailDomains ||\n data.allowedEmailDomains.length === 0 ||\n !data.useNonEmailIdentifier,\n {\n message: \"allowedEmailDomains cannot be set when useNonEmailIdentifier is true\",\n path: [\"allowedEmailDomains\"],\n },\n )\n .refine(\n (data) =>\n data.allowGoogleOauth === undefined ||\n data.allowGoogleOauth === false ||\n !data.useNonEmailIdentifier,\n {\n message: \"allowGoogleOauth cannot be set when useNonEmailIdentifier is true\",\n path: [\"allowGoogleOauth\"],\n },\n )\n .refine(\n (data) =>\n !data.allowGoogleOauth || (data.allowedEmailDomains && data.allowedEmailDomains.length > 0),\n {\n message: \"allowGoogleOauth requires allowedEmailDomains to be set\",\n path: [\"allowGoogleOauth\"],\n },\n )\n .refine((data) => !data.allowMicrosoftOauth || !data.useNonEmailIdentifier, {\n message: \"allowMicrosoftOauth cannot be set when useNonEmailIdentifier is true\",\n path: [\"allowMicrosoftOauth\"],\n })\n .refine(\n (data) =>\n !data.allowMicrosoftOauth ||\n (data.allowedEmailDomains && data.allowedEmailDomains.length > 0),\n {\n message: \"allowMicrosoftOauth requires allowedEmailDomains to be set\",\n path: [\"allowMicrosoftOauth\"],\n },\n )\n .refine((data) => !data.allowMicrosoftOauth || data.disablePasswordAuth === true, {\n message: \"allowMicrosoftOauth requires disablePasswordAuth to be enabled\",\n path: [\"allowMicrosoftOauth\"],\n })\n .refine(\n (data) =>\n !data.disablePasswordAuth ||\n data.allowGoogleOauth === true ||\n data.allowMicrosoftOauth === true,\n {\n message: \"disablePasswordAuth requires allowGoogleOauth or allowMicrosoftOauth to be enabled\",\n path: [\"disablePasswordAuth\"],\n },\n )\n .refine((data) => !data.disablePasswordAuth || !data.allowSelfPasswordReset, {\n message: \"disablePasswordAuth cannot be used with allowSelfPasswordReset\",\n path: [\"disablePasswordAuth\"],\n });\n\nexport const IdPSchema = z\n .object({\n name: z.string().describe(\"IdP service name\"),\n authorization: z\n .union([z.literal(\"insecure\"), z.literal(\"loggedIn\"), z.object({ cel: z.string() })])\n .describe(\"Authorization mode for IdP API access\"),\n clients: z.array(z.string()).describe(\"OAuth2 client names that can use this IdP\"),\n lang: IdPLangSchema.optional().describe(\"UI language for IdP pages\"),\n userAuthPolicy: IdPUserAuthPolicySchema.transform((input) =>\n IdPUserAuthPolicySchema.parse(input ?? {}),\n )\n .optional()\n .describe(\"User authentication policy configuration\"),\n publishUserEvents: z.boolean().optional().describe(\"Enable publishing user lifecycle events\"),\n gqlOperations: IdPGqlOperationsSchema.optional().describe(\n \"Configure which GraphQL operations are enabled\",\n ),\n })\n .brand(\"IdPConfig\");\n","import { z } from \"zod\";\n\nconst namePattern = /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/;\nconst nameSchema = z.string().regex(namePattern);\n\nconst secretsVaultSchema = z.record(nameSchema, z.string());\nexport const SecretsSchema = z.record(nameSchema, secretsVaultSchema);\n","import { z } from \"zod\";\n\nexport const StaticWebsiteSchema = z\n .object({\n name: z.string().describe(\"Static website name\"),\n description: z.string().optional().describe(\"Static website description\"),\n allowedIpAddresses: z\n .array(z.string())\n .optional()\n .describe(\"IP addresses allowed to access the website\"),\n })\n .brand(\"StaticWebsiteConfig\");\n","import * as path from \"pathe\";\nimport { generatePluginExecutorFiles } from \"@/cli/commands/generate/plugin-executor-generator\";\nimport { generatePluginTypeFiles } from \"@/cli/commands/generate/plugin-type-generator\";\nimport { bundleAuthHooks } from \"@/cli/services/auth/bundler\";\nimport { createAuthService, type AuthService } from \"@/cli/services/auth/service\";\nimport { bundleExecutors } from \"@/cli/services/executor/bundler\";\nimport { createExecutorService, type ExecutorService } from \"@/cli/services/executor/service\";\nimport { bundleResolvers } from \"@/cli/services/resolver/bundler\";\nimport { createResolverService, type ResolverService } from \"@/cli/services/resolver/service\";\nimport { createTailorDBService, type TailorDBService } from \"@/cli/services/tailordb/service\";\nimport { bundleWorkflowJobs, type BundleWorkflowJobsResult } from \"@/cli/services/workflow/bundler\";\nimport { createWorkflowService, type WorkflowService } from \"@/cli/services/workflow/service\";\nimport { type LoadedConfig } from \"@/cli/shared/config-loader\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { resolveInlineSourcemap } from \"@/cli/shared/inline-sourcemap\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { buildTriggerContext } from \"@/cli/shared/trigger-context\";\nimport { IdPSchema } from \"@/parser/service/idp\";\nimport { SecretsSchema } from \"@/parser/service/secrets\";\nimport { StaticWebsiteSchema } from \"@/parser/service/staticwebsite\";\nimport { TailorDBServiceConfigSchema } from \"@/parser/service/tailordb\";\nimport {\n type AppConfig,\n type ExecutorServiceInput,\n type ResolverServiceInput,\n type WorkflowServiceConfig,\n} from \"@/types/app-config\";\nimport { type AuthConfig } from \"@/types/auth\";\nimport { type IdPConfig } from \"@/types/idp\";\nimport { type TailorDBServiceInput } from \"@/types/tailordb\";\nimport type { BundleCache } from \"@/cli/cache/bundle-cache\";\nimport type { PluginManager } from \"@/plugin/manager\";\nimport type { IdP } from \"@/types/idp.generated\";\nimport type { StaticWebsite, StaticWebsiteInput } from \"@/types/staticwebsite.generated\";\n\nexport type SecretVault = {\n readonly vaultName: string;\n readonly secrets: ReadonlyArray<{ name: string; value: string }>;\n};\n\nexport type Application = {\n readonly name: string;\n readonly config: AppConfig;\n readonly subgraphs: ReadonlyArray<{ Type: string; Name: string }>;\n readonly tailorDBServices: ReadonlyArray<TailorDBService>;\n readonly externalTailorDBNamespaces: ReadonlyArray<string>;\n readonly resolverServices: ReadonlyArray<ResolverService>;\n readonly idpServices: ReadonlyArray<IdP>;\n readonly authService: Readonly<AuthService> | undefined;\n readonly executorService: Readonly<ExecutorService> | undefined;\n readonly workflowService: Readonly<WorkflowService> | undefined;\n readonly staticWebsiteServices: ReadonlyArray<StaticWebsite>;\n readonly secrets: ReadonlyArray<SecretVault>;\n readonly env: Readonly<Record<string, string | number | boolean>>;\n readonly applications: ReadonlyArray<Application>;\n};\n\n/**\n * Result of loading the application\n */\nexport interface LoadApplicationResult {\n /** Fully initialized application */\n application: Application;\n /** Workflow bundling result (if workflows were bundled) */\n workflowBuildResult?: BundleWorkflowJobsResult;\n}\n\ntype DefineTailorDBResult = {\n tailorDBServices: TailorDBService[];\n externalTailorDBNamespaces: string[];\n subgraphs: Array<{ Type: string; Name: string }>;\n};\n\nfunction defineTailorDB(\n config: TailorDBServiceInput | undefined,\n pluginManager?: PluginManager,\n): DefineTailorDBResult {\n const tailorDBServices: TailorDBService[] = [];\n const externalTailorDBNamespaces: string[] = [];\n const subgraphs: Array<{ Type: string; Name: string }> = [];\n\n if (!config) {\n return { tailorDBServices, externalTailorDBNamespaces, subgraphs };\n }\n\n for (const [namespace, serviceConfig] of Object.entries(config)) {\n if (\"external\" in serviceConfig) {\n externalTailorDBNamespaces.push(namespace);\n } else {\n // Parse config through schema to normalize gqlOperations\n const parsedConfig = TailorDBServiceConfigSchema.parse(serviceConfig);\n const tailorDB = createTailorDBService({ namespace, config: parsedConfig, pluginManager });\n tailorDBServices.push(tailorDB);\n }\n subgraphs.push({ Type: \"tailordb\", Name: namespace });\n }\n\n return { tailorDBServices, externalTailorDBNamespaces, subgraphs };\n}\n\ntype DefineResolverResult = {\n resolverServices: ResolverService[];\n subgraphs: Array<{ Type: string; Name: string }>;\n};\n\nfunction defineResolver(config: ResolverServiceInput | undefined): DefineResolverResult {\n const resolverServices: ResolverService[] = [];\n const subgraphs: Array<{ Type: string; Name: string }> = [];\n\n if (!config) {\n return { resolverServices, subgraphs };\n }\n\n for (const [namespace, serviceConfig] of Object.entries(config)) {\n if (!(\"external\" in serviceConfig)) {\n const resolverService = createResolverService(namespace, serviceConfig);\n resolverServices.push(resolverService);\n }\n subgraphs.push({ Type: \"pipeline\", Name: namespace });\n }\n\n return { resolverServices, subgraphs };\n}\n\ntype DefineIdpResult = {\n idpServices: IdP[];\n subgraphs: Array<{ Type: string; Name: string }>;\n};\n\nfunction defineIdp(config: readonly IdPConfig[] | undefined): DefineIdpResult {\n const idpServices: IdP[] = [];\n const subgraphs: Array<{ Type: string; Name: string }> = [];\n\n if (!config) {\n return { idpServices, subgraphs };\n }\n\n const idpNames = new Set<string>();\n config.forEach((idpConfig) => {\n const name = idpConfig.name;\n if (idpNames.has(name)) {\n throw new Error(`IdP with name \"${name}\" already defined.`);\n }\n idpNames.add(name);\n if (!(\"external\" in idpConfig)) {\n const idp = IdPSchema.parse(idpConfig);\n idpServices.push(idp);\n }\n subgraphs.push({ Type: \"idp\", Name: name });\n });\n\n return { idpServices, subgraphs };\n}\n\ntype DefineAuthResult = {\n authService: AuthService | undefined;\n subgraphs: Array<{ Type: string; Name: string }>;\n};\n\nfunction defineAuth(\n config: AuthConfig | undefined,\n tailorDBServices: ReadonlyArray<TailorDBService>,\n externalTailorDBNamespaces: ReadonlyArray<string>,\n): DefineAuthResult {\n const subgraphs: Array<{ Type: string; Name: string }> = [];\n\n if (!config) {\n return { authService: undefined, subgraphs };\n }\n\n let authService: AuthService | undefined;\n if (!(\"external\" in config)) {\n authService = createAuthService(config, tailorDBServices, externalTailorDBNamespaces);\n }\n subgraphs.push({ Type: \"auth\", Name: config.name });\n\n return { authService, subgraphs };\n}\n\nfunction defineExecutor(\n config: ExecutorServiceInput | undefined,\n hasPluginExecutors: boolean,\n): ExecutorService | undefined {\n if (!config && !hasPluginExecutors) {\n return undefined;\n }\n return createExecutorService({ config: config ?? { files: [] } });\n}\n\nfunction defineWorkflow(config: WorkflowServiceConfig | undefined): WorkflowService | undefined {\n if (!config) {\n return undefined;\n }\n return createWorkflowService({ config });\n}\n\nfunction defineStaticWebsites(\n websites: readonly StaticWebsiteInput[] | undefined,\n): StaticWebsite[] {\n const staticWebsiteServices: StaticWebsite[] = [];\n const websiteNames = new Set<string>();\n\n (websites ?? []).forEach((config) => {\n const website = StaticWebsiteSchema.parse(config);\n if (websiteNames.has(website.name)) {\n throw new Error(`Static website with name \"${website.name}\" already defined.`);\n }\n websiteNames.add(website.name);\n staticWebsiteServices.push(website);\n });\n\n return staticWebsiteServices;\n}\n\nfunction defineSecretManager(config: AppConfig[\"secrets\"]): SecretVault[] {\n if (!config) {\n return [];\n }\n\n // Create a plain object with only enumerable properties (vault data).\n // Zod v4's z.record() uses Reflect.ownKeys() which sees non-enumerable\n // properties like get/getAll attached by defineSecretManager() in the configure layer.\n const data = Object.fromEntries(Object.entries(config));\n const parsed = SecretsSchema.parse(data);\n\n return Object.entries(parsed).map(([vaultName, vaultSecrets]) => ({\n vaultName,\n secrets: Object.entries(vaultSecrets).map(([name, value]) => ({ name, value })),\n }));\n}\n\ntype DefineServicesResult = {\n tailordbResult: DefineTailorDBResult;\n resolverResult: DefineResolverResult;\n idpResult: DefineIdpResult;\n authResult: DefineAuthResult;\n staticWebsiteServices: StaticWebsite[];\n secrets: SecretVault[];\n};\n\nfunction defineServices(config: AppConfig, pluginManager?: PluginManager): DefineServicesResult {\n const tailordbResult = defineTailorDB(config.db, pluginManager);\n const resolverResult = defineResolver(config.resolver);\n const idpResult = defineIdp(config.idp);\n const authResult = defineAuth(\n config.auth,\n tailordbResult.tailorDBServices,\n tailordbResult.externalTailorDBNamespaces,\n );\n const staticWebsiteServices = defineStaticWebsites(config.staticWebsites);\n const secrets = defineSecretManager(config.secrets);\n return { tailordbResult, resolverResult, idpResult, authResult, staticWebsiteServices, secrets };\n}\n\nfunction buildApplication(params: {\n config: AppConfig;\n tailordbResult: DefineTailorDBResult;\n resolverResult: DefineResolverResult;\n idpResult: DefineIdpResult;\n authResult: DefineAuthResult;\n executorService: ExecutorService | undefined;\n workflowService: WorkflowService | undefined;\n staticWebsiteServices: StaticWebsite[];\n secrets: SecretVault[];\n env: Record<string, string | number | boolean>;\n}): Application {\n const application: Application = {\n name: params.config.name,\n config: params.config,\n subgraphs: [\n ...params.tailordbResult.subgraphs,\n ...params.resolverResult.subgraphs,\n ...params.idpResult.subgraphs,\n ...params.authResult.subgraphs,\n ],\n tailorDBServices: params.tailordbResult.tailorDBServices,\n externalTailorDBNamespaces: params.tailordbResult.externalTailorDBNamespaces,\n resolverServices: params.resolverResult.resolverServices,\n idpServices: params.idpResult.idpServices,\n authService: params.authResult.authService,\n executorService: params.executorService,\n workflowService: params.workflowService,\n staticWebsiteServices: params.staticWebsiteServices,\n secrets: params.secrets,\n env: params.env,\n get applications() {\n return [application];\n },\n };\n return application;\n}\n\n/**\n * Parameters for defining an application\n */\nexport interface DefineApplicationParams {\n /** Application configuration object (must be loaded via loadConfig) */\n config: LoadedConfig;\n /** Plugin manager for processing plugins */\n pluginManager?: PluginManager;\n /** Optional bundle cache for skipping unchanged builds */\n bundleCache?: BundleCache;\n}\n\n/**\n * Define a Tailor application from the given configuration.\n * This is a lightweight, synchronous function that creates the application\n * structure without loading types or bundling files.\n * @param params - Parameters for defining the application\n * @returns Configured application instance\n */\nexport function defineApplication(params: DefineApplicationParams): Application {\n const { config, pluginManager } = params;\n const services = defineServices(config, pluginManager);\n // Plugin executors are not known at define-time; generate/apply flows handle them after type loading.\n const executorService = defineExecutor(config.executor, false);\n const workflowService = defineWorkflow(config.workflow);\n\n return buildApplication({\n config,\n ...services,\n executorService,\n workflowService,\n env: config.env ?? {},\n });\n}\n\n/**\n * Generate plugin type and executor files if a plugin manager is provided.\n * Collects source type info from TailorDB services and delegates to PluginManager.\n * @param pluginManager - Plugin manager instance (skips if undefined)\n * @param tailorDBServices - TailorDB services to collect type source info from\n * @param configPath - Path to tailor.config.ts for resolving plugin imports\n * @returns Generated executor file paths\n */\nexport function generatePluginFilesIfNeeded(\n pluginManager: PluginManager | undefined,\n tailorDBServices: ReadonlyArray<TailorDBService>,\n configPath: string,\n): string[] {\n if (!pluginManager) return [];\n\n const sourceTypeInfoMap = new Map<string, { filePath: string; exportName: string }>();\n for (const db of tailorDBServices) {\n const typeSourceInfo = db.typeSourceInfo;\n for (const [typeName, sourceInfo] of Object.entries(typeSourceInfo)) {\n if (sourceInfo.filePath) {\n sourceTypeInfoMap.set(typeName, {\n filePath: sourceInfo.filePath,\n exportName: sourceInfo.exportName,\n });\n }\n }\n }\n\n return pluginManager.generatePluginFiles({\n outputDir: path.join(getDistDir(), \"plugin\"),\n sourceTypeInfoMap,\n configPath,\n typeGenerator: generatePluginTypeFiles,\n executorGenerator: generatePluginExecutorFiles,\n });\n}\n\n/**\n * Load and fully initialize a Tailor application.\n * This performs all I/O-heavy operations: loading types, processing plugins,\n * generating plugin files, bundling, and loading definitions for validation.\n * @param params - Parameters for defining and loading the application\n * @returns Fully initialized application with workflow results\n */\nexport async function loadApplication(\n params: DefineApplicationParams,\n): Promise<LoadApplicationResult> {\n const { config, pluginManager, bundleCache } = params;\n\n // 1. Define services (synchronous)\n const { tailordbResult, resolverResult, idpResult, authResult, staticWebsiteServices, secrets } =\n defineServices(config, pluginManager);\n\n // 2. Load TailorDB types and process namespace plugins\n for (const tailordb of tailordbResult.tailorDBServices) {\n await tailordb.loadTypes();\n await tailordb.processNamespacePlugins();\n }\n\n // 3. Generate plugin files and determine executor file paths\n const pluginExecutorFiles = generatePluginFilesIfNeeded(\n pluginManager,\n tailordbResult.tailorDBServices,\n config.path,\n );\n\n // 4. Determine final executorService (const, no reassignment)\n const executorService = defineExecutor(config.executor, pluginExecutorFiles.length > 0);\n\n // 5. Load and collect workflows\n const workflowService = defineWorkflow(config.workflow);\n if (workflowService) {\n await workflowService.loadWorkflows();\n }\n\n // 6. Build trigger context for workflow/job trigger transformation\n const triggerContext = await buildTriggerContext(config.workflow);\n\n // 6.5. Resolve inline sourcemap setting\n const inlineSourcemap = resolveInlineSourcemap(config.inlineSourcemap);\n\n // 7. Bundle resolvers\n for (const pipeline of resolverResult.resolverServices) {\n await bundleResolvers(\n pipeline.namespace,\n pipeline.config,\n triggerContext,\n bundleCache,\n inlineSourcemap,\n );\n }\n\n // 8. Bundle executors\n if (executorService) {\n await bundleExecutors({\n config: executorService.config,\n triggerContext,\n additionalFiles: [...pluginExecutorFiles],\n cache: bundleCache,\n inlineSourcemap,\n });\n }\n\n // 9. Bundle workflows\n let workflowBuildResult: BundleWorkflowJobsResult | undefined;\n if (workflowService && workflowService.jobs.length > 0) {\n const mainJobNames = workflowService.workflowSources.map((ws) => ws.workflow.mainJob.name);\n workflowBuildResult = await bundleWorkflowJobs(\n workflowService.jobs,\n mainJobNames,\n config.env ?? {},\n triggerContext,\n bundleCache,\n inlineSourcemap,\n );\n }\n\n // 9.5. Bundle auth hooks\n if (authResult.authService?.config.hooks?.beforeLogin) {\n const authName = authResult.authService.config.name;\n await bundleAuthHooks({\n configPath: config.path,\n authName,\n handlerAccessPath: `auth.hooks.beforeLogin.handler`,\n triggerContext,\n cache: bundleCache,\n inlineSourcemap,\n });\n }\n\n // 10. Load resolver and executor definitions (for validation/logging)\n for (const pipeline of resolverResult.resolverServices) {\n await pipeline.loadResolvers();\n }\n if (executorService) {\n await executorService.loadExecutors();\n if (pluginExecutorFiles.length > 0) {\n await executorService.loadPluginExecutorFiles([...pluginExecutorFiles]);\n }\n }\n if (workflowService) {\n workflowService.printLoadedWorkflows();\n }\n logger.newline();\n\n // 11. Build immutable Application\n const application = buildApplication({\n config,\n tailordbResult,\n resolverResult,\n idpResult,\n authResult,\n executorService,\n workflowService,\n staticWebsiteServices,\n secrets,\n env: config.env ?? {},\n });\n\n return { application, workflowBuildResult };\n}\n"],"mappings":"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"}