From 173d38e68805780b22322d8cba9f80538c98846d Mon Sep 17 00:00:00 2001 From: wehub-resource-sync Date: Mon, 13 Jul 2026 13:09:14 +0800 Subject: [PATCH] chore: import upstream snapshot with attribution --- .cargo/config.toml | 21 + .gitattributes | 13 + .github/ISSUE_TEMPLATE/bug_report.yml | 64 + .github/ISSUE_TEMPLATE/config.yml | 5 + .../ISSUE_TEMPLATE/database_compatibility.yml | 55 + .github/ISSUE_TEMPLATE/feature_request.yml | 69 + .github/ISSUE_TEMPLATE/question.yml | 44 + .../augment-latest-json-jdbc-plugin.mjs | 31 + .github/scripts/bump-agent-versions.mjs | 212 + .github/scripts/bump-jdbc-plugin-version.mjs | 92 + .github/scripts/check-jdbc-plugin-version.mjs | 53 + .github/scripts/i18n-autofill.mjs | 544 + .github/scripts/issue-claim.mjs | 59 + .github/scripts/label-issue-database.mjs | 570 + .github/scripts/sync-atomgit-release.mjs | 343 + .github/scripts/sync-changelog.mjs | 292 + .github/scripts/sync-cnb-release.mjs | 167 + .github/scripts/sync-project-triage.mjs | 389 + .github/workflows/1panel-appstore.yml | 59 + .github/workflows/agents-release.yml | 620 + .github/workflows/ci.yml | 248 + .github/workflows/docker-dev.yml | 126 + .github/workflows/docs.yml | 35 + .github/workflows/i18n-autofill.yml | 154 + .github/workflows/issue-claim.yml | 30 + .github/workflows/issue-database-label.yml | 30 + .github/workflows/mcp-release.yml | 342 + .github/workflows/notify.yml | 200 + .github/workflows/project-triage.yml | 48 + .github/workflows/publish-packages.yml | 382 + .github/workflows/release.yml | 557 + .github/workflows/spam-comment-guard.yml | 41 + .../workflows/sync-atomgit-release-assets.yml | 62 + .github/workflows/sync-changelog.yml | 46 + .github/workflows/sync-cnb-release-assets.yml | 40 + .github/workflows/sync-mirrors.yml | 80 + .gitignore | 66 + .husky/pre-commit | 20 + .nvmrc | 1 + .oxfmtrc.json | 9 + CONTRIBUTING.md | 143 + CONTRIBUTING.zh-CN.md | 143 + Cargo.lock | 10781 ++++++++++++++ Cargo.toml | 19 + LICENSE | 201 + Makefile | 90 + README-NIX.md | 172 + README.md | 433 + README.wehub.md | 7 + README.zh-CN.md | 427 + SECURITY.md | 30 + agents/.gitignore | 8 + agents/README.md | 114 + agents/README.zh-CN.md | 114 + agents/build.gradle | 54 + agents/common/build.gradle | 3 + .../java/com/dbx/agent/AbstractJdbcAgent.java | 240 + .../java/com/dbx/agent/AgentProtocol.java | 163 + .../java/com/dbx/agent/BaseDatabaseAgent.java | 134 + .../java/com/dbx/agent/BatchExecutor.java | 98 + .../com/dbx/agent/CheckConstraintInfo.java | 19 + .../main/java/com/dbx/agent/ColumnInfo.java | 176 + .../agent/CompletionAssistantCandidate.java | 41 + .../CompletionAssistantCandidateKind.java | 22 + .../agent/CompletionAssistantMatchMode.java | 10 + .../agent/CompletionAssistantObjectKind.java | 22 + .../dbx/agent/CompletionAssistantRequest.java | 34 + .../agent/CompletionAssistantResponse.java | 19 + .../com/dbx/agent/ConfiguredJdbcAgent.java | 222 + .../java/com/dbx/agent/ConnectParams.java | 243 + .../java/com/dbx/agent/DatabaseAgent.java | 211 + .../main/java/com/dbx/agent/DatabaseInfo.java | 41 + .../main/java/com/dbx/agent/DdlBuilder.java | 228 + .../java/com/dbx/agent/EwkbWktDecoder.java | 671 + .../com/dbx/agent/ExecuteQueryOptions.java | 67 + .../com/dbx/agent/ExecuteQueryParams.java | 78 + .../java/com/dbx/agent/ForeignKeyInfo.java | 78 + .../main/java/com/dbx/agent/IndexInfo.java | 141 + .../java/com/dbx/agent/JdbcAgentProfile.java | 223 + .../main/java/com/dbx/agent/JdbcExecutor.java | 706 + .../java/com/dbx/agent/JdbcIdentifiers.java | 16 + .../com/dbx/agent/JdbcSchemaSwitcher.java | 68 + .../java/com/dbx/agent/JsonRpcServer.java | 373 + .../dbx/agent/MetadataListConstraints.java | 221 + .../com/dbx/agent/MetadataSqlSupport.java | 95 + .../main/java/com/dbx/agent/ObjectInfo.java | 82 + .../main/java/com/dbx/agent/ObjectSource.java | 98 + .../java/com/dbx/agent/PostgresLikeAgent.java | 554 + .../dbx/agent/PostgresLikeAgentProfile.java | 30 + .../java/com/dbx/agent/QueryPageOptions.java | 82 + .../java/com/dbx/agent/QueryPageParams.java | 90 + .../java/com/dbx/agent/QueryPageResult.java | 163 + .../main/java/com/dbx/agent/QueryResult.java | 137 + .../java/com/dbx/agent/SchemaTableParams.java | 51 + .../com/dbx/agent/StandardJdbcMetadata.java | 716 + .../main/java/com/dbx/agent/TableInfo.java | 98 + .../com/dbx/agent/TransactionExecutor.java | 112 + .../main/java/com/dbx/agent/TriggerInfo.java | 63 + .../src/main/resources/agent-protocol-v1.json | 88 + .../com/dbx/agent/AbstractJdbcAgentTest.java | 481 + .../java/com/dbx/agent/BatchExecutorTest.java | 100 + .../agent/CommonJavaCompatibilityTest.java | 764 + .../dbx/agent/ConfiguredJdbcAgentTest.java | 91 + .../com/dbx/agent/EwkbWktDecoderTest.java | 163 + .../agent/JdbcAgentProfileExtendedTest.java | 109 + .../java/com/dbx/agent/JdbcExecutorTest.java | 265 + .../agent/MetadataConstraintCoverageTest.java | 114 + .../com/dbx/agent/PostgresLikeAgentTest.java | 524 + .../dbx/agent/StandardJdbcMetadataTest.java | 776 + agents/docs/agent-authoring.md | 318 + .../examples/jdbc-agent-template/README.md | 20 + .../examples/jdbc-agent-template/build.gradle | 64 + .../jdbc-agent-template/settings.gradle | 21 + .../com/dbx/agent/template/TemplateAgent.java | 27 + .../dbx/agent/template/TemplateAgentTest.java | 23 + agents/docs/release-checklist.md | 193 + agents/drivers/access/build.gradle | 10 + .../com/dbx/agent/access/AccessAgent.java | 372 + .../agent/access/EncryptedAccessOpener.java | 20 + .../com/dbx/agent/access/AccessAgentTest.java | 155 + .../src/test/resources/db2007-enc.accdb | Bin 0 -> 430080 bytes agents/drivers/bigquery/build.gradle | 13 + .../com/dbx/agent/bigquery/BigQueryAgent.java | 234 + .../bigquery/BigQueryAgentMetadataTest.java | 65 + .../dbx/agent/bigquery/BigQueryAgentTest.java | 16 + agents/drivers/cassandra/build.gradle | 10 + .../dbx/agent/cassandra/CassandraAgent.java | 194 + .../agent/cassandra/CassandraAgentTest.java | 52 + agents/drivers/dameng/build.gradle | 13 + agents/drivers/dameng/libs/.gitkeep | 0 .../com/dbx/agent/dameng/DamengAgent.java | 1327 ++ .../agent/dameng/DamengAgentMetadataTest.java | 596 + .../agent/dameng/DamengAgentPagingTest.java | 277 + .../com/dbx/agent/dameng/DamengAgentTest.java | 61 + .../dbx/agent/dameng/DamengAgentUrlTest.java | 29 + agents/drivers/databend/build.gradle | 9 + .../com/dbx/agent/databend/DatabendAgent.java | 299 + .../dbx/agent/databend/DatabendAgentTest.java | 196 + agents/drivers/databricks/build.gradle | 10 + .../dbx/agent/databricks/DatabricksAgent.java | 41 + .../agent/databricks/DatabricksAgentTest.java | 22 + agents/drivers/db2/build.gradle | 10 + .../main/java/com/dbx/agent/db2/Db2Agent.java | 515 + .../java/com/dbx/agent/db2/Db2AgentTest.java | 195 + agents/drivers/etcd/build.gradle | 11 + .../java/com/dbx/agent/etcd/EtcdAgent.java | 420 + .../com/dbx/agent/etcd/EtcdAgentTest.java | 55 + agents/drivers/exasol/build.gradle | 10 + .../com/dbx/agent/exasol/ExasolAgent.java | 22 + agents/drivers/firebird/build.gradle | 10 + .../com/dbx/agent/firebird/FirebirdAgent.java | 22 + agents/drivers/gbase8a/build.gradle | 12 + .../com/dbx/agent/gbase8a/Gbase8aAgent.java | 345 + .../dbx/agent/gbase8a/Gbase8aAgentTest.java | 265 + agents/drivers/gbase8s/build.gradle | 12 + .../com/dbx/agent/gbase8s/Gbase8sAgent.java | 859 ++ .../dbx/agent/gbase8s/Gbase8sAgentTest.java | 439 + agents/drivers/goldendb/build.gradle | 10 + agents/drivers/goldendb/libs/.gitkeep | 0 .../com/dbx/agent/goldendb/GoldendbAgent.java | 555 + .../goldendb/GoldendbAgentMetadataTest.java | 54 + .../dbx/agent/goldendb/GoldendbAgentTest.java | 16 + agents/drivers/h2-legacy/build.gradle | 13 + .../com/dbx/agent/h2legacy/H2LegacyAgent.java | 10 + agents/drivers/h2/build.gradle | 10 + .../main/java/com/dbx/agent/h2/H2Agent.java | 516 + .../java/com/dbx/agent/h2/H2AgentTest.java | 165 + agents/drivers/highgo/build.gradle | 16 + .../com/dbx/agent/highgo/HighgoAgent.java | 20 + .../com/dbx/agent/highgo/HighgoAgentTest.java | 46 + agents/drivers/hive/build.gradle | 11 + .../java/com/dbx/agent/hive/HiveAgent.java | 274 + .../agent/hive/HiveAgentExecutionTest.java | 77 + .../dbx/agent/hive/HiveAgentMetadataTest.java | 186 + .../com/dbx/agent/hive/HiveAgentTest.java | 42 + agents/drivers/informix/build.gradle | 10 + .../com/dbx/agent/informix/InformixAgent.java | 556 + .../informix/InformixAgentExecutionTest.java | 16 + .../dbx/agent/informix/InformixAgentTest.java | 161 + agents/drivers/iotdb/build.gradle | 10 + .../java/com/dbx/agent/iotdb/IoTDBAgent.java | 46 + .../com/dbx/agent/iotdb/IoTDBAgentTest.java | 32 + agents/drivers/iris/build.gradle | 9 + .../java/com/dbx/agent/iris/IrisAgent.java | 159 + .../com/dbx/agent/iris/IrisAgentTest.java | 154 + agents/drivers/kafka/build.gradle | 12 + .../java/com/dbx/agent/kafka/KafkaAgent.java | 1262 ++ .../com/dbx/agent/kafka/KafkaAgentTest.java | 141 + agents/drivers/kingbase/build.gradle | 10 + agents/drivers/kingbase/libs/.gitkeep | 0 .../com/dbx/agent/kingbase/KingbaseAgent.java | 839 ++ .../dbx/agent/kingbase/KingbaseAgentTest.java | 603 + agents/drivers/kylin/build.gradle | 10 + .../java/com/dbx/agent/kylin/KylinAgent.java | 144 + .../com/dbx/agent/kylin/KylinAgentTest.java | 16 + agents/drivers/mongodb/build.gradle | 11 + .../com/dbx/agent/mongodb/MongoAgent.java | 927 ++ .../com/dbx/agent/mongodb/MongoAgentTest.java | 517 + agents/drivers/neo4j/build.gradle | 10 + .../java/com/dbx/agent/neo4j/Neo4jAgent.java | 350 + .../com/dbx/agent/neo4j/Neo4jAgentTest.java | 183 + agents/drivers/oceanbase-oracle/build.gradle | 10 + .../oceanbaseoracle/OceanBaseOracleAgent.java | 623 + .../OceanBaseOracleAgentTest.java | 352 + agents/drivers/oracle-go/.gitignore | 2 + agents/drivers/oracle-go/README.md | 36 + agents/drivers/oracle-go/go.mod | 7 + agents/drivers/oracle-go/go.sum | 4 + agents/drivers/oracle-go/main.go | 2902 ++++ agents/drivers/oracle-go/main_test.go | 865 ++ agents/drivers/oscar/build.gradle | 12 + agents/drivers/oscar/libs/oscarJDBC8.jar | Bin 0 -> 3639760 bytes .../java/com/dbx/agent/oscar/OscarAgent.java | 21 + .../com/dbx/agent/oscar/OscarAgentTest.java | 16 + agents/drivers/saphana/build.gradle | 10 + .../com/dbx/agent/saphana/SapHanaAgent.java | 26 + agents/drivers/snowflake/build.gradle | 10 + .../dbx/agent/snowflake/SnowflakeAgent.java | 381 + .../snowflake/SnowflakeAgentMetadataTest.java | 59 + .../agent/snowflake/SnowflakeAgentTest.java | 16 + agents/drivers/spark/build.gradle | 11 + .../java/com/dbx/agent/spark/SparkAgent.java | 341 + agents/drivers/sqlserver-legacy/build.gradle | 12 + .../sqlserverlegacy/SqlServerLegacyAgent.java | 264 + .../SqlServerLegacyAgentTest.java | 111 + agents/drivers/sundb/build.gradle | 13 + .../java/com/dbx/agent/sundb/SundbAgent.java | 530 + .../agent/sundb/SundbAgentMetadataTest.java | 53 + .../com/dbx/agent/sundb/SundbAgentTest.java | 16 + agents/drivers/tdengine/build.gradle | 10 + .../com/dbx/agent/tdengine/TDengineAgent.java | 743 + .../tdengine/TDengineAgentPagingTest.java | 178 + .../dbx/agent/tdengine/TDengineAgentTest.java | 347 + agents/drivers/teradata/build.gradle | 10 + .../com/dbx/agent/teradata/TeradataAgent.java | 21 + agents/drivers/trino/build.gradle | 10 + .../java/com/dbx/agent/trino/TrinoAgent.java | 345 + .../com/dbx/agent/trino/TrinoAgentTest.java | 37 + agents/drivers/vastbase/build.gradle | 10 + agents/drivers/vastbase/libs/.gitkeep | 0 .../com/dbx/agent/vastbase/VastbaseAgent.java | 61 + .../dbx/agent/vastbase/VastbaseAgentTest.java | 26 + agents/drivers/vertica/build.gradle | 10 + .../com/dbx/agent/vertica/VerticaAgent.java | 21 + agents/drivers/xugu/README.md | 36 + agents/drivers/xugu/go.mod | 5 + agents/drivers/xugu/go.sum | 2 + agents/drivers/xugu/main.go | 2052 +++ agents/drivers/xugu/main_test.go | 529 + agents/drivers/yashandb/build.gradle | 9 + .../com/dbx/agent/yashandb/YashandbAgent.java | 22 + .../dbx/agent/yashandb/YashandbAgentTest.java | 30 + agents/drivers/zookeeper/build.gradle | 13 + .../dbx/agent/zookeeper/ZooKeeperAgent.java | 664 + .../agent/zookeeper/ZooKeeperAgentTest.java | 596 + agents/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 48462 bytes .../gradle/wrapper/gradle-wrapper.properties | 9 + agents/gradlew | 248 + agents/gradlew.bat | 82 + agents/metadata-constraint-coverage.tsv | 24 + agents/opengauss/build.gradle | 10 + .../dbx/agent/opengauss/OpenGaussAgent.java | 20 + .../agent/opengauss/OpenGaussAgentTest.java | 21 + agents/scripts/build_offline_zip.sh | 64 + agents/scripts/release.sh | 8 + agents/scripts/validate_agent_jars.py | 68 + agents/scripts/validate_agents.py | 303 + agents/scripts/validate_agents_test.py | 427 + agents/settings.gradle | 16 + agents/test-support/build.gradle | 4 + .../com/dbx/agent/test/JdbcAgentFake.java | 177 + .../agent/test/JdbcConnectedAgentTest.java | 18 + .../agent/test/JdbcExecutionBehaviorTest.java | 174 + .../test/JdbcFakeExecutionBehaviorTest.java | 69 + .../agent/test/JdbcMetadataBehaviorTest.java | 67 + .../dbx/agent/test/JdbcMetadataSqlFake.java | 172 + .../java/com/dbx/agent/test/TestSupport.java | 31 + agents/versions.json | 43 + apps/README.md | 9 + apps/desktop/components.json | 25 + apps/desktop/index.html | 28 + apps/desktop/public/favicon.png | Bin 0 -> 88141 bytes apps/desktop/public/fonts/Geist-LICENSE.txt | 93 + .../fonts/geist-latin-ext-wght-normal.woff2 | Bin 0 -> 16512 bytes .../fonts/geist-latin-wght-normal.woff2 | Bin 0 -> 29400 bytes apps/desktop/public/icon-preview-black.png | Bin 0 -> 31236 bytes apps/desktop/public/icon-preview-default.png | Bin 0 -> 48157 bytes apps/desktop/public/icons/ai/alibabacloud.svg | 1 + apps/desktop/public/icons/ai/anthropic.svg | 1 + apps/desktop/public/icons/ai/codex.svg | 1 + apps/desktop/public/icons/ai/deepseek.svg | 1 + apps/desktop/public/icons/ai/googlegemini.svg | 1 + apps/desktop/public/icons/ai/ollama.svg | 1 + apps/desktop/public/icons/ai/openai.svg | 1 + apps/desktop/public/icons/database/access.png | Bin 0 -> 34094 bytes .../public/icons/database/apache_kylin.svg | 1 + .../public/icons/database/bigquery.svg | 1 + .../public/icons/database/cassandra.svg | 1 + .../public/icons/database/chromadb.svg | 6 + .../public/icons/database/clickhouse.svg | 1 + .../public/icons/database/cloudflare-d1.svg | 4 + .../public/icons/database/cockroachdb.svg | 1 + .../public/icons/database/databend.svg | 16 + .../public/icons/database/databricks.webp | Bin 0 -> 706 bytes apps/desktop/public/icons/database/db2.svg | 1 + apps/desktop/public/icons/database/dm.svg | 1 + apps/desktop/public/icons/database/doris.svg | 1 + apps/desktop/public/icons/database/dremio.svg | 44 + apps/desktop/public/icons/database/duckdb.svg | 1 + .../public/icons/database/elasticsearch.svg | 1 + apps/desktop/public/icons/database/etcd.svg | 4 + .../desktop/public/icons/database/exasol.webp | Bin 0 -> 2876 bytes .../public/icons/database/firebird.webp | Bin 0 -> 384 bytes .../desktop/public/icons/database/gaussdb.svg | 1 + apps/desktop/public/icons/database/gbase.webp | Bin 0 -> 740 bytes .../public/icons/database/goldendb.png | Bin 0 -> 837 bytes .../public/icons/database/greatsql.webp | Bin 0 -> 2552 bytes apps/desktop/public/icons/database/h2.svg | 1 + apps/desktop/public/icons/database/highgo.png | Bin 0 -> 2872 bytes apps/desktop/public/icons/database/hive.svg | 1 + .../public/icons/database/influxdb.svg | 10 + .../public/icons/database/informix.svg | 1 + apps/desktop/public/icons/database/iotdb.svg | 57 + apps/desktop/public/icons/database/iris.png | Bin 0 -> 675 bytes apps/desktop/public/icons/database/kafka.svg | 26 + .../public/icons/database/kingbase.svg | 1 + apps/desktop/public/icons/database/kwdb.svg | 1 + .../public/icons/database/manticoresearch.png | Bin 0 -> 10184 bytes .../desktop/public/icons/database/mariadb.svg | 1 + apps/desktop/public/icons/database/milvus.png | Bin 0 -> 36642 bytes .../desktop/public/icons/database/mongodb.svg | 1 + apps/desktop/public/icons/database/mysql.svg | 1 + apps/desktop/public/icons/database/nacos.png | Bin 0 -> 1529 bytes apps/desktop/public/icons/database/neo4j.svg | 1 + .../public/icons/database/oceanbase.svg | 1 + .../public/icons/database/opengauss.svg | 1 + apps/desktop/public/icons/database/oracle.svg | 1 + .../public/icons/database/polardb.webp | Bin 0 -> 174 bytes .../public/icons/database/postgres.svg | 1 + apps/desktop/public/icons/database/presto.svg | 1 + apps/desktop/public/icons/database/pulsar.svg | 3 + apps/desktop/public/icons/database/qdrant.svg | 35 + .../desktop/public/icons/database/questdb.svg | 25 + apps/desktop/public/icons/database/redis.svg | 1 + .../public/icons/database/redshift.svg | 1 + apps/desktop/public/icons/database/rqlite.png | Bin 0 -> 5029 bytes .../public/icons/database/saphana.webp | Bin 0 -> 240 bytes .../public/icons/database/selectdb.svg | 1 + .../public/icons/database/snowflake.svg | 1 + .../public/icons/database/spark-logo.png | Bin 0 -> 26999 bytes apps/desktop/public/icons/database/sqlite.svg | 1 + .../public/icons/database/sqlserver.svg | 1 + .../public/icons/database/starrocks.svg | 1 + apps/desktop/public/icons/database/sundb.svg | 1 + .../public/icons/database/tdengine.svg | 1 + apps/desktop/public/icons/database/tdsql.webp | Bin 0 -> 526 bytes .../public/icons/database/teradata.webp | Bin 0 -> 816 bytes apps/desktop/public/icons/database/tidb.svg | 1 + apps/desktop/public/icons/database/trino.svg | 1 + apps/desktop/public/icons/database/turso.png | Bin 0 -> 17670 bytes .../public/icons/database/vastbase.png | Bin 0 -> 2051 bytes .../public/icons/database/vertica.webp | Bin 0 -> 20882 bytes .../public/icons/database/weaviate.png | Bin 0 -> 2198 bytes apps/desktop/public/icons/database/xugu.png | Bin 0 -> 9209 bytes .../public/icons/database/yashandb.png | Bin 0 -> 15267 bytes .../public/icons/database/zookeeper.svg | 19 + apps/desktop/public/logo-black.png | Bin 0 -> 29484 bytes apps/desktop/public/logo.png | Bin 0 -> 144247 bytes apps/desktop/src/App.vue | 2164 +++ .../src/components/admin/DamengJobAdmin.vue | 480 + .../components/admin/DatabaseUserAdmin.vue | 557 + .../desktop/src/components/auth/LoginPage.vue | 90 + .../src/components/chart/QueryChart.vue | 178 + .../common/ElasticsearchJsonResponsePanel.vue | 120 + .../src/components/common/JsonTree.vue | 317 + .../common/ProductionContextBadge.vue | 20 + .../components/common/QueryErrorActions.vue | 29 + .../components/common/QueryLoadingState.vue | 63 + .../config/ConfigPassphraseDialog.vue | 97 + .../config/DriverInstallProgressCircle.vue | 18 + .../components/config/DriverStoreDialog.vue | 1683 +++ .../CloudflareD1ConnectionFields.vue | 33 + .../connection/ConnectionDialog.vue | 5928 ++++++++ .../connection/ConnectionErrorIndicator.vue | 52 + .../connection/TunnelProfileManager.vue | 258 + .../diagram/SchemaDiagramDialog.vue | 1149 ++ .../src/components/diff/DataCompareDialog.vue | 1285 ++ .../src/components/diff/DiffHunkBuilder.ts | 297 + .../src/components/diff/DiffSvgConnector.vue | 40 + .../diff/SchemaDiffConfigSelector.vue | 201 + .../components/diff/SchemaDiffConfigStep.vue | 480 + .../components/diff/SchemaDiffDdlPanel.vue | 390 + .../components/diff/SchemaDiffDeployStep.vue | 344 + .../src/components/diff/SchemaDiffDialog.vue | 887 ++ .../components/diff/SchemaDiffObjectTree.vue | 245 + .../diff/SchemaDiffOptionsPanel.vue | 162 + .../components/document/DocumentBrowser.vue | 1263 ++ .../src/components/document/JsonEditNode.vue | 329 + .../document/MongoBucketBrowser.vue | 716 + .../document/MongoGridFsBrowser.vue | 344 + .../src/components/editor/AiAssistant.vue | 2299 +++ .../src/components/editor/ColumnInfoPanel.vue | 115 + .../components/editor/DangerConfirmDialog.vue | 101 + .../components/editor/EditorSearchPanel.vue | 459 + .../editor/EditorSettingsDialog.vue | 4883 +++++++ .../src/components/editor/QueryEditor.vue | 3595 +++++ .../src/components/editor/QueryHistory.vue | 526 + .../editor/SqlExecutionTargetPicker.vue | 118 + .../editor/SqlFormatterSettingsPanel.vue | 720 + .../components/editor/SqlParameterDialog.vue | 207 + .../src/components/editor/SqlPreviewPanel.vue | 211 + .../editor/ThemeCustomizerDialog.vue | 570 + .../src/components/etcd/EtcdKeyBrowser.vue | 52 + .../explain/ExplainPlanNodeTree.vue | 57 + .../components/explain/ExplainPlanViewer.vue | 171 + .../export/DatabaseExportDialog.vue | 771 + .../export/ExportProgressDialog.vue | 137 + .../export/ExportProgressPopover.vue | 223 + .../generate/DataGenerateDialog.vue | 1025 ++ .../components/generate/GeneratorSelect.vue | 66 + .../generate/params/AddressParams.vue | 118 + .../generate/params/BarcodeParams.vue | 101 + .../components/generate/params/CityParams.vue | 124 + .../generate/params/ColorParams.vue | 66 + .../generate/params/CommonOptions.vue | 48 + .../generate/params/CompanyNameParams.vue | 96 + .../generate/params/CreditCardDateParams.vue | 90 + .../params/CreditCardNumberParams.vue | 116 + .../generate/params/CreditCardTypeParams.vue | 68 + .../components/generate/params/DateParams.vue | 101 + .../generate/params/DateTimeParams.vue | 140 + .../generate/params/DefaultParams.vue | 9 + .../generate/params/DepartmentParams.vue | 71 + .../generate/params/EmailParams.vue | 58 + .../components/generate/params/EnumParams.vue | 46 + .../generate/params/FileExtensionParams.vue | 79 + .../generate/params/FileNameParams.vue | 93 + .../generate/params/FilePathParams.vue | 152 + .../generate/params/ForeignKeyParams.vue | 118 + .../generate/params/FullNameParams.vue | 106 + .../generate/params/GenderParams.vue | 64 + .../generate/params/GeneratorParamsPanel.vue | 134 + .../generate/params/HostnameParams.vue | 68 + .../generate/params/IdNumberParams.vue | 250 + .../generate/params/ImageBinaryParams.vue | 56 + .../generate/params/IndustryParams.vue | 71 + .../generate/params/IpAddressParams.vue | 70 + .../generate/params/JobTitleParams.vue | 64 + .../generate/params/MacAddressParams.vue | 50 + .../generate/params/MaritalStatusParams.vue | 64 + .../generate/params/NumberParams.vue | 77 + .../generate/params/PaymentMethodParams.vue | 50 + .../generate/params/PhoneParams.vue | 113 + .../generate/params/ProductCategoryParams.vue | 66 + .../generate/params/ProductNameParams.vue | 68 + .../generate/params/RegexParams.vue | 62 + .../generate/params/RegionParams.vue | 118 + .../generate/params/SequenceParams.vue | 65 + .../components/generate/params/SizeParams.vue | 66 + .../components/generate/params/SkuParams.vue | 89 + .../generate/params/SocialIdParams.vue | 39 + .../components/generate/params/TextParams.vue | 55 + .../components/generate/params/TimeParams.vue | 77 + .../generate/params/TitleParams.vue | 64 + .../components/generate/params/UrlParams.vue | 70 + .../components/generate/params/UuidParams.vue | 57 + .../generate/params/WeightUnitParams.vue | 52 + apps/desktop/src/components/grid/DataGrid.vue | 12182 ++++++++++++++++ .../src/components/grid/EnumCellEditor.vue | 118 + .../components/grid/ImagePreviewDialog.vue | 265 + .../components/grid/LayerPreviewDialog.vue | 523 + .../components/grid/TemporalCellEditor.vue | 395 + .../src/components/icons/AiProviderLogo.vue | 43 + apps/desktop/src/components/icons/AppLogo.vue | 12 + .../src/components/icons/DatabaseIcon.vue | 126 + .../components/import/TableImportDialog.vue | 1191 ++ .../src/components/kv/KvKeyBrowser.vue | 767 + .../src/components/layout/AppDialogs.vue | 263 + .../src/components/layout/AppSidebar.vue | 277 + .../src/components/layout/AppTabBar.vue | 994 ++ .../src/components/layout/AppToolbar.vue | 630 + .../layout/CloseActionPromptDialog.vue | 33 + .../src/components/layout/ContentArea.vue | 1670 +++ .../src/components/layout/EditorToolbar.vue | 463 + .../layout/QueryResultToolbarActions.vue | 65 + .../layout/QueryResultViewSwitcher.vue | 73 + .../src/components/layout/SqlFilePanel.vue | 467 + .../src/components/layout/SqlLibraryPanel.vue | 1450 ++ .../src/components/layout/UpdateDialog.vue | 123 + .../src/components/layout/WelcomeScreen.vue | 183 + .../src/components/layout/WindowControls.vue | 28 + .../components/lineage/FieldLineageDialog.vue | 401 + .../desktop/src/components/mq/BrokerPanel.vue | 384 + .../src/components/mq/MonitoringPanel.vue | 1622 ++ .../src/components/mq/MqAdminConsole.vue | 401 + .../src/components/mq/NamespacesPanel.vue | 473 + .../src/components/mq/PermissionsPanel.vue | 833 ++ .../src/components/mq/PoliciesPanel.vue | 426 + .../components/mq/ProducerConsumerPanel.vue | 743 + apps/desktop/src/components/mq/README.md | 30 + .../desktop/src/components/mq/RawApiPanel.vue | 554 + .../src/components/mq/SendMessagePanel.vue | 760 + .../src/components/mq/SubscriptionsPanel.vue | 848 ++ .../src/components/mq/TenantsPanel.vue | 760 + .../desktop/src/components/mq/TopicsPanel.vue | 726 + .../components/nacos/NacosAdminConsole.vue | 1284 ++ .../nacos/NacosConfigDiffDialog.vue | 209 + .../nacos/NacosConfigHistoryDialog.vue | 224 + .../src/components/objects/DdlViewDialog.vue | 243 + .../objects/InstallExtensionDialog.vue | 172 + .../src/components/objects/ObjectBrowser.vue | 3168 ++++ .../components/objects/ObjectSourceDialog.vue | 267 + .../objects/ProcedureExecutionDialog.vue | 229 + .../components/quick-open/QuickOpenDialog.vue | 191 + .../src/components/redis/RedisDashboard.vue | 480 + .../src/components/redis/RedisKeyBrowser.vue | 1473 ++ .../src/components/redis/RedisPubSubPanel.vue | 272 + .../components/redis/RedisSlowlogPanel.vue | 246 + .../src/components/redis/RedisValueViewer.vue | 1616 ++ .../search/DatabaseSearchDialog.vue | 362 + .../src/components/sidebar/ConnectionTree.vue | 1229 ++ .../src/components/sidebar/TreeItem.vue | 6082 ++++++++ .../sidebar/VisibleDatabasesDialog.vue | 230 + .../sidebar/VisibleSchemasDialog.vue | 235 + .../sql-file/SqlFileExecutionDialog.vue | 621 + .../structure/TableStructureEditor.vue | 3203 ++++ .../transfer/DataTransferDialog.vue | 601 + .../src/components/ui/CustomContextMenu.vue | 316 + .../desktop/src/components/ui/ErrorBanner.vue | 71 + .../src/components/ui/LightDropdown.vue | 198 + .../src/components/ui/LightDropdownMenu.vue | 299 + .../src/components/ui/LightTooltip.vue | 261 + .../src/components/ui/PasswordInput.vue | 52 + .../components/ui/TruncatedTextTooltip.vue | 43 + .../desktop/src/components/ui/badge/Badge.vue | 24 + apps/desktop/src/components/ui/badge/index.ts | 24 + .../src/components/ui/button/Button.vue | 24 + .../desktop/src/components/ui/button/index.ts | 35 + .../ui/context-menu/ContextMenu.vue | 17 + .../context-menu/ContextMenuCheckboxItem.vue | 48 + .../ui/context-menu/ContextMenuContent.vue | 35 + .../ui/context-menu/ContextMenuGroup.vue | 12 + .../ui/context-menu/ContextMenuItem.vue | 52 + .../ui/context-menu/ContextMenuLabel.vue | 17 + .../ui/context-menu/ContextMenuPortal.vue | 12 + .../ui/context-menu/ContextMenuRadioGroup.vue | 15 + .../ui/context-menu/ContextMenuRadioItem.vue | 48 + .../ui/context-menu/ContextMenuSeparator.vue | 15 + .../ui/context-menu/ContextMenuShortcut.vue | 14 + .../ui/context-menu/ContextMenuSub.vue | 15 + .../ui/context-menu/ContextMenuSubContent.vue | 31 + .../ui/context-menu/ContextMenuSubTrigger.vue | 32 + .../ui/context-menu/ContextMenuTrigger.vue | 18 + .../src/components/ui/context-menu/index.ts | 14 + .../src/components/ui/dialog/Dialog.vue | 15 + .../src/components/ui/dialog/DialogClose.vue | 12 + .../components/ui/dialog/DialogContent.vue | 65 + .../ui/dialog/DialogDescription.vue | 19 + .../src/components/ui/dialog/DialogFooter.vue | 25 + .../src/components/ui/dialog/DialogHeader.vue | 14 + .../components/ui/dialog/DialogOverlay.vue | 33 + .../ui/dialog/DialogScrollContent.vue | 54 + .../src/components/ui/dialog/DialogTitle.vue | 19 + .../components/ui/dialog/DialogTrigger.vue | 12 + .../desktop/src/components/ui/dialog/index.ts | 10 + .../ui/dropdown-menu/DropdownMenu.vue | 17 + .../DropdownMenuCheckboxItem.vue | 48 + .../ui/dropdown-menu/DropdownMenuContent.vue | 38 + .../ui/dropdown-menu/DropdownMenuGroup.vue | 12 + .../ui/dropdown-menu/DropdownMenuItem.vue | 51 + .../ui/dropdown-menu/DropdownMenuLabel.vue | 18 + .../dropdown-menu/DropdownMenuRadioGroup.vue | 15 + .../dropdown-menu/DropdownMenuRadioItem.vue | 49 + .../dropdown-menu/DropdownMenuSeparator.vue | 19 + .../ui/dropdown-menu/DropdownMenuShortcut.vue | 14 + .../ui/dropdown-menu/DropdownMenuSub.vue | 15 + .../dropdown-menu/DropdownMenuSubContent.vue | 29 + .../dropdown-menu/DropdownMenuSubTrigger.vue | 31 + .../ui/dropdown-menu/DropdownMenuTrigger.vue | 14 + .../src/components/ui/dropdown-menu/index.ts | 16 + .../desktop/src/components/ui/input/Input.vue | 37 + apps/desktop/src/components/ui/input/index.ts | 1 + .../desktop/src/components/ui/label/Label.vue | 17 + apps/desktop/src/components/ui/label/index.ts | 1 + .../ui/option-help-panel/OptionHelpPanel.vue | 21 + .../components/ui/option-help-panel/index.ts | 1 + .../option-help-panel/optionHelpPanel.spec.ts | 13 + .../ui/option-help-panel/optionHelpPanel.ts | 1 + .../src/components/ui/popover/Popover.vue | 15 + .../components/ui/popover/PopoverAnchor.vue | 12 + .../components/ui/popover/PopoverContent.vue | 38 + .../ui/popover/PopoverDescription.vue | 14 + .../components/ui/popover/PopoverHeader.vue | 14 + .../components/ui/popover/PopoverTitle.vue | 14 + .../components/ui/popover/PopoverTrigger.vue | 12 + .../src/components/ui/popover/index.ts | 7 + .../components/ui/scroll-area/ScrollArea.vue | 22 + .../components/ui/scroll-area/ScrollBar.vue | 24 + .../src/components/ui/scroll-area/index.ts | 2 + .../ui/searchable-select/SearchableSelect.vue | 351 + .../components/ui/searchable-select/index.ts | 1 + .../src/components/ui/select/Select.vue | 15 + .../components/ui/select/SelectContent.vue | 57 + .../src/components/ui/select/SelectGroup.vue | 17 + .../src/components/ui/select/SelectItem.vue | 40 + .../components/ui/select/SelectItemText.vue | 12 + .../src/components/ui/select/SelectLabel.vue | 14 + .../ui/select/SelectScrollDownButton.vue | 23 + .../ui/select/SelectScrollUpButton.vue | 23 + .../components/ui/select/SelectSeparator.vue | 15 + .../components/ui/select/SelectTrigger.vue | 66 + .../src/components/ui/select/SelectValue.vue | 12 + .../desktop/src/components/ui/select/index.ts | 11 + .../src/components/ui/separator/Separator.vue | 18 + .../src/components/ui/separator/index.ts | 1 + .../desktop/src/components/ui/sheet/Sheet.vue | 15 + .../src/components/ui/sheet/SheetClose.vue | 12 + .../src/components/ui/sheet/SheetContent.vue | 59 + .../components/ui/sheet/SheetDescription.vue | 17 + .../src/components/ui/sheet/SheetFooter.vue | 12 + .../src/components/ui/sheet/SheetHeader.vue | 12 + .../src/components/ui/sheet/SheetOverlay.vue | 17 + .../src/components/ui/sheet/SheetTitle.vue | 17 + .../src/components/ui/sheet/SheetTrigger.vue | 12 + apps/desktop/src/components/ui/sheet/index.ts | 8 + .../src/components/ui/switch/Switch.vue | 123 + .../desktop/src/components/ui/switch/index.ts | 1 + apps/desktop/src/components/ui/tabs/Tabs.vue | 19 + .../src/components/ui/tabs/TabsContent.vue | 17 + .../src/components/ui/tabs/TabsList.vue | 29 + .../src/components/ui/tabs/TabsTrigger.vue | 31 + apps/desktop/src/components/ui/tabs/index.ts | 21 + .../src/components/ui/tooltip/HelpTooltip.vue | 39 + .../src/components/ui/tooltip/Tooltip.vue | 15 + .../components/ui/tooltip/TooltipContent.vue | 39 + .../components/ui/tooltip/TooltipProvider.vue | 14 + .../components/ui/tooltip/TooltipTrigger.vue | 12 + .../src/components/ui/tooltip/index.ts | 5 + .../src/components/vector/VectorBrowser.vue | 375 + .../zookeeper/ZooKeeperKeyBrowser.vue | 71 + .../__tests__/useCellDetailEditor.spec.ts | 21 + .../__tests__/useDataGridActions.spec.ts | 88 + .../__tests__/useDataGridColumnResize.spec.ts | 94 + .../__tests__/useDataGridExport.spec.ts | 169 + .../__tests__/useDataGridSelection.spec.ts | 119 + .../__tests__/useQuickOpen.spec.ts | 581 + .../__tests__/useSchemaOptions.spec.ts | 22 + .../__tests__/useSqlExecution.spec.ts | 255 + .../__tests__/useWindowControls.spec.ts | 42 + apps/desktop/src/composables/useAppUpdater.ts | 165 + .../src/composables/useCellDetailEditor.ts | 317 + .../src/composables/useCloseActionPrompt.ts | 83 + .../src/composables/useDataGridActions.ts | 359 + .../composables/useDataGridColumnResize.ts | 153 + .../src/composables/useDataGridEditor.ts | 1518 ++ .../src/composables/useDataGridExport.ts | 1289 ++ .../src/composables/useDataGridSelection.ts | 480 + .../src/composables/useDatabaseOptions.ts | 55 + .../src/composables/useDialogSources.ts | 351 + .../src/composables/useDiffScrollSync.ts | 52 + apps/desktop/src/composables/useDragSort.ts | 181 + .../composables/useEditorFontFamilyStyle.ts | 11 + .../src/composables/useExportTracker.ts | 330 + apps/desktop/src/composables/useFileDrop.ts | 136 + apps/desktop/src/composables/useFlatTree.ts | 38 + .../useNacosConfigListColumnResize.ts | 79 + .../src/composables/useNavigationTargets.ts | 215 + .../desktop/src/composables/usePanelResize.ts | 51 + apps/desktop/src/composables/useQuickOpen.ts | 374 + .../src/composables/useSchemaDiffConfig.ts | 252 + .../src/composables/useSchemaOptions.ts | 69 + .../src/composables/useSqlExecution.ts | 291 + .../src/composables/useSqlHighlighter.ts | 20 + apps/desktop/src/composables/useTabDrag.ts | 175 + apps/desktop/src/composables/useTabScroll.ts | 147 + .../desktop/src/composables/useTauriEvents.ts | 117 + apps/desktop/src/composables/useTheme.ts | 101 + apps/desktop/src/composables/useToast.ts | 32 + .../src/composables/useVisibilityChange.ts | 32 + .../src/composables/useWebDavAutoUpload.ts | 69 + .../src/composables/useWindowControls.ts | 100 + apps/desktop/src/env.d.ts | 15 + .../__tests__/sqliteRebuildNotice.spec.ts | 31 + apps/desktop/src/i18n/backend-errors.ts | 29 + apps/desktop/src/i18n/index.ts | 110 + apps/desktop/src/i18n/locales/en.ts | 3874 +++++ apps/desktop/src/i18n/locales/es.ts | 3822 +++++ apps/desktop/src/i18n/locales/fallback.ts | 30 + apps/desktop/src/i18n/locales/it.ts | 3820 +++++ apps/desktop/src/i18n/locales/ja.ts | 3821 +++++ apps/desktop/src/i18n/locales/pt-BR.ts | 3822 +++++ .../i18n/locales/typeHelpOverrides.spec.ts | 109 + apps/desktop/src/i18n/locales/zh-CN.ts | 3873 +++++ apps/desktop/src/i18n/locales/zh-TW.ts | 3821 +++++ apps/desktop/src/lib/README.md | 15 + apps/desktop/src/lib/__tests__/ai/ai.spec.ts | 34 + .../src/lib/__tests__/ai/aiMarkdown.spec.ts | 150 + .../lib/__tests__/ai/aiMessageEdit.spec.ts | 48 + .../lib/__tests__/ai/aiMessageRender.spec.ts | 24 + .../__tests__/ai/aiModelPresentation.spec.ts | 33 + .../lib/__tests__/ai/aiProposalDetect.spec.ts | 143 + .../lib/__tests__/ai/aiTableMentions.spec.ts | 45 + .../src/lib/__tests__/app/pinnedItems.spec.ts | 56 + .../lib/__tests__/common/elapsedTime.spec.ts | 15 + .../common/optionHelpPanelOffset.spec.ts | 20 + .../common/searchableSelectTooltip.spec.ts | 36 + .../lib/__tests__/common/ttlFormat.spec.ts | 163 + .../src/lib/__tests__/common/webPath.spec.ts | 34 + .../connectionAttemptTimeout.spec.ts | 77 + .../connection/connectionOpenTarget.spec.ts | 37 + .../connection/connectionUrl.dremio.spec.ts | 68 + .../connectionUrl.zookeeper.spec.ts | 8 + .../connection/kafkaBootstrapServers.spec.ts | 24 + .../sqlServerLegacyCompatibility.spec.ts | 50 + .../connection/tunnelProfiles.spec.ts | 83 + .../lib/__tests__/dataGrid/cellValue.spec.ts | 10 + .../lib/__tests__/dataGrid/chartData.spec.ts | 46 + .../dataGrid/dataGridCellCoercion.spec.ts | 34 + .../dataGridColumnLayoutStorage.spec.ts | 59 + ...ataGridConditionSuggestionPosition.spec.ts | 24 + .../dataGrid/dataGridInfiniteScroll.spec.ts | 32 + .../dataGrid/dataGridTemporalEditor.spec.ts | 48 + .../dataGrid/dataGridTranspose.spec.ts | 63 + .../dataGrid/geometryPreview.spec.ts | 54 + .../__tests__/dataGrid/gridSelection.spec.ts | 74 + .../createDatabaseCharsetOptions.spec.ts | 73 + .../__tests__/database/damengJobAdmin.spec.ts | 92 + .../database/databaseDriverManifest.spec.ts | 12 + .../database/databaseFeatureSupport.spec.ts | 130 + .../databaseObjectCapabilities.spec.ts | 12 + .../database/databaseUserAdmin.spec.ts | 25 + .../database/defaultDatabase.spec.ts | 19 + .../database/dorisCatalogCapability.spec.ts | 69 + .../__tests__/database/jdbcDialect.spec.ts | 71 + .../database/mysqlConnectionOptions.spec.ts | 19 + .../database/prestoSqlBuiltinDriver.spec.ts | 50 + .../editor/codemirrorSqlDialect.spec.ts | 17 + .../editor/editorSearchQuery.spec.ts | 28 + .../editor/keyboardShortcuts.spec.ts | 19 + .../queryEditorPointerSelection.spec.ts | 16 + .../editor/queryEditorTableDrop.spec.ts | 27 + .../__tests__/editor/shortcutDisplay.spec.ts | 41 + .../__tests__/editor/shortcutRegistry.spec.ts | 100 + .../src/lib/__tests__/editorThemes.spec.ts | 45 + .../lib/__tests__/etcd/etcdKeyTree.spec.ts | 26 + .../__tests__/imports/navicatImport.spec.ts | 100 + .../src/lib/__tests__/kv/kvKeyTree.spec.ts | 48 + .../__tests__/kv/kvRefreshSelection.spec.ts | 15 + .../__tests__/kv/kvRootPresentation.spec.ts | 9 + .../lib/__tests__/kv/kvValueDisplay.spec.ts | 88 + .../__tests__/mcp/mcpConfigTemplates.spec.ts | 112 + .../metadata/completionMetadataPolicy.spec.ts | 23 + .../metadata/completionTreeIndex.spec.ts | 59 + .../src/lib/__tests__/mq/mqListPanels.spec.ts | 45 + .../mq/mqPinnedVersionOptions.spec.ts | 22 + .../lib/__tests__/mq/mqPolicyForms.spec.ts | 72 + .../src/lib/__tests__/mq/mqTenantForm.spec.ts | 25 + .../lib/__tests__/mq/mqTokenErrors.spec.ts | 21 + .../lib/__tests__/nacos/nacosAdmin.spec.ts | 80 + .../__tests__/query/oracleExplainPlan.spec.ts | 61 + .../__tests__/query/queryResultError.spec.ts | 61 + .../__tests__/redis/redisAutoRefresh.spec.ts | 66 + .../redis/redisCreateKeyTypeHelp.spec.ts | 44 + .../redis/redisValuePresentation.spec.ts | 144 + .../savedSql/savedSqlFileName.spec.ts | 20 + .../savedSql/savedSqlFolderCounts.spec.ts | 36 + .../__tests__/savedSqlEditorPosition.spec.ts | 112 + .../schema/schemaDiffMetadataLoad.spec.ts | 70 + .../__tests__/sidebar/batchTableEmpty.spec.ts | 48 + .../sidebarConnectionSelection.spec.ts | 35 + .../sidebar/sidebarLabelTooltip.spec.ts | 11 + .../sql/currentStatementFrame.spec.ts | 56 + .../sql/editableQueryHiddenKeys.spec.ts | 98 + .../sql/executableStatementRangeCache.spec.ts | 106 + .../src/lib/__tests__/sql/queryError.spec.ts | 39 + .../__tests__/sql/queryResultSource.spec.ts | 44 + .../__tests__/sql/semantic/completion.spec.ts | 150 + .../sql/semantic/dbeaver-references.md | 28 + .../lib/__tests__/sql/semantic/model.spec.ts | 156 + .../__tests__/sql/semantic/references.spec.ts | 54 + .../lib/__tests__/sql/semantic/tokens.spec.ts | 31 + .../sql/sqlCompletion.context.spec.ts | 367 + .../sql/sqlCompletion.snippet.spec.ts | 109 + .../sql/sqlCompletionLookupTarget.spec.ts | 78 + .../__tests__/sql/sqlExecutionTarget.spec.ts | 12 + .../src/lib/__tests__/sql/sqlFileOpen.spec.ts | 16 + .../lib/__tests__/sql/sqlFormatter.spec.ts | 30 + .../__tests__/sql/sqlFormatterConfig.spec.ts | 26 + .../lib/__tests__/sql/sqlHighlighter.spec.ts | 27 + .../lib/__tests__/sql/sqlInListPaste.spec.ts | 110 + .../lib/__tests__/sql/sqlNavigation.spec.ts | 75 + .../__tests__/sql/sqlParameterHistory.spec.ts | 47 + .../lib/__tests__/sql/sqlParameters.spec.ts | 322 + .../lib/__tests__/sql/sqlQuoteCaret.spec.ts | 28 + .../__tests__/sql/sqlStatementRanges.spec.ts | 769 + .../__tests__/sql/sqlVariableSyntax.spec.ts | 83 + .../lib/__tests__/sql/sqlVariables.spec.ts | 61 + .../table/batchTableTruncate.spec.ts | 33 + .../table/dataTabExecutionDatabase.spec.ts | 39 + .../__tests__/table/mysqlDataTypeHelp.spec.ts | 96 + .../table/objectBrowserRowAction.spec.ts | 147 + .../table/objectSourceEditor.spec.ts | 34 + .../table/postgresDataTypeHelp.spec.ts | 64 + .../table/sidePanelRequestGuard.spec.ts | 59 + .../table/sqliteDataTypeHelp.spec.ts | 63 + .../table/tableDependencySort.spec.ts | 96 + .../lib/__tests__/table/tableEditing.spec.ts | 107 + .../lib/__tests__/table/tableImport.spec.ts | 74 + .../__tests__/table/tableSelectSql.spec.ts | 39 + .../table/tableStructureCapabilities.spec.ts | 65 + .../table/tableStructureEditorState.spec.ts | 247 + .../src/lib/__tests__/table/tableTree.spec.ts | 125 + .../__tests__/tabs/tabPresentation.spec.ts | 86 + .../zookeeper/zookeeperApiContract.spec.ts | 29 + .../zookeeper/zookeeperConnection.spec.ts | 24 + .../zookeeper/zookeeperLazyKeyTree.spec.ts | 52 + .../src/lib/ai/__tests__/aiActions.spec.ts | 60 + .../ai/__tests__/aiProductionSafety.spec.ts | 40 + apps/desktop/src/lib/ai/ai.ts | 613 + apps/desktop/src/lib/ai/aiAgentPlan.ts | 88 + .../src/lib/ai/aiAgentStepPresentation.ts | 117 + apps/desktop/src/lib/ai/aiCodeHighlighter.ts | 101 + apps/desktop/src/lib/ai/aiMarkdown.ts | 119 + apps/desktop/src/lib/ai/aiMessageEdit.ts | 19 + apps/desktop/src/lib/ai/aiMessageRender.ts | 141 + .../desktop/src/lib/ai/aiModelPresentation.ts | 25 + apps/desktop/src/lib/ai/aiPromptKeyboard.ts | 17 + apps/desktop/src/lib/ai/aiProposalDetect.ts | 168 + apps/desktop/src/lib/ai/aiSkills.ts | 254 + apps/desktop/src/lib/ai/aiSqlAppend.ts | 19 + .../src/lib/ai/aiSqlExecutionPolicy.ts | 125 + apps/desktop/src/lib/ai/aiTableMentions.ts | 111 + apps/desktop/src/lib/app/appFonts.ts | 6 + apps/desktop/src/lib/app/appTheme.ts | 64 + .../src/lib/app/documentStoreProvider.ts | 376 + apps/desktop/src/lib/app/localeOptions.ts | 11 + .../src/lib/app/openTabsPersistence.ts | 199 + apps/desktop/src/lib/app/pinnedItems.ts | 54 + apps/desktop/src/lib/app/pinnedTreeNodeIds.ts | 10 + .../src/lib/app/savedSqlEditorPosition.ts | 215 + apps/desktop/src/lib/app/supportInfo.ts | 67 + .../src/lib/app/transferProgressState.ts | 32 + .../lib/backend/__tests__/debugLog.spec.ts | 102 + apps/desktop/src/lib/backend/api.ts | 571 + .../src/lib/backend/browserAppStateStorage.ts | 70 + apps/desktop/src/lib/backend/configCrypto.ts | 102 + .../src/lib/backend/connectionTransport.ts | 5 + apps/desktop/src/lib/backend/debugLog.ts | 282 + apps/desktop/src/lib/backend/errorUtils.ts | 63 + apps/desktop/src/lib/backend/http.ts | 2216 +++ apps/desktop/src/lib/backend/mq-http.ts | 219 + apps/desktop/src/lib/backend/mq-tauri.ts | 216 + apps/desktop/src/lib/backend/nacos-tauri.ts | 83 + apps/desktop/src/lib/backend/platform.ts | 17 + apps/desktop/src/lib/backend/safeStorage.ts | 28 + apps/desktop/src/lib/backend/tauri.ts | 2440 ++++ apps/desktop/src/lib/backend/tauriRuntime.ts | 3 + .../src/lib/backend/transferProgress.ts | 8 + .../src/lib/common/__tests__/jsonTree.spec.ts | 46 + .../common/__tests__/safeJsonFormat.spec.ts | 88 + apps/desktop/src/lib/common/clipboard.ts | 155 + apps/desktop/src/lib/common/color.ts | 30 + apps/desktop/src/lib/common/elapsedTime.ts | 3 + apps/desktop/src/lib/common/jsonCopyValue.ts | 30 + apps/desktop/src/lib/common/jsonTree.ts | 111 + .../src/lib/common/optionHelpPanelOffset.ts | 13 + apps/desktop/src/lib/common/safeJsonFormat.ts | 122 + apps/desktop/src/lib/common/searchPattern.ts | 15 + .../src/lib/common/searchableSelectTooltip.ts | 19 + .../src/lib/common/shikiJsonHighlighter.ts | 41 + apps/desktop/src/lib/common/ttlFormat.ts | 26 + apps/desktop/src/lib/common/utils.ts | 17 + apps/desktop/src/lib/common/webPath.ts | 39 + .../__tests__/connectionErrorHints.spec.ts | 48 + .../__tests__/connectionHealth.spec.ts | 15 + .../src/lib/connection/actionActivation.ts | 38 + .../lib/connection/agentDriverInstallHint.ts | 35 + .../lib/connection/agentDriverUpdateBadge.ts | 15 + .../src/lib/connection/cloudflareD1.ts | 23 + .../connection/connectionAttemptTimeout.ts | 75 + .../src/lib/connection/connectionDeepLink.ts | 110 + .../lib/connection/connectionErrorHints.ts | 46 + .../src/lib/connection/connectionFile.ts | 76 + .../src/lib/connection/connectionHealth.ts | 51 + .../connectionLevelDatabaseBootstrap.ts | 217 + .../lib/connection/connectionOpenTarget.ts | 14 + .../lib/connection/connectionPresentation.ts | 182 + .../src/lib/connection/connectionUrl.ts | 618 + .../connection/connectionVisibleDatabases.ts | 56 + .../lib/connection/driverInstallProgressUi.ts | 43 + .../connection/driverRuntimePresentation.ts | 59 + .../lib/connection/kafkaBootstrapServers.ts | 33 + apps/desktop/src/lib/connection/mqAuth.ts | 22 + .../sqlServerLegacyCompatibility.ts | 34 + .../src/lib/connection/tunnelProfiles.ts | 95 + .../src/lib/dataGrid/binaryCellDownload.ts | 177 + .../src/lib/dataGrid/binaryHexViewer.ts | 28 + .../lib/dataGrid/canvasDataGridRenderer.ts | 450 + .../lib/dataGrid/cellDetailPresentation.ts | 115 + .../src/lib/dataGrid/cellDetailSelection.ts | 9 + apps/desktop/src/lib/dataGrid/cellImageUrl.ts | 107 + apps/desktop/src/lib/dataGrid/cellValue.ts | 13 + apps/desktop/src/lib/dataGrid/chartData.ts | 26 + .../src/lib/dataGrid/columnFormatter.ts | 303 + apps/desktop/src/lib/dataGrid/dataCompare.ts | 105 + apps/desktop/src/lib/dataGrid/dataGenerate.ts | 1760 +++ .../src/lib/dataGrid/dataGridCellCoercion.ts | 319 + .../src/lib/dataGrid/dataGridColumnFilter.ts | 97 + .../dataGridColumnHeaderInteraction.ts | 57 + .../dataGrid/dataGridColumnLayoutStorage.ts | 111 + .../src/lib/dataGrid/dataGridColumnLookup.ts | 53 + .../src/lib/dataGrid/dataGridColumnOrder.ts | 67 + .../src/lib/dataGrid/dataGridColumnType.ts | 33 + .../lib/dataGrid/dataGridColumnVisibility.ts | 86 + .../src/lib/dataGrid/dataGridColumnWidth.ts | 81 + .../lib/dataGrid/dataGridConditionHistory.ts | 78 + .../dataGridConditionSuggestionPosition.ts | 34 + .../src/lib/dataGrid/dataGridDetail.ts | 220 + .../lib/dataGrid/dataGridInfiniteScroll.ts | 36 + .../src/lib/dataGrid/dataGridPagination.ts | 30 + .../src/lib/dataGrid/dataGridPaintTheme.ts | 293 + .../src/lib/dataGrid/dataGridSaveUi.ts | 26 + .../src/lib/dataGrid/dataGridScrollGutter.ts | 7 + .../src/lib/dataGrid/dataGridSearchSplit.ts | 11 + apps/desktop/src/lib/dataGrid/dataGridSort.ts | 87 + apps/desktop/src/lib/dataGrid/dataGridSql.ts | 144 + .../lib/dataGrid/dataGridTemporalEditor.ts | 138 + .../src/lib/dataGrid/dataGridToolbar.ts | 3 + .../src/lib/dataGrid/dataGridTranspose.ts | 297 + .../src/lib/dataGrid/geometryMapPreview.ts | 84 + .../src/lib/dataGrid/geometryPreview.ts | 396 + .../desktop/src/lib/dataGrid/gridRowStatus.ts | 29 + .../desktop/src/lib/dataGrid/gridSelection.ts | 162 + .../src/lib/dataGrid/imagePreviewViewer.ts | 70 + .../src/lib/dataGrid/paginationPageSize.ts | 17 + .../src/lib/dataGrid/resultPreviewRegistry.ts | 63 + .../productionExecutionGuard.spec.ts | 119 + .../__tests__/productionSafety.spec.ts | 117 + .../database/createDatabaseCharsetOptions.ts | 112 + .../src/lib/database/createDatabaseSql.ts | 47 + .../src/lib/database/damengJobAdmin.ts | 176 + .../src/lib/database/databaseCapabilities.ts | 7 + .../lib/database/databaseCapabilitySets.ts | 78 + .../lib/database/databaseDriverManifest.ts | 102 + .../lib/database/databaseFeatureSupport.ts | 136 + .../src/lib/database/databaseFileDetection.ts | 18 + .../lib/database/databaseNamespaceCreation.ts | 104 + .../database/databaseObjectCapabilities.ts | 84 + .../src/lib/database/databaseOptionSearch.ts | 10 + .../lib/database/databasePropertyEditing.ts | 112 + .../src/lib/database/databaseSearch.ts | 92 + .../database/databaseTableDataCapabilities.ts | 195 + apps/desktop/src/lib/database/databaseTree.ts | 85 + .../src/lib/database/databaseUserAdmin.ts | 468 + apps/desktop/src/lib/database/dbAdminSql.ts | 179 + .../src/lib/database/defaultDatabase.ts | 36 + apps/desktop/src/lib/database/h2Connection.ts | 165 + .../src/lib/database/hiveKerberosOptions.ts | 149 + apps/desktop/src/lib/database/jdbcDialect.ts | 101 + .../lib/database/mysqlConnectionOptions.ts | 31 + .../lib/database/oceanbaseConnectionMode.ts | 26 + .../lib/database/prestoSqlBuiltinDriver.ts | 31 + .../lib/database/productionExecutionGuard.ts | 28 + .../src/lib/database/productionSafety.ts | 347 + .../lib/database/sqlServerLinkedServers.ts | 41 + .../desktop/src/lib/database/sqlServerTree.ts | 18 + .../src/lib/database/visibleDatabases.ts | 140 + apps/desktop/src/lib/diagram/diagramZoom.ts | 16 + .../src/lib/diagram/engineeringDiagram.ts | 354 + apps/desktop/src/lib/diagram/erDiagram.ts | 192 + apps/desktop/src/lib/diagram/explainPlan.ts | 678 + apps/desktop/src/lib/diagram/fieldLineage.ts | 200 + .../lib/document/documentViewerFontStyle.ts | 11 + .../desktop/src/lib/document/gridFsBrowser.ts | 139 + apps/desktop/src/lib/document/gridfsFiles.ts | 183 + .../src/lib/document/gridfsPagination.ts | 20 + .../lib/editor/codemirrorInsertValueHints.ts | 212 + .../lib/editor/codemirrorSelectionMatches.ts | 148 + .../src/lib/editor/codemirrorSqlDialect.ts | 68 + .../editor/codemirrorTrimmedSelectionLayer.ts | 207 + .../src/lib/editor/editorSearchQuery.ts | 18 + apps/desktop/src/lib/editor/editorThemes.ts | 973 ++ apps/desktop/src/lib/editor/editorZoom.ts | 52 + .../src/lib/editor/keyboardShortcuts.ts | 191 + .../lib/editor/queryEditorPointerSelection.ts | 8 + .../src/lib/editor/queryEditorTableDrop.ts | 132 + .../desktop/src/lib/editor/shortcutDisplay.ts | 88 + .../src/lib/editor/shortcutRegistry.ts | 405 + .../elasticsearch/elasticsearchCompletion.ts | 274 + .../elasticsearchJsonResponse.ts | 26 + apps/desktop/src/lib/etcd/etcdKeyTree.ts | 3 + apps/desktop/src/lib/export/databaseExport.ts | 106 + .../src/lib/export/databaseExportSelection.ts | 8 + apps/desktop/src/lib/export/ddlExport.ts | 15 + .../src/lib/export/diagramSvgExport.ts | 252 + apps/desktop/src/lib/export/exportFormats.ts | 28 + apps/desktop/src/lib/export/xlsxExport.ts | 314 + .../desktop/src/lib/history/historyActions.ts | 7 + .../src/lib/history/historyActivityKind.ts | 43 + .../src/lib/history/historyAiAnalysis.ts | 56 + .../src/lib/history/historyTimeRange.ts | 51 + .../src/lib/history/historyVirtualList.ts | 6 + .../desktop/src/lib/imports/datagripImport.ts | 462 + apps/desktop/src/lib/imports/dbeaverImport.ts | 258 + apps/desktop/src/lib/imports/navicatImport.ts | 242 + apps/desktop/src/lib/kv/kvKeyTree.ts | 136 + apps/desktop/src/lib/kv/kvRefreshSelection.ts | 6 + apps/desktop/src/lib/kv/kvRootPresentation.ts | 5 + apps/desktop/src/lib/kv/kvValueDisplay.ts | 79 + .../desktop/src/lib/mcp/mcpConfigTemplates.ts | 89 + .../lib/metadata/completionMetadataPolicy.ts | 11 + .../src/lib/metadata/completionTreeIndex.ts | 52 + .../lib/metadata/metadataLoadCoordinator.ts | 145 + .../src/lib/metadata/metadataLoadScope.ts | 86 + .../src/lib/metadata/metadataResultCache.ts | 99 + .../src/lib/metadata/metadataTaskLimiter.ts | 70 + .../src/lib/metadata/schemaTreeCache.ts | 41 + .../src/lib/metadata/tableMetadataCache.ts | 131 + apps/desktop/src/lib/mongo/mongoCompletion.ts | 415 + .../src/lib/mongo/mongoConnectionOptions.ts | 83 + .../src/lib/mongo/mongoDocumentValues.ts | 123 + apps/desktop/src/lib/mongo/mongoFormatter.ts | 277 + .../src/lib/mongo/mongoShellCommand.ts | 1174 ++ .../src/lib/mq/mqPinnedVersionOptions.ts | 31 + apps/desktop/src/lib/mq/mqPolicyForms.ts | 137 + apps/desktop/src/lib/mq/mqTenantForm.ts | 42 + apps/desktop/src/lib/mq/mqTokenErrors.ts | 31 + apps/desktop/src/lib/nacos/nacosAdmin.ts | 354 + .../src/lib/query/queryResultArchive.ts | 140 + .../src/lib/query/queryResultArchiveFile.ts | 62 + .../desktop/src/lib/query/queryResultError.ts | 24 + apps/desktop/src/lib/redis/javaSerialized.ts | 559 + .../desktop/src/lib/redis/redisAutoRefresh.ts | 43 + .../src/lib/redis/redisCommandSafety.ts | 123 + .../src/lib/redis/redisCommandSession.ts | 22 + .../src/lib/redis/redisCommandTable.ts | 522 + apps/desktop/src/lib/redis/redisCompletion.ts | 243 + .../src/lib/redis/redisCreateKeyTypeHelp.ts | 41 + apps/desktop/src/lib/redis/redisKeyPattern.ts | 19 + apps/desktop/src/lib/redis/redisKeyTree.ts | 239 + .../desktop/src/lib/redis/redisQueryResult.ts | 49 + .../src/lib/redis/redisSyntaxDiagnostics.ts | 224 + .../src/lib/redis/redisValuePresentation.ts | 532 + .../src/lib/savedSql/savedSqlFileName.ts | 9 + .../src/lib/savedSql/savedSqlFolderCounts.ts | 23 + .../src/lib/savedSql/savedSqlHistory.ts | 81 + apps/desktop/src/lib/schema/schemaDiff.ts | 507 + .../src/lib/schema/schemaDiffMetadataLoad.ts | 83 + .../src/lib/schema/schemaDiffOptions.ts | 60 + .../src/lib/schema/schemaDiffTableFilter.ts | 49 + .../src/lib/settings/editorSettingsDraft.ts | 87 + .../src/lib/sidebar/batchTableEmpty.ts | 39 + .../src/lib/sidebar/sidebarActiveTabTarget.ts | 262 + .../lib/sidebar/sidebarConnectionSelection.ts | 47 + .../lib/sidebar/sidebarDatabaseOpenState.ts | 9 + .../src/lib/sidebar/sidebarLabelTooltip.ts | 3 + apps/desktop/src/lib/sidebar/sidebarLayout.ts | 325 + .../src/lib/sidebar/sidebarNodeOrdering.ts | 79 + .../src/lib/sidebar/sidebarRenameFocus.ts | 24 + apps/desktop/src/lib/sidebar/sidebarSearch.ts | 68 + .../src/lib/sidebar/sidebarSearchTree.ts | 72 + .../lib/sidebar/sidebarTableNameDisplay.ts | 19 + .../lib/sidebar/sidebarTableSearchControl.ts | 67 + .../src/lib/sidebar/sidebarTreeCollapse.ts | 17 + .../src/lib/sidebar/sidebarTreeContext.ts | 10 + .../src/lib/sidebar/sidebarTreeItemLayout.ts | 71 + .../src/lib/sidebar/sidebarTreeSelection.ts | 21 + .../src/lib/sidebar/sidebarTypeSearch.ts | 25 + apps/desktop/src/lib/sidebar/treeNodeClick.ts | 73 + .../src/lib/sidebar/treeNodeContext.ts | 39 + apps/desktop/src/lib/sidebar/treeNodeIcon.ts | 108 + .../src/lib/sidebar/treeRefreshTarget.ts | 14 + apps/desktop/src/lib/sql/cloudflareD1.ts | 1 + .../src/lib/sql/currentStatementFrame.ts | 59 + .../src/lib/sql/editableQueryHiddenKeys.ts | 61 + .../lib/sql/executableStatementRangeCache.ts | 79 + .../src/lib/sql/httpSqlFileProgress.ts | 17 + apps/desktop/src/lib/sql/insertValueHints.ts | 499 + apps/desktop/src/lib/sql/newQueryContext.ts | 61 + .../src/lib/sql/queryCursorTableTarget.ts | 184 + apps/desktop/src/lib/sql/queryError.ts | 16 + .../src/lib/sql/queryExecutionState.ts | 13 + apps/desktop/src/lib/sql/queryResultSource.ts | 24 + apps/desktop/src/lib/sql/queryTimeout.ts | 17 + apps/desktop/src/lib/sql/semantic/README.md | 13 + .../src/lib/sql/semantic/completion.ts | 211 + .../src/lib/sql/semantic/diagnostics.ts | 330 + apps/desktop/src/lib/sql/semantic/dialect.ts | 173 + apps/desktop/src/lib/sql/semantic/fixtures.ts | 168 + apps/desktop/src/lib/sql/semantic/model.ts | 587 + .../src/lib/sql/semantic/references.ts | 154 + apps/desktop/src/lib/sql/semantic/tokens.ts | 173 + apps/desktop/src/lib/sql/semantic/types.ts | 130 + apps/desktop/src/lib/sql/sqlAnalysis.ts | 504 + apps/desktop/src/lib/sql/sqlCompletion.ts | 4067 ++++++ .../src/lib/sql/sqlCompletionLookupTarget.ts | 42 + apps/desktop/src/lib/sql/sqlDiagnostics.ts | 44 + .../desktop/src/lib/sql/sqlExecutionTarget.ts | 68 + apps/desktop/src/lib/sql/sqlFileOpen.ts | 48 + apps/desktop/src/lib/sql/sqlFormatter.ts | 100 + .../desktop/src/lib/sql/sqlFormatterConfig.ts | 257 + apps/desktop/src/lib/sql/sqlHighlighter.ts | 74 + apps/desktop/src/lib/sql/sqlInListPaste.ts | 198 + .../desktop/src/lib/sql/sqlMetadataRefresh.ts | 68 + apps/desktop/src/lib/sql/sqlNavigation.ts | 256 + .../src/lib/sql/sqlParameterHistory.ts | 65 + apps/desktop/src/lib/sql/sqlParameters.ts | 613 + apps/desktop/src/lib/sql/sqlQuoteCaret.ts | 36 + apps/desktop/src/lib/sql/sqlRisk.ts | 276 + .../src/lib/sql/sqlServerQueryWrapping.ts | 130 + .../desktop/src/lib/sql/sqlStatementRanges.ts | 1670 +++ apps/desktop/src/lib/sql/sqlVariableSyntax.ts | 93 + apps/desktop/src/lib/sql/sqlVariables.ts | 331 + .../table/__tests__/tableDataRefresh.spec.ts | 23 + .../src/lib/table/batchTableTruncate.ts | 11 + .../src/lib/table/dataTabExecutionDatabase.ts | 15 + .../src/lib/table/mysqlDataTypeHelp.ts | 199 + .../src/lib/table/objectBrowserRowAction.ts | 67 + .../src/lib/table/objectBrowserRows.ts | 196 + apps/desktop/src/lib/table/objectRenameSql.ts | 33 + .../src/lib/table/objectSourceEditor.ts | 66 + .../src/lib/table/postgresDataTypeHelp.ts | 155 + .../src/lib/table/routineExecutionSql.ts | 121 + .../src/lib/table/routineParameters.ts | 205 + .../src/lib/table/sidePanelRequestGuard.ts | 33 + .../src/lib/table/sqliteDataTypeHelp.ts | 24 + apps/desktop/src/lib/table/tableClipboard.ts | 66 + .../src/lib/table/tableColumnTemplates.ts | 133 + apps/desktop/src/lib/table/tableDataExport.ts | 53 + .../desktop/src/lib/table/tableDataRefresh.ts | 7 + .../desktop/src/lib/table/tableDataTabMeta.ts | 28 + .../src/lib/table/tableDependencySort.ts | 73 + apps/desktop/src/lib/table/tableEditing.ts | 114 + apps/desktop/src/lib/table/tableImport.ts | 195 + .../lib/table/tableMetadataCapabilities.ts | 88 + .../src/lib/table/tableOpenPageLimit.ts | 8 + apps/desktop/src/lib/table/tableSelectSql.ts | 76 + .../src/lib/table/tableSqlTemplates.ts | 196 + .../lib/table/tableStructureCapabilities.ts | 362 + .../src/lib/table/tableStructureEditorSql.ts | 100 + .../lib/table/tableStructureEditorState.ts | 1030 ++ apps/desktop/src/lib/table/tableTree.ts | 711 + apps/desktop/src/lib/table/viewDdl.ts | 13 + .../desktop/src/lib/tabs/dataTabActivation.ts | 11 + apps/desktop/src/lib/tabs/tabCloseActions.ts | 19 + apps/desktop/src/lib/tabs/tabPresentation.ts | 228 + apps/desktop/src/lib/tabs/tabResultCache.ts | 472 + .../src/lib/webdav/webdavAutoUploadConfig.ts | 45 + .../src/lib/zookeeper/zookeeperConnection.ts | 48 + .../src/lib/zookeeper/zookeeperLazyKeyTree.ts | 193 + apps/desktop/src/main.ts | 94 + .../connectionStore.completion.spec.ts | 233 + .../connectionStore.metadataLoading.spec.ts | 209 + .../__tests__/connectionStore.mq.spec.ts | 236 + .../connectionStore.sqlserverLegacy.spec.ts | 63 + .../__tests__/connectionStore.timeout.spec.ts | 533 + .../__tests__/queryStore.cancel.spec.ts | 77 + .../queryStore.database-open.spec.ts | 242 + .../queryStore.hiddenPrimaryKey.spec.ts | 475 + .../queryStore.multiStatementError.spec.ts | 125 + .../__tests__/queryStore.mysqlExplain.spec.ts | 254 + .../__tests__/queryStore.switchTab.spec.ts | 71 + .../queryStore.tableDataRefresh.spec.ts | 124 + .../stores/__tests__/settingsStore.spec.ts | 109 + apps/desktop/src/stores/connectionStore.ts | 5226 +++++++ apps/desktop/src/stores/historyStore.ts | 42 + .../src/stores/productionSafetyStore.ts | 63 + apps/desktop/src/stores/queryStore.ts | 3832 +++++ apps/desktop/src/stores/savedSqlStore.ts | 593 + apps/desktop/src/stores/settingsStore.ts | 1107 ++ apps/desktop/src/stores/tunnelProfileStore.ts | 48 + .../__tests__/legacyWebviewFallback.spec.ts | 27 + apps/desktop/src/styles/globals.css | 2144 +++ apps/desktop/src/types/database.ts | 904 ++ apps/desktop/src/types/editor.ts | 11 + apps/desktop/src/types/influxdb.ts | 6 + apps/desktop/src/types/mq.ts | 290 + apps/desktop/src/types/nacos.ts | 202 + apps/desktop/src/types/schemaDiff.ts | 136 + .../src/types/vue-virtual-scroller.d.ts | 7 + apps/desktop/tsconfig.json | 27 + apps/desktop/vite.config.ts | 105 + crates/README.md | 10 + crates/dbx-core/Cargo.toml | 84 + crates/dbx-core/assets/agent-protocol-v1.json | 88 + .../assets/database-drivers.manifest.json | 1890 +++ crates/dbx-core/src/agent_catalog.rs | 371 + crates/dbx-core/src/agent_connection.rs | 1066 ++ crates/dbx-core/src/agent_events.rs | 94 + crates/dbx-core/src/agent_explain.rs | 75 + crates/dbx-core/src/agent_kv.rs | 420 + crates/dbx-core/src/agent_loop.rs | 1397 ++ crates/dbx-core/src/agent_manager.rs | 942 ++ crates/dbx-core/src/agent_runtime.rs | 180 + crates/dbx-core/src/agent_service.rs | 1648 +++ crates/dbx-core/src/agent_tools.rs | 917 ++ crates/dbx-core/src/ai.rs | 3338 +++++ crates/dbx-core/src/ai_cli_agent.rs | 543 + crates/dbx-core/src/ai_codex_cli.rs | 1021 ++ crates/dbx-core/src/cloud_sync.rs | 1468 ++ crates/dbx-core/src/connection.rs | 4882 +++++++ crates/dbx-core/src/connection_secrets.rs | 1106 ++ crates/dbx-core/src/csv_export.rs | 201 + crates/dbx-core/src/data_compare.rs | 1541 ++ crates/dbx-core/src/data_grid_neo4j_sql.rs | 176 + crates/dbx-core/src/data_grid_sql.rs | 3936 +++++ crates/dbx-core/src/data_grid_tdengine_sql.rs | 300 + crates/dbx-core/src/database_capabilities.rs | 89 + crates/dbx-core/src/database_export.rs | 2060 +++ crates/dbx-core/src/database_search_sql.rs | 359 + crates/dbx-core/src/db/agent_driver.rs | 1988 +++ crates/dbx-core/src/db/clickhouse_driver.rs | 785 + .../dbx-core/src/db/cloudflare_d1/import.rs | 94 + crates/dbx-core/src/db/cloudflare_d1/mod.rs | 628 + .../src/db/cloudflare_d1/sql_guard.rs | 168 + .../src/db/cloudflare_d1/sql_lexer.rs | 180 + .../src/db/cloudflare_d1/sql_limits.rs | 115 + .../src/db/cloudflare_d1/transfer_tests.rs | 19 + .../dbx-core/src/db/cloudflare_d1/trigger.rs | 71 + crates/dbx-core/src/db/duckdb_driver.rs | 171 + .../dbx-core/src/db/duckdb_worker_process.rs | 620 + .../dbx-core/src/db/duckdb_worker_protocol.rs | 178 + .../dbx-core/src/db/duckdb_worker_runtime.rs | 566 + .../dbx-core/src/db/elasticsearch_driver.rs | 2096 +++ crates/dbx-core/src/db/elasticsearch_sql.rs | 426 + crates/dbx-core/src/db/file_validator.rs | 131 + crates/dbx-core/src/db/http_tunnel.rs | 413 + crates/dbx-core/src/db/influxdb_driver.rs | 790 + crates/dbx-core/src/db/manticoresearch.rs | 237 + crates/dbx-core/src/db/mod.rs | 167 + crates/dbx-core/src/db/mongo_driver.rs | 1832 +++ crates/dbx-core/src/db/mysql.rs | 4956 +++++++ crates/dbx-core/src/db/ob_oracle.rs | 303 + crates/dbx-core/src/db/postgres.rs | 4223 ++++++ crates/dbx-core/src/db/proxy_tunnel.rs | 259 + crates/dbx-core/src/db/questdb.rs | 187 + crates/dbx-core/src/db/redis_driver.rs | 3213 ++++ crates/dbx-core/src/db/rqlite_driver.rs | 450 + crates/dbx-core/src/db/sqlite.rs | 2258 +++ crates/dbx-core/src/db/sqlserver.rs | 2538 ++++ crates/dbx-core/src/db/ssh_tunnel.rs | 974 ++ .../dbx-core/src/db/transport_layer_tunnel.rs | 438 + crates/dbx-core/src/db/turso_driver.rs | 750 + crates/dbx-core/src/db/vector_driver.rs | 879 ++ crates/dbx-core/src/db/wkb.rs | 312 + crates/dbx-core/src/db_admin_sql.rs | 1605 ++ crates/dbx-core/src/document_ops.rs | 592 + crates/dbx-core/src/driver_runtime.rs | 309 + crates/dbx-core/src/external/duckdb_cache.rs | 173 + crates/dbx-core/src/external/mod.rs | 8 + crates/dbx-core/src/external/traits.rs | 21 + crates/dbx-core/src/external/types.rs | 52 + crates/dbx-core/src/history.rs | 68 + crates/dbx-core/src/jdbc.rs | 1083 ++ crates/dbx-core/src/lib.rs | 186 + crates/dbx-core/src/models/connection.rs | 3055 ++++ crates/dbx-core/src/models/mod.rs | 1 + crates/dbx-core/src/mongo_ops.rs | 384 + crates/dbx-core/src/mq/README.md | 54 + crates/dbx-core/src/mq/adapters/kafka.rs | 915 ++ crates/dbx-core/src/mq/adapters/mod.rs | 5 + crates/dbx-core/src/mq/adapters/pulsar.rs | 1632 +++ .../src/mq/adapters/pulsar_version.rs | 585 + crates/dbx-core/src/mq/auth.rs | 259 + crates/dbx-core/src/mq/config.rs | 207 + crates/dbx-core/src/mq/mod.rs | 153 + crates/dbx-core/src/mq/port.rs | 96 + crates/dbx-core/src/mq/service.rs | 724 + crates/dbx-core/src/mq/token.rs | 121 + crates/dbx-core/src/mq/types.rs | 647 + crates/dbx-core/src/mq/util.rs | 39 + crates/dbx-core/src/nacos/config.rs | 232 + crates/dbx-core/src/nacos/http.rs | 1776 +++ crates/dbx-core/src/nacos/mod.rs | 89 + crates/dbx-core/src/nacos/port.rs | 22 + crates/dbx-core/src/nacos/service.rs | 302 + crates/dbx-core/src/nacos/types.rs | 337 + crates/dbx-core/src/object_source_sql.rs | 1451 ++ crates/dbx-core/src/path_utils.rs | 19 + crates/dbx-core/src/plugins.rs | 612 + crates/dbx-core/src/process.rs | 37 + crates/dbx-core/src/production_safety.rs | 687 + crates/dbx-core/src/query.rs | 4317 ++++++ crates/dbx-core/src/query_cancel.rs | 205 + crates/dbx-core/src/query_execution_sql.rs | 1194 ++ crates/dbx-core/src/query_result_export.rs | 1468 ++ crates/dbx-core/src/query_result_sql.rs | 2582 ++++ crates/dbx-core/src/redis_ops.rs | 901 ++ crates/dbx-core/src/saved_sql.rs | 46 + crates/dbx-core/src/schema.rs | 6090 ++++++++ crates/dbx-core/src/schema/duckdb_metadata.rs | 203 + crates/dbx-core/src/schema/normalization.rs | 334 + crates/dbx-core/src/schema/providers/mod.rs | 1 + .../dbx-core/src/schema/providers/native.rs | 353 + crates/dbx-core/src/schema_diff.rs | 2140 +++ crates/dbx-core/src/sql.rs | 3549 +++++ crates/dbx-core/src/sql_analysis.rs | 488 + crates/dbx-core/src/sql_dialect.rs | 18 + .../dbx-core/src/sql_dialect/capabilities.rs | 123 + .../dbx-core/src/sql_dialect/identifiers.rs | 161 + .../dbx-core/src/sql_dialect/table_select.rs | 475 + crates/dbx-core/src/sql_dialect/tests.rs | 786 + crates/dbx-core/src/sql_dialect/types.rs | 50 + crates/dbx-core/src/sql_editability.rs | 1056 ++ crates/dbx-core/src/sql_file_import.rs | 1458 ++ crates/dbx-core/src/sql_risk.rs | 331 + crates/dbx-core/src/sqlite_backup.rs | 188 + crates/dbx-core/src/sqlserver_temporal.rs | 223 + crates/dbx-core/src/ssh_config.rs | 289 + crates/dbx-core/src/storage.rs | 3262 +++++ crates/dbx-core/src/table_export.rs | 1568 ++ crates/dbx-core/src/table_import.rs | 2224 +++ crates/dbx-core/src/table_structure_sql.rs | 38 + .../src/table_structure_sql/column_alter.rs | 736 + .../src/table_structure_sql/column_format.rs | 398 + .../src/table_structure_sql/columns.rs | 460 + .../src/table_structure_sql/comments.rs | 125 + .../src/table_structure_sql/create_table.rs | 173 + .../src/table_structure_sql/dialect.rs | 329 + .../src/table_structure_sql/foreign_keys.rs | 152 + .../src/table_structure_sql/indexes.rs | 226 + .../src/table_structure_sql/sqlite_rebuild.rs | 2004 +++ .../dbx-core/src/table_structure_sql/tests.rs | 3035 ++++ .../src/table_structure_sql/triggers.rs | 94 + .../dbx-core/src/table_structure_sql/types.rs | 233 + .../dbx-core/src/table_structure_sql/util.rs | 315 + .../src/table_structure_sql/validation.rs | 69 + crates/dbx-core/src/text_export.rs | 143 + crates/dbx-core/src/token_usage.rs | 12 + crates/dbx-core/src/transfer.rs | 6649 +++++++++ crates/dbx-core/src/types.rs | 312 + crates/dbx-core/src/update.rs | 450 + crates/dbx-core/src/xlsx_export.rs | 689 + crates/dbx-core/tests/agent_service.rs | 547 + .../dbx-core/tests/database_capabilities.rs | 341 + .../dbx-core/tests/duckdb_worker_process.rs | 484 + .../live_clickhouse_query_result_export.rs | 121 + .../dbx-core/tests/live_manual_transaction.rs | 105 + crates/dbx-core/tests/live_mtls.rs | 26 + crates/dbx-core/tests/live_mysql57.rs | 527 + .../dbx-core/tests/live_postgres_geometry.rs | 29 + .../live_postgres_query_result_export.rs | 151 + .../live_postgres_transaction_recovery.rs | 58 + .../dbx-core/tests/live_postgres_transfer.rs | 527 + .../dbx-core/tests/live_postgres_tsvector.rs | 103 + .../tests/live_sqlserver_completion.rs | 581 + crates/dbx-core/tests/mq_token.rs | 73 + .../tests/mysql_cross_database_editing.rs | 117 + crates/dbx-core/tests/sql_analysis.rs | 114 + .../support/duckdb_worker_file_lock_owner.rs | 16 + ...duckdb_worker_hanging_connect_test_host.rs | 20 + .../support/duckdb_worker_pid_test_host.rs | 13 + .../tests/support/duckdb_worker_test_host.rs | 9 + crates/dbx-web/Cargo.toml | 37 + crates/dbx-web/src/auth.rs | 277 + crates/dbx-web/src/error.rs | 32 + crates/dbx-web/src/main.rs | 625 + crates/dbx-web/src/routes/agents.rs | 304 + crates/dbx-web/src/routes/ai.rs | 328 + crates/dbx-web/src/routes/app_settings.rs | 103 + crates/dbx-web/src/routes/cloud_sync.rs | 270 + crates/dbx-web/src/routes/connection.rs | 660 + crates/dbx-web/src/routes/data_compare.rs | 32 + crates/dbx-web/src/routes/database_export.rs | 166 + crates/dbx-web/src/routes/document_store.rs | 383 + crates/dbx-web/src/routes/etcd.rs | 93 + crates/dbx-web/src/routes/history.rs | 53 + crates/dbx-web/src/routes/jdbc.rs | 210 + crates/dbx-web/src/routes/layout.rs | 27 + crates/dbx-web/src/routes/mod.rs | 35 + crates/dbx-web/src/routes/mongo.rs | 484 + crates/dbx-web/src/routes/mq.rs | 752 + crates/dbx-web/src/routes/nacos.rs | 245 + crates/dbx-web/src/routes/plugins.rs | 12 + crates/dbx-web/src/routes/query.rs | 813 ++ .../dbx-web/src/routes/query_result_export.rs | 168 + crates/dbx-web/src/routes/redis.rs | 582 + crates/dbx-web/src/routes/redis_pubsub_ws.rs | 127 + crates/dbx-web/src/routes/saved_sql.rs | 53 + crates/dbx-web/src/routes/schema.rs | 462 + crates/dbx-web/src/routes/schema_cache.rs | 49 + crates/dbx-web/src/routes/schema_diff.rs | 34 + crates/dbx-web/src/routes/sql_file.rs | 232 + crates/dbx-web/src/routes/ssh_config.rs | 8 + .../dbx-web/src/routes/tab_runtime_cache.rs | 71 + crates/dbx-web/src/routes/table_export.rs | 158 + crates/dbx-web/src/routes/table_import.rs | 271 + crates/dbx-web/src/routes/text_export.rs | 38 + crates/dbx-web/src/routes/transfer.rs | 420 + crates/dbx-web/src/routes/tunnel_profiles.rs | 28 + crates/dbx-web/src/routes/update.rs | 21 + crates/dbx-web/src/routes/zookeeper.rs | 100 + crates/dbx-web/src/sse.rs | 14 + crates/dbx-web/src/state.rs | 31 + deploy/1panel/README.md | 21 + deploy/1panel/data.yml | 24 + deploy/1panel/latest/data.yml | 26 + deploy/1panel/latest/docker-compose.yml | 19 + deploy/1panel/logo.png | Bin 0 -> 9137 bytes deploy/Dockerfile | 87 + deploy/Dockerfile.dockerignore | 12 + deploy/dbx_tunnel.php | 471 + deploy/docker-compose.release.yml | 14 + deploy/docker-compose.yml | 17 + deploy/homebrew/dbx-cli.rb | 38 + docs/.gitignore | 4 + docs/app/[lang]/api/search/route.ts | 14 + docs/app/[lang]/changelog/page.tsx | 51 + docs/app/[lang]/community/page.tsx | 113 + docs/app/[lang]/databases/page.tsx | 187 + docs/app/[lang]/docs/[[...slug]]/page.tsx | 108 + docs/app/[lang]/docs/layout.tsx | 31 + docs/app/[lang]/drivers/DriversClient.tsx | 512 + docs/app/[lang]/drivers/page.tsx | 32 + docs/app/[lang]/layout.tsx | 66 + docs/app/[lang]/page.tsx | 616 + docs/app/global.css | 1136 ++ docs/app/layout.tsx | 106 + docs/app/page.tsx | 5 + .../pr-2182-sidebar-user-admin-only.png | Bin 0 -> 177101 bytes docs/components/DocsSidebarFooter.tsx | 78 + docs/components/StaticSearchDialog.tsx | 51 + .../aceternity/HeroProductStage.tsx | 61 + .../aceternity/InfiniteMovingCards.tsx | 37 + docs/components/aceternity/Spotlight.tsx | 11 + docs/components/landing/ChangelogList.tsx | 114 + docs/components/landing/ChangelogRuntime.tsx | 49 + docs/components/landing/ContributorsWall.tsx | 57 + docs/components/landing/InstallTabs.tsx | 117 + docs/components/landing/LandingFooter.tsx | 57 + .../landing/LandingLatestUpdates.tsx | 57 + docs/components/landing/LandingNav.tsx | 80 + docs/components/landing/RevealSection.tsx | 39 + docs/content/docs/ai-assistant.cn.mdx | 186 + docs/content/docs/ai-assistant.mdx | 186 + docs/content/docs/changelog.cn.mdx | 8 + docs/content/docs/changelog.mdx | 8 + docs/content/docs/cli.cn.mdx | 185 + docs/content/docs/cli.mdx | 187 + docs/content/docs/cloud-sync.cn.mdx | 122 + docs/content/docs/cloud-sync.mdx | 122 + docs/content/docs/config-export.cn.mdx | 45 + docs/content/docs/config-export.mdx | 45 + docs/content/docs/connection-import.cn.mdx | 52 + docs/content/docs/connection-import.mdx | 52 + docs/content/docs/data-grid.cn.mdx | 166 + docs/content/docs/data-grid.mdx | 166 + docs/content/docs/data-transfer.cn.mdx | 96 + docs/content/docs/data-transfer.mdx | 96 + docs/content/docs/database-export.cn.mdx | 78 + docs/content/docs/database-export.mdx | 78 + docs/content/docs/databases.cn.mdx | 156 + docs/content/docs/databases.mdx | 156 + docs/content/docs/driver-management.cn.mdx | 74 + docs/content/docs/driver-management.mdx | 74 + docs/content/docs/field-lineage.cn.mdx | 51 + docs/content/docs/field-lineage.mdx | 51 + docs/content/docs/getting-started.cn.mdx | 243 + docs/content/docs/getting-started.mdx | 243 + docs/content/docs/keyboard-shortcuts.cn.mdx | 82 + docs/content/docs/keyboard-shortcuts.mdx | 82 + docs/content/docs/mcp.cn.mdx | 275 + docs/content/docs/mcp.mdx | 275 + docs/content/docs/meta.cn.json | 40 + docs/content/docs/meta.json | 40 + docs/content/docs/mongodb.cn.mdx | 73 + docs/content/docs/mongodb.mdx | 73 + docs/content/docs/object-browser.cn.mdx | 56 + docs/content/docs/object-browser.mdx | 56 + docs/content/docs/plugins.cn.mdx | 298 + docs/content/docs/plugins.mdx | 298 + docs/content/docs/query-editor.cn.mdx | 103 + docs/content/docs/query-editor.mdx | 103 + docs/content/docs/redis.cn.mdx | 88 + docs/content/docs/redis.mdx | 88 + docs/content/docs/schema-browser.cn.mdx | 102 + docs/content/docs/schema-browser.mdx | 102 + docs/content/docs/schema-diff.cn.mdx | 89 + docs/content/docs/schema-diff.mdx | 89 + docs/content/docs/sql-file.cn.mdx | 76 + docs/content/docs/sql-file.mdx | 76 + docs/content/docs/sql-formatter.cn.mdx | 225 + docs/content/docs/sql-formatter.mdx | 225 + docs/content/docs/sql-snippets.cn.mdx | 70 + docs/content/docs/sql-snippets.mdx | 70 + docs/content/docs/ssh-tunnel.cn.mdx | 134 + docs/content/docs/ssh-tunnel.mdx | 134 + docs/content/docs/table-import.cn.mdx | 93 + docs/content/docs/table-import.mdx | 93 + docs/content/docs/table-structure.cn.mdx | 77 + docs/content/docs/table-structure.mdx | 77 + docs/content/docs/web-api.cn.mdx | 331 + docs/content/docs/web-api.mdx | 331 + docs/content/docs/what-is-dbx.cn.mdx | 70 + docs/content/docs/what-is-dbx.mdx | 70 + docs/lib/agentRegistry.test.ts | 13 + docs/lib/agentRegistry.ts | 268 + docs/lib/appVersion.ts | 5 + docs/lib/changelog.ts | 133 + docs/lib/cjkSearchTokenizer.ts | 41 + docs/lib/contributors.ts | 88 + docs/lib/downloadLinks.ts | 51 + docs/lib/httpJson.ts | 34 + docs/lib/i18n.ts | 24 + docs/lib/landingLatest.ts | 48 + docs/lib/latestRelease.ts | 48 + docs/lib/metadata.ts | 89 + docs/lib/releaseMetadataRequest.test.ts | 21 + docs/lib/releaseMetadataRequest.ts | 22 + docs/lib/source.ts | 64 + docs/logo.png | Bin 0 -> 32083 bytes docs/mq-quick-start.md | 443 + docs/next-env.d.ts | 6 + docs/next.config.mjs | 11 + docs/package.json | 33 + docs/performance/dom-density-audit.md | 41 + docs/performance/memory-usage-audit.md | 234 + docs/performance/runtime-memory-audit.md | 253 + ...01-database-connection-timeout-recovery.md | 470 + ...24-database-connection-timeout-recovery.md | 561 + docs/pnpm-lock.yaml | 4009 +++++ docs/pnpm-workspace.yaml | 3 + docs/postcss.config.mjs | 6 + docs/public/avatars/acane.png | Bin 0 -> 74514 bytes docs/public/avatars/ar414.jpg | Bin 0 -> 7280 bytes docs/public/avatars/cyano.jpg | Bin 0 -> 9388 bytes docs/public/avatars/dongxuyang85.jpg | Bin 0 -> 8633 bytes docs/public/avatars/eryajf.jpg | Bin 0 -> 35105 bytes docs/public/avatars/guangguang.jpg | Bin 0 -> 7476 bytes docs/public/avatars/husky.jpg | Bin 0 -> 9355 bytes docs/public/avatars/itkui.jpg | Bin 0 -> 8361 bytes docs/public/avatars/mebiuw.jpg | Bin 0 -> 4275 bytes docs/public/avatars/momo.jpg | Bin 0 -> 6322 bytes docs/public/avatars/patrickz.jpg | Bin 0 -> 8661 bytes docs/public/avatars/ryan.jpg | Bin 0 -> 8369 bytes docs/public/avatars/sunzhigang.jpg | Bin 0 -> 2653 bytes docs/public/avatars/vbvb.png | Bin 0 -> 66110 bytes docs/public/avatars/xuyuan.jpg | Bin 0 -> 8769 bytes docs/public/avatars/yanxuecan.jpg | Bin 0 -> 22376 bytes docs/public/avatars/ydwang.png | Bin 0 -> 67553 bytes docs/public/avatars/yingtao.jpg | Bin 0 -> 8943 bytes docs/public/avatars/zhufeng.jpg | Bin 0 -> 9129 bytes docs/public/favicon.png | Bin 0 -> 88494 bytes docs/public/icons/atomgit.png | Bin 0 -> 848 bytes docs/public/icons/cnb.svg | 7 + docs/public/icons/community/qq.png | Bin 0 -> 1167 bytes docs/public/icons/database/access.png | Bin 0 -> 34094 bytes docs/public/icons/database/apache_kylin.svg | 1 + docs/public/icons/database/bigquery.svg | 1 + docs/public/icons/database/cassandra.svg | 1 + docs/public/icons/database/clickhouse.svg | 1 + docs/public/icons/database/cockroachdb.svg | 1 + docs/public/icons/database/databend.svg | 16 + docs/public/icons/database/databricks.webp | Bin 0 -> 706 bytes docs/public/icons/database/db2.svg | 1 + docs/public/icons/database/dm.svg | 1 + docs/public/icons/database/doris.svg | 1 + docs/public/icons/database/duckdb.svg | 1 + docs/public/icons/database/elasticsearch.svg | 1 + docs/public/icons/database/etcd.svg | 4 + docs/public/icons/database/exasol.webp | Bin 0 -> 2876 bytes docs/public/icons/database/firebird.webp | Bin 0 -> 384 bytes docs/public/icons/database/gaussdb.svg | 1 + docs/public/icons/database/gbase.webp | Bin 0 -> 740 bytes docs/public/icons/database/goldendb.png | Bin 0 -> 837 bytes docs/public/icons/database/greatsql.webp | Bin 0 -> 2552 bytes docs/public/icons/database/h2.svg | 1 + docs/public/icons/database/highgo.png | Bin 0 -> 2872 bytes docs/public/icons/database/hive.svg | 1 + docs/public/icons/database/influxdb.svg | 10 + docs/public/icons/database/informix.svg | 1 + docs/public/icons/database/iotdb.svg | 57 + docs/public/icons/database/iris.png | Bin 0 -> 675 bytes docs/public/icons/database/jdbc.svg | 4 + docs/public/icons/database/kingbase.svg | 1 + docs/public/icons/database/kwdb.svg | 1 + .../public/icons/database/manticoresearch.png | Bin 0 -> 10184 bytes docs/public/icons/database/mariadb.svg | 1 + docs/public/icons/database/milvus.png | Bin 0 -> 36642 bytes docs/public/icons/database/mongodb.svg | 1 + docs/public/icons/database/mysql.svg | 1 + docs/public/icons/database/nacos.png | Bin 0 -> 1529 bytes docs/public/icons/database/neo4j.svg | 1 + docs/public/icons/database/oceanbase.svg | 1 + docs/public/icons/database/opengauss.svg | 1 + docs/public/icons/database/oracle.svg | 1 + docs/public/icons/database/polardb.webp | Bin 0 -> 174 bytes docs/public/icons/database/postgres.svg | 1 + docs/public/icons/database/presto.svg | 1 + docs/public/icons/database/pulsar.svg | 3 + docs/public/icons/database/qdrant.svg | 35 + docs/public/icons/database/questdb.svg | 25 + docs/public/icons/database/redis.svg | 1 + docs/public/icons/database/redshift.svg | 1 + docs/public/icons/database/rqlite.png | Bin 0 -> 5029 bytes docs/public/icons/database/saphana.webp | Bin 0 -> 240 bytes docs/public/icons/database/selectdb.svg | 1 + docs/public/icons/database/snowflake.svg | 1 + docs/public/icons/database/sqlite.svg | 1 + docs/public/icons/database/sqlserver.svg | 1 + docs/public/icons/database/starrocks.svg | 1 + docs/public/icons/database/sundb.svg | 1 + docs/public/icons/database/tdengine.svg | 1 + docs/public/icons/database/tdsql.webp | Bin 0 -> 526 bytes docs/public/icons/database/teradata.webp | Bin 0 -> 816 bytes docs/public/icons/database/tidb.svg | 1 + docs/public/icons/database/trino.svg | 4 + docs/public/icons/database/turso.png | Bin 0 -> 17670 bytes docs/public/icons/database/vastbase.png | Bin 0 -> 2051 bytes docs/public/icons/database/vertica.webp | Bin 0 -> 20882 bytes docs/public/icons/database/weaviate.png | Bin 0 -> 2198 bytes docs/public/icons/database/xugu.png | Bin 0 -> 9209 bytes docs/public/icons/database/yashandb.png | Bin 0 -> 15267 bytes docs/public/icons/database/zookeeper.svg | 19 + docs/public/icons/platform/linux.svg | 15 + docs/public/icons/platform/macos-white.png | Bin 0 -> 1839 bytes docs/public/icons/platform/macos.png | Bin 0 -> 1089 bytes docs/public/icons/platform/windows.png | Bin 0 -> 630 bytes docs/public/llms.txt | 51 + docs/public/logo.png | Bin 0 -> 88494 bytes docs/public/robots.txt | 32 + docs/public/screenshot-ai.jpg | Bin 0 -> 441104 bytes docs/public/screenshot-connections.jpg | Bin 0 -> 315282 bytes docs/public/screenshot-dark.png | Bin 0 -> 1199971 bytes docs/public/screenshot-er.png | Bin 0 -> 1127871 bytes docs/public/screenshot-grid.png | Bin 0 -> 1055104 bytes docs/public/screenshot-light.png | Bin 0 -> 1017276 bytes docs/public/screenshot.png | Bin 0 -> 398243 bytes docs/qq-group.jpg | Bin 0 -> 561684 bytes docs/screenshot-ai.jpg | Bin 0 -> 441104 bytes docs/screenshot-connections.jpg | Bin 0 -> 315282 bytes docs/screenshot-dark.png | Bin 0 -> 1199971 bytes docs/screenshot-er.png | Bin 0 -> 1127871 bytes docs/screenshot-es-sql-completion.png | Bin 0 -> 284000 bytes docs/screenshot-es-sql-pagination.png | Bin 0 -> 270830 bytes docs/screenshot-es-sql-where.png | Bin 0 -> 78870 bytes docs/screenshot-grid.png | Bin 0 -> 1055104 bytes docs/screenshot-light.png | Bin 0 -> 1017276 bytes docs/screenshot.png | Bin 0 -> 398243 bytes docs/scripts/generate-sitemap.mjs | 90 + docs/source.config.ts | 9 + docs/tsconfig.json | 28 + docs/wechat-group.jpg | Bin 0 -> 195443 bytes docs/wrangler.json | 7 + examples/README.md | 40 + examples/cli/basic-workflow.sh | 22 + examples/docker/docker-compose.yml | 16 + examples/mcp/claude-code.mcp.json | 7 + examples/mcp/cursor.mcp.json | 8 + examples/mcp/web-deployment.mcp.json | 11 + examples/web-api/automation.sh | 26 + flake.lock | 82 + flake.nix | 409 + package.json | 116 + packages/app-tests/actionActivation.test.ts | 35 + .../app-tests/agentDriverInstallHint.test.ts | 83 + packages/app-tests/agentVersionBump.test.ts | 130 + packages/app-tests/aiAgentPlan.test.ts | 217 + .../app-tests/aiAgentStepPresentation.test.ts | 201 + packages/app-tests/aiPrompt.test.ts | 222 + packages/app-tests/aiPromptEval.test.ts | 178 + packages/app-tests/aiPromptKeyboard.test.ts | 28 + packages/app-tests/aiSchemaComments.test.ts | 50 + packages/app-tests/aiSkills.test.ts | 55 + packages/app-tests/aiSqlAppend.test.ts | 35 + .../app-tests/aiSqlExecutionPolicy.test.ts | 89 + packages/app-tests/aiTableMentions.test.ts | 26 + packages/app-tests/appUpdater.test.ts | 52 + packages/app-tests/binaryCellDownload.test.ts | 63 + packages/app-tests/binaryHexViewer.test.ts | 24 + .../app-tests/canvasDataGridRenderer.test.ts | 23 + .../app-tests/cellDetailPresentation.test.ts | 12 + packages/app-tests/cellImageUrl.test.ts | 60 + packages/app-tests/cellValue.test.ts | 52 + packages/app-tests/clipboard.test.ts | 128 + .../app-tests/closeBracketsExtension.test.ts | 86 + .../app-tests/codemirrorSqlDialect.test.ts | 33 + .../codemirrorTrimmedSelectionLayer.test.ts | 43 + packages/app-tests/columnFormatter.test.ts | 96 + packages/app-tests/configCrypto.test.ts | 54 + .../app-tests/connectionClipboard.test.ts | 157 + packages/app-tests/connectionDeepLink.test.ts | 69 + .../connectionLevelDatabaseBootstrap.test.ts | 54 + .../app-tests/connectionPresentation.test.ts | 139 + .../connectionStoreErrorState.test.ts | 550 + .../connectionStoreGroupedConnect.test.ts | 273 + .../connectionStorePinnedCleanup.test.ts | 85 + packages/app-tests/connectionUrl.test.ts | 477 + .../connectionVisibleDatabases.test.ts | 104 + packages/app-tests/dataGenerate.test.ts | 100 + .../dataGridCellCoercion.mysql-json.test.ts | 59 + .../app-tests/dataGridCellCoercion.test.ts | 194 + .../app-tests/dataGridColumnFilter.test.ts | 76 + .../dataGridColumnHeaderInteraction.test.ts | 44 + .../app-tests/dataGridColumnOrder.test.ts | 99 + packages/app-tests/dataGridColumnType.test.ts | 61 + .../dataGridColumnVisibility.test.ts | 125 + .../app-tests/dataGridColumnWidth.test.ts | 33 + .../dataGridConditionHistory.test.ts | 70 + packages/app-tests/dataGridDetail.test.ts | 319 + packages/app-tests/dataGridEditor.test.ts | 1623 ++ packages/app-tests/dataGridExport.test.ts | 128 + .../app-tests/dataGridInfiniteScroll.test.ts | 25 + packages/app-tests/dataGridPagination.test.ts | 93 + packages/app-tests/dataGridProps.test.ts | 19 + packages/app-tests/dataGridSaveUi.test.ts | 73 + packages/app-tests/dataGridSelection.test.ts | 184 + packages/app-tests/dataGridSort.test.ts | 52 + .../app-tests/dataGridTemporalEditor.test.ts | 29 + packages/app-tests/dataGridTranspose.test.ts | 311 + packages/app-tests/dataTabActivation.test.ts | 59 + .../app-tests/databaseCapabilities.test.ts | 18 + packages/app-tests/databaseExportPlan.test.ts | 35 + packages/app-tests/databaseIconAssets.test.ts | 11 + packages/app-tests/databaseSearch.test.ts | 28 + packages/app-tests/databaseTree.test.ts | 17 + packages/app-tests/databaseUserAdmin.test.ts | 177 + packages/app-tests/dbAdminSql.test.ts | 23 + packages/app-tests/ddlExport.test.ts | 28 + packages/app-tests/defaultDatabase.test.ts | 50 + packages/app-tests/diagramSvgExport.test.ts | 75 + packages/app-tests/documentBrowser.test.ts | 19 + .../app-tests/documentStoreProvider.test.ts | 100 + .../app-tests/documentViewerFontStyle.test.ts | 17 + .../app-tests/driverInstallProgressUi.test.ts | 46 + .../app-tests/editorSettingsDraft.test.ts | 27 + .../app-tests/elasticsearchCompletion.test.ts | 83 + .../elasticsearchJsonResponse.test.ts | 70 + packages/app-tests/engineeringDiagram.test.ts | 104 + packages/app-tests/erDiagram.test.ts | 208 + packages/app-tests/exportFormats.test.ts | 7 + packages/app-tests/fieldLineage.test.ts | 76 + packages/app-tests/gridFsBrowser.test.ts | 116 + packages/app-tests/gridRowStatus.test.ts | 43 + packages/app-tests/gridSelection.test.ts | 110 + .../app-tests/gridfsBrowserPagination.test.ts | 31 + packages/app-tests/gridfsFiles.test.ts | 41 + .../app-tests/historyActivityKind.test.ts | 36 + packages/app-tests/historyAiAnalysis.test.ts | 50 + packages/app-tests/historyTimeRange.test.ts | 25 + .../app-tests/hiveKerberosOptions.test.ts | 60 + packages/app-tests/imagePreviewViewer.test.ts | 67 + packages/app-tests/insertValueHints.test.ts | 174 + packages/app-tests/jdbcDialect.test.ts | 30 + packages/app-tests/jdbcPluginRelease.test.ts | 142 + packages/app-tests/jsonCopyValue.test.ts | 44 + packages/app-tests/keyboardShortcuts.test.ts | 269 + .../app-tests/metadataLoadCoordinator.test.ts | 169 + .../app-tests/metadataResultCache.test.ts | 54 + .../app-tests/metadataTaskLimiter.test.ts | 74 + packages/app-tests/mongoCompletion.test.ts | 134 + .../app-tests/mongoConnectionOptions.test.ts | 104 + .../app-tests/mongoDocumentValues.test.ts | 108 + packages/app-tests/mongoFormatter.test.ts | 67 + packages/app-tests/mongoShellCommand.test.ts | 533 + packages/app-tests/mqAuth.test.ts | 32 + .../app-tests/nacosConfigListLayout.test.ts | 112 + packages/app-tests/newQueryContext.test.ts | 117 + packages/app-tests/objectBrowserRows.test.ts | 256 + .../app-tests/oceanbaseConnectionMode.test.ts | 22 + .../app-tests/openTabsPersistence.test.ts | 406 + packages/app-tests/pinnedItems.test.ts | 40 + .../productionGuardEntrypoints.test.ts | 107 + .../app-tests/queryCursorTableTarget.test.ts | 105 + .../app-tests/queryEditorTableDrop.test.ts | 184 + packages/app-tests/queryResultArchive.test.ts | 202 + packages/app-tests/queryResultToolbar.test.ts | 98 + packages/app-tests/queryStore.test.ts | 4646 ++++++ packages/app-tests/queryTimeout.test.ts | 19 + packages/app-tests/redisCommandSafety.test.ts | 13 + .../app-tests/redisCommandSession.test.ts | 27 + packages/app-tests/redisCommandTable.test.ts | 68 + packages/app-tests/redisCompletion.test.ts | 147 + packages/app-tests/redisKeyTree.test.ts | 205 + .../app-tests/redisSyntaxDiagnostics.test.ts | 146 + .../app-tests/redisValuePresentation.test.ts | 277 + .../app-tests/routineExecutionSql.test.ts | 150 + packages/app-tests/savedSqlHistory.test.ts | 56 + packages/app-tests/savedSqlStore.test.ts | 337 + packages/app-tests/schemaDiff.test.ts | 53 + .../app-tests/schemaDiffTableFilter.test.ts | 65 + packages/app-tests/schemaOptions.test.ts | 47 + packages/app-tests/schemaTreeCache.test.ts | 44 + packages/app-tests/settingsStore.test.ts | 524 + .../app-tests/sidebarActiveTabTarget.test.ts | 464 + .../sidebarConnectionSelection.test.ts | 69 + .../sidebarDatabaseOpenState.test.ts | 43 + packages/app-tests/sidebarLayout.test.ts | 369 + .../app-tests/sidebarLayoutNested.test.ts | 93 + .../app-tests/sidebarNodeOrdering.test.ts | 104 + packages/app-tests/sidebarRenameFocus.test.ts | 47 + packages/app-tests/sidebarSearch.test.ts | 43 + packages/app-tests/sidebarSearchTree.test.ts | 328 + .../sidebarTableSearchControl.test.ts | 227 + .../app-tests/sidebarTreeCollapse.test.ts | 42 + .../app-tests/sidebarTreeItemLayout.test.ts | 15 + .../app-tests/sidebarTreeSelection.test.ts | 38 + packages/app-tests/sidebarTypeSearch.test.ts | 20 + packages/app-tests/sqlAnalysis.test.ts | 169 + packages/app-tests/sqlCompletion.test.ts | 2792 ++++ .../sqlCompletionPerformance.test.ts | 169 + packages/app-tests/sqlExecutionTarget.test.ts | 67 + packages/app-tests/sqlFormatter.test.ts | 54 + packages/app-tests/sqlFormatterConfig.test.ts | 276 + packages/app-tests/sqlMetadataRefresh.test.ts | 60 + packages/app-tests/sqlQuoteCaret.test.ts | 63 + .../app-tests/sqlSemanticDiagnostics.test.ts | 389 + packages/app-tests/sqlServerTree.test.ts | 35 + .../sqlserverSemanticDiagnostics.test.ts | 104 + packages/app-tests/supportInfo.test.ts | 51 + packages/app-tests/syncChangelog.test.ts | 122 + packages/app-tests/tabCloseActions.test.ts | 38 + packages/app-tests/tabPresentation.test.ts | 277 + packages/app-tests/tabResultCache.test.ts | 153 + packages/app-tests/tableClipboard.test.ts | 61 + .../app-tests/tableColumnTemplates.test.ts | 116 + packages/app-tests/tableDataExport.test.ts | 35 + packages/app-tests/tableDataTabMeta.test.ts | 81 + packages/app-tests/tableEditing.test.ts | 157 + packages/app-tests/tableImport.test.ts | 20 + packages/app-tests/tableMetadataCache.test.ts | 101 + packages/app-tests/tableSqlTemplates.test.ts | 78 + .../tableStructureEditorState.test.ts | 502 + packages/app-tests/tableTree.test.ts | 346 + packages/app-tests/transferProgress.test.ts | 12 + .../app-tests/transferProgressState.test.ts | 38 + packages/app-tests/treeNodeClick.test.ts | 185 + packages/app-tests/treeNodeContext.test.ts | 46 + packages/app-tests/treeNodeIcon.test.ts | 19 + packages/app-tests/treeRefreshTarget.test.ts | 36 + packages/app-tests/useDataGridActions.test.ts | 233 + packages/app-tests/useDataGridExport.test.ts | 705 + packages/app-tests/useExportTracker.test.ts | 375 + packages/app-tests/useFlatTree.test.ts | 68 + packages/app-tests/useSqlExecution.test.ts | 68 + packages/app-tests/webdavAutoUpload.test.ts | 134 + packages/app-tests/xlsxExport.test.ts | 35 + packages/cli/README.md | 132 + packages/cli/package.json | 47 + packages/cli/src/cli-format.ts | 62 + packages/cli/src/cli.ts | 409 + packages/cli/tests/bin.test.ts | 53 + packages/cli/tests/cli-format.test.ts | 66 + packages/cli/tests/cli.test.ts | 429 + packages/cli/tsconfig.json | 14 + packages/cli/vitest.config.ts | 7 + packages/mcp-server/README.md | 329 + packages/mcp-server/package.json | 50 + packages/mcp-server/server.json | 20 + packages/mcp-server/src/index.ts | 535 + packages/mcp-server/tests/bin.test.ts | 110 + .../mcp-server/tests/driver-manifest.test.ts | 57 + packages/mcp-server/tests/server.test.ts | 791 + packages/mcp-server/tsconfig.json | 15 + packages/mcp-server/vitest.config.ts | 7 + packages/node-core/README.md | 27 + packages/node-core/package.json | 48 + packages/node-core/src/backend.ts | 37 + packages/node-core/src/bridge.ts | 25 + packages/node-core/src/connections.ts | 376 + packages/node-core/src/database.ts | 1846 +++ packages/node-core/src/diagnostics.ts | 132 + packages/node-core/src/entrypoint.ts | 21 + packages/node-core/src/format.ts | 13 + packages/node-core/src/index.ts | 13 + packages/node-core/src/paths.ts | 35 + packages/node-core/src/production-safety.ts | 314 + packages/node-core/src/redis-command.ts | 213 + packages/node-core/src/schema-context.ts | 66 + packages/node-core/src/sql-risk.ts | 234 + packages/node-core/src/sql-safety.ts | 85 + packages/node-core/src/web-backend.ts | 435 + packages/node-core/tests/collections.test.ts | 23 + .../node-core/tests/connection-store.test.ts | 52 + .../node-core/tests/describe-table.test.ts | 295 + .../node-core/tests/driver-manifest.test.ts | 98 + packages/node-core/tests/entrypoint.test.ts | 53 + packages/node-core/tests/format.test.ts | 14 + packages/node-core/tests/mongo-query.test.ts | 433 + packages/node-core/tests/mysql-url.test.ts | 34 + packages/node-core/tests/paths.test.ts | 11 + packages/node-core/tests/postgres-url.test.ts | 70 + .../node-core/tests/production-safety.test.ts | 108 + .../node-core/tests/redis-command.test.ts | 37 + packages/node-core/tests/redis-direct.test.ts | 145 + .../node-core/tests/rqlite-direct.test.ts | 131 + .../node-core/tests/schema-context.test.ts | 87 + packages/node-core/tests/sql-safety.test.ts | 94 + .../node-core/tests/sqlite-direct.test.ts | 131 + .../node-core/tests/starrocks-url.test.ts | 62 + packages/node-core/tests/web-backend.test.ts | 125 + packages/node-core/tsconfig.json | 14 + packages/node-core/vitest.config.ts | 7 + packages/test-globals.ts | 3 + plugins/README.md | 11 + plugins/jdbc/README.md | 38 + plugins/jdbc/bin/dbx-jdbc-plugin | 47 + plugins/jdbc/bin/dbx-jdbc-plugin.bat | 31 + plugins/jdbc/bin/dbx-maven-resolver | 25 + plugins/jdbc/bin/dbx-maven-resolver.bat | 31 + plugins/jdbc/manifest.json | 16 + plugins/jdbc/package.sh | 27 + plugins/jdbc/pom.xml | 134 + .../main/java/app/dbx/jdbc/DbxJdbcPlugin.java | 2591 ++++ .../app/dbx/jdbc/maven/DbxMavenResolver.java | 209 + .../java/app/dbx/jdbc/DbxJdbcPluginTest.java | 1799 +++ pnpm-lock.yaml | 7883 ++++++++++ pnpm-workspace.yaml | 8 + rustfmt.toml | 3 + scripts/bench/redis-key-search.mjs | 384 + scripts/build-knowledge-base.mjs | 278 + scripts/check-mq-integration.mjs | 50 + scripts/dev-backend.mjs | 54 + scripts/release-node-packages.mjs | 9 + scripts/release.mjs | 553 + scripts/run-check.mjs | 137 + skills/dbx/SKILL.md | 171 + src-tauri/.gitignore | 5 + src-tauri/Cargo.lock | 9703 ++++++++++++ src-tauri/Cargo.toml | 71 + src-tauri/Entitlements.plist | 8 + src-tauri/Info.plist | 8 + src-tauri/build.rs | 4 + src-tauri/capabilities/default.json | 33 + src-tauri/icons/128x128.png | Bin 0 -> 19358 bytes src-tauri/icons/128x128@2x.png | Bin 0 -> 53879 bytes src-tauri/icons/32x32.png | Bin 0 -> 2723 bytes src-tauri/icons/Square107x107Logo.png | Bin 0 -> 14943 bytes src-tauri/icons/Square142x142Logo.png | Bin 0 -> 22439 bytes src-tauri/icons/Square150x150Logo.png | Bin 0 -> 24163 bytes src-tauri/icons/Square284x284Logo.png | Bin 0 -> 63031 bytes src-tauri/icons/Square30x30Logo.png | Bin 0 -> 2444 bytes src-tauri/icons/Square310x310Logo.png | Bin 0 -> 71218 bytes src-tauri/icons/Square44x44Logo.png | Bin 0 -> 4283 bytes src-tauri/icons/Square71x71Logo.png | Bin 0 -> 8211 bytes src-tauri/icons/Square89x89Logo.png | Bin 0 -> 11145 bytes src-tauri/icons/StoreLogo.png | Bin 0 -> 5082 bytes src-tauri/icons/icon-black.png | Bin 0 -> 29484 bytes src-tauri/icons/icon-macos-dark.icns | Bin 0 -> 546498 bytes src-tauri/icons/icon.icns | Bin 0 -> 706236 bytes src-tauri/icons/icon.ico | Bin 0 -> 72256 bytes src-tauri/icons/icon.png | Bin 0 -> 154679 bytes src-tauri/icons/tray-macos-template.png | Bin 0 -> 1272 bytes src-tauri/src/commands/agents.rs | 225 + src-tauri/src/commands/ai.rs | 183 + src-tauri/src/commands/app_settings.rs | 526 + src-tauri/src/commands/cloud_sync.rs | 204 + src-tauri/src/commands/connection.rs | 1263 ++ src-tauri/src/commands/connection_secrets.rs | 1 + src-tauri/src/commands/csv_export.rs | 33 + src-tauri/src/commands/data_compare.rs | 34 + src-tauri/src/commands/database_export.rs | 57 + src-tauri/src/commands/deep_link.rs | 102 + src-tauri/src/commands/document_cmd.rs | 237 + src-tauri/src/commands/etcd_cmd.rs | 47 + src-tauri/src/commands/external_db.rs | 114 + src-tauri/src/commands/external_sql.rs | 193 + src-tauri/src/commands/fs_open.rs | 165 + src-tauri/src/commands/history.rs | 30 + src-tauri/src/commands/keychain.rs | 57 + src-tauri/src/commands/list_sql_files.rs | 118 + src-tauri/src/commands/mcp.rs | 463 + src-tauri/src/commands/mcp_bridge.rs | 849 ++ src-tauri/src/commands/mod.rs | 50 + src-tauri/src/commands/mongo_cmd.rs | 307 + src-tauri/src/commands/mq_cmd.rs | 468 + src-tauri/src/commands/nacos_cmd.rs | 138 + src-tauri/src/commands/plugins.rs | 137 + src-tauri/src/commands/query.rs | 629 + src-tauri/src/commands/query_cancel.rs | 2 + src-tauri/src/commands/query_result_export.rs | 88 + src-tauri/src/commands/redis_cmd.rs | 371 + src-tauri/src/commands/redis_pubsub_server.rs | 164 + src-tauri/src/commands/saved_sql.rs | 229 + src-tauri/src/commands/schema.rs | 431 + src-tauri/src/commands/schema_cache.rs | 26 + src-tauri/src/commands/schema_diff.rs | 30 + src-tauri/src/commands/sql_file.rs | 258 + src-tauri/src/commands/sqlite_backup.rs | 49 + src-tauri/src/commands/ssh_config.rs | 6 + src-tauri/src/commands/support_info.rs | 300 + src-tauri/src/commands/system_fonts.rs | 6 + src-tauri/src/commands/tab_runtime_cache.rs | 50 + src-tauri/src/commands/table_export.rs | 54 + src-tauri/src/commands/table_import.rs | 72 + src-tauri/src/commands/text_export.rs | 39 + src-tauri/src/commands/transfer.rs | 331 + src-tauri/src/commands/tunnel_profiles.rs | 19 + src-tauri/src/commands/update.rs | 282 + src-tauri/src/commands/window_controls.rs | 133 + src-tauri/src/commands/xlsx_export.rs | 46 + src-tauri/src/commands/zookeeper_cmd.rs | 57 + src-tauri/src/data_dir.rs | 203 + src-tauri/src/db/mod.rs | 4 + src-tauri/src/lib.rs | 1361 ++ src-tauri/src/macos_app_delegate.rs | 69 + src-tauri/src/main.rs | 16 + src-tauri/src/models/connection.rs | 1 + src-tauri/src/models/mod.rs | 1 + src-tauri/src/window_state_guard.rs | 127 + src-tauri/tauri.conf.json | 76 + src-tauri/tauri.webview2-offline.conf.json | 10 + src-tauri/windows/nsis/installer.nsi | 978 ++ tests/fixtures/production-safety-corpus.json | 312 + vitest.config.ts | 14 + 2005 files changed, 519775 insertions(+) create mode 100644 .cargo/config.toml create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/database_compatibility.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml create mode 100644 .github/ISSUE_TEMPLATE/question.yml create mode 100644 .github/scripts/augment-latest-json-jdbc-plugin.mjs create mode 100644 .github/scripts/bump-agent-versions.mjs create mode 100644 .github/scripts/bump-jdbc-plugin-version.mjs create mode 100644 .github/scripts/check-jdbc-plugin-version.mjs create mode 100644 .github/scripts/i18n-autofill.mjs create mode 100644 .github/scripts/issue-claim.mjs create mode 100644 .github/scripts/label-issue-database.mjs create mode 100644 .github/scripts/sync-atomgit-release.mjs create mode 100644 .github/scripts/sync-changelog.mjs create mode 100644 .github/scripts/sync-cnb-release.mjs create mode 100644 .github/scripts/sync-project-triage.mjs create mode 100644 .github/workflows/1panel-appstore.yml create mode 100644 .github/workflows/agents-release.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/docker-dev.yml create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/i18n-autofill.yml create mode 100644 .github/workflows/issue-claim.yml create mode 100644 .github/workflows/issue-database-label.yml create mode 100644 .github/workflows/mcp-release.yml create mode 100644 .github/workflows/notify.yml create mode 100644 .github/workflows/project-triage.yml create mode 100644 .github/workflows/publish-packages.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/spam-comment-guard.yml create mode 100644 .github/workflows/sync-atomgit-release-assets.yml create mode 100644 .github/workflows/sync-changelog.yml create mode 100644 .github/workflows/sync-cnb-release-assets.yml create mode 100644 .github/workflows/sync-mirrors.yml create mode 100644 .gitignore create mode 100755 .husky/pre-commit create mode 100644 .nvmrc create mode 100644 .oxfmtrc.json create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTING.zh-CN.md create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README-NIX.md create mode 100644 README.md create mode 100644 README.wehub.md create mode 100644 README.zh-CN.md create mode 100644 SECURITY.md create mode 100644 agents/.gitignore create mode 100644 agents/README.md create mode 100644 agents/README.zh-CN.md create mode 100644 agents/build.gradle create mode 100644 agents/common/build.gradle create mode 100644 agents/common/src/main/java/com/dbx/agent/AbstractJdbcAgent.java create mode 100644 agents/common/src/main/java/com/dbx/agent/AgentProtocol.java create mode 100644 agents/common/src/main/java/com/dbx/agent/BaseDatabaseAgent.java create mode 100644 agents/common/src/main/java/com/dbx/agent/BatchExecutor.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CheckConstraintInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ColumnInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidate.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidateKind.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CompletionAssistantMatchMode.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CompletionAssistantObjectKind.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CompletionAssistantRequest.java create mode 100644 agents/common/src/main/java/com/dbx/agent/CompletionAssistantResponse.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ConfiguredJdbcAgent.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ConnectParams.java create mode 100644 agents/common/src/main/java/com/dbx/agent/DatabaseAgent.java create mode 100644 agents/common/src/main/java/com/dbx/agent/DatabaseInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/DdlBuilder.java create mode 100644 agents/common/src/main/java/com/dbx/agent/EwkbWktDecoder.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ExecuteQueryOptions.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ExecuteQueryParams.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ForeignKeyInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/IndexInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/JdbcAgentProfile.java create mode 100644 agents/common/src/main/java/com/dbx/agent/JdbcExecutor.java create mode 100644 agents/common/src/main/java/com/dbx/agent/JdbcIdentifiers.java create mode 100644 agents/common/src/main/java/com/dbx/agent/JdbcSchemaSwitcher.java create mode 100644 agents/common/src/main/java/com/dbx/agent/JsonRpcServer.java create mode 100644 agents/common/src/main/java/com/dbx/agent/MetadataListConstraints.java create mode 100644 agents/common/src/main/java/com/dbx/agent/MetadataSqlSupport.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ObjectInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/ObjectSource.java create mode 100644 agents/common/src/main/java/com/dbx/agent/PostgresLikeAgent.java create mode 100644 agents/common/src/main/java/com/dbx/agent/PostgresLikeAgentProfile.java create mode 100644 agents/common/src/main/java/com/dbx/agent/QueryPageOptions.java create mode 100644 agents/common/src/main/java/com/dbx/agent/QueryPageParams.java create mode 100644 agents/common/src/main/java/com/dbx/agent/QueryPageResult.java create mode 100644 agents/common/src/main/java/com/dbx/agent/QueryResult.java create mode 100644 agents/common/src/main/java/com/dbx/agent/SchemaTableParams.java create mode 100644 agents/common/src/main/java/com/dbx/agent/StandardJdbcMetadata.java create mode 100644 agents/common/src/main/java/com/dbx/agent/TableInfo.java create mode 100644 agents/common/src/main/java/com/dbx/agent/TransactionExecutor.java create mode 100644 agents/common/src/main/java/com/dbx/agent/TriggerInfo.java create mode 100644 agents/common/src/main/resources/agent-protocol-v1.json create mode 100644 agents/common/src/test/java/com/dbx/agent/AbstractJdbcAgentTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/BatchExecutorTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/CommonJavaCompatibilityTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/ConfiguredJdbcAgentTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/EwkbWktDecoderTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/JdbcAgentProfileExtendedTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/JdbcExecutorTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/MetadataConstraintCoverageTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/PostgresLikeAgentTest.java create mode 100644 agents/common/src/test/java/com/dbx/agent/StandardJdbcMetadataTest.java create mode 100644 agents/docs/agent-authoring.md create mode 100644 agents/docs/examples/jdbc-agent-template/README.md create mode 100644 agents/docs/examples/jdbc-agent-template/build.gradle create mode 100644 agents/docs/examples/jdbc-agent-template/settings.gradle create mode 100644 agents/docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java create mode 100644 agents/docs/examples/jdbc-agent-template/src/test/java/com/dbx/agent/template/TemplateAgentTest.java create mode 100644 agents/docs/release-checklist.md create mode 100644 agents/drivers/access/build.gradle create mode 100644 agents/drivers/access/src/main/java/com/dbx/agent/access/AccessAgent.java create mode 100644 agents/drivers/access/src/main/java/com/dbx/agent/access/EncryptedAccessOpener.java create mode 100644 agents/drivers/access/src/test/java/com/dbx/agent/access/AccessAgentTest.java create mode 100644 agents/drivers/access/src/test/resources/db2007-enc.accdb create mode 100644 agents/drivers/bigquery/build.gradle create mode 100644 agents/drivers/bigquery/src/main/java/com/dbx/agent/bigquery/BigQueryAgent.java create mode 100644 agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentMetadataTest.java create mode 100644 agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentTest.java create mode 100644 agents/drivers/cassandra/build.gradle create mode 100644 agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java create mode 100644 agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java create mode 100644 agents/drivers/dameng/build.gradle create mode 100644 agents/drivers/dameng/libs/.gitkeep create mode 100644 agents/drivers/dameng/src/main/java/com/dbx/agent/dameng/DamengAgent.java create mode 100644 agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentMetadataTest.java create mode 100644 agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentPagingTest.java create mode 100644 agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentTest.java create mode 100644 agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentUrlTest.java create mode 100644 agents/drivers/databend/build.gradle create mode 100644 agents/drivers/databend/src/main/java/com/dbx/agent/databend/DatabendAgent.java create mode 100644 agents/drivers/databend/src/test/java/com/dbx/agent/databend/DatabendAgentTest.java create mode 100644 agents/drivers/databricks/build.gradle create mode 100644 agents/drivers/databricks/src/main/java/com/dbx/agent/databricks/DatabricksAgent.java create mode 100644 agents/drivers/databricks/src/test/java/com/dbx/agent/databricks/DatabricksAgentTest.java create mode 100644 agents/drivers/db2/build.gradle create mode 100644 agents/drivers/db2/src/main/java/com/dbx/agent/db2/Db2Agent.java create mode 100644 agents/drivers/db2/src/test/java/com/dbx/agent/db2/Db2AgentTest.java create mode 100644 agents/drivers/etcd/build.gradle create mode 100644 agents/drivers/etcd/src/main/java/com/dbx/agent/etcd/EtcdAgent.java create mode 100644 agents/drivers/etcd/src/test/java/com/dbx/agent/etcd/EtcdAgentTest.java create mode 100644 agents/drivers/exasol/build.gradle create mode 100644 agents/drivers/exasol/src/main/java/com/dbx/agent/exasol/ExasolAgent.java create mode 100644 agents/drivers/firebird/build.gradle create mode 100644 agents/drivers/firebird/src/main/java/com/dbx/agent/firebird/FirebirdAgent.java create mode 100644 agents/drivers/gbase8a/build.gradle create mode 100644 agents/drivers/gbase8a/src/main/java/com/dbx/agent/gbase8a/Gbase8aAgent.java create mode 100644 agents/drivers/gbase8a/src/test/java/com/dbx/agent/gbase8a/Gbase8aAgentTest.java create mode 100644 agents/drivers/gbase8s/build.gradle create mode 100644 agents/drivers/gbase8s/src/main/java/com/dbx/agent/gbase8s/Gbase8sAgent.java create mode 100644 agents/drivers/gbase8s/src/test/java/com/dbx/agent/gbase8s/Gbase8sAgentTest.java create mode 100644 agents/drivers/goldendb/build.gradle create mode 100644 agents/drivers/goldendb/libs/.gitkeep create mode 100644 agents/drivers/goldendb/src/main/java/com/dbx/agent/goldendb/GoldendbAgent.java create mode 100644 agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentMetadataTest.java create mode 100644 agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentTest.java create mode 100644 agents/drivers/h2-legacy/build.gradle create mode 100644 agents/drivers/h2-legacy/src/main/java/com/dbx/agent/h2legacy/H2LegacyAgent.java create mode 100644 agents/drivers/h2/build.gradle create mode 100644 agents/drivers/h2/src/main/java/com/dbx/agent/h2/H2Agent.java create mode 100644 agents/drivers/h2/src/test/java/com/dbx/agent/h2/H2AgentTest.java create mode 100644 agents/drivers/highgo/build.gradle create mode 100644 agents/drivers/highgo/src/main/java/com/dbx/agent/highgo/HighgoAgent.java create mode 100644 agents/drivers/highgo/src/test/java/com/dbx/agent/highgo/HighgoAgentTest.java create mode 100644 agents/drivers/hive/build.gradle create mode 100644 agents/drivers/hive/src/main/java/com/dbx/agent/hive/HiveAgent.java create mode 100644 agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentExecutionTest.java create mode 100644 agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentMetadataTest.java create mode 100644 agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentTest.java create mode 100644 agents/drivers/informix/build.gradle create mode 100644 agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java create mode 100644 agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentExecutionTest.java create mode 100644 agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java create mode 100644 agents/drivers/iotdb/build.gradle create mode 100644 agents/drivers/iotdb/src/main/java/com/dbx/agent/iotdb/IoTDBAgent.java create mode 100644 agents/drivers/iotdb/src/test/java/com/dbx/agent/iotdb/IoTDBAgentTest.java create mode 100644 agents/drivers/iris/build.gradle create mode 100644 agents/drivers/iris/src/main/java/com/dbx/agent/iris/IrisAgent.java create mode 100644 agents/drivers/iris/src/test/java/com/dbx/agent/iris/IrisAgentTest.java create mode 100644 agents/drivers/kafka/build.gradle create mode 100644 agents/drivers/kafka/src/main/java/com/dbx/agent/kafka/KafkaAgent.java create mode 100644 agents/drivers/kafka/src/test/java/com/dbx/agent/kafka/KafkaAgentTest.java create mode 100644 agents/drivers/kingbase/build.gradle create mode 100644 agents/drivers/kingbase/libs/.gitkeep create mode 100644 agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java create mode 100644 agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java create mode 100644 agents/drivers/kylin/build.gradle create mode 100644 agents/drivers/kylin/src/main/java/com/dbx/agent/kylin/KylinAgent.java create mode 100644 agents/drivers/kylin/src/test/java/com/dbx/agent/kylin/KylinAgentTest.java create mode 100644 agents/drivers/mongodb/build.gradle create mode 100644 agents/drivers/mongodb/src/main/java/com/dbx/agent/mongodb/MongoAgent.java create mode 100644 agents/drivers/mongodb/src/test/java/com/dbx/agent/mongodb/MongoAgentTest.java create mode 100644 agents/drivers/neo4j/build.gradle create mode 100644 agents/drivers/neo4j/src/main/java/com/dbx/agent/neo4j/Neo4jAgent.java create mode 100644 agents/drivers/neo4j/src/test/java/com/dbx/agent/neo4j/Neo4jAgentTest.java create mode 100644 agents/drivers/oceanbase-oracle/build.gradle create mode 100644 agents/drivers/oceanbase-oracle/src/main/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgent.java create mode 100644 agents/drivers/oceanbase-oracle/src/test/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgentTest.java create mode 100644 agents/drivers/oracle-go/.gitignore create mode 100644 agents/drivers/oracle-go/README.md create mode 100644 agents/drivers/oracle-go/go.mod create mode 100644 agents/drivers/oracle-go/go.sum create mode 100644 agents/drivers/oracle-go/main.go create mode 100644 agents/drivers/oracle-go/main_test.go create mode 100644 agents/drivers/oscar/build.gradle create mode 100644 agents/drivers/oscar/libs/oscarJDBC8.jar create mode 100644 agents/drivers/oscar/src/main/java/com/dbx/agent/oscar/OscarAgent.java create mode 100644 agents/drivers/oscar/src/test/java/com/dbx/agent/oscar/OscarAgentTest.java create mode 100644 agents/drivers/saphana/build.gradle create mode 100644 agents/drivers/saphana/src/main/java/com/dbx/agent/saphana/SapHanaAgent.java create mode 100644 agents/drivers/snowflake/build.gradle create mode 100644 agents/drivers/snowflake/src/main/java/com/dbx/agent/snowflake/SnowflakeAgent.java create mode 100644 agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentMetadataTest.java create mode 100644 agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentTest.java create mode 100644 agents/drivers/spark/build.gradle create mode 100644 agents/drivers/spark/src/main/java/com/dbx/agent/spark/SparkAgent.java create mode 100644 agents/drivers/sqlserver-legacy/build.gradle create mode 100644 agents/drivers/sqlserver-legacy/src/main/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgent.java create mode 100644 agents/drivers/sqlserver-legacy/src/test/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgentTest.java create mode 100644 agents/drivers/sundb/build.gradle create mode 100644 agents/drivers/sundb/src/main/java/com/dbx/agent/sundb/SundbAgent.java create mode 100644 agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentMetadataTest.java create mode 100644 agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentTest.java create mode 100644 agents/drivers/tdengine/build.gradle create mode 100644 agents/drivers/tdengine/src/main/java/com/dbx/agent/tdengine/TDengineAgent.java create mode 100644 agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentPagingTest.java create mode 100644 agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentTest.java create mode 100644 agents/drivers/teradata/build.gradle create mode 100644 agents/drivers/teradata/src/main/java/com/dbx/agent/teradata/TeradataAgent.java create mode 100644 agents/drivers/trino/build.gradle create mode 100644 agents/drivers/trino/src/main/java/com/dbx/agent/trino/TrinoAgent.java create mode 100644 agents/drivers/trino/src/test/java/com/dbx/agent/trino/TrinoAgentTest.java create mode 100644 agents/drivers/vastbase/build.gradle create mode 100644 agents/drivers/vastbase/libs/.gitkeep create mode 100644 agents/drivers/vastbase/src/main/java/com/dbx/agent/vastbase/VastbaseAgent.java create mode 100644 agents/drivers/vastbase/src/test/java/com/dbx/agent/vastbase/VastbaseAgentTest.java create mode 100644 agents/drivers/vertica/build.gradle create mode 100644 agents/drivers/vertica/src/main/java/com/dbx/agent/vertica/VerticaAgent.java create mode 100644 agents/drivers/xugu/README.md create mode 100644 agents/drivers/xugu/go.mod create mode 100644 agents/drivers/xugu/go.sum create mode 100644 agents/drivers/xugu/main.go create mode 100644 agents/drivers/xugu/main_test.go create mode 100644 agents/drivers/yashandb/build.gradle create mode 100644 agents/drivers/yashandb/src/main/java/com/dbx/agent/yashandb/YashandbAgent.java create mode 100644 agents/drivers/yashandb/src/test/java/com/dbx/agent/yashandb/YashandbAgentTest.java create mode 100644 agents/drivers/zookeeper/build.gradle create mode 100644 agents/drivers/zookeeper/src/main/java/com/dbx/agent/zookeeper/ZooKeeperAgent.java create mode 100644 agents/drivers/zookeeper/src/test/java/com/dbx/agent/zookeeper/ZooKeeperAgentTest.java create mode 100644 agents/gradle/wrapper/gradle-wrapper.jar create mode 100644 agents/gradle/wrapper/gradle-wrapper.properties create mode 100755 agents/gradlew create mode 100644 agents/gradlew.bat create mode 100644 agents/metadata-constraint-coverage.tsv create mode 100644 agents/opengauss/build.gradle create mode 100644 agents/opengauss/src/main/java/com/dbx/agent/opengauss/OpenGaussAgent.java create mode 100644 agents/opengauss/src/test/java/com/dbx/agent/opengauss/OpenGaussAgentTest.java create mode 100755 agents/scripts/build_offline_zip.sh create mode 100755 agents/scripts/release.sh create mode 100644 agents/scripts/validate_agent_jars.py create mode 100644 agents/scripts/validate_agents.py create mode 100644 agents/scripts/validate_agents_test.py create mode 100644 agents/settings.gradle create mode 100644 agents/test-support/build.gradle create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/JdbcAgentFake.java create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/JdbcConnectedAgentTest.java create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/JdbcExecutionBehaviorTest.java create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/JdbcFakeExecutionBehaviorTest.java create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataBehaviorTest.java create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataSqlFake.java create mode 100644 agents/test-support/src/main/java/com/dbx/agent/test/TestSupport.java create mode 100644 agents/versions.json create mode 100644 apps/README.md create mode 100644 apps/desktop/components.json create mode 100644 apps/desktop/index.html create mode 100644 apps/desktop/public/favicon.png create mode 100644 apps/desktop/public/fonts/Geist-LICENSE.txt create mode 100644 apps/desktop/public/fonts/geist-latin-ext-wght-normal.woff2 create mode 100644 apps/desktop/public/fonts/geist-latin-wght-normal.woff2 create mode 100644 apps/desktop/public/icon-preview-black.png create mode 100644 apps/desktop/public/icon-preview-default.png create mode 100644 apps/desktop/public/icons/ai/alibabacloud.svg create mode 100644 apps/desktop/public/icons/ai/anthropic.svg create mode 100644 apps/desktop/public/icons/ai/codex.svg create mode 100644 apps/desktop/public/icons/ai/deepseek.svg create mode 100644 apps/desktop/public/icons/ai/googlegemini.svg create mode 100644 apps/desktop/public/icons/ai/ollama.svg create mode 100644 apps/desktop/public/icons/ai/openai.svg create mode 100644 apps/desktop/public/icons/database/access.png create mode 100644 apps/desktop/public/icons/database/apache_kylin.svg create mode 100644 apps/desktop/public/icons/database/bigquery.svg create mode 100644 apps/desktop/public/icons/database/cassandra.svg create mode 100644 apps/desktop/public/icons/database/chromadb.svg create mode 100644 apps/desktop/public/icons/database/clickhouse.svg create mode 100644 apps/desktop/public/icons/database/cloudflare-d1.svg create mode 100644 apps/desktop/public/icons/database/cockroachdb.svg create mode 100644 apps/desktop/public/icons/database/databend.svg create mode 100644 apps/desktop/public/icons/database/databricks.webp create mode 100644 apps/desktop/public/icons/database/db2.svg create mode 100644 apps/desktop/public/icons/database/dm.svg create mode 100644 apps/desktop/public/icons/database/doris.svg create mode 100644 apps/desktop/public/icons/database/dremio.svg create mode 100644 apps/desktop/public/icons/database/duckdb.svg create mode 100644 apps/desktop/public/icons/database/elasticsearch.svg create mode 100644 apps/desktop/public/icons/database/etcd.svg create mode 100644 apps/desktop/public/icons/database/exasol.webp create mode 100644 apps/desktop/public/icons/database/firebird.webp create mode 100644 apps/desktop/public/icons/database/gaussdb.svg create mode 100644 apps/desktop/public/icons/database/gbase.webp create mode 100644 apps/desktop/public/icons/database/goldendb.png create mode 100644 apps/desktop/public/icons/database/greatsql.webp create mode 100644 apps/desktop/public/icons/database/h2.svg create mode 100644 apps/desktop/public/icons/database/highgo.png create mode 100644 apps/desktop/public/icons/database/hive.svg create mode 100644 apps/desktop/public/icons/database/influxdb.svg create mode 100644 apps/desktop/public/icons/database/informix.svg create mode 100644 apps/desktop/public/icons/database/iotdb.svg create mode 100644 apps/desktop/public/icons/database/iris.png create mode 100644 apps/desktop/public/icons/database/kafka.svg create mode 100644 apps/desktop/public/icons/database/kingbase.svg create mode 100644 apps/desktop/public/icons/database/kwdb.svg create mode 100644 apps/desktop/public/icons/database/manticoresearch.png create mode 100644 apps/desktop/public/icons/database/mariadb.svg create mode 100644 apps/desktop/public/icons/database/milvus.png create mode 100644 apps/desktop/public/icons/database/mongodb.svg create mode 100644 apps/desktop/public/icons/database/mysql.svg create mode 100644 apps/desktop/public/icons/database/nacos.png create mode 100644 apps/desktop/public/icons/database/neo4j.svg create mode 100644 apps/desktop/public/icons/database/oceanbase.svg create mode 100644 apps/desktop/public/icons/database/opengauss.svg create mode 100644 apps/desktop/public/icons/database/oracle.svg create mode 100644 apps/desktop/public/icons/database/polardb.webp create mode 100644 apps/desktop/public/icons/database/postgres.svg create mode 100644 apps/desktop/public/icons/database/presto.svg create mode 100644 apps/desktop/public/icons/database/pulsar.svg create mode 100644 apps/desktop/public/icons/database/qdrant.svg create mode 100644 apps/desktop/public/icons/database/questdb.svg create mode 100644 apps/desktop/public/icons/database/redis.svg create mode 100644 apps/desktop/public/icons/database/redshift.svg create mode 100644 apps/desktop/public/icons/database/rqlite.png create mode 100644 apps/desktop/public/icons/database/saphana.webp create mode 100644 apps/desktop/public/icons/database/selectdb.svg create mode 100644 apps/desktop/public/icons/database/snowflake.svg create mode 100644 apps/desktop/public/icons/database/spark-logo.png create mode 100644 apps/desktop/public/icons/database/sqlite.svg create mode 100644 apps/desktop/public/icons/database/sqlserver.svg create mode 100644 apps/desktop/public/icons/database/starrocks.svg create mode 100644 apps/desktop/public/icons/database/sundb.svg create mode 100644 apps/desktop/public/icons/database/tdengine.svg create mode 100644 apps/desktop/public/icons/database/tdsql.webp create mode 100644 apps/desktop/public/icons/database/teradata.webp create mode 100644 apps/desktop/public/icons/database/tidb.svg create mode 100644 apps/desktop/public/icons/database/trino.svg create mode 100644 apps/desktop/public/icons/database/turso.png create mode 100644 apps/desktop/public/icons/database/vastbase.png create mode 100644 apps/desktop/public/icons/database/vertica.webp create mode 100644 apps/desktop/public/icons/database/weaviate.png create mode 100644 apps/desktop/public/icons/database/xugu.png create mode 100644 apps/desktop/public/icons/database/yashandb.png create mode 100644 apps/desktop/public/icons/database/zookeeper.svg create mode 100644 apps/desktop/public/logo-black.png create mode 100644 apps/desktop/public/logo.png create mode 100644 apps/desktop/src/App.vue create mode 100644 apps/desktop/src/components/admin/DamengJobAdmin.vue create mode 100644 apps/desktop/src/components/admin/DatabaseUserAdmin.vue create mode 100644 apps/desktop/src/components/auth/LoginPage.vue create mode 100644 apps/desktop/src/components/chart/QueryChart.vue create mode 100644 apps/desktop/src/components/common/ElasticsearchJsonResponsePanel.vue create mode 100644 apps/desktop/src/components/common/JsonTree.vue create mode 100644 apps/desktop/src/components/common/ProductionContextBadge.vue create mode 100644 apps/desktop/src/components/common/QueryErrorActions.vue create mode 100644 apps/desktop/src/components/common/QueryLoadingState.vue create mode 100644 apps/desktop/src/components/config/ConfigPassphraseDialog.vue create mode 100644 apps/desktop/src/components/config/DriverInstallProgressCircle.vue create mode 100644 apps/desktop/src/components/config/DriverStoreDialog.vue create mode 100644 apps/desktop/src/components/connection/CloudflareD1ConnectionFields.vue create mode 100644 apps/desktop/src/components/connection/ConnectionDialog.vue create mode 100644 apps/desktop/src/components/connection/ConnectionErrorIndicator.vue create mode 100644 apps/desktop/src/components/connection/TunnelProfileManager.vue create mode 100644 apps/desktop/src/components/diagram/SchemaDiagramDialog.vue create mode 100644 apps/desktop/src/components/diff/DataCompareDialog.vue create mode 100644 apps/desktop/src/components/diff/DiffHunkBuilder.ts create mode 100644 apps/desktop/src/components/diff/DiffSvgConnector.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffConfigSelector.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffConfigStep.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffDdlPanel.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffDeployStep.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffDialog.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffObjectTree.vue create mode 100644 apps/desktop/src/components/diff/SchemaDiffOptionsPanel.vue create mode 100644 apps/desktop/src/components/document/DocumentBrowser.vue create mode 100644 apps/desktop/src/components/document/JsonEditNode.vue create mode 100644 apps/desktop/src/components/document/MongoBucketBrowser.vue create mode 100644 apps/desktop/src/components/document/MongoGridFsBrowser.vue create mode 100644 apps/desktop/src/components/editor/AiAssistant.vue create mode 100644 apps/desktop/src/components/editor/ColumnInfoPanel.vue create mode 100644 apps/desktop/src/components/editor/DangerConfirmDialog.vue create mode 100644 apps/desktop/src/components/editor/EditorSearchPanel.vue create mode 100644 apps/desktop/src/components/editor/EditorSettingsDialog.vue create mode 100644 apps/desktop/src/components/editor/QueryEditor.vue create mode 100644 apps/desktop/src/components/editor/QueryHistory.vue create mode 100644 apps/desktop/src/components/editor/SqlExecutionTargetPicker.vue create mode 100644 apps/desktop/src/components/editor/SqlFormatterSettingsPanel.vue create mode 100644 apps/desktop/src/components/editor/SqlParameterDialog.vue create mode 100644 apps/desktop/src/components/editor/SqlPreviewPanel.vue create mode 100644 apps/desktop/src/components/editor/ThemeCustomizerDialog.vue create mode 100644 apps/desktop/src/components/etcd/EtcdKeyBrowser.vue create mode 100644 apps/desktop/src/components/explain/ExplainPlanNodeTree.vue create mode 100644 apps/desktop/src/components/explain/ExplainPlanViewer.vue create mode 100644 apps/desktop/src/components/export/DatabaseExportDialog.vue create mode 100644 apps/desktop/src/components/export/ExportProgressDialog.vue create mode 100644 apps/desktop/src/components/export/ExportProgressPopover.vue create mode 100644 apps/desktop/src/components/generate/DataGenerateDialog.vue create mode 100644 apps/desktop/src/components/generate/GeneratorSelect.vue create mode 100644 apps/desktop/src/components/generate/params/AddressParams.vue create mode 100644 apps/desktop/src/components/generate/params/BarcodeParams.vue create mode 100644 apps/desktop/src/components/generate/params/CityParams.vue create mode 100644 apps/desktop/src/components/generate/params/ColorParams.vue create mode 100644 apps/desktop/src/components/generate/params/CommonOptions.vue create mode 100644 apps/desktop/src/components/generate/params/CompanyNameParams.vue create mode 100644 apps/desktop/src/components/generate/params/CreditCardDateParams.vue create mode 100644 apps/desktop/src/components/generate/params/CreditCardNumberParams.vue create mode 100644 apps/desktop/src/components/generate/params/CreditCardTypeParams.vue create mode 100644 apps/desktop/src/components/generate/params/DateParams.vue create mode 100644 apps/desktop/src/components/generate/params/DateTimeParams.vue create mode 100644 apps/desktop/src/components/generate/params/DefaultParams.vue create mode 100644 apps/desktop/src/components/generate/params/DepartmentParams.vue create mode 100644 apps/desktop/src/components/generate/params/EmailParams.vue create mode 100644 apps/desktop/src/components/generate/params/EnumParams.vue create mode 100644 apps/desktop/src/components/generate/params/FileExtensionParams.vue create mode 100644 apps/desktop/src/components/generate/params/FileNameParams.vue create mode 100644 apps/desktop/src/components/generate/params/FilePathParams.vue create mode 100644 apps/desktop/src/components/generate/params/ForeignKeyParams.vue create mode 100644 apps/desktop/src/components/generate/params/FullNameParams.vue create mode 100644 apps/desktop/src/components/generate/params/GenderParams.vue create mode 100644 apps/desktop/src/components/generate/params/GeneratorParamsPanel.vue create mode 100644 apps/desktop/src/components/generate/params/HostnameParams.vue create mode 100644 apps/desktop/src/components/generate/params/IdNumberParams.vue create mode 100644 apps/desktop/src/components/generate/params/ImageBinaryParams.vue create mode 100644 apps/desktop/src/components/generate/params/IndustryParams.vue create mode 100644 apps/desktop/src/components/generate/params/IpAddressParams.vue create mode 100644 apps/desktop/src/components/generate/params/JobTitleParams.vue create mode 100644 apps/desktop/src/components/generate/params/MacAddressParams.vue create mode 100644 apps/desktop/src/components/generate/params/MaritalStatusParams.vue create mode 100644 apps/desktop/src/components/generate/params/NumberParams.vue create mode 100644 apps/desktop/src/components/generate/params/PaymentMethodParams.vue create mode 100644 apps/desktop/src/components/generate/params/PhoneParams.vue create mode 100644 apps/desktop/src/components/generate/params/ProductCategoryParams.vue create mode 100644 apps/desktop/src/components/generate/params/ProductNameParams.vue create mode 100644 apps/desktop/src/components/generate/params/RegexParams.vue create mode 100644 apps/desktop/src/components/generate/params/RegionParams.vue create mode 100644 apps/desktop/src/components/generate/params/SequenceParams.vue create mode 100644 apps/desktop/src/components/generate/params/SizeParams.vue create mode 100644 apps/desktop/src/components/generate/params/SkuParams.vue create mode 100644 apps/desktop/src/components/generate/params/SocialIdParams.vue create mode 100644 apps/desktop/src/components/generate/params/TextParams.vue create mode 100644 apps/desktop/src/components/generate/params/TimeParams.vue create mode 100644 apps/desktop/src/components/generate/params/TitleParams.vue create mode 100644 apps/desktop/src/components/generate/params/UrlParams.vue create mode 100644 apps/desktop/src/components/generate/params/UuidParams.vue create mode 100644 apps/desktop/src/components/generate/params/WeightUnitParams.vue create mode 100644 apps/desktop/src/components/grid/DataGrid.vue create mode 100644 apps/desktop/src/components/grid/EnumCellEditor.vue create mode 100644 apps/desktop/src/components/grid/ImagePreviewDialog.vue create mode 100644 apps/desktop/src/components/grid/LayerPreviewDialog.vue create mode 100644 apps/desktop/src/components/grid/TemporalCellEditor.vue create mode 100644 apps/desktop/src/components/icons/AiProviderLogo.vue create mode 100644 apps/desktop/src/components/icons/AppLogo.vue create mode 100644 apps/desktop/src/components/icons/DatabaseIcon.vue create mode 100644 apps/desktop/src/components/import/TableImportDialog.vue create mode 100644 apps/desktop/src/components/kv/KvKeyBrowser.vue create mode 100644 apps/desktop/src/components/layout/AppDialogs.vue create mode 100644 apps/desktop/src/components/layout/AppSidebar.vue create mode 100644 apps/desktop/src/components/layout/AppTabBar.vue create mode 100644 apps/desktop/src/components/layout/AppToolbar.vue create mode 100644 apps/desktop/src/components/layout/CloseActionPromptDialog.vue create mode 100644 apps/desktop/src/components/layout/ContentArea.vue create mode 100644 apps/desktop/src/components/layout/EditorToolbar.vue create mode 100644 apps/desktop/src/components/layout/QueryResultToolbarActions.vue create mode 100644 apps/desktop/src/components/layout/QueryResultViewSwitcher.vue create mode 100644 apps/desktop/src/components/layout/SqlFilePanel.vue create mode 100644 apps/desktop/src/components/layout/SqlLibraryPanel.vue create mode 100644 apps/desktop/src/components/layout/UpdateDialog.vue create mode 100644 apps/desktop/src/components/layout/WelcomeScreen.vue create mode 100644 apps/desktop/src/components/layout/WindowControls.vue create mode 100644 apps/desktop/src/components/lineage/FieldLineageDialog.vue create mode 100644 apps/desktop/src/components/mq/BrokerPanel.vue create mode 100644 apps/desktop/src/components/mq/MonitoringPanel.vue create mode 100644 apps/desktop/src/components/mq/MqAdminConsole.vue create mode 100644 apps/desktop/src/components/mq/NamespacesPanel.vue create mode 100644 apps/desktop/src/components/mq/PermissionsPanel.vue create mode 100644 apps/desktop/src/components/mq/PoliciesPanel.vue create mode 100644 apps/desktop/src/components/mq/ProducerConsumerPanel.vue create mode 100644 apps/desktop/src/components/mq/README.md create mode 100644 apps/desktop/src/components/mq/RawApiPanel.vue create mode 100644 apps/desktop/src/components/mq/SendMessagePanel.vue create mode 100644 apps/desktop/src/components/mq/SubscriptionsPanel.vue create mode 100644 apps/desktop/src/components/mq/TenantsPanel.vue create mode 100644 apps/desktop/src/components/mq/TopicsPanel.vue create mode 100644 apps/desktop/src/components/nacos/NacosAdminConsole.vue create mode 100644 apps/desktop/src/components/nacos/NacosConfigDiffDialog.vue create mode 100644 apps/desktop/src/components/nacos/NacosConfigHistoryDialog.vue create mode 100644 apps/desktop/src/components/objects/DdlViewDialog.vue create mode 100644 apps/desktop/src/components/objects/InstallExtensionDialog.vue create mode 100644 apps/desktop/src/components/objects/ObjectBrowser.vue create mode 100644 apps/desktop/src/components/objects/ObjectSourceDialog.vue create mode 100644 apps/desktop/src/components/objects/ProcedureExecutionDialog.vue create mode 100644 apps/desktop/src/components/quick-open/QuickOpenDialog.vue create mode 100644 apps/desktop/src/components/redis/RedisDashboard.vue create mode 100644 apps/desktop/src/components/redis/RedisKeyBrowser.vue create mode 100644 apps/desktop/src/components/redis/RedisPubSubPanel.vue create mode 100644 apps/desktop/src/components/redis/RedisSlowlogPanel.vue create mode 100644 apps/desktop/src/components/redis/RedisValueViewer.vue create mode 100644 apps/desktop/src/components/search/DatabaseSearchDialog.vue create mode 100644 apps/desktop/src/components/sidebar/ConnectionTree.vue create mode 100644 apps/desktop/src/components/sidebar/TreeItem.vue create mode 100644 apps/desktop/src/components/sidebar/VisibleDatabasesDialog.vue create mode 100644 apps/desktop/src/components/sidebar/VisibleSchemasDialog.vue create mode 100644 apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue create mode 100644 apps/desktop/src/components/structure/TableStructureEditor.vue create mode 100644 apps/desktop/src/components/transfer/DataTransferDialog.vue create mode 100644 apps/desktop/src/components/ui/CustomContextMenu.vue create mode 100644 apps/desktop/src/components/ui/ErrorBanner.vue create mode 100644 apps/desktop/src/components/ui/LightDropdown.vue create mode 100644 apps/desktop/src/components/ui/LightDropdownMenu.vue create mode 100644 apps/desktop/src/components/ui/LightTooltip.vue create mode 100644 apps/desktop/src/components/ui/PasswordInput.vue create mode 100644 apps/desktop/src/components/ui/TruncatedTextTooltip.vue create mode 100644 apps/desktop/src/components/ui/badge/Badge.vue create mode 100644 apps/desktop/src/components/ui/badge/index.ts create mode 100644 apps/desktop/src/components/ui/button/Button.vue create mode 100644 apps/desktop/src/components/ui/button/index.ts create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenu.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuCheckboxItem.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuContent.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuGroup.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuItem.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuLabel.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuPortal.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuRadioGroup.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuRadioItem.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuSeparator.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuShortcut.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuSub.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuSubContent.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuSubTrigger.vue create mode 100644 apps/desktop/src/components/ui/context-menu/ContextMenuTrigger.vue create mode 100644 apps/desktop/src/components/ui/context-menu/index.ts create mode 100644 apps/desktop/src/components/ui/dialog/Dialog.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogClose.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogContent.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogDescription.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogFooter.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogHeader.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogOverlay.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogScrollContent.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogTitle.vue create mode 100644 apps/desktop/src/components/ui/dialog/DialogTrigger.vue create mode 100644 apps/desktop/src/components/ui/dialog/index.ts create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenu.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuContent.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuGroup.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuItem.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuLabel.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuSub.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue create mode 100644 apps/desktop/src/components/ui/dropdown-menu/index.ts create mode 100644 apps/desktop/src/components/ui/input/Input.vue create mode 100644 apps/desktop/src/components/ui/input/index.ts create mode 100644 apps/desktop/src/components/ui/label/Label.vue create mode 100644 apps/desktop/src/components/ui/label/index.ts create mode 100644 apps/desktop/src/components/ui/option-help-panel/OptionHelpPanel.vue create mode 100644 apps/desktop/src/components/ui/option-help-panel/index.ts create mode 100644 apps/desktop/src/components/ui/option-help-panel/optionHelpPanel.spec.ts create mode 100644 apps/desktop/src/components/ui/option-help-panel/optionHelpPanel.ts create mode 100644 apps/desktop/src/components/ui/popover/Popover.vue create mode 100644 apps/desktop/src/components/ui/popover/PopoverAnchor.vue create mode 100644 apps/desktop/src/components/ui/popover/PopoverContent.vue create mode 100644 apps/desktop/src/components/ui/popover/PopoverDescription.vue create mode 100644 apps/desktop/src/components/ui/popover/PopoverHeader.vue create mode 100644 apps/desktop/src/components/ui/popover/PopoverTitle.vue create mode 100644 apps/desktop/src/components/ui/popover/PopoverTrigger.vue create mode 100644 apps/desktop/src/components/ui/popover/index.ts create mode 100644 apps/desktop/src/components/ui/scroll-area/ScrollArea.vue create mode 100644 apps/desktop/src/components/ui/scroll-area/ScrollBar.vue create mode 100644 apps/desktop/src/components/ui/scroll-area/index.ts create mode 100644 apps/desktop/src/components/ui/searchable-select/SearchableSelect.vue create mode 100644 apps/desktop/src/components/ui/searchable-select/index.ts create mode 100644 apps/desktop/src/components/ui/select/Select.vue create mode 100644 apps/desktop/src/components/ui/select/SelectContent.vue create mode 100644 apps/desktop/src/components/ui/select/SelectGroup.vue create mode 100644 apps/desktop/src/components/ui/select/SelectItem.vue create mode 100644 apps/desktop/src/components/ui/select/SelectItemText.vue create mode 100644 apps/desktop/src/components/ui/select/SelectLabel.vue create mode 100644 apps/desktop/src/components/ui/select/SelectScrollDownButton.vue create mode 100644 apps/desktop/src/components/ui/select/SelectScrollUpButton.vue create mode 100644 apps/desktop/src/components/ui/select/SelectSeparator.vue create mode 100644 apps/desktop/src/components/ui/select/SelectTrigger.vue create mode 100644 apps/desktop/src/components/ui/select/SelectValue.vue create mode 100644 apps/desktop/src/components/ui/select/index.ts create mode 100644 apps/desktop/src/components/ui/separator/Separator.vue create mode 100644 apps/desktop/src/components/ui/separator/index.ts create mode 100644 apps/desktop/src/components/ui/sheet/Sheet.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetClose.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetContent.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetDescription.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetFooter.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetHeader.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetOverlay.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetTitle.vue create mode 100644 apps/desktop/src/components/ui/sheet/SheetTrigger.vue create mode 100644 apps/desktop/src/components/ui/sheet/index.ts create mode 100644 apps/desktop/src/components/ui/switch/Switch.vue create mode 100644 apps/desktop/src/components/ui/switch/index.ts create mode 100644 apps/desktop/src/components/ui/tabs/Tabs.vue create mode 100644 apps/desktop/src/components/ui/tabs/TabsContent.vue create mode 100644 apps/desktop/src/components/ui/tabs/TabsList.vue create mode 100644 apps/desktop/src/components/ui/tabs/TabsTrigger.vue create mode 100644 apps/desktop/src/components/ui/tabs/index.ts create mode 100644 apps/desktop/src/components/ui/tooltip/HelpTooltip.vue create mode 100644 apps/desktop/src/components/ui/tooltip/Tooltip.vue create mode 100644 apps/desktop/src/components/ui/tooltip/TooltipContent.vue create mode 100644 apps/desktop/src/components/ui/tooltip/TooltipProvider.vue create mode 100644 apps/desktop/src/components/ui/tooltip/TooltipTrigger.vue create mode 100644 apps/desktop/src/components/ui/tooltip/index.ts create mode 100644 apps/desktop/src/components/vector/VectorBrowser.vue create mode 100644 apps/desktop/src/components/zookeeper/ZooKeeperKeyBrowser.vue create mode 100644 apps/desktop/src/composables/__tests__/useCellDetailEditor.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useDataGridActions.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useDataGridColumnResize.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useDataGridExport.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useDataGridSelection.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useQuickOpen.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useSchemaOptions.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useSqlExecution.spec.ts create mode 100644 apps/desktop/src/composables/__tests__/useWindowControls.spec.ts create mode 100644 apps/desktop/src/composables/useAppUpdater.ts create mode 100644 apps/desktop/src/composables/useCellDetailEditor.ts create mode 100644 apps/desktop/src/composables/useCloseActionPrompt.ts create mode 100644 apps/desktop/src/composables/useDataGridActions.ts create mode 100644 apps/desktop/src/composables/useDataGridColumnResize.ts create mode 100644 apps/desktop/src/composables/useDataGridEditor.ts create mode 100644 apps/desktop/src/composables/useDataGridExport.ts create mode 100644 apps/desktop/src/composables/useDataGridSelection.ts create mode 100644 apps/desktop/src/composables/useDatabaseOptions.ts create mode 100644 apps/desktop/src/composables/useDialogSources.ts create mode 100644 apps/desktop/src/composables/useDiffScrollSync.ts create mode 100644 apps/desktop/src/composables/useDragSort.ts create mode 100644 apps/desktop/src/composables/useEditorFontFamilyStyle.ts create mode 100644 apps/desktop/src/composables/useExportTracker.ts create mode 100644 apps/desktop/src/composables/useFileDrop.ts create mode 100644 apps/desktop/src/composables/useFlatTree.ts create mode 100644 apps/desktop/src/composables/useNacosConfigListColumnResize.ts create mode 100644 apps/desktop/src/composables/useNavigationTargets.ts create mode 100644 apps/desktop/src/composables/usePanelResize.ts create mode 100644 apps/desktop/src/composables/useQuickOpen.ts create mode 100644 apps/desktop/src/composables/useSchemaDiffConfig.ts create mode 100644 apps/desktop/src/composables/useSchemaOptions.ts create mode 100644 apps/desktop/src/composables/useSqlExecution.ts create mode 100644 apps/desktop/src/composables/useSqlHighlighter.ts create mode 100644 apps/desktop/src/composables/useTabDrag.ts create mode 100644 apps/desktop/src/composables/useTabScroll.ts create mode 100644 apps/desktop/src/composables/useTauriEvents.ts create mode 100644 apps/desktop/src/composables/useTheme.ts create mode 100644 apps/desktop/src/composables/useToast.ts create mode 100644 apps/desktop/src/composables/useVisibilityChange.ts create mode 100644 apps/desktop/src/composables/useWebDavAutoUpload.ts create mode 100644 apps/desktop/src/composables/useWindowControls.ts create mode 100644 apps/desktop/src/env.d.ts create mode 100644 apps/desktop/src/i18n/__tests__/sqliteRebuildNotice.spec.ts create mode 100644 apps/desktop/src/i18n/backend-errors.ts create mode 100644 apps/desktop/src/i18n/index.ts create mode 100644 apps/desktop/src/i18n/locales/en.ts create mode 100644 apps/desktop/src/i18n/locales/es.ts create mode 100644 apps/desktop/src/i18n/locales/fallback.ts create mode 100644 apps/desktop/src/i18n/locales/it.ts create mode 100644 apps/desktop/src/i18n/locales/ja.ts create mode 100644 apps/desktop/src/i18n/locales/pt-BR.ts create mode 100644 apps/desktop/src/i18n/locales/typeHelpOverrides.spec.ts create mode 100644 apps/desktop/src/i18n/locales/zh-CN.ts create mode 100644 apps/desktop/src/i18n/locales/zh-TW.ts create mode 100644 apps/desktop/src/lib/README.md create mode 100644 apps/desktop/src/lib/__tests__/ai/ai.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/ai/aiMarkdown.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/ai/aiMessageEdit.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/ai/aiMessageRender.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/ai/aiModelPresentation.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/ai/aiProposalDetect.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/ai/aiTableMentions.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/app/pinnedItems.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/common/elapsedTime.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/common/optionHelpPanelOffset.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/common/searchableSelectTooltip.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/common/ttlFormat.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/common/webPath.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/connectionAttemptTimeout.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/connectionOpenTarget.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/connectionUrl.dremio.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/connectionUrl.zookeeper.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/kafkaBootstrapServers.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/sqlServerLegacyCompatibility.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/connection/tunnelProfiles.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/cellValue.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/chartData.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridCellCoercion.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridColumnLayoutStorage.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridConditionSuggestionPosition.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridInfiniteScroll.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridTemporalEditor.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/dataGridTranspose.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/geometryPreview.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/dataGrid/gridSelection.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/createDatabaseCharsetOptions.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/damengJobAdmin.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/databaseDriverManifest.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/databaseFeatureSupport.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/databaseObjectCapabilities.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/databaseUserAdmin.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/defaultDatabase.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/dorisCatalogCapability.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/jdbcDialect.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/mysqlConnectionOptions.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/database/prestoSqlBuiltinDriver.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/codemirrorSqlDialect.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/editorSearchQuery.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/keyboardShortcuts.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/queryEditorPointerSelection.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/queryEditorTableDrop.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/shortcutDisplay.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editor/shortcutRegistry.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/editorThemes.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/etcd/etcdKeyTree.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/imports/navicatImport.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/kv/kvKeyTree.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/kv/kvRefreshSelection.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/kv/kvRootPresentation.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/kv/kvValueDisplay.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/mcp/mcpConfigTemplates.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/metadata/completionMetadataPolicy.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/metadata/completionTreeIndex.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/mq/mqListPanels.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/mq/mqPinnedVersionOptions.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/mq/mqPolicyForms.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/mq/mqTenantForm.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/mq/mqTokenErrors.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/nacos/nacosAdmin.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/query/oracleExplainPlan.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/query/queryResultError.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/redis/redisAutoRefresh.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/redis/redisCreateKeyTypeHelp.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/redis/redisValuePresentation.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/savedSql/savedSqlFileName.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/savedSql/savedSqlFolderCounts.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/savedSqlEditorPosition.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/schema/schemaDiffMetadataLoad.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sidebar/batchTableEmpty.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sidebar/sidebarConnectionSelection.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sidebar/sidebarLabelTooltip.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/currentStatementFrame.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/editableQueryHiddenKeys.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/executableStatementRangeCache.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/queryError.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/queryResultSource.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/semantic/completion.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/semantic/dbeaver-references.md create mode 100644 apps/desktop/src/lib/__tests__/sql/semantic/model.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/semantic/references.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/semantic/tokens.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlCompletion.context.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlCompletion.snippet.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlCompletionLookupTarget.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlExecutionTarget.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlFileOpen.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlFormatter.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlFormatterConfig.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlHighlighter.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlInListPaste.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlNavigation.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlParameterHistory.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlParameters.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlQuoteCaret.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlStatementRanges.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlVariableSyntax.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/sql/sqlVariables.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/batchTableTruncate.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/dataTabExecutionDatabase.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/mysqlDataTypeHelp.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/objectBrowserRowAction.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/objectSourceEditor.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/postgresDataTypeHelp.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/sidePanelRequestGuard.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/sqliteDataTypeHelp.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableDependencySort.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableEditing.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableImport.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableSelectSql.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableStructureCapabilities.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableStructureEditorState.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/table/tableTree.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/tabs/tabPresentation.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/zookeeper/zookeeperApiContract.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/zookeeper/zookeeperConnection.spec.ts create mode 100644 apps/desktop/src/lib/__tests__/zookeeper/zookeeperLazyKeyTree.spec.ts create mode 100644 apps/desktop/src/lib/ai/__tests__/aiActions.spec.ts create mode 100644 apps/desktop/src/lib/ai/__tests__/aiProductionSafety.spec.ts create mode 100644 apps/desktop/src/lib/ai/ai.ts create mode 100644 apps/desktop/src/lib/ai/aiAgentPlan.ts create mode 100644 apps/desktop/src/lib/ai/aiAgentStepPresentation.ts create mode 100644 apps/desktop/src/lib/ai/aiCodeHighlighter.ts create mode 100644 apps/desktop/src/lib/ai/aiMarkdown.ts create mode 100644 apps/desktop/src/lib/ai/aiMessageEdit.ts create mode 100644 apps/desktop/src/lib/ai/aiMessageRender.ts create mode 100644 apps/desktop/src/lib/ai/aiModelPresentation.ts create mode 100644 apps/desktop/src/lib/ai/aiPromptKeyboard.ts create mode 100644 apps/desktop/src/lib/ai/aiProposalDetect.ts create mode 100644 apps/desktop/src/lib/ai/aiSkills.ts create mode 100644 apps/desktop/src/lib/ai/aiSqlAppend.ts create mode 100644 apps/desktop/src/lib/ai/aiSqlExecutionPolicy.ts create mode 100644 apps/desktop/src/lib/ai/aiTableMentions.ts create mode 100644 apps/desktop/src/lib/app/appFonts.ts create mode 100644 apps/desktop/src/lib/app/appTheme.ts create mode 100644 apps/desktop/src/lib/app/documentStoreProvider.ts create mode 100644 apps/desktop/src/lib/app/localeOptions.ts create mode 100644 apps/desktop/src/lib/app/openTabsPersistence.ts create mode 100644 apps/desktop/src/lib/app/pinnedItems.ts create mode 100644 apps/desktop/src/lib/app/pinnedTreeNodeIds.ts create mode 100644 apps/desktop/src/lib/app/savedSqlEditorPosition.ts create mode 100644 apps/desktop/src/lib/app/supportInfo.ts create mode 100644 apps/desktop/src/lib/app/transferProgressState.ts create mode 100644 apps/desktop/src/lib/backend/__tests__/debugLog.spec.ts create mode 100644 apps/desktop/src/lib/backend/api.ts create mode 100644 apps/desktop/src/lib/backend/browserAppStateStorage.ts create mode 100644 apps/desktop/src/lib/backend/configCrypto.ts create mode 100644 apps/desktop/src/lib/backend/connectionTransport.ts create mode 100644 apps/desktop/src/lib/backend/debugLog.ts create mode 100644 apps/desktop/src/lib/backend/errorUtils.ts create mode 100644 apps/desktop/src/lib/backend/http.ts create mode 100644 apps/desktop/src/lib/backend/mq-http.ts create mode 100644 apps/desktop/src/lib/backend/mq-tauri.ts create mode 100644 apps/desktop/src/lib/backend/nacos-tauri.ts create mode 100644 apps/desktop/src/lib/backend/platform.ts create mode 100644 apps/desktop/src/lib/backend/safeStorage.ts create mode 100644 apps/desktop/src/lib/backend/tauri.ts create mode 100644 apps/desktop/src/lib/backend/tauriRuntime.ts create mode 100644 apps/desktop/src/lib/backend/transferProgress.ts create mode 100644 apps/desktop/src/lib/common/__tests__/jsonTree.spec.ts create mode 100644 apps/desktop/src/lib/common/__tests__/safeJsonFormat.spec.ts create mode 100644 apps/desktop/src/lib/common/clipboard.ts create mode 100644 apps/desktop/src/lib/common/color.ts create mode 100644 apps/desktop/src/lib/common/elapsedTime.ts create mode 100644 apps/desktop/src/lib/common/jsonCopyValue.ts create mode 100644 apps/desktop/src/lib/common/jsonTree.ts create mode 100644 apps/desktop/src/lib/common/optionHelpPanelOffset.ts create mode 100644 apps/desktop/src/lib/common/safeJsonFormat.ts create mode 100644 apps/desktop/src/lib/common/searchPattern.ts create mode 100644 apps/desktop/src/lib/common/searchableSelectTooltip.ts create mode 100644 apps/desktop/src/lib/common/shikiJsonHighlighter.ts create mode 100644 apps/desktop/src/lib/common/ttlFormat.ts create mode 100644 apps/desktop/src/lib/common/utils.ts create mode 100644 apps/desktop/src/lib/common/webPath.ts create mode 100644 apps/desktop/src/lib/connection/__tests__/connectionErrorHints.spec.ts create mode 100644 apps/desktop/src/lib/connection/__tests__/connectionHealth.spec.ts create mode 100644 apps/desktop/src/lib/connection/actionActivation.ts create mode 100644 apps/desktop/src/lib/connection/agentDriverInstallHint.ts create mode 100644 apps/desktop/src/lib/connection/agentDriverUpdateBadge.ts create mode 100644 apps/desktop/src/lib/connection/cloudflareD1.ts create mode 100644 apps/desktop/src/lib/connection/connectionAttemptTimeout.ts create mode 100644 apps/desktop/src/lib/connection/connectionDeepLink.ts create mode 100644 apps/desktop/src/lib/connection/connectionErrorHints.ts create mode 100644 apps/desktop/src/lib/connection/connectionFile.ts create mode 100644 apps/desktop/src/lib/connection/connectionHealth.ts create mode 100644 apps/desktop/src/lib/connection/connectionLevelDatabaseBootstrap.ts create mode 100644 apps/desktop/src/lib/connection/connectionOpenTarget.ts create mode 100644 apps/desktop/src/lib/connection/connectionPresentation.ts create mode 100644 apps/desktop/src/lib/connection/connectionUrl.ts create mode 100644 apps/desktop/src/lib/connection/connectionVisibleDatabases.ts create mode 100644 apps/desktop/src/lib/connection/driverInstallProgressUi.ts create mode 100644 apps/desktop/src/lib/connection/driverRuntimePresentation.ts create mode 100644 apps/desktop/src/lib/connection/kafkaBootstrapServers.ts create mode 100644 apps/desktop/src/lib/connection/mqAuth.ts create mode 100644 apps/desktop/src/lib/connection/sqlServerLegacyCompatibility.ts create mode 100644 apps/desktop/src/lib/connection/tunnelProfiles.ts create mode 100644 apps/desktop/src/lib/dataGrid/binaryCellDownload.ts create mode 100644 apps/desktop/src/lib/dataGrid/binaryHexViewer.ts create mode 100644 apps/desktop/src/lib/dataGrid/canvasDataGridRenderer.ts create mode 100644 apps/desktop/src/lib/dataGrid/cellDetailPresentation.ts create mode 100644 apps/desktop/src/lib/dataGrid/cellDetailSelection.ts create mode 100644 apps/desktop/src/lib/dataGrid/cellImageUrl.ts create mode 100644 apps/desktop/src/lib/dataGrid/cellValue.ts create mode 100644 apps/desktop/src/lib/dataGrid/chartData.ts create mode 100644 apps/desktop/src/lib/dataGrid/columnFormatter.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataCompare.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGenerate.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridCellCoercion.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnFilter.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnHeaderInteraction.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnLayoutStorage.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnLookup.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnOrder.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnType.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnVisibility.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridColumnWidth.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridConditionHistory.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridConditionSuggestionPosition.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridDetail.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridInfiniteScroll.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridPagination.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridPaintTheme.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridSaveUi.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridScrollGutter.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridSearchSplit.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridSort.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridSql.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridTemporalEditor.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridToolbar.ts create mode 100644 apps/desktop/src/lib/dataGrid/dataGridTranspose.ts create mode 100644 apps/desktop/src/lib/dataGrid/geometryMapPreview.ts create mode 100644 apps/desktop/src/lib/dataGrid/geometryPreview.ts create mode 100644 apps/desktop/src/lib/dataGrid/gridRowStatus.ts create mode 100644 apps/desktop/src/lib/dataGrid/gridSelection.ts create mode 100644 apps/desktop/src/lib/dataGrid/imagePreviewViewer.ts create mode 100644 apps/desktop/src/lib/dataGrid/paginationPageSize.ts create mode 100644 apps/desktop/src/lib/dataGrid/resultPreviewRegistry.ts create mode 100644 apps/desktop/src/lib/database/__tests__/productionExecutionGuard.spec.ts create mode 100644 apps/desktop/src/lib/database/__tests__/productionSafety.spec.ts create mode 100644 apps/desktop/src/lib/database/createDatabaseCharsetOptions.ts create mode 100644 apps/desktop/src/lib/database/createDatabaseSql.ts create mode 100644 apps/desktop/src/lib/database/damengJobAdmin.ts create mode 100644 apps/desktop/src/lib/database/databaseCapabilities.ts create mode 100644 apps/desktop/src/lib/database/databaseCapabilitySets.ts create mode 100644 apps/desktop/src/lib/database/databaseDriverManifest.ts create mode 100644 apps/desktop/src/lib/database/databaseFeatureSupport.ts create mode 100644 apps/desktop/src/lib/database/databaseFileDetection.ts create mode 100644 apps/desktop/src/lib/database/databaseNamespaceCreation.ts create mode 100644 apps/desktop/src/lib/database/databaseObjectCapabilities.ts create mode 100644 apps/desktop/src/lib/database/databaseOptionSearch.ts create mode 100644 apps/desktop/src/lib/database/databasePropertyEditing.ts create mode 100644 apps/desktop/src/lib/database/databaseSearch.ts create mode 100644 apps/desktop/src/lib/database/databaseTableDataCapabilities.ts create mode 100644 apps/desktop/src/lib/database/databaseTree.ts create mode 100644 apps/desktop/src/lib/database/databaseUserAdmin.ts create mode 100644 apps/desktop/src/lib/database/dbAdminSql.ts create mode 100644 apps/desktop/src/lib/database/defaultDatabase.ts create mode 100644 apps/desktop/src/lib/database/h2Connection.ts create mode 100644 apps/desktop/src/lib/database/hiveKerberosOptions.ts create mode 100644 apps/desktop/src/lib/database/jdbcDialect.ts create mode 100644 apps/desktop/src/lib/database/mysqlConnectionOptions.ts create mode 100644 apps/desktop/src/lib/database/oceanbaseConnectionMode.ts create mode 100644 apps/desktop/src/lib/database/prestoSqlBuiltinDriver.ts create mode 100644 apps/desktop/src/lib/database/productionExecutionGuard.ts create mode 100644 apps/desktop/src/lib/database/productionSafety.ts create mode 100644 apps/desktop/src/lib/database/sqlServerLinkedServers.ts create mode 100644 apps/desktop/src/lib/database/sqlServerTree.ts create mode 100644 apps/desktop/src/lib/database/visibleDatabases.ts create mode 100644 apps/desktop/src/lib/diagram/diagramZoom.ts create mode 100644 apps/desktop/src/lib/diagram/engineeringDiagram.ts create mode 100644 apps/desktop/src/lib/diagram/erDiagram.ts create mode 100644 apps/desktop/src/lib/diagram/explainPlan.ts create mode 100644 apps/desktop/src/lib/diagram/fieldLineage.ts create mode 100644 apps/desktop/src/lib/document/documentViewerFontStyle.ts create mode 100644 apps/desktop/src/lib/document/gridFsBrowser.ts create mode 100644 apps/desktop/src/lib/document/gridfsFiles.ts create mode 100644 apps/desktop/src/lib/document/gridfsPagination.ts create mode 100644 apps/desktop/src/lib/editor/codemirrorInsertValueHints.ts create mode 100644 apps/desktop/src/lib/editor/codemirrorSelectionMatches.ts create mode 100644 apps/desktop/src/lib/editor/codemirrorSqlDialect.ts create mode 100644 apps/desktop/src/lib/editor/codemirrorTrimmedSelectionLayer.ts create mode 100644 apps/desktop/src/lib/editor/editorSearchQuery.ts create mode 100644 apps/desktop/src/lib/editor/editorThemes.ts create mode 100644 apps/desktop/src/lib/editor/editorZoom.ts create mode 100644 apps/desktop/src/lib/editor/keyboardShortcuts.ts create mode 100644 apps/desktop/src/lib/editor/queryEditorPointerSelection.ts create mode 100644 apps/desktop/src/lib/editor/queryEditorTableDrop.ts create mode 100644 apps/desktop/src/lib/editor/shortcutDisplay.ts create mode 100644 apps/desktop/src/lib/editor/shortcutRegistry.ts create mode 100644 apps/desktop/src/lib/elasticsearch/elasticsearchCompletion.ts create mode 100644 apps/desktop/src/lib/elasticsearch/elasticsearchJsonResponse.ts create mode 100644 apps/desktop/src/lib/etcd/etcdKeyTree.ts create mode 100644 apps/desktop/src/lib/export/databaseExport.ts create mode 100644 apps/desktop/src/lib/export/databaseExportSelection.ts create mode 100644 apps/desktop/src/lib/export/ddlExport.ts create mode 100644 apps/desktop/src/lib/export/diagramSvgExport.ts create mode 100644 apps/desktop/src/lib/export/exportFormats.ts create mode 100644 apps/desktop/src/lib/export/xlsxExport.ts create mode 100644 apps/desktop/src/lib/history/historyActions.ts create mode 100644 apps/desktop/src/lib/history/historyActivityKind.ts create mode 100644 apps/desktop/src/lib/history/historyAiAnalysis.ts create mode 100644 apps/desktop/src/lib/history/historyTimeRange.ts create mode 100644 apps/desktop/src/lib/history/historyVirtualList.ts create mode 100644 apps/desktop/src/lib/imports/datagripImport.ts create mode 100644 apps/desktop/src/lib/imports/dbeaverImport.ts create mode 100644 apps/desktop/src/lib/imports/navicatImport.ts create mode 100644 apps/desktop/src/lib/kv/kvKeyTree.ts create mode 100644 apps/desktop/src/lib/kv/kvRefreshSelection.ts create mode 100644 apps/desktop/src/lib/kv/kvRootPresentation.ts create mode 100644 apps/desktop/src/lib/kv/kvValueDisplay.ts create mode 100644 apps/desktop/src/lib/mcp/mcpConfigTemplates.ts create mode 100644 apps/desktop/src/lib/metadata/completionMetadataPolicy.ts create mode 100644 apps/desktop/src/lib/metadata/completionTreeIndex.ts create mode 100644 apps/desktop/src/lib/metadata/metadataLoadCoordinator.ts create mode 100644 apps/desktop/src/lib/metadata/metadataLoadScope.ts create mode 100644 apps/desktop/src/lib/metadata/metadataResultCache.ts create mode 100644 apps/desktop/src/lib/metadata/metadataTaskLimiter.ts create mode 100644 apps/desktop/src/lib/metadata/schemaTreeCache.ts create mode 100644 apps/desktop/src/lib/metadata/tableMetadataCache.ts create mode 100644 apps/desktop/src/lib/mongo/mongoCompletion.ts create mode 100644 apps/desktop/src/lib/mongo/mongoConnectionOptions.ts create mode 100644 apps/desktop/src/lib/mongo/mongoDocumentValues.ts create mode 100644 apps/desktop/src/lib/mongo/mongoFormatter.ts create mode 100644 apps/desktop/src/lib/mongo/mongoShellCommand.ts create mode 100644 apps/desktop/src/lib/mq/mqPinnedVersionOptions.ts create mode 100644 apps/desktop/src/lib/mq/mqPolicyForms.ts create mode 100644 apps/desktop/src/lib/mq/mqTenantForm.ts create mode 100644 apps/desktop/src/lib/mq/mqTokenErrors.ts create mode 100644 apps/desktop/src/lib/nacos/nacosAdmin.ts create mode 100644 apps/desktop/src/lib/query/queryResultArchive.ts create mode 100644 apps/desktop/src/lib/query/queryResultArchiveFile.ts create mode 100644 apps/desktop/src/lib/query/queryResultError.ts create mode 100644 apps/desktop/src/lib/redis/javaSerialized.ts create mode 100644 apps/desktop/src/lib/redis/redisAutoRefresh.ts create mode 100644 apps/desktop/src/lib/redis/redisCommandSafety.ts create mode 100644 apps/desktop/src/lib/redis/redisCommandSession.ts create mode 100644 apps/desktop/src/lib/redis/redisCommandTable.ts create mode 100644 apps/desktop/src/lib/redis/redisCompletion.ts create mode 100644 apps/desktop/src/lib/redis/redisCreateKeyTypeHelp.ts create mode 100644 apps/desktop/src/lib/redis/redisKeyPattern.ts create mode 100644 apps/desktop/src/lib/redis/redisKeyTree.ts create mode 100644 apps/desktop/src/lib/redis/redisQueryResult.ts create mode 100644 apps/desktop/src/lib/redis/redisSyntaxDiagnostics.ts create mode 100644 apps/desktop/src/lib/redis/redisValuePresentation.ts create mode 100644 apps/desktop/src/lib/savedSql/savedSqlFileName.ts create mode 100644 apps/desktop/src/lib/savedSql/savedSqlFolderCounts.ts create mode 100644 apps/desktop/src/lib/savedSql/savedSqlHistory.ts create mode 100644 apps/desktop/src/lib/schema/schemaDiff.ts create mode 100644 apps/desktop/src/lib/schema/schemaDiffMetadataLoad.ts create mode 100644 apps/desktop/src/lib/schema/schemaDiffOptions.ts create mode 100644 apps/desktop/src/lib/schema/schemaDiffTableFilter.ts create mode 100644 apps/desktop/src/lib/settings/editorSettingsDraft.ts create mode 100644 apps/desktop/src/lib/sidebar/batchTableEmpty.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarActiveTabTarget.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarConnectionSelection.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarDatabaseOpenState.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarLabelTooltip.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarLayout.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarNodeOrdering.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarRenameFocus.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarSearch.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarSearchTree.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTableNameDisplay.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTableSearchControl.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTreeCollapse.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTreeContext.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTreeItemLayout.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTreeSelection.ts create mode 100644 apps/desktop/src/lib/sidebar/sidebarTypeSearch.ts create mode 100644 apps/desktop/src/lib/sidebar/treeNodeClick.ts create mode 100644 apps/desktop/src/lib/sidebar/treeNodeContext.ts create mode 100644 apps/desktop/src/lib/sidebar/treeNodeIcon.ts create mode 100644 apps/desktop/src/lib/sidebar/treeRefreshTarget.ts create mode 100644 apps/desktop/src/lib/sql/cloudflareD1.ts create mode 100644 apps/desktop/src/lib/sql/currentStatementFrame.ts create mode 100644 apps/desktop/src/lib/sql/editableQueryHiddenKeys.ts create mode 100644 apps/desktop/src/lib/sql/executableStatementRangeCache.ts create mode 100644 apps/desktop/src/lib/sql/httpSqlFileProgress.ts create mode 100644 apps/desktop/src/lib/sql/insertValueHints.ts create mode 100644 apps/desktop/src/lib/sql/newQueryContext.ts create mode 100644 apps/desktop/src/lib/sql/queryCursorTableTarget.ts create mode 100644 apps/desktop/src/lib/sql/queryError.ts create mode 100644 apps/desktop/src/lib/sql/queryExecutionState.ts create mode 100644 apps/desktop/src/lib/sql/queryResultSource.ts create mode 100644 apps/desktop/src/lib/sql/queryTimeout.ts create mode 100644 apps/desktop/src/lib/sql/semantic/README.md create mode 100644 apps/desktop/src/lib/sql/semantic/completion.ts create mode 100644 apps/desktop/src/lib/sql/semantic/diagnostics.ts create mode 100644 apps/desktop/src/lib/sql/semantic/dialect.ts create mode 100644 apps/desktop/src/lib/sql/semantic/fixtures.ts create mode 100644 apps/desktop/src/lib/sql/semantic/model.ts create mode 100644 apps/desktop/src/lib/sql/semantic/references.ts create mode 100644 apps/desktop/src/lib/sql/semantic/tokens.ts create mode 100644 apps/desktop/src/lib/sql/semantic/types.ts create mode 100644 apps/desktop/src/lib/sql/sqlAnalysis.ts create mode 100644 apps/desktop/src/lib/sql/sqlCompletion.ts create mode 100644 apps/desktop/src/lib/sql/sqlCompletionLookupTarget.ts create mode 100644 apps/desktop/src/lib/sql/sqlDiagnostics.ts create mode 100644 apps/desktop/src/lib/sql/sqlExecutionTarget.ts create mode 100644 apps/desktop/src/lib/sql/sqlFileOpen.ts create mode 100644 apps/desktop/src/lib/sql/sqlFormatter.ts create mode 100644 apps/desktop/src/lib/sql/sqlFormatterConfig.ts create mode 100644 apps/desktop/src/lib/sql/sqlHighlighter.ts create mode 100644 apps/desktop/src/lib/sql/sqlInListPaste.ts create mode 100644 apps/desktop/src/lib/sql/sqlMetadataRefresh.ts create mode 100644 apps/desktop/src/lib/sql/sqlNavigation.ts create mode 100644 apps/desktop/src/lib/sql/sqlParameterHistory.ts create mode 100644 apps/desktop/src/lib/sql/sqlParameters.ts create mode 100644 apps/desktop/src/lib/sql/sqlQuoteCaret.ts create mode 100644 apps/desktop/src/lib/sql/sqlRisk.ts create mode 100644 apps/desktop/src/lib/sql/sqlServerQueryWrapping.ts create mode 100644 apps/desktop/src/lib/sql/sqlStatementRanges.ts create mode 100644 apps/desktop/src/lib/sql/sqlVariableSyntax.ts create mode 100644 apps/desktop/src/lib/sql/sqlVariables.ts create mode 100644 apps/desktop/src/lib/table/__tests__/tableDataRefresh.spec.ts create mode 100644 apps/desktop/src/lib/table/batchTableTruncate.ts create mode 100644 apps/desktop/src/lib/table/dataTabExecutionDatabase.ts create mode 100644 apps/desktop/src/lib/table/mysqlDataTypeHelp.ts create mode 100644 apps/desktop/src/lib/table/objectBrowserRowAction.ts create mode 100644 apps/desktop/src/lib/table/objectBrowserRows.ts create mode 100644 apps/desktop/src/lib/table/objectRenameSql.ts create mode 100644 apps/desktop/src/lib/table/objectSourceEditor.ts create mode 100644 apps/desktop/src/lib/table/postgresDataTypeHelp.ts create mode 100644 apps/desktop/src/lib/table/routineExecutionSql.ts create mode 100644 apps/desktop/src/lib/table/routineParameters.ts create mode 100644 apps/desktop/src/lib/table/sidePanelRequestGuard.ts create mode 100644 apps/desktop/src/lib/table/sqliteDataTypeHelp.ts create mode 100644 apps/desktop/src/lib/table/tableClipboard.ts create mode 100644 apps/desktop/src/lib/table/tableColumnTemplates.ts create mode 100644 apps/desktop/src/lib/table/tableDataExport.ts create mode 100644 apps/desktop/src/lib/table/tableDataRefresh.ts create mode 100644 apps/desktop/src/lib/table/tableDataTabMeta.ts create mode 100644 apps/desktop/src/lib/table/tableDependencySort.ts create mode 100644 apps/desktop/src/lib/table/tableEditing.ts create mode 100644 apps/desktop/src/lib/table/tableImport.ts create mode 100644 apps/desktop/src/lib/table/tableMetadataCapabilities.ts create mode 100644 apps/desktop/src/lib/table/tableOpenPageLimit.ts create mode 100644 apps/desktop/src/lib/table/tableSelectSql.ts create mode 100644 apps/desktop/src/lib/table/tableSqlTemplates.ts create mode 100644 apps/desktop/src/lib/table/tableStructureCapabilities.ts create mode 100644 apps/desktop/src/lib/table/tableStructureEditorSql.ts create mode 100644 apps/desktop/src/lib/table/tableStructureEditorState.ts create mode 100644 apps/desktop/src/lib/table/tableTree.ts create mode 100644 apps/desktop/src/lib/table/viewDdl.ts create mode 100644 apps/desktop/src/lib/tabs/dataTabActivation.ts create mode 100644 apps/desktop/src/lib/tabs/tabCloseActions.ts create mode 100644 apps/desktop/src/lib/tabs/tabPresentation.ts create mode 100644 apps/desktop/src/lib/tabs/tabResultCache.ts create mode 100644 apps/desktop/src/lib/webdav/webdavAutoUploadConfig.ts create mode 100644 apps/desktop/src/lib/zookeeper/zookeeperConnection.ts create mode 100644 apps/desktop/src/lib/zookeeper/zookeeperLazyKeyTree.ts create mode 100644 apps/desktop/src/main.ts create mode 100644 apps/desktop/src/stores/__tests__/connectionStore.completion.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/connectionStore.metadataLoading.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/connectionStore.mq.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/connectionStore.sqlserverLegacy.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/connectionStore.timeout.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.cancel.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.database-open.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.hiddenPrimaryKey.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.multiStatementError.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.mysqlExplain.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.switchTab.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/queryStore.tableDataRefresh.spec.ts create mode 100644 apps/desktop/src/stores/__tests__/settingsStore.spec.ts create mode 100644 apps/desktop/src/stores/connectionStore.ts create mode 100644 apps/desktop/src/stores/historyStore.ts create mode 100644 apps/desktop/src/stores/productionSafetyStore.ts create mode 100644 apps/desktop/src/stores/queryStore.ts create mode 100644 apps/desktop/src/stores/savedSqlStore.ts create mode 100644 apps/desktop/src/stores/settingsStore.ts create mode 100644 apps/desktop/src/stores/tunnelProfileStore.ts create mode 100644 apps/desktop/src/styles/__tests__/legacyWebviewFallback.spec.ts create mode 100644 apps/desktop/src/styles/globals.css create mode 100644 apps/desktop/src/types/database.ts create mode 100644 apps/desktop/src/types/editor.ts create mode 100644 apps/desktop/src/types/influxdb.ts create mode 100644 apps/desktop/src/types/mq.ts create mode 100644 apps/desktop/src/types/nacos.ts create mode 100644 apps/desktop/src/types/schemaDiff.ts create mode 100644 apps/desktop/src/types/vue-virtual-scroller.d.ts create mode 100644 apps/desktop/tsconfig.json create mode 100644 apps/desktop/vite.config.ts create mode 100644 crates/README.md create mode 100644 crates/dbx-core/Cargo.toml create mode 100644 crates/dbx-core/assets/agent-protocol-v1.json create mode 100644 crates/dbx-core/assets/database-drivers.manifest.json create mode 100644 crates/dbx-core/src/agent_catalog.rs create mode 100644 crates/dbx-core/src/agent_connection.rs create mode 100644 crates/dbx-core/src/agent_events.rs create mode 100644 crates/dbx-core/src/agent_explain.rs create mode 100644 crates/dbx-core/src/agent_kv.rs create mode 100644 crates/dbx-core/src/agent_loop.rs create mode 100644 crates/dbx-core/src/agent_manager.rs create mode 100644 crates/dbx-core/src/agent_runtime.rs create mode 100644 crates/dbx-core/src/agent_service.rs create mode 100644 crates/dbx-core/src/agent_tools.rs create mode 100644 crates/dbx-core/src/ai.rs create mode 100644 crates/dbx-core/src/ai_cli_agent.rs create mode 100644 crates/dbx-core/src/ai_codex_cli.rs create mode 100644 crates/dbx-core/src/cloud_sync.rs create mode 100644 crates/dbx-core/src/connection.rs create mode 100644 crates/dbx-core/src/connection_secrets.rs create mode 100644 crates/dbx-core/src/csv_export.rs create mode 100644 crates/dbx-core/src/data_compare.rs create mode 100644 crates/dbx-core/src/data_grid_neo4j_sql.rs create mode 100644 crates/dbx-core/src/data_grid_sql.rs create mode 100644 crates/dbx-core/src/data_grid_tdengine_sql.rs create mode 100644 crates/dbx-core/src/database_capabilities.rs create mode 100644 crates/dbx-core/src/database_export.rs create mode 100644 crates/dbx-core/src/database_search_sql.rs create mode 100644 crates/dbx-core/src/db/agent_driver.rs create mode 100644 crates/dbx-core/src/db/clickhouse_driver.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/import.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/mod.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/sql_guard.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/sql_lexer.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/sql_limits.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/transfer_tests.rs create mode 100644 crates/dbx-core/src/db/cloudflare_d1/trigger.rs create mode 100644 crates/dbx-core/src/db/duckdb_driver.rs create mode 100644 crates/dbx-core/src/db/duckdb_worker_process.rs create mode 100644 crates/dbx-core/src/db/duckdb_worker_protocol.rs create mode 100644 crates/dbx-core/src/db/duckdb_worker_runtime.rs create mode 100644 crates/dbx-core/src/db/elasticsearch_driver.rs create mode 100644 crates/dbx-core/src/db/elasticsearch_sql.rs create mode 100644 crates/dbx-core/src/db/file_validator.rs create mode 100644 crates/dbx-core/src/db/http_tunnel.rs create mode 100644 crates/dbx-core/src/db/influxdb_driver.rs create mode 100644 crates/dbx-core/src/db/manticoresearch.rs create mode 100644 crates/dbx-core/src/db/mod.rs create mode 100644 crates/dbx-core/src/db/mongo_driver.rs create mode 100644 crates/dbx-core/src/db/mysql.rs create mode 100644 crates/dbx-core/src/db/ob_oracle.rs create mode 100644 crates/dbx-core/src/db/postgres.rs create mode 100644 crates/dbx-core/src/db/proxy_tunnel.rs create mode 100644 crates/dbx-core/src/db/questdb.rs create mode 100644 crates/dbx-core/src/db/redis_driver.rs create mode 100644 crates/dbx-core/src/db/rqlite_driver.rs create mode 100644 crates/dbx-core/src/db/sqlite.rs create mode 100644 crates/dbx-core/src/db/sqlserver.rs create mode 100644 crates/dbx-core/src/db/ssh_tunnel.rs create mode 100644 crates/dbx-core/src/db/transport_layer_tunnel.rs create mode 100644 crates/dbx-core/src/db/turso_driver.rs create mode 100644 crates/dbx-core/src/db/vector_driver.rs create mode 100644 crates/dbx-core/src/db/wkb.rs create mode 100644 crates/dbx-core/src/db_admin_sql.rs create mode 100644 crates/dbx-core/src/document_ops.rs create mode 100644 crates/dbx-core/src/driver_runtime.rs create mode 100644 crates/dbx-core/src/external/duckdb_cache.rs create mode 100644 crates/dbx-core/src/external/mod.rs create mode 100644 crates/dbx-core/src/external/traits.rs create mode 100644 crates/dbx-core/src/external/types.rs create mode 100644 crates/dbx-core/src/history.rs create mode 100644 crates/dbx-core/src/jdbc.rs create mode 100644 crates/dbx-core/src/lib.rs create mode 100644 crates/dbx-core/src/models/connection.rs create mode 100644 crates/dbx-core/src/models/mod.rs create mode 100644 crates/dbx-core/src/mongo_ops.rs create mode 100644 crates/dbx-core/src/mq/README.md create mode 100644 crates/dbx-core/src/mq/adapters/kafka.rs create mode 100644 crates/dbx-core/src/mq/adapters/mod.rs create mode 100644 crates/dbx-core/src/mq/adapters/pulsar.rs create mode 100644 crates/dbx-core/src/mq/adapters/pulsar_version.rs create mode 100644 crates/dbx-core/src/mq/auth.rs create mode 100644 crates/dbx-core/src/mq/config.rs create mode 100644 crates/dbx-core/src/mq/mod.rs create mode 100644 crates/dbx-core/src/mq/port.rs create mode 100644 crates/dbx-core/src/mq/service.rs create mode 100644 crates/dbx-core/src/mq/token.rs create mode 100644 crates/dbx-core/src/mq/types.rs create mode 100644 crates/dbx-core/src/mq/util.rs create mode 100644 crates/dbx-core/src/nacos/config.rs create mode 100644 crates/dbx-core/src/nacos/http.rs create mode 100644 crates/dbx-core/src/nacos/mod.rs create mode 100644 crates/dbx-core/src/nacos/port.rs create mode 100644 crates/dbx-core/src/nacos/service.rs create mode 100644 crates/dbx-core/src/nacos/types.rs create mode 100644 crates/dbx-core/src/object_source_sql.rs create mode 100644 crates/dbx-core/src/path_utils.rs create mode 100644 crates/dbx-core/src/plugins.rs create mode 100644 crates/dbx-core/src/process.rs create mode 100644 crates/dbx-core/src/production_safety.rs create mode 100644 crates/dbx-core/src/query.rs create mode 100644 crates/dbx-core/src/query_cancel.rs create mode 100644 crates/dbx-core/src/query_execution_sql.rs create mode 100644 crates/dbx-core/src/query_result_export.rs create mode 100644 crates/dbx-core/src/query_result_sql.rs create mode 100644 crates/dbx-core/src/redis_ops.rs create mode 100644 crates/dbx-core/src/saved_sql.rs create mode 100644 crates/dbx-core/src/schema.rs create mode 100644 crates/dbx-core/src/schema/duckdb_metadata.rs create mode 100644 crates/dbx-core/src/schema/normalization.rs create mode 100644 crates/dbx-core/src/schema/providers/mod.rs create mode 100644 crates/dbx-core/src/schema/providers/native.rs create mode 100644 crates/dbx-core/src/schema_diff.rs create mode 100644 crates/dbx-core/src/sql.rs create mode 100644 crates/dbx-core/src/sql_analysis.rs create mode 100644 crates/dbx-core/src/sql_dialect.rs create mode 100644 crates/dbx-core/src/sql_dialect/capabilities.rs create mode 100644 crates/dbx-core/src/sql_dialect/identifiers.rs create mode 100644 crates/dbx-core/src/sql_dialect/table_select.rs create mode 100644 crates/dbx-core/src/sql_dialect/tests.rs create mode 100644 crates/dbx-core/src/sql_dialect/types.rs create mode 100644 crates/dbx-core/src/sql_editability.rs create mode 100644 crates/dbx-core/src/sql_file_import.rs create mode 100644 crates/dbx-core/src/sql_risk.rs create mode 100644 crates/dbx-core/src/sqlite_backup.rs create mode 100644 crates/dbx-core/src/sqlserver_temporal.rs create mode 100644 crates/dbx-core/src/ssh_config.rs create mode 100644 crates/dbx-core/src/storage.rs create mode 100644 crates/dbx-core/src/table_export.rs create mode 100644 crates/dbx-core/src/table_import.rs create mode 100644 crates/dbx-core/src/table_structure_sql.rs create mode 100644 crates/dbx-core/src/table_structure_sql/column_alter.rs create mode 100644 crates/dbx-core/src/table_structure_sql/column_format.rs create mode 100644 crates/dbx-core/src/table_structure_sql/columns.rs create mode 100644 crates/dbx-core/src/table_structure_sql/comments.rs create mode 100644 crates/dbx-core/src/table_structure_sql/create_table.rs create mode 100644 crates/dbx-core/src/table_structure_sql/dialect.rs create mode 100644 crates/dbx-core/src/table_structure_sql/foreign_keys.rs create mode 100644 crates/dbx-core/src/table_structure_sql/indexes.rs create mode 100644 crates/dbx-core/src/table_structure_sql/sqlite_rebuild.rs create mode 100644 crates/dbx-core/src/table_structure_sql/tests.rs create mode 100644 crates/dbx-core/src/table_structure_sql/triggers.rs create mode 100644 crates/dbx-core/src/table_structure_sql/types.rs create mode 100644 crates/dbx-core/src/table_structure_sql/util.rs create mode 100644 crates/dbx-core/src/table_structure_sql/validation.rs create mode 100644 crates/dbx-core/src/text_export.rs create mode 100644 crates/dbx-core/src/token_usage.rs create mode 100644 crates/dbx-core/src/transfer.rs create mode 100644 crates/dbx-core/src/types.rs create mode 100644 crates/dbx-core/src/update.rs create mode 100644 crates/dbx-core/src/xlsx_export.rs create mode 100644 crates/dbx-core/tests/agent_service.rs create mode 100644 crates/dbx-core/tests/database_capabilities.rs create mode 100644 crates/dbx-core/tests/duckdb_worker_process.rs create mode 100644 crates/dbx-core/tests/live_clickhouse_query_result_export.rs create mode 100644 crates/dbx-core/tests/live_manual_transaction.rs create mode 100644 crates/dbx-core/tests/live_mtls.rs create mode 100644 crates/dbx-core/tests/live_mysql57.rs create mode 100644 crates/dbx-core/tests/live_postgres_geometry.rs create mode 100644 crates/dbx-core/tests/live_postgres_query_result_export.rs create mode 100644 crates/dbx-core/tests/live_postgres_transaction_recovery.rs create mode 100644 crates/dbx-core/tests/live_postgres_transfer.rs create mode 100644 crates/dbx-core/tests/live_postgres_tsvector.rs create mode 100644 crates/dbx-core/tests/live_sqlserver_completion.rs create mode 100644 crates/dbx-core/tests/mq_token.rs create mode 100644 crates/dbx-core/tests/mysql_cross_database_editing.rs create mode 100644 crates/dbx-core/tests/sql_analysis.rs create mode 100644 crates/dbx-core/tests/support/duckdb_worker_file_lock_owner.rs create mode 100644 crates/dbx-core/tests/support/duckdb_worker_hanging_connect_test_host.rs create mode 100644 crates/dbx-core/tests/support/duckdb_worker_pid_test_host.rs create mode 100644 crates/dbx-core/tests/support/duckdb_worker_test_host.rs create mode 100644 crates/dbx-web/Cargo.toml create mode 100644 crates/dbx-web/src/auth.rs create mode 100644 crates/dbx-web/src/error.rs create mode 100644 crates/dbx-web/src/main.rs create mode 100644 crates/dbx-web/src/routes/agents.rs create mode 100644 crates/dbx-web/src/routes/ai.rs create mode 100644 crates/dbx-web/src/routes/app_settings.rs create mode 100644 crates/dbx-web/src/routes/cloud_sync.rs create mode 100644 crates/dbx-web/src/routes/connection.rs create mode 100644 crates/dbx-web/src/routes/data_compare.rs create mode 100644 crates/dbx-web/src/routes/database_export.rs create mode 100644 crates/dbx-web/src/routes/document_store.rs create mode 100644 crates/dbx-web/src/routes/etcd.rs create mode 100644 crates/dbx-web/src/routes/history.rs create mode 100644 crates/dbx-web/src/routes/jdbc.rs create mode 100644 crates/dbx-web/src/routes/layout.rs create mode 100644 crates/dbx-web/src/routes/mod.rs create mode 100644 crates/dbx-web/src/routes/mongo.rs create mode 100644 crates/dbx-web/src/routes/mq.rs create mode 100644 crates/dbx-web/src/routes/nacos.rs create mode 100644 crates/dbx-web/src/routes/plugins.rs create mode 100644 crates/dbx-web/src/routes/query.rs create mode 100644 crates/dbx-web/src/routes/query_result_export.rs create mode 100644 crates/dbx-web/src/routes/redis.rs create mode 100644 crates/dbx-web/src/routes/redis_pubsub_ws.rs create mode 100644 crates/dbx-web/src/routes/saved_sql.rs create mode 100644 crates/dbx-web/src/routes/schema.rs create mode 100644 crates/dbx-web/src/routes/schema_cache.rs create mode 100644 crates/dbx-web/src/routes/schema_diff.rs create mode 100644 crates/dbx-web/src/routes/sql_file.rs create mode 100644 crates/dbx-web/src/routes/ssh_config.rs create mode 100644 crates/dbx-web/src/routes/tab_runtime_cache.rs create mode 100644 crates/dbx-web/src/routes/table_export.rs create mode 100644 crates/dbx-web/src/routes/table_import.rs create mode 100644 crates/dbx-web/src/routes/text_export.rs create mode 100644 crates/dbx-web/src/routes/transfer.rs create mode 100644 crates/dbx-web/src/routes/tunnel_profiles.rs create mode 100644 crates/dbx-web/src/routes/update.rs create mode 100644 crates/dbx-web/src/routes/zookeeper.rs create mode 100644 crates/dbx-web/src/sse.rs create mode 100644 crates/dbx-web/src/state.rs create mode 100644 deploy/1panel/README.md create mode 100644 deploy/1panel/data.yml create mode 100644 deploy/1panel/latest/data.yml create mode 100644 deploy/1panel/latest/docker-compose.yml create mode 100644 deploy/1panel/logo.png create mode 100644 deploy/Dockerfile create mode 100644 deploy/Dockerfile.dockerignore create mode 100644 deploy/dbx_tunnel.php create mode 100644 deploy/docker-compose.release.yml create mode 100644 deploy/docker-compose.yml create mode 100644 deploy/homebrew/dbx-cli.rb create mode 100644 docs/.gitignore create mode 100644 docs/app/[lang]/api/search/route.ts create mode 100644 docs/app/[lang]/changelog/page.tsx create mode 100644 docs/app/[lang]/community/page.tsx create mode 100644 docs/app/[lang]/databases/page.tsx create mode 100644 docs/app/[lang]/docs/[[...slug]]/page.tsx create mode 100644 docs/app/[lang]/docs/layout.tsx create mode 100644 docs/app/[lang]/drivers/DriversClient.tsx create mode 100644 docs/app/[lang]/drivers/page.tsx create mode 100644 docs/app/[lang]/layout.tsx create mode 100644 docs/app/[lang]/page.tsx create mode 100644 docs/app/global.css create mode 100644 docs/app/layout.tsx create mode 100644 docs/app/page.tsx create mode 100644 docs/assets/pr-2182-sidebar-user-admin-only.png create mode 100644 docs/components/DocsSidebarFooter.tsx create mode 100644 docs/components/StaticSearchDialog.tsx create mode 100644 docs/components/aceternity/HeroProductStage.tsx create mode 100644 docs/components/aceternity/InfiniteMovingCards.tsx create mode 100644 docs/components/aceternity/Spotlight.tsx create mode 100644 docs/components/landing/ChangelogList.tsx create mode 100644 docs/components/landing/ChangelogRuntime.tsx create mode 100644 docs/components/landing/ContributorsWall.tsx create mode 100644 docs/components/landing/InstallTabs.tsx create mode 100644 docs/components/landing/LandingFooter.tsx create mode 100644 docs/components/landing/LandingLatestUpdates.tsx create mode 100644 docs/components/landing/LandingNav.tsx create mode 100644 docs/components/landing/RevealSection.tsx create mode 100644 docs/content/docs/ai-assistant.cn.mdx create mode 100644 docs/content/docs/ai-assistant.mdx create mode 100644 docs/content/docs/changelog.cn.mdx create mode 100644 docs/content/docs/changelog.mdx create mode 100644 docs/content/docs/cli.cn.mdx create mode 100644 docs/content/docs/cli.mdx create mode 100644 docs/content/docs/cloud-sync.cn.mdx create mode 100644 docs/content/docs/cloud-sync.mdx create mode 100644 docs/content/docs/config-export.cn.mdx create mode 100644 docs/content/docs/config-export.mdx create mode 100644 docs/content/docs/connection-import.cn.mdx create mode 100644 docs/content/docs/connection-import.mdx create mode 100644 docs/content/docs/data-grid.cn.mdx create mode 100644 docs/content/docs/data-grid.mdx create mode 100644 docs/content/docs/data-transfer.cn.mdx create mode 100644 docs/content/docs/data-transfer.mdx create mode 100644 docs/content/docs/database-export.cn.mdx create mode 100644 docs/content/docs/database-export.mdx create mode 100644 docs/content/docs/databases.cn.mdx create mode 100644 docs/content/docs/databases.mdx create mode 100644 docs/content/docs/driver-management.cn.mdx create mode 100644 docs/content/docs/driver-management.mdx create mode 100644 docs/content/docs/field-lineage.cn.mdx create mode 100644 docs/content/docs/field-lineage.mdx create mode 100644 docs/content/docs/getting-started.cn.mdx create mode 100644 docs/content/docs/getting-started.mdx create mode 100644 docs/content/docs/keyboard-shortcuts.cn.mdx create mode 100644 docs/content/docs/keyboard-shortcuts.mdx create mode 100644 docs/content/docs/mcp.cn.mdx create mode 100644 docs/content/docs/mcp.mdx create mode 100644 docs/content/docs/meta.cn.json create mode 100644 docs/content/docs/meta.json create mode 100644 docs/content/docs/mongodb.cn.mdx create mode 100644 docs/content/docs/mongodb.mdx create mode 100644 docs/content/docs/object-browser.cn.mdx create mode 100644 docs/content/docs/object-browser.mdx create mode 100644 docs/content/docs/plugins.cn.mdx create mode 100644 docs/content/docs/plugins.mdx create mode 100644 docs/content/docs/query-editor.cn.mdx create mode 100644 docs/content/docs/query-editor.mdx create mode 100644 docs/content/docs/redis.cn.mdx create mode 100644 docs/content/docs/redis.mdx create mode 100644 docs/content/docs/schema-browser.cn.mdx create mode 100644 docs/content/docs/schema-browser.mdx create mode 100644 docs/content/docs/schema-diff.cn.mdx create mode 100644 docs/content/docs/schema-diff.mdx create mode 100644 docs/content/docs/sql-file.cn.mdx create mode 100644 docs/content/docs/sql-file.mdx create mode 100644 docs/content/docs/sql-formatter.cn.mdx create mode 100644 docs/content/docs/sql-formatter.mdx create mode 100644 docs/content/docs/sql-snippets.cn.mdx create mode 100644 docs/content/docs/sql-snippets.mdx create mode 100644 docs/content/docs/ssh-tunnel.cn.mdx create mode 100644 docs/content/docs/ssh-tunnel.mdx create mode 100644 docs/content/docs/table-import.cn.mdx create mode 100644 docs/content/docs/table-import.mdx create mode 100644 docs/content/docs/table-structure.cn.mdx create mode 100644 docs/content/docs/table-structure.mdx create mode 100644 docs/content/docs/web-api.cn.mdx create mode 100644 docs/content/docs/web-api.mdx create mode 100644 docs/content/docs/what-is-dbx.cn.mdx create mode 100644 docs/content/docs/what-is-dbx.mdx create mode 100644 docs/lib/agentRegistry.test.ts create mode 100644 docs/lib/agentRegistry.ts create mode 100644 docs/lib/appVersion.ts create mode 100644 docs/lib/changelog.ts create mode 100644 docs/lib/cjkSearchTokenizer.ts create mode 100644 docs/lib/contributors.ts create mode 100644 docs/lib/downloadLinks.ts create mode 100644 docs/lib/httpJson.ts create mode 100644 docs/lib/i18n.ts create mode 100644 docs/lib/landingLatest.ts create mode 100644 docs/lib/latestRelease.ts create mode 100644 docs/lib/metadata.ts create mode 100644 docs/lib/releaseMetadataRequest.test.ts create mode 100644 docs/lib/releaseMetadataRequest.ts create mode 100644 docs/lib/source.ts create mode 100644 docs/logo.png create mode 100644 docs/mq-quick-start.md create mode 100644 docs/next-env.d.ts create mode 100644 docs/next.config.mjs create mode 100644 docs/package.json create mode 100644 docs/performance/dom-density-audit.md create mode 100644 docs/performance/memory-usage-audit.md create mode 100644 docs/performance/runtime-memory-audit.md create mode 100644 docs/pips/PIP-0001-database-connection-timeout-recovery.md create mode 100644 docs/pips/plans/2026-06-24-database-connection-timeout-recovery.md create mode 100644 docs/pnpm-lock.yaml create mode 100644 docs/pnpm-workspace.yaml create mode 100644 docs/postcss.config.mjs create mode 100644 docs/public/avatars/acane.png create mode 100644 docs/public/avatars/ar414.jpg create mode 100644 docs/public/avatars/cyano.jpg create mode 100644 docs/public/avatars/dongxuyang85.jpg create mode 100644 docs/public/avatars/eryajf.jpg create mode 100644 docs/public/avatars/guangguang.jpg create mode 100644 docs/public/avatars/husky.jpg create mode 100644 docs/public/avatars/itkui.jpg create mode 100644 docs/public/avatars/mebiuw.jpg create mode 100644 docs/public/avatars/momo.jpg create mode 100644 docs/public/avatars/patrickz.jpg create mode 100644 docs/public/avatars/ryan.jpg create mode 100644 docs/public/avatars/sunzhigang.jpg create mode 100644 docs/public/avatars/vbvb.png create mode 100644 docs/public/avatars/xuyuan.jpg create mode 100644 docs/public/avatars/yanxuecan.jpg create mode 100644 docs/public/avatars/ydwang.png create mode 100644 docs/public/avatars/yingtao.jpg create mode 100644 docs/public/avatars/zhufeng.jpg create mode 100644 docs/public/favicon.png create mode 100644 docs/public/icons/atomgit.png create mode 100644 docs/public/icons/cnb.svg create mode 100644 docs/public/icons/community/qq.png create mode 100644 docs/public/icons/database/access.png create mode 100644 docs/public/icons/database/apache_kylin.svg create mode 100644 docs/public/icons/database/bigquery.svg create mode 100644 docs/public/icons/database/cassandra.svg create mode 100644 docs/public/icons/database/clickhouse.svg create mode 100644 docs/public/icons/database/cockroachdb.svg create mode 100644 docs/public/icons/database/databend.svg create mode 100644 docs/public/icons/database/databricks.webp create mode 100644 docs/public/icons/database/db2.svg create mode 100644 docs/public/icons/database/dm.svg create mode 100644 docs/public/icons/database/doris.svg create mode 100644 docs/public/icons/database/duckdb.svg create mode 100644 docs/public/icons/database/elasticsearch.svg create mode 100644 docs/public/icons/database/etcd.svg create mode 100644 docs/public/icons/database/exasol.webp create mode 100644 docs/public/icons/database/firebird.webp create mode 100644 docs/public/icons/database/gaussdb.svg create mode 100644 docs/public/icons/database/gbase.webp create mode 100644 docs/public/icons/database/goldendb.png create mode 100644 docs/public/icons/database/greatsql.webp create mode 100644 docs/public/icons/database/h2.svg create mode 100644 docs/public/icons/database/highgo.png create mode 100644 docs/public/icons/database/hive.svg create mode 100644 docs/public/icons/database/influxdb.svg create mode 100644 docs/public/icons/database/informix.svg create mode 100644 docs/public/icons/database/iotdb.svg create mode 100644 docs/public/icons/database/iris.png create mode 100644 docs/public/icons/database/jdbc.svg create mode 100644 docs/public/icons/database/kingbase.svg create mode 100644 docs/public/icons/database/kwdb.svg create mode 100644 docs/public/icons/database/manticoresearch.png create mode 100644 docs/public/icons/database/mariadb.svg create mode 100644 docs/public/icons/database/milvus.png create mode 100644 docs/public/icons/database/mongodb.svg create mode 100644 docs/public/icons/database/mysql.svg create mode 100644 docs/public/icons/database/nacos.png create mode 100644 docs/public/icons/database/neo4j.svg create mode 100644 docs/public/icons/database/oceanbase.svg create mode 100644 docs/public/icons/database/opengauss.svg create mode 100644 docs/public/icons/database/oracle.svg create mode 100644 docs/public/icons/database/polardb.webp create mode 100644 docs/public/icons/database/postgres.svg create mode 100644 docs/public/icons/database/presto.svg create mode 100644 docs/public/icons/database/pulsar.svg create mode 100644 docs/public/icons/database/qdrant.svg create mode 100644 docs/public/icons/database/questdb.svg create mode 100644 docs/public/icons/database/redis.svg create mode 100644 docs/public/icons/database/redshift.svg create mode 100644 docs/public/icons/database/rqlite.png create mode 100644 docs/public/icons/database/saphana.webp create mode 100644 docs/public/icons/database/selectdb.svg create mode 100644 docs/public/icons/database/snowflake.svg create mode 100644 docs/public/icons/database/sqlite.svg create mode 100644 docs/public/icons/database/sqlserver.svg create mode 100644 docs/public/icons/database/starrocks.svg create mode 100644 docs/public/icons/database/sundb.svg create mode 100644 docs/public/icons/database/tdengine.svg create mode 100644 docs/public/icons/database/tdsql.webp create mode 100644 docs/public/icons/database/teradata.webp create mode 100644 docs/public/icons/database/tidb.svg create mode 100644 docs/public/icons/database/trino.svg create mode 100644 docs/public/icons/database/turso.png create mode 100644 docs/public/icons/database/vastbase.png create mode 100644 docs/public/icons/database/vertica.webp create mode 100644 docs/public/icons/database/weaviate.png create mode 100644 docs/public/icons/database/xugu.png create mode 100644 docs/public/icons/database/yashandb.png create mode 100644 docs/public/icons/database/zookeeper.svg create mode 100644 docs/public/icons/platform/linux.svg create mode 100644 docs/public/icons/platform/macos-white.png create mode 100644 docs/public/icons/platform/macos.png create mode 100644 docs/public/icons/platform/windows.png create mode 100644 docs/public/llms.txt create mode 100644 docs/public/logo.png create mode 100644 docs/public/robots.txt create mode 100644 docs/public/screenshot-ai.jpg create mode 100644 docs/public/screenshot-connections.jpg create mode 100644 docs/public/screenshot-dark.png create mode 100644 docs/public/screenshot-er.png create mode 100644 docs/public/screenshot-grid.png create mode 100644 docs/public/screenshot-light.png create mode 100644 docs/public/screenshot.png create mode 100644 docs/qq-group.jpg create mode 100644 docs/screenshot-ai.jpg create mode 100644 docs/screenshot-connections.jpg create mode 100644 docs/screenshot-dark.png create mode 100644 docs/screenshot-er.png create mode 100644 docs/screenshot-es-sql-completion.png create mode 100644 docs/screenshot-es-sql-pagination.png create mode 100644 docs/screenshot-es-sql-where.png create mode 100644 docs/screenshot-grid.png create mode 100644 docs/screenshot-light.png create mode 100644 docs/screenshot.png create mode 100644 docs/scripts/generate-sitemap.mjs create mode 100644 docs/source.config.ts create mode 100644 docs/tsconfig.json create mode 100644 docs/wechat-group.jpg create mode 100644 docs/wrangler.json create mode 100644 examples/README.md create mode 100755 examples/cli/basic-workflow.sh create mode 100644 examples/docker/docker-compose.yml create mode 100644 examples/mcp/claude-code.mcp.json create mode 100644 examples/mcp/cursor.mcp.json create mode 100644 examples/mcp/web-deployment.mcp.json create mode 100755 examples/web-api/automation.sh create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 package.json create mode 100644 packages/app-tests/actionActivation.test.ts create mode 100644 packages/app-tests/agentDriverInstallHint.test.ts create mode 100644 packages/app-tests/agentVersionBump.test.ts create mode 100644 packages/app-tests/aiAgentPlan.test.ts create mode 100644 packages/app-tests/aiAgentStepPresentation.test.ts create mode 100644 packages/app-tests/aiPrompt.test.ts create mode 100644 packages/app-tests/aiPromptEval.test.ts create mode 100644 packages/app-tests/aiPromptKeyboard.test.ts create mode 100644 packages/app-tests/aiSchemaComments.test.ts create mode 100644 packages/app-tests/aiSkills.test.ts create mode 100644 packages/app-tests/aiSqlAppend.test.ts create mode 100644 packages/app-tests/aiSqlExecutionPolicy.test.ts create mode 100644 packages/app-tests/aiTableMentions.test.ts create mode 100644 packages/app-tests/appUpdater.test.ts create mode 100644 packages/app-tests/binaryCellDownload.test.ts create mode 100644 packages/app-tests/binaryHexViewer.test.ts create mode 100644 packages/app-tests/canvasDataGridRenderer.test.ts create mode 100644 packages/app-tests/cellDetailPresentation.test.ts create mode 100644 packages/app-tests/cellImageUrl.test.ts create mode 100644 packages/app-tests/cellValue.test.ts create mode 100644 packages/app-tests/clipboard.test.ts create mode 100644 packages/app-tests/closeBracketsExtension.test.ts create mode 100644 packages/app-tests/codemirrorSqlDialect.test.ts create mode 100644 packages/app-tests/codemirrorTrimmedSelectionLayer.test.ts create mode 100644 packages/app-tests/columnFormatter.test.ts create mode 100644 packages/app-tests/configCrypto.test.ts create mode 100644 packages/app-tests/connectionClipboard.test.ts create mode 100644 packages/app-tests/connectionDeepLink.test.ts create mode 100644 packages/app-tests/connectionLevelDatabaseBootstrap.test.ts create mode 100644 packages/app-tests/connectionPresentation.test.ts create mode 100644 packages/app-tests/connectionStoreErrorState.test.ts create mode 100644 packages/app-tests/connectionStoreGroupedConnect.test.ts create mode 100644 packages/app-tests/connectionStorePinnedCleanup.test.ts create mode 100644 packages/app-tests/connectionUrl.test.ts create mode 100644 packages/app-tests/connectionVisibleDatabases.test.ts create mode 100644 packages/app-tests/dataGenerate.test.ts create mode 100644 packages/app-tests/dataGridCellCoercion.mysql-json.test.ts create mode 100644 packages/app-tests/dataGridCellCoercion.test.ts create mode 100644 packages/app-tests/dataGridColumnFilter.test.ts create mode 100644 packages/app-tests/dataGridColumnHeaderInteraction.test.ts create mode 100644 packages/app-tests/dataGridColumnOrder.test.ts create mode 100644 packages/app-tests/dataGridColumnType.test.ts create mode 100644 packages/app-tests/dataGridColumnVisibility.test.ts create mode 100644 packages/app-tests/dataGridColumnWidth.test.ts create mode 100644 packages/app-tests/dataGridConditionHistory.test.ts create mode 100644 packages/app-tests/dataGridDetail.test.ts create mode 100644 packages/app-tests/dataGridEditor.test.ts create mode 100644 packages/app-tests/dataGridExport.test.ts create mode 100644 packages/app-tests/dataGridInfiniteScroll.test.ts create mode 100644 packages/app-tests/dataGridPagination.test.ts create mode 100644 packages/app-tests/dataGridProps.test.ts create mode 100644 packages/app-tests/dataGridSaveUi.test.ts create mode 100644 packages/app-tests/dataGridSelection.test.ts create mode 100644 packages/app-tests/dataGridSort.test.ts create mode 100644 packages/app-tests/dataGridTemporalEditor.test.ts create mode 100644 packages/app-tests/dataGridTranspose.test.ts create mode 100644 packages/app-tests/dataTabActivation.test.ts create mode 100644 packages/app-tests/databaseCapabilities.test.ts create mode 100644 packages/app-tests/databaseExportPlan.test.ts create mode 100644 packages/app-tests/databaseIconAssets.test.ts create mode 100644 packages/app-tests/databaseSearch.test.ts create mode 100644 packages/app-tests/databaseTree.test.ts create mode 100644 packages/app-tests/databaseUserAdmin.test.ts create mode 100644 packages/app-tests/dbAdminSql.test.ts create mode 100644 packages/app-tests/ddlExport.test.ts create mode 100644 packages/app-tests/defaultDatabase.test.ts create mode 100644 packages/app-tests/diagramSvgExport.test.ts create mode 100644 packages/app-tests/documentBrowser.test.ts create mode 100644 packages/app-tests/documentStoreProvider.test.ts create mode 100644 packages/app-tests/documentViewerFontStyle.test.ts create mode 100644 packages/app-tests/driverInstallProgressUi.test.ts create mode 100644 packages/app-tests/editorSettingsDraft.test.ts create mode 100644 packages/app-tests/elasticsearchCompletion.test.ts create mode 100644 packages/app-tests/elasticsearchJsonResponse.test.ts create mode 100644 packages/app-tests/engineeringDiagram.test.ts create mode 100644 packages/app-tests/erDiagram.test.ts create mode 100644 packages/app-tests/exportFormats.test.ts create mode 100644 packages/app-tests/fieldLineage.test.ts create mode 100644 packages/app-tests/gridFsBrowser.test.ts create mode 100644 packages/app-tests/gridRowStatus.test.ts create mode 100644 packages/app-tests/gridSelection.test.ts create mode 100644 packages/app-tests/gridfsBrowserPagination.test.ts create mode 100644 packages/app-tests/gridfsFiles.test.ts create mode 100644 packages/app-tests/historyActivityKind.test.ts create mode 100644 packages/app-tests/historyAiAnalysis.test.ts create mode 100644 packages/app-tests/historyTimeRange.test.ts create mode 100644 packages/app-tests/hiveKerberosOptions.test.ts create mode 100644 packages/app-tests/imagePreviewViewer.test.ts create mode 100644 packages/app-tests/insertValueHints.test.ts create mode 100644 packages/app-tests/jdbcDialect.test.ts create mode 100644 packages/app-tests/jdbcPluginRelease.test.ts create mode 100644 packages/app-tests/jsonCopyValue.test.ts create mode 100644 packages/app-tests/keyboardShortcuts.test.ts create mode 100644 packages/app-tests/metadataLoadCoordinator.test.ts create mode 100644 packages/app-tests/metadataResultCache.test.ts create mode 100644 packages/app-tests/metadataTaskLimiter.test.ts create mode 100644 packages/app-tests/mongoCompletion.test.ts create mode 100644 packages/app-tests/mongoConnectionOptions.test.ts create mode 100644 packages/app-tests/mongoDocumentValues.test.ts create mode 100644 packages/app-tests/mongoFormatter.test.ts create mode 100644 packages/app-tests/mongoShellCommand.test.ts create mode 100644 packages/app-tests/mqAuth.test.ts create mode 100644 packages/app-tests/nacosConfigListLayout.test.ts create mode 100644 packages/app-tests/newQueryContext.test.ts create mode 100644 packages/app-tests/objectBrowserRows.test.ts create mode 100644 packages/app-tests/oceanbaseConnectionMode.test.ts create mode 100644 packages/app-tests/openTabsPersistence.test.ts create mode 100644 packages/app-tests/pinnedItems.test.ts create mode 100644 packages/app-tests/productionGuardEntrypoints.test.ts create mode 100644 packages/app-tests/queryCursorTableTarget.test.ts create mode 100644 packages/app-tests/queryEditorTableDrop.test.ts create mode 100644 packages/app-tests/queryResultArchive.test.ts create mode 100644 packages/app-tests/queryResultToolbar.test.ts create mode 100644 packages/app-tests/queryStore.test.ts create mode 100644 packages/app-tests/queryTimeout.test.ts create mode 100644 packages/app-tests/redisCommandSafety.test.ts create mode 100644 packages/app-tests/redisCommandSession.test.ts create mode 100644 packages/app-tests/redisCommandTable.test.ts create mode 100644 packages/app-tests/redisCompletion.test.ts create mode 100644 packages/app-tests/redisKeyTree.test.ts create mode 100644 packages/app-tests/redisSyntaxDiagnostics.test.ts create mode 100644 packages/app-tests/redisValuePresentation.test.ts create mode 100644 packages/app-tests/routineExecutionSql.test.ts create mode 100644 packages/app-tests/savedSqlHistory.test.ts create mode 100644 packages/app-tests/savedSqlStore.test.ts create mode 100644 packages/app-tests/schemaDiff.test.ts create mode 100644 packages/app-tests/schemaDiffTableFilter.test.ts create mode 100644 packages/app-tests/schemaOptions.test.ts create mode 100644 packages/app-tests/schemaTreeCache.test.ts create mode 100644 packages/app-tests/settingsStore.test.ts create mode 100644 packages/app-tests/sidebarActiveTabTarget.test.ts create mode 100644 packages/app-tests/sidebarConnectionSelection.test.ts create mode 100644 packages/app-tests/sidebarDatabaseOpenState.test.ts create mode 100644 packages/app-tests/sidebarLayout.test.ts create mode 100644 packages/app-tests/sidebarLayoutNested.test.ts create mode 100644 packages/app-tests/sidebarNodeOrdering.test.ts create mode 100644 packages/app-tests/sidebarRenameFocus.test.ts create mode 100644 packages/app-tests/sidebarSearch.test.ts create mode 100644 packages/app-tests/sidebarSearchTree.test.ts create mode 100644 packages/app-tests/sidebarTableSearchControl.test.ts create mode 100644 packages/app-tests/sidebarTreeCollapse.test.ts create mode 100644 packages/app-tests/sidebarTreeItemLayout.test.ts create mode 100644 packages/app-tests/sidebarTreeSelection.test.ts create mode 100644 packages/app-tests/sidebarTypeSearch.test.ts create mode 100644 packages/app-tests/sqlAnalysis.test.ts create mode 100644 packages/app-tests/sqlCompletion.test.ts create mode 100644 packages/app-tests/sqlCompletionPerformance.test.ts create mode 100644 packages/app-tests/sqlExecutionTarget.test.ts create mode 100644 packages/app-tests/sqlFormatter.test.ts create mode 100644 packages/app-tests/sqlFormatterConfig.test.ts create mode 100644 packages/app-tests/sqlMetadataRefresh.test.ts create mode 100644 packages/app-tests/sqlQuoteCaret.test.ts create mode 100644 packages/app-tests/sqlSemanticDiagnostics.test.ts create mode 100644 packages/app-tests/sqlServerTree.test.ts create mode 100644 packages/app-tests/sqlserverSemanticDiagnostics.test.ts create mode 100644 packages/app-tests/supportInfo.test.ts create mode 100644 packages/app-tests/syncChangelog.test.ts create mode 100644 packages/app-tests/tabCloseActions.test.ts create mode 100644 packages/app-tests/tabPresentation.test.ts create mode 100644 packages/app-tests/tabResultCache.test.ts create mode 100644 packages/app-tests/tableClipboard.test.ts create mode 100644 packages/app-tests/tableColumnTemplates.test.ts create mode 100644 packages/app-tests/tableDataExport.test.ts create mode 100644 packages/app-tests/tableDataTabMeta.test.ts create mode 100644 packages/app-tests/tableEditing.test.ts create mode 100644 packages/app-tests/tableImport.test.ts create mode 100644 packages/app-tests/tableMetadataCache.test.ts create mode 100644 packages/app-tests/tableSqlTemplates.test.ts create mode 100644 packages/app-tests/tableStructureEditorState.test.ts create mode 100644 packages/app-tests/tableTree.test.ts create mode 100644 packages/app-tests/transferProgress.test.ts create mode 100644 packages/app-tests/transferProgressState.test.ts create mode 100644 packages/app-tests/treeNodeClick.test.ts create mode 100644 packages/app-tests/treeNodeContext.test.ts create mode 100644 packages/app-tests/treeNodeIcon.test.ts create mode 100644 packages/app-tests/treeRefreshTarget.test.ts create mode 100644 packages/app-tests/useDataGridActions.test.ts create mode 100644 packages/app-tests/useDataGridExport.test.ts create mode 100644 packages/app-tests/useExportTracker.test.ts create mode 100644 packages/app-tests/useFlatTree.test.ts create mode 100644 packages/app-tests/useSqlExecution.test.ts create mode 100644 packages/app-tests/webdavAutoUpload.test.ts create mode 100644 packages/app-tests/xlsxExport.test.ts create mode 100644 packages/cli/README.md create mode 100644 packages/cli/package.json create mode 100644 packages/cli/src/cli-format.ts create mode 100644 packages/cli/src/cli.ts create mode 100644 packages/cli/tests/bin.test.ts create mode 100644 packages/cli/tests/cli-format.test.ts create mode 100644 packages/cli/tests/cli.test.ts create mode 100644 packages/cli/tsconfig.json create mode 100644 packages/cli/vitest.config.ts create mode 100644 packages/mcp-server/README.md create mode 100644 packages/mcp-server/package.json create mode 100644 packages/mcp-server/server.json create mode 100644 packages/mcp-server/src/index.ts create mode 100644 packages/mcp-server/tests/bin.test.ts create mode 100644 packages/mcp-server/tests/driver-manifest.test.ts create mode 100644 packages/mcp-server/tests/server.test.ts create mode 100644 packages/mcp-server/tsconfig.json create mode 100644 packages/mcp-server/vitest.config.ts create mode 100644 packages/node-core/README.md create mode 100644 packages/node-core/package.json create mode 100644 packages/node-core/src/backend.ts create mode 100644 packages/node-core/src/bridge.ts create mode 100644 packages/node-core/src/connections.ts create mode 100644 packages/node-core/src/database.ts create mode 100644 packages/node-core/src/diagnostics.ts create mode 100644 packages/node-core/src/entrypoint.ts create mode 100644 packages/node-core/src/format.ts create mode 100644 packages/node-core/src/index.ts create mode 100644 packages/node-core/src/paths.ts create mode 100644 packages/node-core/src/production-safety.ts create mode 100644 packages/node-core/src/redis-command.ts create mode 100644 packages/node-core/src/schema-context.ts create mode 100644 packages/node-core/src/sql-risk.ts create mode 100644 packages/node-core/src/sql-safety.ts create mode 100644 packages/node-core/src/web-backend.ts create mode 100644 packages/node-core/tests/collections.test.ts create mode 100644 packages/node-core/tests/connection-store.test.ts create mode 100644 packages/node-core/tests/describe-table.test.ts create mode 100644 packages/node-core/tests/driver-manifest.test.ts create mode 100644 packages/node-core/tests/entrypoint.test.ts create mode 100644 packages/node-core/tests/format.test.ts create mode 100644 packages/node-core/tests/mongo-query.test.ts create mode 100644 packages/node-core/tests/mysql-url.test.ts create mode 100644 packages/node-core/tests/paths.test.ts create mode 100644 packages/node-core/tests/postgres-url.test.ts create mode 100644 packages/node-core/tests/production-safety.test.ts create mode 100644 packages/node-core/tests/redis-command.test.ts create mode 100644 packages/node-core/tests/redis-direct.test.ts create mode 100644 packages/node-core/tests/rqlite-direct.test.ts create mode 100644 packages/node-core/tests/schema-context.test.ts create mode 100644 packages/node-core/tests/sql-safety.test.ts create mode 100644 packages/node-core/tests/sqlite-direct.test.ts create mode 100644 packages/node-core/tests/starrocks-url.test.ts create mode 100644 packages/node-core/tests/web-backend.test.ts create mode 100644 packages/node-core/tsconfig.json create mode 100644 packages/node-core/vitest.config.ts create mode 100644 packages/test-globals.ts create mode 100644 plugins/README.md create mode 100644 plugins/jdbc/README.md create mode 100755 plugins/jdbc/bin/dbx-jdbc-plugin create mode 100644 plugins/jdbc/bin/dbx-jdbc-plugin.bat create mode 100644 plugins/jdbc/bin/dbx-maven-resolver create mode 100644 plugins/jdbc/bin/dbx-maven-resolver.bat create mode 100644 plugins/jdbc/manifest.json create mode 100755 plugins/jdbc/package.sh create mode 100644 plugins/jdbc/pom.xml create mode 100644 plugins/jdbc/src/main/java/app/dbx/jdbc/DbxJdbcPlugin.java create mode 100644 plugins/jdbc/src/main/java/app/dbx/jdbc/maven/DbxMavenResolver.java create mode 100644 plugins/jdbc/src/test/java/app/dbx/jdbc/DbxJdbcPluginTest.java create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 rustfmt.toml create mode 100644 scripts/bench/redis-key-search.mjs create mode 100644 scripts/build-knowledge-base.mjs create mode 100644 scripts/check-mq-integration.mjs create mode 100644 scripts/dev-backend.mjs create mode 100644 scripts/release-node-packages.mjs create mode 100644 scripts/release.mjs create mode 100644 scripts/run-check.mjs create mode 100644 skills/dbx/SKILL.md create mode 100644 src-tauri/.gitignore create mode 100644 src-tauri/Cargo.lock create mode 100644 src-tauri/Cargo.toml create mode 100644 src-tauri/Entitlements.plist create mode 100644 src-tauri/Info.plist create mode 100644 src-tauri/build.rs create mode 100644 src-tauri/capabilities/default.json create mode 100644 src-tauri/icons/128x128.png create mode 100644 src-tauri/icons/128x128@2x.png create mode 100644 src-tauri/icons/32x32.png create mode 100644 src-tauri/icons/Square107x107Logo.png create mode 100644 src-tauri/icons/Square142x142Logo.png create mode 100644 src-tauri/icons/Square150x150Logo.png create mode 100644 src-tauri/icons/Square284x284Logo.png create mode 100644 src-tauri/icons/Square30x30Logo.png create mode 100644 src-tauri/icons/Square310x310Logo.png create mode 100644 src-tauri/icons/Square44x44Logo.png create mode 100644 src-tauri/icons/Square71x71Logo.png create mode 100644 src-tauri/icons/Square89x89Logo.png create mode 100644 src-tauri/icons/StoreLogo.png create mode 100644 src-tauri/icons/icon-black.png create mode 100644 src-tauri/icons/icon-macos-dark.icns create mode 100644 src-tauri/icons/icon.icns create mode 100644 src-tauri/icons/icon.ico create mode 100644 src-tauri/icons/icon.png create mode 100644 src-tauri/icons/tray-macos-template.png create mode 100644 src-tauri/src/commands/agents.rs create mode 100644 src-tauri/src/commands/ai.rs create mode 100644 src-tauri/src/commands/app_settings.rs create mode 100644 src-tauri/src/commands/cloud_sync.rs create mode 100644 src-tauri/src/commands/connection.rs create mode 100644 src-tauri/src/commands/connection_secrets.rs create mode 100644 src-tauri/src/commands/csv_export.rs create mode 100644 src-tauri/src/commands/data_compare.rs create mode 100644 src-tauri/src/commands/database_export.rs create mode 100644 src-tauri/src/commands/deep_link.rs create mode 100644 src-tauri/src/commands/document_cmd.rs create mode 100644 src-tauri/src/commands/etcd_cmd.rs create mode 100644 src-tauri/src/commands/external_db.rs create mode 100644 src-tauri/src/commands/external_sql.rs create mode 100644 src-tauri/src/commands/fs_open.rs create mode 100644 src-tauri/src/commands/history.rs create mode 100644 src-tauri/src/commands/keychain.rs create mode 100644 src-tauri/src/commands/list_sql_files.rs create mode 100644 src-tauri/src/commands/mcp.rs create mode 100644 src-tauri/src/commands/mcp_bridge.rs create mode 100644 src-tauri/src/commands/mod.rs create mode 100644 src-tauri/src/commands/mongo_cmd.rs create mode 100644 src-tauri/src/commands/mq_cmd.rs create mode 100644 src-tauri/src/commands/nacos_cmd.rs create mode 100644 src-tauri/src/commands/plugins.rs create mode 100644 src-tauri/src/commands/query.rs create mode 100644 src-tauri/src/commands/query_cancel.rs create mode 100644 src-tauri/src/commands/query_result_export.rs create mode 100644 src-tauri/src/commands/redis_cmd.rs create mode 100644 src-tauri/src/commands/redis_pubsub_server.rs create mode 100644 src-tauri/src/commands/saved_sql.rs create mode 100644 src-tauri/src/commands/schema.rs create mode 100644 src-tauri/src/commands/schema_cache.rs create mode 100644 src-tauri/src/commands/schema_diff.rs create mode 100644 src-tauri/src/commands/sql_file.rs create mode 100644 src-tauri/src/commands/sqlite_backup.rs create mode 100644 src-tauri/src/commands/ssh_config.rs create mode 100644 src-tauri/src/commands/support_info.rs create mode 100644 src-tauri/src/commands/system_fonts.rs create mode 100644 src-tauri/src/commands/tab_runtime_cache.rs create mode 100644 src-tauri/src/commands/table_export.rs create mode 100644 src-tauri/src/commands/table_import.rs create mode 100644 src-tauri/src/commands/text_export.rs create mode 100644 src-tauri/src/commands/transfer.rs create mode 100644 src-tauri/src/commands/tunnel_profiles.rs create mode 100644 src-tauri/src/commands/update.rs create mode 100644 src-tauri/src/commands/window_controls.rs create mode 100644 src-tauri/src/commands/xlsx_export.rs create mode 100644 src-tauri/src/commands/zookeeper_cmd.rs create mode 100644 src-tauri/src/data_dir.rs create mode 100644 src-tauri/src/db/mod.rs create mode 100644 src-tauri/src/lib.rs create mode 100644 src-tauri/src/macos_app_delegate.rs create mode 100644 src-tauri/src/main.rs create mode 100644 src-tauri/src/models/connection.rs create mode 100644 src-tauri/src/models/mod.rs create mode 100644 src-tauri/src/window_state_guard.rs create mode 100644 src-tauri/tauri.conf.json create mode 100644 src-tauri/tauri.webview2-offline.conf.json create mode 100644 src-tauri/windows/nsis/installer.nsi create mode 100644 tests/fixtures/production-safety-corpus.json create mode 100644 vitest.config.ts diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..c7ddd21 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,21 @@ +# === Optional build speed-ups (add to your ~/.zshrc or ~/.bashrc; do NOT commit) === +# +# 1. sccache — compile cache, skips recompiling unchanged deps +# cargo install sccache +# export RUSTC_WRAPPER=sccache +# +# 2. lld — LLVM linker, 2-3x faster linking than the system default +# macOS: brew install lld +# export CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER=/opt/homebrew/bin/lld +# Linux: apt install lld +# export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=lld +# +# Skip DuckDB during development: cargo check --no-default-features +# =================================================================================== + +[env] +# Enable SQLite's built-in math functions for rusqlite's bundled libsqlite3. +LIBSQLITE3_FLAGS = "SQLITE_ENABLE_MATH_FUNCTIONS" + +[target.x86_64-pc-windows-msvc] +linker = "rust-lld" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..c89d144 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,13 @@ +# Keep formatter-sensitive source files consistent across platforms. +apps/desktop/src/**/*.ts text eol=lf +apps/desktop/src/**/*.vue text eol=lf + +# Keep tests available for review and CI without counting them as shipped code +# in GitHub's repository language breakdown. +packages/app-tests/** linguist-vendored +apps/desktop/src/**/__tests__/** linguist-vendored +apps/desktop/src/**/*.spec.ts linguist-vendored +apps/desktop/src/**/*.test.ts linguist-vendored +packages/**/tests/** linguist-vendored +packages/**/*.spec.ts linguist-vendored +packages/**/*.test.ts linguist-vendored diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..1254569 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,64 @@ +name: "🐞 Bug Report / 问题反馈" +description: Crashes, connection failures, query errors, display bugs, or other reproducible issues. / 程序崩溃、连接失败、查询异常、界面显示错误或其他可复现问题。 +title: "[Bug] " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + 感谢反馈。涉及敏感信息请脱敏。请尽量提供数据库类型、版本、复现步骤、截图和错误日志。 + DBX 版本、运行环境、操作系统和系统架构可在应用内通过“设置 → 关于我们 → 复制支持信息”一键复制。 + + - type: input + id: database + attributes: + label: 数据库类型和版本 + description: 例如 PostgreSQL 16、MySQL 8.0、Redis 7.2。 + placeholder: "例如:PostgreSQL 16.2" + validations: + required: true + + - type: textarea + id: description + attributes: + label: 问题描述 + description: 请按下面的清单逐项填写,截图和错误日志尤其重要。 + placeholder: | + 1. 复现步骤:新建连接 → 填写信息 → 点击保存 + 2. 期望结果:能正常展开 schema + 3. 实际结果:一直 loading,无错误提示 + 4. 最好附上截图和错误日志(设置 → 外观 → 启用"启用调试日志" → 复现问题 → 点击"下载日志",将内容粘贴到这里) + validations: + required: true + + - type: textarea + id: support-info + attributes: + label: 支持信息 + description: 打开 DBX 的“设置 → 关于我们”,点击“复制支持信息”,然后粘贴到这里。如无法打开应用,请说明原因。 + placeholder: | + DBX 版本:v0.5.52 + 运行环境:桌面端 + 操作系统:macOS 26.4 + 系统架构:aarch64 + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: 优先级(是否紧急) + description: 紧急 = 希望下个版本优先修。维护者可根据实际情况调整。 + options: + - "🔴 P0 紧急 · 下个版本必须修" + - "🟠 P1 重要 · 尽快处理" + - "🟡 P2 普通 · 按排期处理" + - "🟢 P3 低优 · 有空再修" + validations: + required: true + + - type: textarea + id: extra + attributes: + label: 补充信息 + description: 截图、SQL 样例、连接方式、特殊环境等。 diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..5e562b5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Documentation / 文档 + url: https://dbxio.com/cn/docs/what-is-dbx + about: Check the docs before submitting an issue. / 提交 issue 前可先查看文档。 diff --git a/.github/ISSUE_TEMPLATE/database_compatibility.yml b/.github/ISSUE_TEMPLATE/database_compatibility.yml new file mode 100644 index 0000000..7a4f60d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/database_compatibility.yml @@ -0,0 +1,55 @@ +name: "🔀 Compatibility Issue / 数据库兼容性问题" +description: A specific database, version, or SQL dialect incompatibility. / 某个数据库、版本或 SQL 方言不兼容。 +title: "[Compatibility] " +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + 用于收集数据库兼容性细节,例如连接失败、schema 读取不完整、字段类型显示错误等。请脱敏。 + DBX 版本、运行环境、操作系统和系统架构可在应用内通过“设置 → 关于我们 → 复制支持信息”一键复制。 + + - type: input + id: database + attributes: + label: 数据库类型和版本 + description: 也请注明发行版,如 MariaDB、AWS RDS、TiDB 等。 + placeholder: "例如:MariaDB 10.11" + validations: + required: true + + - type: textarea + id: description + attributes: + label: 问题描述 + description: 什么操作,出了什么错,期望怎样? + placeholder: "例如:展开 schema 时报错 'unknown type',期望能正常显示字段。" + validations: + required: true + + - type: textarea + id: error + attributes: + label: 错误信息 + render: shell + validations: + required: true + + - type: textarea + id: support-info + attributes: + label: 支持信息 + description: 打开 DBX 的“设置 → 关于我们”,点击“复制支持信息”,然后粘贴到这里。如无法打开应用,请说明原因。 + placeholder: | + DBX 版本:v0.5.52 + 运行环境:桌面端 + 操作系统:macOS 26.4 + 系统架构:aarch64 + validations: + required: true + + - type: textarea + id: extra + attributes: + label: 补充信息 + description: 表结构、SQL 样例、截图、部署方式(Docker/云/自建)等。 diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000..d968ee2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,69 @@ +name: "💡 Feature Request / 功能建议" +description: Propose a new feature, interaction improvement, or enhancement. / 提议新功能、交互改进或现有功能增强。 +title: "[Feature] " +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + 好的建议最好说明使用场景、数据库类型和期望效果。请尽量避免只写“支持 X”。 + DBX 版本、运行环境、操作系统和系统架构可在应用内通过“设置 → 关于我们 → 复制支持信息”一键复制。 + + - type: input + id: database + attributes: + label: 数据库类型和版本 + description: 如果是通用功能,请填写“通用”。如果只影响特定数据源,请注明数据库类型、版本或发行版。 + placeholder: "例如:PostgreSQL 16.2 / MySQL 8.0 / Redis 7.2 / 通用" + validations: + required: true + + - type: textarea + id: support-info + attributes: + label: 支持信息 + description: 打开 DBX 的“设置 → 关于我们”,点击“复制支持信息”,然后粘贴到这里。如无法打开应用,请说明原因。 + placeholder: | + DBX 版本:v0.5.52 + 运行环境:桌面端 + 操作系统:macOS 26.4 + 系统架构:aarch64 + validations: + required: true + + - type: textarea + id: problem + attributes: + label: 当前痛点 + description: 现在做这件事有什么不方便? + placeholder: "例如:每次查询后都要手动复制结果再转成 Markdown。" + validations: + required: true + + - type: textarea + id: proposal + attributes: + label: 期望方案 + description: 希望怎么支持? + placeholder: "例如:在查询结果右上角增加导出 Markdown 按钮。" + validations: + required: true + + - type: dropdown + id: priority + attributes: + label: 优先级(是否紧急) + description: 紧急 = 希望下个版本优先做。维护者可根据实际情况调整。 + options: + - "🔴 P0 紧急 · 下个版本必须做" + - "🟠 P1 重要 · 尽快处理" + - "🟡 P2 普通 · 按排期处理" + - "🟢 P3 低优 · 有空再做" + validations: + required: true + + - type: textarea + id: extra + attributes: + label: 补充信息 + description: 参考截图、替代方案、特殊环境等。 diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 0000000..c03f4da --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,44 @@ +name: "❓ Question / 问题咨询" +description: Usage questions, configuration issues, or feedback you're not sure is a bug. / 使用疑问、配置问题或不确定是否为 bug 的反馈。 +title: "[Question] " +labels: ["question"] +body: + - type: input + id: database + attributes: + label: 数据库类型和版本 + description: 如果问题与数据库无关,请填写“无关”。否则请注明数据库类型、版本或发行版。 + placeholder: "例如:PostgreSQL 16.2 / MySQL 8.0 / Redis 7.2 / 无关" + validations: + required: true + + - type: textarea + id: support-info + attributes: + label: 支持信息 + description: 打开 DBX 的“设置 → 关于我们”,点击“复制支持信息”,然后粘贴到这里。如无法打开应用,请说明原因。 + placeholder: | + DBX 版本:v0.5.52 + 运行环境:桌面端 + 操作系统:macOS 26.4 + 系统架构:aarch64 + validations: + required: true + + - type: textarea + id: goal + attributes: + label: 描述 + description: 你想完成什么?已经尝试了什么? + placeholder: "例如:我想通过 SSH 隧道连接内网 PostgreSQL,已确认本机 psql 可以连接,但 DBX 中测试连接提示..." + validations: + required: true + + - type: textarea + id: context + attributes: + label: 环境信息 + description: 连接方式、特殊环境、已尝试的排查方式等。 + placeholder: | + 连接方式: + 补充环境: diff --git a/.github/scripts/augment-latest-json-jdbc-plugin.mjs b/.github/scripts/augment-latest-json-jdbc-plugin.mjs new file mode 100644 index 0000000..9a95298 --- /dev/null +++ b/.github/scripts/augment-latest-json-jdbc-plugin.mjs @@ -0,0 +1,31 @@ +import { readFileSync, writeFileSync } from "node:fs"; + +export function augmentLatestJsonWithJdbcPlugin({ latestJson, jdbcVersion, protocolVersion, url }) { + const data = JSON.parse(latestJson); + data.jdbc_plugin = { + version: jdbcVersion, + protocol_version: Number(protocolVersion), + url, + }; + return `${JSON.stringify(data, null, 2)}\n`; +} + +function main() { + const [latestJsonPath, jdbcVersion, protocolVersion, url] = process.argv.slice(2); + if (!latestJsonPath || !jdbcVersion || !protocolVersion || !url) { + console.error("Usage: augment-latest-json-jdbc-plugin.mjs "); + process.exit(1); + } + + const updated = augmentLatestJsonWithJdbcPlugin({ + latestJson: readFileSync(latestJsonPath, "utf8"), + jdbcVersion, + protocolVersion, + url, + }); + writeFileSync(latestJsonPath, updated); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main(); +} diff --git a/.github/scripts/bump-agent-versions.mjs b/.github/scripts/bump-agent-versions.mjs new file mode 100644 index 0000000..a61dd5d --- /dev/null +++ b/.github/scripts/bump-agent-versions.mjs @@ -0,0 +1,212 @@ +#!/usr/bin/env node +import { execFileSync } from "node:child_process"; +import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs"; + +const VERSIONS_PATH = "agents/versions.json"; + +function bumpPatchVersion(version) { + const match = /^(\d+)\.(\d+)\.(\d+)(.*)$/.exec(version); + if (!match) { + throw new Error(`Agent version '${version}' is not a patchable semver version.`); + } + return `${match[1]}.${match[2]}.${Number(match[3]) + 1}${match[4]}`; +} + +function pathChanged(changedFiles, pathPrefix) { + const normalized = pathPrefix.endsWith("/") ? pathPrefix : `${pathPrefix}/`; + return changedFiles.some((file) => file === pathPrefix || file.startsWith(normalized)); +} + +function isCommonRuntimeChange(file) { + return file === "agents/common/build.gradle" || file.startsWith("agents/common/src/main/"); +} + +function parseLegacyStandaloneProjects(buildGradle) { + const match = /legacyStandaloneProjects\s*=\s*\[([^\]]*)\]/m.exec(buildGradle); + if (!match) return new Set(); + + return new Set( + [...match[1].matchAll(/['"]([^'"]+)['"]/g)] + .map((entry) => entry[1]) + .filter(Boolean), + ); +} + +function fileContainsCommonDependency(path, moduleExists, readModuleFile) { + if (!moduleExists(path)) return false; + const source = readModuleFile(path); + return /project\(\s*['"]:common['"]\s*\)/.test(source); +} + +function resolveAgentModule(moduleName, { legacyStandaloneModules, moduleExists, readModuleFile }) { + let checkDir = null; + if (moduleName === "oracle" && moduleExists("agents/drivers/oracle-go")) { + checkDir = "drivers/oracle-go"; + } else if (moduleExists(`agents/drivers/${moduleName}`)) { + checkDir = `drivers/${moduleName}`; + } else if (moduleExists(`agents/${moduleName}`) || moduleName === "common") { + checkDir = moduleName; + } + + if (!checkDir) return null; + + const modulePath = `agents/${checkDir}`; + const buildGradlePath = `${modulePath}/build.gradle`; + const hasBuildGradle = moduleExists(buildGradlePath); + const explicitlyDependsOnCommon = fileContainsCommonDependency(buildGradlePath, moduleExists, readModuleFile); + + return { + checkDir, + modulePath, + commonDependent: hasBuildGradle && (explicitlyDependsOnCommon || !legacyStandaloneModules.has(moduleName)), + }; +} + +export function evaluateAgentVersionBump({ + versions, + prevVersions = versions, + changedFiles, + legacyStandaloneModules = new Set(), + moduleExists = existsSync, + readModuleFile = (path) => readFileSync(path, "utf8"), + skipBump = false, + manualVersionsChanged = changedFiles.includes(VERSIONS_PATH), +}) { + const nextVersions = { ...versions }; + const logs = []; + let changed = false; + + if (manualVersionsChanged && !skipBump) { + logs.push("Manual agents/versions.json changes detected; preserving manually changed module versions and auto-bumping the rest."); + } + + if (skipBump) { + logs.push("Skipping automatic module version bump for migrated first release; versions.json was carried over from dbx-agents."); + return { changed, versions: nextVersions, prevVersions, logs }; + } + + const commonChanged = changedFiles.some(isCommonRuntimeChange); + if (commonChanged) { + logs.push("Common agent runtime changes detected; common-triggered bumps are limited to modules that package agents/common."); + } + + for (const moduleName of Object.keys(versions)) { + const module = resolveAgentModule(moduleName, { legacyStandaloneModules, moduleExists, readModuleFile }); + if (!module) continue; + + const moduleChanged = pathChanged(changedFiles, module.modulePath); + // Only modules that package agents/common need installer-visible updates + // for shared Java runtime changes; native and standalone agents do not. + const commonAffectsModule = commonChanged && module.commonDependent; + const oldVersion = nextVersions[moduleName] ?? "0.1.0"; + const prevVersion = prevVersions[moduleName] ?? ""; + const manuallyVersioned = manualVersionsChanged && (!prevVersion || prevVersion !== oldVersion); + + if (!moduleChanged && !commonAffectsModule) { + logs.push(` ${moduleName}: no changes`); + } else if (manuallyVersioned) { + if (!prevVersion) { + logs.push(` ${moduleName}: CHANGED, new module version kept at ${oldVersion}`); + } else { + logs.push(` ${moduleName}: CHANGED, manual version ${prevVersion} -> ${oldVersion}`); + } + } else { + const newVersion = bumpPatchVersion(oldVersion); + nextVersions[moduleName] = newVersion; + changed = true; + logs.push(` ${moduleName}: CHANGED`); + logs.push(` ${moduleName}: ${oldVersion} -> ${newVersion}`); + } + } + + return { changed, versions: nextVersions, prevVersions, logs }; +} + +function git(args) { + return execFileSync("git", args, { encoding: "utf8" }).trim(); +} + +function parseArgs(argv) { + const options = { + migratedFirstRelease: false, + prevTag: "", + prevVersionsFile: "", + skipBump: false, + write: false, + }; + + for (let index = 0; index < argv.length; index += 1) { + const arg = argv[index]; + if (arg === "--write") { + options.write = true; + } else if (arg === "--skip-bump") { + options.skipBump = true; + } else if (arg === "--prev-tag") { + options.prevTag = argv[++index] ?? ""; + } else if (arg === "--prev-versions-file") { + options.prevVersionsFile = argv[++index] ?? ""; + } else if (arg === "--migrated-first-release") { + options.migratedFirstRelease = (argv[++index] ?? "") === "true"; + } else { + throw new Error(`Unexpected argument: ${arg}`); + } + } + + if (!options.prevTag) { + throw new Error("--prev-tag is required."); + } + return options; +} + +function outputStepValues(result, prevTag, migratedFirstRelease) { + const outputPath = process.env.GITHUB_OUTPUT; + if (!outputPath) return; + + appendFileSync( + outputPath, + [ + `versions=${JSON.stringify(result.versions)}`, + `prev_versions=${JSON.stringify(result.prevVersions)}`, + `prev_tag=${prevTag}`, + `migrated_first_release=${migratedFirstRelease}`, + "", + ].join("\n"), + ); +} + +function main() { + const options = parseArgs(process.argv.slice(2)); + const versions = JSON.parse(readFileSync(VERSIONS_PATH, "utf8")); + const legacyStandaloneModules = parseLegacyStandaloneProjects(readFileSync("agents/build.gradle", "utf8")); + const changedFiles = options.skipBump ? [] : git(["diff", "--name-only", `${options.prevTag}..HEAD`]).split("\n").filter(Boolean); + const manualVersionsChanged = changedFiles.includes(VERSIONS_PATH); + const prevVersions = options.prevVersionsFile + ? JSON.parse(readFileSync(options.prevVersionsFile, "utf8")) + : manualVersionsChanged + ? JSON.parse(git(["show", `${options.prevTag}:${VERSIONS_PATH}`])) + : versions; + + const result = evaluateAgentVersionBump({ + versions, + prevVersions, + changedFiles, + legacyStandaloneModules, + skipBump: options.skipBump, + manualVersionsChanged, + }); + + for (const line of result.logs) { + console.log(line); + } + + const versionsJson = `${JSON.stringify(result.versions, null, 2)}\n`; + if (options.write) { + writeFileSync(VERSIONS_PATH, versionsJson); + } + console.log(versionsJson); + outputStepValues(result, options.prevTag, options.migratedFirstRelease); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main(); +} diff --git a/.github/scripts/bump-jdbc-plugin-version.mjs b/.github/scripts/bump-jdbc-plugin-version.mjs new file mode 100644 index 0000000..c072bd9 --- /dev/null +++ b/.github/scripts/bump-jdbc-plugin-version.mjs @@ -0,0 +1,92 @@ +#!/usr/bin/env node +import { execFileSync } from "node:child_process"; +import { readFileSync, writeFileSync } from "node:fs"; + +const POM_PATH = "plugins/jdbc/pom.xml"; +const MANIFEST_PATH = "plugins/jdbc/manifest.json"; + +function firstProjectVersion(pomXml) { + const match = pomXml.match(/([^<]+)<\/version>/); + return match?.[1]?.trim() ?? ""; +} + +function manifestVersion(manifestJson) { + return JSON.parse(manifestJson).version ?? ""; +} + +function bumpPatchVersion(version) { + const match = version.match(/^(\d+)\.(\d+)\.(\d+)(.*)$/); + if (!match) { + throw new Error(`JDBC plugin version '${version}' is not a patchable semver version.`); + } + return `${match[1]}.${match[2]}.${Number(match[3]) + 1}${match[4]}`; +} + +function isReleaseBumpRelevantJdbcPluginChange(file) { + if (file.startsWith("plugins/jdbc/src/") || file.startsWith("plugins/jdbc/bin/")) return true; + if (!file.startsWith("plugins/jdbc/")) return false; + if (file.startsWith("plugins/jdbc/dist/") || file.startsWith("plugins/jdbc/target/")) return false; + if (file === "plugins/jdbc/README.md" || file === "plugins/jdbc/package.sh") return false; + if (file === POM_PATH || file === MANIFEST_PATH) return false; + return true; +} + +function hasJdbcPluginVersionChange(file) { + return file === POM_PATH || file === MANIFEST_PATH; +} + +function updatePomVersion(pomXml, version) { + return pomXml.replace(/()([^<]+)(<\/version>)/, `$1${version}$3`); +} + +function updateManifestVersion(manifestJson, version) { + const manifest = JSON.parse(manifestJson); + manifest.version = version; + return `${JSON.stringify(manifest, null, 2)}\n`; +} + +export function evaluateJdbcPluginReleaseBump({ changedFiles, pomXml, manifestJson }) { + const pomVersion = firstProjectVersion(pomXml); + const currentManifestVersion = manifestVersion(manifestJson); + if (pomVersion !== currentManifestVersion) { + throw new Error(`JDBC plugin version mismatch: pom.xml is ${pomVersion} but manifest.json is ${currentManifestVersion}.`); + } + + const shouldBump = changedFiles.some(isReleaseBumpRelevantJdbcPluginChange) && !changedFiles.some(hasJdbcPluginVersionChange); + const newVersion = shouldBump ? bumpPatchVersion(pomVersion) : pomVersion; + return { + changed: shouldBump, + oldVersion: pomVersion, + newVersion, + pomXml: shouldBump ? updatePomVersion(pomXml, newVersion) : pomXml, + manifestJson: shouldBump ? updateManifestVersion(manifestJson, newVersion) : manifestJson, + }; +} + +function git(args) { + return execFileSync("git", args, { encoding: "utf8" }).trim(); +} + +function main() { + const [baseRef = "HEAD~1", headRef = "HEAD", ...flags] = process.argv.slice(2); + const write = flags.includes("--write"); + const changedFiles = git(["diff", "--name-only", baseRef, headRef]).split("\n").filter(Boolean); + const result = evaluateJdbcPluginReleaseBump({ + changedFiles, + pomXml: readFileSync(POM_PATH, "utf8"), + manifestJson: readFileSync(MANIFEST_PATH, "utf8"), + }); + + if (write && result.changed) { + writeFileSync(POM_PATH, result.pomXml); + writeFileSync(MANIFEST_PATH, result.manifestJson); + } + + console.log(`changed=${result.changed}`); + console.log(`old_version=${result.oldVersion}`); + console.log(`new_version=${result.newVersion}`); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main(); +} diff --git a/.github/scripts/check-jdbc-plugin-version.mjs b/.github/scripts/check-jdbc-plugin-version.mjs new file mode 100644 index 0000000..538b201 --- /dev/null +++ b/.github/scripts/check-jdbc-plugin-version.mjs @@ -0,0 +1,53 @@ +#!/usr/bin/env node +import { execFileSync } from "node:child_process"; + +const POM_PATH = "plugins/jdbc/pom.xml"; +const MANIFEST_PATH = "plugins/jdbc/manifest.json"; + +function firstProjectVersion(pomXml) { + const match = pomXml.match(/([^<]+)<\/version>/); + return match?.[1]?.trim() ?? ""; +} + +function manifestVersion(manifestJson) { + return JSON.parse(manifestJson).version ?? ""; +} + +export function evaluateJdbcPluginVersionChange({ headPomVersion, headManifestVersion }) { + const errors = []; + if (headPomVersion !== headManifestVersion) { + errors.push(`JDBC plugin version mismatch: pom.xml is ${headPomVersion} but manifest.json is ${headManifestVersion}.`); + return errors; + } + return errors; +} + +function git(args) { + return execFileSync("git", args, { encoding: "utf8" }).trim(); +} + +function readFileAt(ref, path) { + return git(["show", `${ref}:${path}`]); +} + +function main() { + const [, headRef = "HEAD"] = process.argv.slice(2); + const headPomVersion = firstProjectVersion(readFileAt(headRef, POM_PATH)); + const headManifestVersion = manifestVersion(readFileAt(headRef, MANIFEST_PATH)); + const errors = evaluateJdbcPluginVersionChange({ + headPomVersion, + headManifestVersion, + }); + + if (errors.length) { + for (const error of errors) { + console.error(`::error::${error}`); + } + process.exit(1); + } + console.log(`JDBC plugin version check passed (${headPomVersion}).`); +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main(); +} diff --git a/.github/scripts/i18n-autofill.mjs b/.github/scripts/i18n-autofill.mjs new file mode 100644 index 0000000..9ec2e4c --- /dev/null +++ b/.github/scripts/i18n-autofill.mjs @@ -0,0 +1,544 @@ +#!/usr/bin/env node + +import { execFileSync } from "node:child_process"; +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { join } from "node:path"; + +const LOCALES_DIR = "apps/desktop/src/i18n/locales"; +const SOURCE_LOCALE = "zh-CN"; +const TARGET_LOCALES = ["en", "es", "it", "ja", "pt-BR", "zh-TW"]; +const TARGET_LABELS = { + en: "English", + es: "Spanish", + it: "Italian", + ja: "Japanese", + "pt-BR": "Brazilian Portuguese", + "zh-TW": "Traditional Chinese used in Taiwan", +}; + +const args = new Set(process.argv.slice(2)); +const dryRun = args.has("--dry-run") || !args.has("--write"); +const mockTranslations = args.has("--mock-translations") || process.env.I18N_MOCK_TRANSLATIONS === "1"; +const baseRef = valueArg("--base-ref") || process.env.I18N_BASE_REF || "origin/main"; +const apiKey = process.env.DEEPSEEK_API_KEY || ""; +const apiUrl = process.env.DEEPSEEK_API_URL || "https://api.deepseek.com/chat/completions"; +const model = process.env.DEEPSEEK_MODEL || "deepseek-v4-pro"; + +async function main() { + const sourcePath = localePath(SOURCE_LOCALE); + const baseSourceText = readBaseFile(sourcePath); + const headSource = parseLocaleFile(readFileSync(sourcePath, "utf8"), sourcePath); + const baseSource = parseLocaleFile(baseSourceText, `${baseRef}:${sourcePath}`); + + // Only PR-new Chinese source keys are eligible for auto-fill; historical + // locale gaps intentionally stay untouched to keep bot patches scoped. + const baseLeaves = flattenLeaves(baseSource.root); + const headLeaves = flattenLeaves(headSource.root); + const newSourceKeys = [...headLeaves.keys()].filter((key) => !baseLeaves.has(key)); + + if (newSourceKeys.length === 0) { + console.log(`No new ${SOURCE_LOCALE} i18n keys compared with ${baseRef}`); + return; + } + + console.log(`Found ${newSourceKeys.length} new ${SOURCE_LOCALE} i18n key(s):`); + for (const key of newSourceKeys) console.log(`- ${key}`); + + let patchedFiles = 0; + const summary = { + sourceLocale: SOURCE_LOCALE, + newKeys: newSourceKeys, + updatedLocales: [], + }; + + for (const locale of TARGET_LOCALES) { + const path = localePath(locale); + if (!existsSync(path)) throw new Error(`Missing locale file: ${path}`); + + const text = readFileSync(path, "utf8"); + const parsed = parseLocaleFile(text, path); + const targetLeaves = flattenLeaves(parsed.root); + const missingKeys = newSourceKeys.filter((key) => !targetLeaves.has(key)); + + if (missingKeys.length === 0) { + console.log(`${locale}: all new keys already present`); + continue; + } + + console.log(`${locale}: missing ${missingKeys.length} new key(s)`); + for (const key of missingKeys) console.log(` - ${key}`); + + const translations = await translateMissing(locale, missingKeys, headLeaves); + const updated = patchLocaleText(text, parsed, missingKeys, translations, headSource.root); + + if (updated === text) { + throw new Error(`${path}: expected changes for missing keys, but patch was empty`); + } + + parseLocaleFile(updated, path); + if (!dryRun) writeFileSync(path, updated); + patchedFiles += 1; + summary.updatedLocales.push({ locale, count: missingKeys.length }); + } + + if (patchedFiles === 0) { + console.log("No locale files needed changes"); + } else if (dryRun) { + console.log(`Dry run completed; ${patchedFiles} locale file(s) would be patched`); + } else { + console.log(`Patched ${patchedFiles} locale file(s)`); + } + + writeSummary(summary); +} + +function valueArg(name) { + const index = process.argv.indexOf(name); + if (index === -1) return null; + const value = process.argv[index + 1]; + if (!value || value.startsWith("--")) throw new Error(`${name} requires a value`); + return value; +} + +function localePath(locale) { + return join(LOCALES_DIR, `${locale}.ts`); +} + +function readBaseFile(path) { + try { + return execFileSync("git", ["show", `${baseRef}:${path}`], { encoding: "utf8", maxBuffer: 16 * 1024 * 1024 }); + } catch (error) { + throw new Error(`Unable to read ${path} from ${baseRef}: ${error.message}`); + } +} + +function writeSummary(summary) { + const path = process.env.I18N_SUMMARY_FILE; + if (!path) return; + writeFileSync(path, `${JSON.stringify(summary, null, 2)}\n`); +} + +async function translateMissing(locale, keys, sourceLeaves) { + if (mockTranslations) { + return Object.fromEntries(keys.map((key) => [key, `[${locale}] ${sourceLeaves.get(key)}`])); + } + + if (!apiKey) { + throw new Error(`DEEPSEEK_API_KEY is required to translate ${keys.length} missing ${locale} i18n key(s)`); + } + + const items = keys.map((key) => ({ key, source: sourceLeaves.get(key) })); + const response = await fetch(apiUrl, { + method: "POST", + headers: { + Authorization: `Bearer ${apiKey}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + model, + response_format: { type: "json_object" }, + temperature: 0.1, + max_tokens: Math.max(1024, keys.length * 120), + messages: [ + { + role: "system", + content: [ + `Translate DBX UI i18n strings from Simplified Chinese to ${TARGET_LABELS[locale]}.`, + 'Return strict JSON only in this exact shape: {"translations":{"path.to.key":"translated text"}}.', + "Keep i18n placeholders such as {count}, {message}, and {name} exactly unchanged.", + "Keep product names, database names, SQL keywords, file extensions, shortcuts, and code-like terms unchanged unless the target language convention clearly translates them.", + "Do not add keys, remove keys, or translate key names.", + ].join(" "), + }, + { + role: "user", + content: JSON.stringify({ targetLocale: locale, items }), + }, + ], + }), + }); + + if (!response.ok) { + throw new Error(`DeepSeek API failed for ${locale}: HTTP ${response.status} ${await response.text()}`); + } + + const data = await response.json(); + const content = data?.choices?.[0]?.message?.content; + if (typeof content !== "string" || !content.trim()) { + throw new Error(`DeepSeek API returned no translation content for ${locale}`); + } + + const parsed = parseJsonContent(content); + const translations = parsed.translations; + if (!translations || typeof translations !== "object" || Array.isArray(translations)) { + throw new Error(`DeepSeek response for ${locale} must contain a translations object`); + } + + for (const key of keys) { + if (typeof translations[key] !== "string" || !translations[key].trim()) { + throw new Error(`DeepSeek response for ${locale} is missing translation for ${key}`); + } + assertSamePlaceholders(key, sourceLeaves.get(key), translations[key], locale); + } + + return translations; +} + +function parseJsonContent(content) { + const trimmed = content.trim(); + const withoutFence = trimmed + .replace(/^```(?:json)?\s*/i, "") + .replace(/\s*```$/i, "") + .trim(); + try { + return JSON.parse(withoutFence); + } catch (error) { + throw new Error(`Unable to parse DeepSeek JSON response: ${error.message}\n${content}`); + } +} + +function assertSamePlaceholders(key, source, translated, locale) { + const sourcePlaceholders = placeholders(source); + const translatedPlaceholders = placeholders(translated); + if (sourcePlaceholders.join("\0") !== translatedPlaceholders.join("\0")) { + throw new Error( + `${locale}:${key} placeholder mismatch: expected [${sourcePlaceholders.join(", ")}], got [${translatedPlaceholders.join(", ")}]`, + ); + } +} + +function placeholders(value) { + return [...String(value).matchAll(/\{[^{}]+\}/g)].map((match) => match[0]).sort(); +} + +function patchLocaleText(text, parsed, missingKeys, translations, sourceRoot) { + const groups = groupMissingKeys(parsed.root, missingKeys, translations, sourceRoot); + const edits = []; + + for (const group of groups) { + const insertText = buildInsertion(text, group.objectNode, group.entries, group.sourceObjectNode); + edits.push({ index: lineStartBefore(text, group.objectNode.closeBrace), text: insertText }); + } + + return applyEdits(text, edits); +} + +function groupMissingKeys(targetRoot, missingKeys, translations, sourceRoot) { + const byParent = new Map(); + + for (const key of missingKeys) { + const segments = key.split("."); + const { node: parentNode, path: parentPath, remaining } = findInsertionParent(targetRoot, segments); + const parentKey = parentPath.join("."); + const sourceParent = findObjectNode(sourceRoot, parentPath); + if (!sourceParent) throw new Error(`${key}: insertion parent is missing in ${SOURCE_LOCALE}`); + + const sourceOrder = sourceParent.properties.map((property) => property.key); + const entry = { + path: remaining, + value: translations[key], + order: sourceOrder.indexOf(remaining[0]), + }; + + if (!byParent.has(parentKey)) byParent.set(parentKey, { objectNode: parentNode, sourceObjectNode: sourceParent, entries: [] }); + byParent.get(parentKey).entries.push(entry); + } + + return [...byParent.values()].map((group) => ({ + ...group, + entries: group.entries.sort((left, right) => left.order - right.order || left.path.join(".").localeCompare(right.path.join("."))), + })); +} + +function findInsertionParent(root, fullPath) { + let current = root; + const existingPath = []; + + for (const segment of fullPath.slice(0, -1)) { + const property = current.properties.find((candidate) => candidate.key === segment); + if (!property) break; + if (property.value.type !== "object") { + throw new Error(`${fullPath.join(".")}: cannot insert under non-object locale key ${[...existingPath, segment].join(".")}`); + } + current = property.value; + existingPath.push(segment); + } + + return { node: current, path: existingPath, remaining: fullPath.slice(existingPath.length) }; +} + +function findObjectNode(root, path) { + let current = root; + for (const segment of path) { + const property = current.properties.find((candidate) => candidate.key === segment); + if (!property || property.value.type !== "object") return null; + current = property.value; + } + return current; +} + +function buildInsertion(text, objectNode, entries, sourceObjectNode) { + const parentIndent = lineIndentBefore(text, objectNode.closeBrace); + const childIndent = objectNode.properties.length > 0 ? lineIndentBefore(text, objectNode.properties[0].start) : `${parentIndent} `; + const lines = renderEntryTree(buildEntryTree(entries), sourceObjectNode, childIndent); + + return `${lines.join("\n")}\n`; +} + +function buildEntryTree(entries) { + const root = { children: new Map(), value: undefined }; + for (const entry of entries) { + let current = root; + for (const segment of entry.path) { + if (!current.children.has(segment)) current.children.set(segment, { children: new Map(), value: undefined }); + current = current.children.get(segment); + } + current.value = entry.value; + } + return root; +} + +function renderEntryTree(tree, sourceObjectNode, indent) { + const lines = []; + const entries = [...tree.children.entries()].sort(([left], [right]) => compareSourceOrder(sourceObjectNode, left, right)); + + for (const [key, child] of entries) { + if (child.children.size === 0) { + lines.push(`${indent}${formatKey(key)}: ${JSON.stringify(child.value)},`); + continue; + } + + const childSourceObject = sourceObjectNode?.properties.find((property) => property.key === key && property.value.type === "object")?.value; + lines.push(`${indent}${formatKey(key)}: {`); + lines.push(...renderEntryTree(child, childSourceObject, `${indent} `)); + lines.push(`${indent}},`); + } + + return lines; +} + +function compareSourceOrder(sourceObjectNode, left, right) { + const order = sourceObjectNode?.properties.map((property) => property.key) || []; + const leftIndex = order.indexOf(left); + const rightIndex = order.indexOf(right); + if (leftIndex !== -1 || rightIndex !== -1) { + if (leftIndex === -1) return 1; + if (rightIndex === -1) return -1; + return leftIndex - rightIndex; + } + return left.localeCompare(right); +} + +function formatKey(key) { + return /^[A-Za-z_$][\w$]*$/.test(key) ? key : JSON.stringify(key); +} + +function lineIndentBefore(text, index) { + const lineStart = lineStartBefore(text, index); + const match = text.slice(lineStart, index).match(/^[ \t]*/); + return match ? match[0] : ""; +} + +function lineStartBefore(text, index) { + return text.lastIndexOf("\n", Math.max(0, index - 1)) + 1; +} + +function applyEdits(text, edits) { + let updated = text; + for (const edit of edits.sort((left, right) => right.index - left.index)) { + updated = `${updated.slice(0, edit.index)}${edit.text}${updated.slice(edit.index)}`; + } + return updated; +} + +function flattenLeaves(root) { + const result = new Map(); + flattenNode(root, [], result); + return result; +} + +function flattenNode(node, path, result) { + for (const property of node.properties) { + const nextPath = [...path, property.key]; + if (property.value.type === "object") { + flattenNode(property.value, nextPath, result); + } else { + result.set(nextPath.join("."), property.value.value); + } + } +} + +function parseLocaleFile(text, file) { + const parser = new Parser(text, file); + const root = parser.parseLocaleRoot(); + return { root }; +} + +class Parser { + constructor(text, file) { + this.text = text; + this.file = file; + this.index = 0; + } + + parseLocaleRoot() { + const exportIndex = this.text.indexOf("export default"); + if (exportIndex === -1) this.fail("Missing export default"); + this.index = exportIndex + "export default".length; + this.skipSpace(); + + if (this.peek() === "{") return this.parseObject(); + + const callee = this.parseIdentifier(); + this.skipSpace(); + if (!callee || this.peek() !== "(") this.fail("Expected object literal or wrapper call after export default"); + this.index += 1; + this.skipSpace(); + const object = this.parseObject(); + this.skipSpace(); + if (this.peek() !== ")") this.fail("Expected closing wrapper call parenthesis"); + return object; + } + + parseObject() { + this.expect("{"); + const openBrace = this.index - 1; + const properties = []; + + while (true) { + this.skipSpace(); + if (this.peek() === "}") { + const closeBrace = this.index; + this.index += 1; + return { type: "object", openBrace, closeBrace, end: this.index, properties }; + } + + const start = this.index; + const key = this.parseKey(); + this.skipSpace(); + this.expect(":"); + this.skipSpace(); + const value = this.parseValue(); + this.skipSpace(); + + let hasComma = false; + if (this.peek() === ",") { + hasComma = true; + this.index += 1; + } + + properties.push({ key, start, end: this.index, hasComma, value }); + } + } + + parseValue() { + const char = this.peek(); + if (char === "{") return this.parseObject(); + if (char === '"' || char === "'") { + const start = this.index; + const value = this.parseString(); + return { type: "string", start, end: this.index, value }; + } + this.fail(`Unsupported locale value starting with ${JSON.stringify(char)}`); + } + + parseKey() { + const char = this.peek(); + if (char === '"' || char === "'") return this.parseString(); + const key = this.parseIdentifier(); + if (!key) this.fail("Expected property key"); + return key; + } + + parseIdentifier() { + const match = /^[A-Za-z_$][\w$-]*/.exec(this.text.slice(this.index)); + if (!match) return ""; + this.index += match[0].length; + return match[0]; + } + + parseString() { + const quote = this.peek(); + this.index += 1; + let value = ""; + while (this.index < this.text.length) { + const char = this.text[this.index]; + if (char === "\\") { + const escaped = this.text[this.index + 1]; + if (!escaped) this.fail("Unterminated string literal"); + this.index += 2; + if (escaped === "n") value += "\n"; + else if (escaped === "r") value += "\r"; + else if (escaped === "t") value += "\t"; + else if (escaped === "b") value += "\b"; + else if (escaped === "f") value += "\f"; + else if (escaped === "v") value += "\v"; + else if (escaped === "0") value += "\0"; + else if (escaped === "u") { + const hex = this.text.slice(this.index, this.index + 4); + if (!/^[0-9a-fA-F]{4}$/.test(hex)) this.fail("Invalid unicode escape"); + value += String.fromCharCode(Number.parseInt(hex, 16)); + this.index += 4; + } else { + value += escaped; + } + continue; + } + if (char === quote) { + this.index += 1; + return value; + } + if (char === "\n" || char === "\r") this.fail("Unterminated string literal"); + value += char; + this.index += 1; + } + this.fail("Unterminated string literal"); + } + + skipSpace() { + while (this.index < this.text.length) { + const char = this.text[this.index]; + if (/\s/.test(char)) { + this.index += 1; + continue; + } + if (this.text.startsWith("//", this.index)) { + const next = this.text.indexOf("\n", this.index + 2); + this.index = next === -1 ? this.text.length : next + 1; + continue; + } + if (this.text.startsWith("/*", this.index)) { + const next = this.text.indexOf("*/", this.index + 2); + if (next === -1) this.fail("Unterminated block comment"); + this.index = next + 2; + continue; + } + break; + } + } + + expect(expected) { + if (this.peek() !== expected) this.fail(`Expected ${expected}`); + this.index += expected.length; + } + + peek() { + return this.text[this.index] || ""; + } + + fail(message) { + const location = this.location(); + throw new Error(`${this.file}:${location.line}:${location.column}: ${message}`); + } + + location() { + const before = this.text.slice(0, this.index); + const lines = before.split(/\r?\n/); + return { line: lines.length, column: lines[lines.length - 1].length + 1 }; + } +} + +main().catch((error) => { + console.error(error instanceof Error ? error.message : String(error)); + process.exit(1); +}); diff --git a/.github/scripts/issue-claim.mjs b/.github/scripts/issue-claim.mjs new file mode 100644 index 0000000..7e8b9ad --- /dev/null +++ b/.github/scripts/issue-claim.mjs @@ -0,0 +1,59 @@ +#!/usr/bin/env node +import { execFile } from "node:child_process"; +import { promisify } from "node:util"; + +const execFileAsync = promisify(execFile); +const issueNumber = process.env.ISSUE_NUMBER; +const commentBody = process.env.COMMENT_BODY || ""; +const commentUser = process.env.COMMENT_USER || ""; +const commentUserType = process.env.COMMENT_USER_TYPE || ""; + +// Only handle /claim as a standalone word +if (!/(?:^|\s)\/claim(?:\s|$)/.test(commentBody)) { + process.exit(0); +} + +// Don't let bots claim +if (commentUserType === "Bot") { + console.log("Commenter is a bot, skipping"); + process.exit(0); +} + +console.log(`/claim from @${commentUser} on #${issueNumber}`); + +async function gh(args) { + const { stdout } = await execFileAsync("gh", args, { maxBuffer: 1024 * 1024 }); + return stdout.trim(); +} + +async function ghJson(args) { + const out = await gh(args); + return JSON.parse(out); +} + +// Check current assignees +const assignees = await ghJson([ + "issue", "view", issueNumber, + "--json", "assignees", + "-q", ".assignees", +]); + +if (assignees.length > 0) { + const names = assignees.map((a) => `@${a.login}`).join(", "); + await gh([ + "issue", "comment", issueNumber, + "--body", `❌ @${commentUser} 这个 issue 已经有人认领了:${names}`, + ]); + process.exit(0); +} + +// Assign +await gh(["issue", "edit", issueNumber, "--add-assignee", commentUser]); + +// Confirm +await gh([ + "issue", "comment", issueNumber, + "--body", `✅ @${commentUser} 已认领 #${issueNumber},开始处理吧!`, +]); + +console.log(`Assigned @${commentUser} to #${issueNumber}`); diff --git a/.github/scripts/label-issue-database.mjs b/.github/scripts/label-issue-database.mjs new file mode 100644 index 0000000..2187cd3 --- /dev/null +++ b/.github/scripts/label-issue-database.mjs @@ -0,0 +1,570 @@ +#!/usr/bin/env node +import fs from "node:fs"; + +const LABEL_PREFIX = "db/"; +const USER_PRIORITY_PREFIX = "user-priority/"; +const API_VERSION = "2022-11-28"; +const dryRun = process.env.DRY_RUN === "1" || process.env.DRY_RUN === "true"; + +const USER_PRIORITY_LABELS = { + P0: { color: "b60205", description: "User-reported priority: urgent" }, + P1: { color: "d93f0b", description: "User-reported priority: important" }, + P2: { color: "fbca04", description: "User-reported priority: normal" }, + P3: { color: "bfd4f2", description: "User-reported priority: low" }, +}; + +const LABEL_PALETTE = [ + "0e8a16", + "1d76db", + "5319e7", + "c2e0c6", + "bfd4f2", + "d4c5f9", + "fef2c0", + "fbca04", + "f9d0c4", + "e99695", + "f29513", + "c5def5", +]; + +const extraAliases = { + mysql: ["mariadb", "percona", "tidb"], + postgres: ["postgresql", "postgres", "pgsql", "pg", "hologres"], + sqlite: ["sqlite3", "sql lite"], + clickhouse: ["click house", "ch"], + sqlserver: ["sql server", "mssql", "microsoft sql server", "sqlservice"], + mongodb: ["mongo", "mongodb"], + oracle: ["oracle database"], + elasticsearch: ["elastic search"], + chromadb: ["chroma"], + manticoresearch: ["manticore"], + dameng: ["dm8", "dameng", "达梦"], + kingbase: ["kingbasees", "kingbase", "人大金仓", "金仓"], + highgo: ["瀚高"], + yashandb: ["yashan", "崖山"], + saphana: ["hana", "sap hana"], + opengauss: ["open gauss"], + "oceanbase-oracle": ["oceanbase", "oceanbase oracle"], + gbase: ["gbase 8a", "gbase8a", "gbase 8s", "gbase8s"], + access: ["microsoft access", "ms access"], + vastbase: ["vastbase g", "vastbaseg"], + prestosql: ["presto", "presto sql"], + hive: ["apache hive"], + db2: ["ibm db2"], + informix: ["ibm informix"], + bigquery: ["google bigquery"], + kylin: ["apache kylin"], + oscar: ["shentong", "oscar", "神通"], + xugu: ["xugudb", "xugu", "虚谷"], + zookeeper: ["zoo keeper", "apache zookeeper"], + mq: ["message queue", "kafka", "rabbitmq", "rocketmq"], + iotdb: ["apache iotdb"], + iris: ["intersystems iris", "intersystems cache", "intersystems caché", "cache", "caché", "ensemble"], + spark: ["apache spark"], +}; + +const globallyAmbiguousAliases = new Set([ + "access", + "ch", + "h2", + "iris", + "jdbc", + "mq", + "pg", + "spark", +]); + +const genericDatabaseValues = [ + "general", + "generic", + "global", + "all", + "any", + "none", + "n/a", + "na", + "通用", + "全部", + "所有", + "无", + "不适用", +]; + +const manifestUrl = new URL("../../crates/dbx-core/assets/database-drivers.manifest.json", import.meta.url); +const manifest = JSON.parse(fs.readFileSync(manifestUrl, "utf8")); +const drivers = manifest.drivers.map((driver) => ({ + dbType: driver.dbType, + label: driver.label, + aliases: [...new Set([driver.dbType, driver.label, ...(extraAliases[driver.dbType] || [])])], +})); +const exactAsciiAliases = new Set( + drivers.flatMap((driver) => driver.aliases.map((alias) => compactAscii(alias)).filter((alias) => alias.length >= 5)), +); + +function loadIssue() { + if (process.env.GITHUB_EVENT_PATH && fs.existsSync(process.env.GITHUB_EVENT_PATH)) { + const event = JSON.parse(fs.readFileSync(process.env.GITHUB_EVENT_PATH, "utf8")); + return event.issue || {}; + } + + return { + number: process.env.ISSUE_NUMBER, + title: process.env.ISSUE_TITLE || "", + body: process.env.ISSUE_BODY || "", + labels: process.env.ISSUE_LABELS ? JSON.parse(process.env.ISSUE_LABELS) : [], + }; +} + +function labelNames(labels) { + return (labels || []).map((label) => (typeof label === "string" ? label : label.name)).filter(Boolean); +} + +function stablePaletteColor(value) { + let hash = 0; + for (const char of value) { + hash = (hash * 31 + char.codePointAt(0)) >>> 0; + } + return LABEL_PALETTE[hash % LABEL_PALETTE.length]; +} + +function extractIssueFormSection(body, predicate) { + const matches = [...String(body || "").matchAll(/^###\s+(.+?)\s*$/gm)]; + for (const [index, match] of matches.entries()) { + const heading = match[1].trim(); + if (!predicate(heading)) continue; + + const start = match.index + match[0].length; + const end = matches[index + 1]?.index ?? body.length; + return body.slice(start, end).trim(); + } + + return ""; +} + +function extractDatabaseField(body) { + return extractIssueFormSection(body, (heading) => ( + heading.includes("数据库类型") || + heading.toLowerCase().includes("database type") || + /^database$/i.test(heading) + )); +} + +function extractPriorityField(body) { + return extractIssueFormSection(body, (heading) => ( + heading.includes("优先级") || + heading.toLowerCase().includes("priority") + )); +} + +function extractTitleSummaryField(body) { + const headingPredicates = [ + (heading) => heading.includes("问题描述") || heading.toLowerCase().includes("description"), + (heading) => heading.includes("当前痛点") || heading.toLowerCase().includes("problem"), + (heading) => heading.includes("期望方案") || heading.toLowerCase().includes("proposal"), + (heading) => heading === "描述" || heading.toLowerCase() === "description", + ]; + + for (const predicate of headingPredicates) { + const section = extractIssueFormSection(body, predicate); + if (section) return section; + } + + return ""; +} + +function matchPriorityLabel(value) { + const match = String(value || "").normalize("NFKC").match(/\bP([0-3])\b/i); + return match ? `P${match[1]}` : null; +} + +function genericIssueTitlePrefix(title) { + const normalized = String(title || "").normalize("NFKC").trim().replace(/\s+/g, " "); + const bracketMatch = normalized.match(/^([\[【][^\]】]*(?:bug|feature|feat|compatibility|question)[^\]】]*[\]】])$/i); + if (bracketMatch) return bracketMatch[1]; + + const bareMatch = normalized.match(/^(bug|feature|feat|compatibility|question):?$/i); + if (!bareMatch) return null; + + const normalizedPrefix = bareMatch[1].toLowerCase() === "feat" ? "Feat" : ( + bareMatch[1].charAt(0).toUpperCase() + bareMatch[1].slice(1).toLowerCase() + ); + return `[${normalizedPrefix}]`; +} + +function cleanTitleSummaryLine(line) { + return String(line || "") + .replace(/]*>/gi, "") + .replace(/<[^>]+>/g, "") + .replace(/^>\s*/, "") + .replace(/^[-*]\s+/, "") + .replace(/^\d+[.)、]\s*/, "") + .replace(/!\[[^\]]*?\]\([^)]*?\)/g, "") + .replace(/\[[^\]]*?\]\([^)]*?\)/g, "") + .replace(/[`*_~]/g, "") + .replace(/\s+/g, " ") + .trim(); +} + +function isSkippableTitleSummaryLine(line) { + return ( + /^DBX debug log$/i.test(line) || + /^(Exported|User agent|Platform|Timezone):/i.test(line) || + /^(Native|Tauri) log dir:/i.test(line) || + /^=+.*logs?.*=+$/i.test(line) || + /^\[\d{4}-\d{2}-\d{2}(?:T|\])/.test(line) || + /^\[(DEBUG|INFO|WARN|ERROR|LOG|STARTUP)\]/i.test(line) + ); +} + +function firstSentence(value) { + const withoutCodeBlocks = String(value || "").replace(/```[\s\S]*?```/g, "\n"); + const lines = withoutCodeBlocks + .split(/\r?\n/) + .map(cleanTitleSummaryLine) + .filter((line) => !isSkippableTitleSummaryLine(line)) + .filter((line) => /[\p{L}\p{N}\u3400-\u9fff]/u.test(line)); + + for (const line of lines) { + const sentenceMatch = line.match(/^(.{4,120}?[。!?!?]|.{12,120}?\.(?=\s|$))/u); + const sentence = (sentenceMatch ? sentenceMatch[1] : line) + .replace(/[。!?!?.]+$/u, "") + .trim(); + if (sentence.length >= 4) { + return sentence.length > 90 ? `${sentence.slice(0, 89)}…` : sentence; + } + } + + return ""; +} + +function inferIssueTitle(title, body) { + const prefix = genericIssueTitlePrefix(title); + if (!prefix) return null; + + const summary = firstSentence(extractTitleSummaryField(body)); + if (!summary) return null; + + return `${prefix} ${summary}`; +} + +function normalizeText(value) { + return String(value || "") + .normalize("NFKC") + .toLowerCase() + .replace(/[·,。;:、]/g, " ") + .replace(/\s+/g, " ") + .trim(); +} + +function containsCjk(value) { + return /[\u3400-\u9fff]/u.test(value); +} + +function escapeRegExp(value) { + return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +function compactAscii(value) { + return normalizeText(value).replace(/[^a-z0-9]/g, ""); +} + +function levenshteinDistance(left, right) { + if (left === right) return 0; + if (!left) return right.length; + if (!right) return left.length; + + let previous = Array.from({ length: right.length + 1 }, (_, index) => index); + for (let leftIndex = 0; leftIndex < left.length; leftIndex += 1) { + const current = [leftIndex + 1]; + for (let rightIndex = 0; rightIndex < right.length; rightIndex += 1) { + const substitutionCost = left[leftIndex] === right[rightIndex] ? 0 : 1; + current[rightIndex + 1] = Math.min( + current[rightIndex] + 1, + previous[rightIndex + 1] + 1, + previous[rightIndex] + substitutionCost, + ); + } + previous = current; + } + + return previous[right.length]; +} + +function fuzzyThreshold(length) { + if (length < 6) return 0; + if (length <= 8) return 1; + return 2; +} + +function candidateTokens(text) { + const normalized = normalizeText(text); + const tokens = new Set(); + + for (const match of normalized.matchAll(/[a-z][a-z0-9._-]*/g)) { + const compact = compactAscii(match[0]); + if (!compact) continue; + + tokens.add(compact); + + // User reports often write database names directly followed by versions, + // for example mysql5.7, Oracle19c, or postgresql18. + const withoutVersion = compact.replace(/(?:v?\d[\da-z.]*)$/i, ""); + if (withoutVersion && withoutVersion !== compact) tokens.add(withoutVersion); + } + + return [...tokens].filter((token) => token.length >= 5); +} + +function fuzzyAliasMatches(text, alias) { + const normalizedAlias = normalizeText(alias); + if (containsCjk(normalizedAlias)) return false; + if (globallyAmbiguousAliases.has(normalizedAlias)) return false; + + const compactAlias = compactAscii(normalizedAlias); + const threshold = fuzzyThreshold(compactAlias.length); + if (!threshold) return false; + + return candidateTokens(text).some((token) => { + if (token !== compactAlias && exactAsciiAliases.has(token)) return false; + if (Math.abs(token.length - compactAlias.length) > threshold) return false; + return levenshteinDistance(token, compactAlias) <= threshold; + }); +} + +function aliasMatches(text, alias) { + const normalizedText = normalizeText(text); + const normalizedAlias = normalizeText(alias); + if (!normalizedAlias) return false; + + if (containsCjk(normalizedAlias)) { + return normalizedText.includes(normalizedAlias); + } + + const flexibleAlias = normalizedAlias + .split(/[\s._/-]+/) + .filter(Boolean) + .map(escapeRegExp) + .join("[\\s._/-]*"); + const trailingBoundary = /[0-9]$/.test(normalizedAlias) + ? "(?:[^a-z0-9]|$)" + : "(?:[^a-z0-9]|$|(?=v?\\d))"; + const pattern = new RegExp(`(^|[^a-z0-9])${flexibleAlias}${trailingBoundary}`, "i"); + return pattern.test(normalizedText); +} + +function isGenericDatabaseValue(value) { + const normalized = normalizeText(value); + const parts = normalized + .split(/[,\n/|;,、]+/) + .map((part) => part.trim()) + .filter(Boolean); + + return ( + parts.length > 0 && + parts.every((part) => genericDatabaseValues.some((generic) => aliasMatches(part, generic))) + ); +} + +function matchDrivers(text, { allowAmbiguous }) { + const matches = []; + + for (const driver of drivers) { + const matchedAlias = driver.aliases.find((alias) => { + const normalizedAlias = normalizeText(alias); + if (!allowAmbiguous && globallyAmbiguousAliases.has(normalizedAlias)) return false; + return aliasMatches(text, alias) || fuzzyAliasMatches(text, alias); + }); + + if (matchedAlias) { + matches.push({ ...driver, matchedAlias }); + } + } + + return matches; +} + +function uniqueByDbType(matches) { + const seen = new Set(); + return matches.filter((match) => { + if (seen.has(match.dbType)) return false; + seen.add(match.dbType); + return true; + }); +} + +async function githubRequest(method, path, body) { + const token = process.env.GITHUB_TOKEN; + const repository = process.env.GITHUB_REPOSITORY; + if (!token) throw new Error("GITHUB_TOKEN is required"); + if (!repository) throw new Error("GITHUB_REPOSITORY is required"); + + const response = await fetch(`https://api.github.com/repos/${repository}${path}`, { + method, + headers: { + Accept: "application/vnd.github+json", + Authorization: `Bearer ${token}`, + "Content-Type": "application/json", + "X-GitHub-Api-Version": API_VERSION, + }, + body: body ? JSON.stringify(body) : undefined, + }); + + const text = await response.text(); + const payload = text ? JSON.parse(text) : null; + if (!response.ok) { + const message = payload?.message || response.statusText; + const error = new Error(`${method} ${path} failed: ${response.status} ${message}`); + error.status = response.status; + error.payload = payload; + throw error; + } + return payload; +} + +async function ensureLabel(name, description, color) { + try { + const dbType = name.startsWith(LABEL_PREFIX) ? name.slice(LABEL_PREFIX.length) : name; + await githubRequest("POST", "/labels", { name, color: color || stablePaletteColor(dbType), description }); + console.log(`Created label ${name}`); + } catch (error) { + // GitHub returns 422 when the label already exists; that is the common path + // after the first issue for a database type has been triaged. + if (error.status === 422) { + console.log(`Label ${name} already exists`); + return; + } + throw error; + } +} + +async function addLabels(issueNumber, names) { + await githubRequest("POST", `/issues/${issueNumber}/labels`, { labels: names }); +} + +async function removeLabel(issueNumber, name) { + try { + await githubRequest("DELETE", `/issues/${issueNumber}/labels/${encodeURIComponent(name)}`); + console.log(`Removed stale label ${name}`); + } catch (error) { + if (error.status === 404) return; + throw error; + } +} + +async function updateIssueTitle(issueNumber, title) { + await githubRequest("PATCH", `/issues/${issueNumber}`, { title }); +} + +const issue = loadIssue(); +if (issue.pull_request) { + console.log("Skipping pull request event"); + process.exit(0); +} + +if (!issue.number) { + throw new Error("Issue number is required"); +} + +const databaseField = extractDatabaseField(issue.body || ""); +const hasDatabaseField = databaseField.length > 0; +const fieldIsGeneric = hasDatabaseField && isGenericDatabaseValue(databaseField); +// Free-form bodies often mention comparison databases or examples; the title +// and issue-form database field are the reliable labeling sources. +const sourceText = hasDatabaseField ? databaseField : issue.title || ""; +const matchedDrivers = isGenericDatabaseValue(sourceText) + ? [] + : uniqueByDbType(matchDrivers(sourceText, { allowAmbiguous: hasDatabaseField })); +const titleMatchedDrivers = uniqueByDbType(matchDrivers(issue.title || "", { allowAmbiguous: false })); +if (hasDatabaseField && titleMatchedDrivers.length > 0) { + matchedDrivers.push(...titleMatchedDrivers); +} +if (hasDatabaseField && matchedDrivers.length === 0 && !fieldIsGeneric) { + // Some issue forms contain only a version in the database field and put the + // actual database name in the title; keep that fallback conservative. + matchedDrivers.push( + ...uniqueByDbType(matchDrivers(`${issue.title || ""}\n${databaseField}`, { allowAmbiguous: false })), + ); +} +const uniqueMatchedDrivers = uniqueByDbType(matchedDrivers); +const targetLabels = uniqueMatchedDrivers.map((driver) => `${LABEL_PREFIX}${driver.dbType}`); +const targetLabelColors = Object.fromEntries( + uniqueMatchedDrivers.map((driver) => [`${LABEL_PREFIX}${driver.dbType}`, stablePaletteColor(driver.dbType)]), +); +const priorityField = extractPriorityField(issue.body || ""); +const targetPriorityValue = matchPriorityLabel(priorityField); +const targetPriorityLabel = targetPriorityValue ? `${USER_PRIORITY_PREFIX}${targetPriorityValue}` : null; +if (targetPriorityValue) { + targetLabelColors[targetPriorityLabel] = USER_PRIORITY_LABELS[targetPriorityValue].color; +} +const existingLabels = labelNames(issue.labels); +const titleToUpdate = inferIssueTitle(issue.title || "", issue.body || ""); +const existingDatabaseLabels = existingLabels.filter((name) => name.startsWith(LABEL_PREFIX)); +const staleDatabaseLabels = hasDatabaseField + ? existingDatabaseLabels.filter((name) => !targetLabels.includes(name)) + : []; +const existingPriorityLabels = existingLabels.filter((name) => name.startsWith(USER_PRIORITY_PREFIX)); +const stalePriorityLabels = targetPriorityLabel + ? existingPriorityLabels.filter((name) => name !== targetPriorityLabel) + : []; +const labelsToAdd = [...targetLabels, targetPriorityLabel].filter(Boolean).filter((name) => !existingLabels.includes(name)); +const labelSpecs = [ + ...uniqueMatchedDrivers.map((driver) => ({ + name: `${LABEL_PREFIX}${driver.dbType}`, + description: `Database: ${driver.label}`, + color: stablePaletteColor(driver.dbType), + })), + ...(targetPriorityValue + ? [{ name: targetPriorityLabel, ...USER_PRIORITY_LABELS[targetPriorityValue] }] + : []), +]; + +console.log( + JSON.stringify( + { + issue: issue.number, + databaseField: hasDatabaseField ? databaseField : null, + titleMatched: titleMatchedDrivers.map(({ dbType, label, matchedAlias }) => ({ dbType, label, matchedAlias })), + matched: uniqueMatchedDrivers.map(({ dbType, label, matchedAlias }) => ({ dbType, label, matchedAlias })), + priorityField: priorityField || null, + priorityLabel: targetPriorityLabel, + priorityValue: targetPriorityValue, + titleToUpdate, + labelsToAdd, + targetLabelColors, + staleDatabaseLabels, + stalePriorityLabels, + }, + null, + 2, + ), +); + +if (dryRun) { + console.log("Dry run enabled; no GitHub API calls were made"); + process.exit(0); +} + +for (const labelSpec of labelSpecs) { + await ensureLabel(labelSpec.name, labelSpec.description, labelSpec.color); +} + +if (labelsToAdd.length > 0) { + await addLabels(issue.number, labelsToAdd); + console.log(`Added labels: ${labelsToAdd.join(", ")}`); +} else { + console.log("No database labels to add"); +} + +for (const label of staleDatabaseLabels) { + await removeLabel(issue.number, label); +} + +for (const label of stalePriorityLabels) { + await removeLabel(issue.number, label); +} + +if (titleToUpdate) { + await updateIssueTitle(issue.number, titleToUpdate); + console.log(`Updated title: ${titleToUpdate}`); +} diff --git a/.github/scripts/sync-atomgit-release.mjs b/.github/scripts/sync-atomgit-release.mjs new file mode 100644 index 0000000..e7be13e --- /dev/null +++ b/.github/scripts/sync-atomgit-release.mjs @@ -0,0 +1,343 @@ +#!/usr/bin/env node + +import { basename, join } from "node:path"; +import { readdirSync, readFileSync, statSync } from "node:fs"; +import { spawn } from "node:child_process"; + +const DEFAULT_API_BASE = "https://api.atomgit.com/api/v5"; +const DEFAULT_REPOSITORY = "t8y2/dbx"; +const DEFAULT_CONCURRENCY = 3; + +function parseArgs(argv) { + const args = { + apiBase: process.env.ATOMGIT_API_BASE || DEFAULT_API_BASE, + repository: process.env.ATOMGIT_REPOSITORY || DEFAULT_REPOSITORY, + token: process.env.ATOMGIT_TOKEN || "", + githubReleasePath: "", + assetsDir: "", + skipExistingAssets: true, + concurrency: Number.parseInt(process.env.ATOMGIT_UPLOAD_CONCURRENCY || `${DEFAULT_CONCURRENCY}`, 10), + }; + + for (let i = 0; i < argv.length; i++) { + const arg = argv[i]; + if (arg === "--github-release") { + args.githubReleasePath = argv[++i]; + } else if (arg === "--assets-dir") { + args.assetsDir = argv[++i]; + } else if (arg === "--repository") { + args.repository = argv[++i]; + } else if (arg === "--api-base") { + args.apiBase = argv[++i]; + } else if (arg === "--replace-assets") { + args.skipExistingAssets = false; + } else { + throw new Error(`Unknown argument: ${arg}`); + } + } + + if (!args.token) { + throw new Error("ATOMGIT_TOKEN is required."); + } + if (!args.githubReleasePath || !args.assetsDir) { + throw new Error("Usage: sync-atomgit-release.mjs --github-release --assets-dir "); + } + if (!args.repository.includes("/")) { + throw new Error(`Invalid AtomGit repository: ${args.repository}`); + } + if (!Number.isInteger(args.concurrency) || args.concurrency < 1) { + throw new Error("ATOMGIT_UPLOAD_CONCURRENCY must be a positive integer."); + } + return args; +} + +async function main() { + const args = parseArgs(process.argv.slice(2)); + const [owner, repo] = args.repository.split("/", 2); + const release = JSON.parse(readFileSync(args.githubReleasePath, "utf8")); + const tag = release.tagName || release.tag_name; + if (!tag) { + throw new Error("GitHub release JSON is missing tagName."); + } + + const client = new AtomGitClient({ apiBase: args.apiBase, token: args.token, owner, repo }); + const atomRelease = await ensureRelease(client, release); + const existingAssets = atomGitAssetNames(atomRelease); + const assets = localAssets(args.assetsDir); + if (assets.length === 0) { + console.log("No release assets found to sync."); + return; + } + + const pendingAssets = assets.filter((assetPath) => { + const name = basename(assetPath); + if (args.skipExistingAssets && existingAssets.has(name)) { + console.log(`Skipping existing AtomGit asset: ${name}`); + return false; + } + return true; + }); + + console.log(`Uploading ${pendingAssets.length} asset(s) with concurrency ${args.concurrency}.`); + await mapWithConcurrency(pendingAssets, args.concurrency, (assetPath) => uploadAsset(client, tag, assetPath)); +} + +async function ensureRelease(client, githubRelease) { + const tag = githubRelease.tagName || githubRelease.tag_name; + const payload = { + tag_name: tag, + name: githubRelease.name || tag, + body: githubRelease.body || "", + target_commitish: githubRelease.targetCommitish || githubRelease.target_commitish || "", + prerelease: Boolean(githubRelease.isPrerelease || githubRelease.prerelease), + }; + + const existing = await client.getRelease(tag); + if (existing) { + console.log(`Updating existing AtomGit release: ${tag}`); + return client.updateRelease(tag, payload); + } + + console.log(`Creating AtomGit release: ${tag}`); + return client.createRelease(payload); +} + +async function uploadAsset(client, tag, filePath) { + const name = basename(filePath); + const size = statSync(filePath).size; + console.log(`Uploading ${name} (${size} bytes)`); + const uploadTarget = await client.getUploadTarget(tag, name); + const contentType = contentTypeFor(name); + const uploadHeaders = uploadTarget.headers.length > 0 + ? uploadTarget.headers + : [ + ["Authorization", `Bearer ${client.token}`], + ["X-Api-Version", "2023-02-21"], + ]; + const contentTypeHeader = headerValue(uploadHeaders, "Content-Type") || contentType; + const curlHeaders = uploadHeaders + .filter(([key]) => key.toLowerCase() !== "content-type") + .flatMap(([key, value]) => ["--header", `${key}: ${value}`]); + + // AtomGit returns a per-file upload URL plus required upload headers. + // Try raw PUT first and fall back to multipart POST for API-compatible deployments. + const putStatus = await runCurl([ + "--fail-with-body", + "--location", + "--show-error", + "--retry", + "3", + "--retry-delay", + "5", + "--request", + "PUT", + ...curlHeaders, + "--header", + `Content-Type: ${contentTypeHeader}`, + "--upload-file", + filePath, + uploadTarget.url, + ]); + if (putStatus === 0) { + return; + } + + console.warn(`PUT upload failed for ${name}; retrying as multipart POST.`); + const postStatus = await runCurl([ + "--fail-with-body", + "--location", + "--show-error", + "--retry", + "3", + "--retry-delay", + "5", + "--request", + "POST", + ...curlHeaders, + "--form", + `file=@${filePath};filename=${name};type=${contentTypeHeader}`, + uploadTarget.url, + ]); + if (postStatus !== 0) { + throw new Error(`Failed to upload ${name} to AtomGit.`); + } +} + +function runCurl(args) { + return new Promise((resolve, reject) => { + const child = spawn("curl", args, { stdio: "inherit" }); + child.once("error", reject); + child.once("close", (code) => resolve(code ?? 1)); + }); +} + +async function mapWithConcurrency(items, concurrency, worker) { + let nextIndex = 0; + async function runWorker() { + while (nextIndex < items.length) { + const index = nextIndex++; + await worker(items[index]); + } + } + await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, runWorker)); +} + +function localAssets(dir) { + return readdirSync(dir) + .map((name) => join(dir, name)) + .filter((path) => statSync(path).isFile()) + .sort((a, b) => statSync(a).size - statSync(b).size || basename(a).localeCompare(basename(b))); +} + +function atomGitAssetNames(release) { + const names = new Set(); + const groups = [ + release?.assets, + release?.attach_files, + release?.attachFiles, + release?.files, + release?.attachments, + ]; + for (const group of groups) { + if (!Array.isArray(group)) { + continue; + } + for (const item of group) { + const name = item?.name || item?.file_name || item?.filename || item?.title; + if (name) { + names.add(name); + } + } + } + return names; +} + +function contentTypeFor(name) { + if (name.endsWith(".json")) return "application/json"; + if (name.endsWith(".zip")) return "application/zip"; + if (name.endsWith(".gz") || name.endsWith(".tgz")) return "application/gzip"; + if (name.endsWith(".dmg")) return "application/x-apple-diskimage"; + if (name.endsWith(".exe") || name.endsWith(".msi")) return "application/octet-stream"; + if (name.endsWith(".deb")) return "application/vnd.debian.binary-package"; + if (name.endsWith(".rpm")) return "application/x-rpm"; + if (name.endsWith(".AppImage")) return "application/octet-stream"; + return "application/octet-stream"; +} + +function headerValue(headers, name) { + const normalizedName = name.toLowerCase(); + const entry = headers.find(([key]) => key.toLowerCase() === normalizedName); + return entry ? entry[1] : ""; +} + +class AtomGitClient { + constructor({ apiBase, token, owner, repo }) { + this.apiBase = apiBase.replace(/\/+$/, ""); + this.token = token; + this.owner = owner; + this.repo = repo; + } + + async getRelease(tag) { + const res = await this.request("GET", `/repos/${this.owner}/${this.repo}/releases/${encodeURIComponent(tag)}`, null, { + allow404: true, + }); + if (res.status === 404) { + return null; + } + return parseJsonResponse(res); + } + + async createRelease(payload) { + const res = await this.request("POST", `/repos/${this.owner}/${this.repo}/releases`, payload, { + acceptStatuses: [409, 422], + }); + if (res.status === 409 || res.status === 422) { + return this.updateRelease(payload.tag_name, payload); + } + return parseJsonResponse(res); + } + + async updateRelease(tag, payload) { + const res = await this.request("PATCH", `/repos/${this.owner}/${this.repo}/releases/${encodeURIComponent(tag)}`, payload); + return parseJsonResponse(res); + } + + async getUploadTarget(tag, fileName) { + const params = new URLSearchParams({ file_name: fileName }); + const res = await this.request("GET", `/repos/${this.owner}/${this.repo}/releases/${encodeURIComponent(tag)}/upload_url?${params}`); + const body = await parseJsonResponse(res); + if (body && typeof body === "object" && !Array.isArray(body)) { + console.log(`AtomGit upload_url response keys: ${Object.keys(body).sort().join(", ")}`); + if (body.headers && typeof body.headers === "object") { + console.log(`AtomGit upload header keys: ${Object.keys(body.headers).sort().join(", ")}`); + } + } + const uploadUrl = typeof body === "string" ? body : body.url || body.upload_url || body.uploadUrl; + if (!uploadUrl) { + throw new Error(`AtomGit upload_url response did not include an upload URL: ${JSON.stringify(body)}`); + } + console.log(`AtomGit upload target: ${sanitizeUrlForLog(uploadUrl)}`); + return { + url: uploadUrl, + headers: normalizeUploadHeaders(typeof body === "string" ? null : body.headers), + }; + } + + async request(method, path, body = null, requestOptions = {}) { + const headers = { + Accept: "application/json", + Authorization: `Bearer ${this.token}`, + "X-Api-Version": "2023-02-21", + }; + const fetchOptions = { method, headers }; + if (body) { + const cleanBody = Object.fromEntries(Object.entries(body).filter(([, value]) => value !== "")); + headers["Content-Type"] = "application/json"; + fetchOptions.body = JSON.stringify(cleanBody); + } + + const res = await fetch(`${this.apiBase}${path}`, fetchOptions); + const acceptedStatus = requestOptions.acceptStatuses?.includes(res.status); + if (!res.ok && !(requestOptions.allow404 && res.status === 404) && !acceptedStatus) { + const text = await res.text(); + throw new Error(`AtomGit API ${method} ${path} failed with ${res.status}: ${text}`); + } + return res; + } +} + +async function parseJsonResponse(res) { + const text = await res.text(); + if (!text.trim()) { + return {}; + } + try { + return JSON.parse(text); + } catch { + return text; + } +} + +function normalizeUploadHeaders(headers) { + if (!headers || typeof headers !== "object" || Array.isArray(headers)) { + return []; + } + return Object.entries(headers) + .filter(([key, value]) => key && value !== null && value !== undefined && value !== "") + .map(([key, value]) => [key, String(value)]); +} + +function sanitizeUrlForLog(value) { + try { + const url = new URL(value); + return `${url.origin}${url.pathname}`; + } catch { + return ""; + } +} + +main().catch((error) => { + console.error(error); + process.exit(1); +}); diff --git a/.github/scripts/sync-changelog.mjs b/.github/scripts/sync-changelog.mjs new file mode 100644 index 0000000..0676312 --- /dev/null +++ b/.github/scripts/sync-changelog.mjs @@ -0,0 +1,292 @@ +#!/usr/bin/env node + +import { createHash } from "node:crypto"; +import { writeFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +const REPO = "t8y2/dbx"; +const GITHUB_TOKEN = process.env.GITHUB_TOKEN || ""; +const DEEPSEEK_API_KEY = process.env.DEEPSEEK_API_KEY || ""; +const OUT_CN = "releases-cn.json"; +const OUT_EN = "releases-en.json"; +const LATEST_EN_OUT = "latest-en.json"; +const EN_CACHE_URL = process.env.CHANGELOG_EN_CACHE_URL || "https://dl.dbxio.com/changelog/releases-en.json"; + +const SECTION_MAP = { + 新功能: "added", + Added: "added", + 改进: "improved", + Improved: "improved", + 修复: "fixed", + Fixed: "fixed", + 变更: "changed", + Changed: "changed", + 移除: "removed", + Removed: "removed", +}; + +export async function fetchAllReleases() { + const releases = []; + let page = 1; + while (true) { + const res = await fetch(`https://api.github.com/repos/${REPO}/releases?per_page=100&page=${page}`, { headers: { Authorization: `token ${GITHUB_TOKEN}`, Accept: "application/vnd.github+json" } }); + if (!res.ok) throw new Error(`GitHub API ${res.status}: ${await res.text()}`); + const data = await res.json(); + if (data.length === 0) break; + releases.push(...data); + page++; + } + return releases; +} + +export function stripDownloadSection(body) { + const markers = ["### 下载安装", "### Download", "### 系统要求", "### System Requirements"]; + let idx = body.length; + for (const m of markers) { + const i = body.indexOf(m); + if (i !== -1 && i < idx) idx = i; + } + return body.slice(0, idx).trim(); +} + +// 剥离 release notes 里的 issue 引用 (closes #xxx),保留贡献者署名 (contributed by @xxx)。 +// 同时处理纯 closes 括号和混在 contributed by 括号里的 closes 片段。 +function stripIssueRefs(text) { + return text + // 纯 closes 括号整体去掉,如 (closes #123) 或 (closes #123, closes #456) + .replace(/\s*\(closes #\d+(?:,\s*closes #\d+)*\)/g, "") + // closes 在前、contributed by 在后,如 (closes #88, contributed by @xxx) → (contributed by @xxx) + .replace(/\(closes #\d+,\s*/g, "(") + // contributed by 在前、closes 在后,如 (contributed by @xxx, closes #123) → (contributed by @xxx) + .replace(/,\s*closes #\d+/g, ""); +} + +// 对整份 releases JSON 统一剥离 closes # 引用。cache 复用的英文翻译来自 R2, +// 可能是旧版脚本生成的(desc 仍含 closes #),在写文件前统一清理一次。 +function stripIssueRefsInReleases(json) { + for (const release of json.releases || []) { + for (const section of release.sections || []) { + for (const item of section.items || []) { + if (item.desc) item.desc = stripIssueRefs(item.desc); + } + } + } + return json; +} + +export function parseBody(body) { + const cleaned = stripDownloadSection(body); + const sections = []; + let current = null; + + for (const line of cleaned.split("\n")) { + const headerMatch = line.match(/^###\s+(.+)/); + if (headerMatch) { + const title = headerMatch[1].trim(); + const type = SECTION_MAP[title] || "other"; + current = { type, title, items: [] }; + sections.push(current); + continue; + } + + if (!current) continue; + + const itemMatch = line.match(/^-\s+\*\*(.+?)\*\*\s*[—–-]\s*(.+)/); + if (itemMatch) { + current.items.push({ title: itemMatch[1].trim(), desc: stripIssueRefs(itemMatch[2].trim()) }); + continue; + } + + const plainMatch = line.match(/^-\s+(.+)/); + if (plainMatch) { + current.items.push({ title: plainMatch[1].trim(), desc: "" }); + } + } + + return sections.filter((s) => s.items.length > 0); +} + +export function buildReleaseSourceHash(release) { + return createHash("sha256") + .update( + JSON.stringify({ + tag: release.tag_name, + name: release.name || release.tag_name, + publishedAt: release.published_at || "", + body: release.body || "", + }), + ) + .digest("hex"); +} + +export function buildReleasesJson(releases, now = new Date()) { + return { + updatedAt: now.toISOString(), + releases: releases + .filter((r) => !r.draft && !r.prerelease && !r.tag_name.startsWith("agents-")) + .sort((a, b) => new Date(b.published_at) - new Date(a.published_at)) + .map((r) => ({ + tag: r.tag_name, + name: r.name || r.tag_name, + date: r.published_at.slice(0, 10), + _sourceHash: buildReleaseSourceHash(r), + sections: parseBody(r.body || ""), + })), + }; +} + +function releaseToMarkdown(release) { + return release.sections + .map((s) => { + const items = s.items.map((i) => (i.desc ? `- **${i.title}** — ${i.desc}` : `- ${i.title}`)).join("\n"); + return `### ${s.title}\n${items}`; + }) + .join("\n\n"); +} + +// 给应用内更新提示用的英文 notes:只取最新一条版本(releases 已按 published_at 降序), +// 转成 md。version 用 tag(如 v0.5.47),应用端 normalize_version 后与 latest.json 的 version 校验。 +function buildLatestEnNotes(enReleasesJson) { + const latest = enReleasesJson.releases?.[0]; + if (!latest) return null; + return { + version: latest.tag, + notes: releaseToMarkdown(latest), + }; +} + +export async function fetchCachedEnglish({ cacheUrl = EN_CACHE_URL, fetchImpl = fetch } = {}) { + try { + const res = await fetchImpl(cacheUrl, { headers: { Accept: "application/json" } }); + if (!res.ok) { + console.warn(`English changelog cache unavailable: ${res.status}`); + return null; + } + return await res.json(); + } catch (err) { + console.warn(`English changelog cache unavailable: ${err.message}`); + return null; + } +} + +export async function translateToEnglish(cnJson, { cachedEnJson = null, deepseekApiKey = DEEPSEEK_API_KEY, fetchImpl = fetch, sleep = (ms) => new Promise((r) => setTimeout(r, ms)) } = {}) { + const cachedByTag = new Map((cachedEnJson?.releases || []).map((release) => [release.tag, release])); + const enReleases = []; + let reusedCount = 0; + let translatedCount = 0; + let skippedCount = 0; + + // 无 API key:仅复用 R2 上的英文缓存,未命中的条目回退中文以保证文件完整。 + // 这样本地(无 key)只要 R2 缓存新鲜也能产出英文 CHANGELOG;CI 有 key 时走正常翻译流程。 + if (!deepseekApiKey) { + console.warn("DEEPSEEK_API_KEY not set, falling back to cached English translations only"); + for (const release of cnJson.releases) { + const cachedRelease = cachedByTag.get(release.tag); + if (cachedRelease?._sourceHash === release._sourceHash) { + enReleases.push({ ...cachedRelease, name: release.name, date: release.date, _sourceHash: release._sourceHash }); + reusedCount++; + } else { + enReleases.push(release); + skippedCount++; + } + } + console.log(`English changelog cache reused ${reusedCount}, skipped ${skippedCount} (no API key)`); + return { updatedAt: cnJson.updatedAt, releases: enReleases }; + } + + for (const release of cnJson.releases) { + const cachedRelease = cachedByTag.get(release.tag); + if (cachedRelease?._sourceHash === release._sourceHash) { + enReleases.push({ + ...cachedRelease, + name: release.name, + date: release.date, + _sourceHash: release._sourceHash, + }); + reusedCount++; + continue; + } + + const sectionsText = releaseToMarkdown(release); + + if (!sectionsText.trim()) { + enReleases.push({ ...release, sections: [] }); + continue; + } + + const res = await fetchImpl("https://api.deepseek.com/chat/completions", { + method: "POST", + headers: { "Content-Type": "application/json", Authorization: `Bearer ${deepseekApiKey}` }, + body: JSON.stringify({ + model: "deepseek-chat", + messages: [ + { + role: "system", + content: + "You are a technical translator. Translate the following Chinese software changelog to English. Keep the exact markdown format (### headers, - bullet points, **bold** titles, — dashes). Only translate, do not add or remove content. Keep technical terms, product names, and contributor names unchanged.", + }, + { role: "user", content: sectionsText }, + ], + temperature: 0.1, + }), + }); + + if (!res.ok) { + console.error(`DeepSeek API error for ${release.tag}: ${res.status}`); + enReleases.push(release); + continue; + } + + const data = await res.json(); + const translated = data.choices?.[0]?.message?.content || ""; + const enSections = parseBody(translated); + enReleases.push({ ...release, sections: enSections.length > 0 ? enSections : release.sections }); + translatedCount++; + + await sleep(200); + } + + console.log(`English changelog cache reused ${reusedCount} release(s), translated ${translatedCount} release(s)`); + return { updatedAt: cnJson.updatedAt, releases: enReleases }; +} + +async function main() { + console.log("Fetching releases from GitHub..."); + const releases = await fetchAllReleases(); + console.log(`Found ${releases.length} releases`); + + const cnJson = buildReleasesJson(releases); + console.log(`Processed ${cnJson.releases.length} non-draft releases`); + + writeFileSync(OUT_CN, JSON.stringify(cnJson, null, 2)); + console.log(`Wrote ${OUT_CN}`); + + console.log("Fetching cached English changelog..."); + const cachedEnJson = await fetchCachedEnglish(); + + console.log("Translating to English..."); + const enJson = await translateToEnglish(cnJson, { cachedEnJson }); + if (enJson) { + // cache 复用的英文翻译可能来自旧版 R2 数据(desc 含 closes # 引用),统一剥离一次 + stripIssueRefsInReleases(enJson); + writeFileSync(OUT_EN, JSON.stringify(enJson, null, 2)); + console.log(`Wrote ${OUT_EN}`); + + // 应用内更新提示用的英文 notes(单条最新版本) + const latestEn = buildLatestEnNotes(enJson); + if (latestEn) { + writeFileSync(LATEST_EN_OUT, JSON.stringify(latestEn, null, 2)); + console.log(`Wrote ${LATEST_EN_OUT}`); + } + } + + console.log("Done!"); +} + +if (process.argv[1] && fileURLToPath(import.meta.url) === resolve(process.argv[1])) { + main().catch((err) => { + console.error(err); + process.exit(1); + }); +} diff --git a/.github/scripts/sync-cnb-release.mjs b/.github/scripts/sync-cnb-release.mjs new file mode 100644 index 0000000..52c355d --- /dev/null +++ b/.github/scripts/sync-cnb-release.mjs @@ -0,0 +1,167 @@ +#!/usr/bin/env node + +import { createReadStream, readdirSync, readFileSync, statSync } from "node:fs"; +import { basename, join } from "node:path"; + +const DEFAULT_API_BASE = "https://api.cnb.cool"; +const DEFAULT_REPOSITORY = "dbxio.com/dbx"; +const DEFAULT_CONCURRENCY = 3; +const MAX_ATTEMPTS = 4; + +async function main() { + const args = parseArgs(process.argv.slice(2)); + const githubRelease = JSON.parse(readFileSync(args.githubReleasePath, "utf8")); + const tag = githubRelease.tagName || githubRelease.tag_name; + if (!tag) throw new Error("GitHub release JSON is missing tagName."); + + const client = new CnbClient(args); + const release = await client.ensureRelease(tag, githubRelease); + const existingAssets = new Set((release.assets || []).map((asset) => asset.name)); + const assets = localAssets(args.assetsDir).filter((assetPath) => { + const name = basename(assetPath); + if (existingAssets.has(name)) { + console.log(`Skipping existing CNB asset: ${name}`); + return false; + } + return true; + }); + + console.log(`Uploading ${assets.length} CNB asset(s) with concurrency ${args.concurrency}.`); + await mapWithConcurrency(assets, args.concurrency, (assetPath) => uploadWithRetry(client, release.id, assetPath)); +} + +function parseArgs(argv) { + const args = { + apiBase: process.env.CNB_API_BASE || DEFAULT_API_BASE, + repository: process.env.CNB_REPOSITORY || DEFAULT_REPOSITORY, + token: process.env.CNB_TOKEN || "", + concurrency: Number.parseInt(process.env.CNB_UPLOAD_CONCURRENCY || `${DEFAULT_CONCURRENCY}`, 10), + githubReleasePath: "", + assetsDir: "", + }; + for (let index = 0; index < argv.length; index++) { + const arg = argv[index]; + if (arg === "--github-release") args.githubReleasePath = argv[++index]; + else if (arg === "--assets-dir") args.assetsDir = argv[++index]; + else throw new Error(`Unknown argument: ${arg}`); + } + if (!args.token) throw new Error("CNB_TOKEN is required."); + if (!args.githubReleasePath || !args.assetsDir) { + throw new Error("Usage: sync-cnb-release.mjs --github-release --assets-dir "); + } + if (!Number.isInteger(args.concurrency) || args.concurrency < 1) { + throw new Error("CNB_UPLOAD_CONCURRENCY must be a positive integer."); + } + return args; +} + +async function uploadWithRetry(client, releaseId, filePath) { + const name = basename(filePath); + for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { + try { + console.log(`Uploading ${name}, attempt ${attempt}/${MAX_ATTEMPTS}.`); + await client.uploadAsset(releaseId, filePath); + console.log(`Uploaded ${name}.`); + return; + } catch (error) { + if (attempt === MAX_ATTEMPTS) throw error; + const delayMs = 2 ** (attempt - 1) * 5000; + console.warn(`Upload failed for ${name}: ${error.message}; retrying in ${delayMs / 1000}s.`); + await new Promise((resolve) => setTimeout(resolve, delayMs)); + } + } +} + +class CnbClient { + constructor({ apiBase, repository, token }) { + this.apiBase = apiBase.replace(/\/+$/, ""); + this.repository = repository; + this.token = token; + } + + async ensureRelease(tag, githubRelease) { + const payload = { + tag_name: tag, + name: githubRelease.name || tag, + body: githubRelease.body || "", + prerelease: Boolean(githubRelease.isPrerelease || githubRelease.prerelease), + target_commitish: githubRelease.targetCommitish || githubRelease.target_commitish || "", + }; + const existing = await this.request("GET", `/${this.repository}/-/releases/tags/${encodeURIComponent(tag)}`, null, true); + if (!existing) return this.request("POST", `/${this.repository}/-/releases`, payload); + + // Keep release metadata aligned while preserving the existing asset list used for resumable uploads. + await this.request("PATCH", `/${this.repository}/-/releases/${existing.id}`, { + name: payload.name, + body: payload.body, + }); + return existing; + } + + async uploadAsset(releaseId, filePath) { + const size = statSync(filePath).size; + const target = await this.request("POST", `/${this.repository}/-/releases/${releaseId}/asset-upload-url`, { + asset_name: basename(filePath), + size, + overwrite: false, + }); + const uploadResponse = await fetch(target.upload_url, { + method: "PUT", + headers: { "Content-Type": "application/octet-stream", "Content-Length": `${size}` }, + body: createReadStream(filePath), + duplex: "half", + }); + if (!uploadResponse.ok) { + throw new Error(`CNB object upload failed with ${uploadResponse.status}: ${await uploadResponse.text()}`); + } + const verifyResponse = await fetch(decodeURIComponent(target.verify_url), { + method: "POST", + headers: this.headers(), + }); + if (!verifyResponse.ok) { + throw new Error(`CNB upload confirmation failed with ${verifyResponse.status}: ${await verifyResponse.text()}`); + } + } + + async request(method, path, body = null, allow404 = false) { + const response = await fetch(`${this.apiBase}${path}`, { + method, + headers: this.headers(body !== null), + body: body === null ? undefined : JSON.stringify(body), + }); + if (allow404 && response.status === 404) return null; + if (!response.ok) throw new Error(`CNB API ${method} ${path} failed with ${response.status}: ${await response.text()}`); + return response.status === 204 ? null : response.json(); + } + + headers(json = false) { + return { + Accept: "application/vnd.cnb.api+json", + Authorization: `Bearer ${this.token}`, + ...(json ? { "Content-Type": "application/json" } : {}), + }; + } +} + +function localAssets(dir) { + return readdirSync(dir) + .map((name) => join(dir, name)) + .filter((path) => statSync(path).isFile()) + .sort((left, right) => statSync(right).size - statSync(left).size || basename(left).localeCompare(basename(right))); +} + +async function mapWithConcurrency(items, concurrency, worker) { + let nextIndex = 0; + async function runWorker() { + while (nextIndex < items.length) { + const index = nextIndex++; + await worker(items[index]); + } + } + await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, runWorker)); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/.github/scripts/sync-project-triage.mjs b/.github/scripts/sync-project-triage.mjs new file mode 100644 index 0000000..29ece77 --- /dev/null +++ b/.github/scripts/sync-project-triage.mjs @@ -0,0 +1,389 @@ +#!/usr/bin/env node + +const DEFAULT_PROJECT_OWNER = "t8y2"; +const DEFAULT_PROJECT_NUMBER = 1; +const DEFAULT_REPO = "t8y2/dbx"; + +function parseArgs(argv) { + const args = {}; + for (let i = 0; i < argv.length; i++) { + const arg = argv[i]; + if (!arg.startsWith("--")) continue; + const key = arg.slice(2); + const next = argv[i + 1]; + if (!next || next.startsWith("--")) { + args[key] = "true"; + continue; + } + args[key] = next; + i++; + } + return args; +} + +const args = parseArgs(process.argv.slice(2)); +// PROJECT_TOKEN is a PAT with project scope; GH_TOKEN / GITHUB_TOKEN (auto-generated) handles repo access +const projectToken = process.env.PROJECT_TOKEN || process.env.GH_TOKEN || process.env.GITHUB_TOKEN || ""; +const repoTokens = [process.env.GH_TOKEN, process.env.GITHUB_TOKEN, process.env.PROJECT_TOKEN].filter(Boolean); +const repoToken = repoTokens[0] || ""; +const projectOwner = args["project-owner"] || process.env.PROJECT_OWNER || DEFAULT_PROJECT_OWNER; +const projectNumber = Number(args["project-number"] || process.env.PROJECT_NUMBER || DEFAULT_PROJECT_NUMBER); +const repo = args.repo || process.env.GITHUB_REPOSITORY || DEFAULT_REPO; +const [repoOwner, repoName] = repo.split("/"); +const issueNumber = args["issue-number"] ? Number(args["issue-number"]) : null; +const mode = args.backfill === "true" ? "backfill" : "issue"; +const eventAction = args["event-action"] || process.env.ISSUE_EVENT_ACTION || ""; + +if (!projectToken) { + throw new Error("PROJECT_TOKEN, GH_TOKEN, or GITHUB_TOKEN is required"); +} +if (!repoToken) { + throw new Error("GH_TOKEN or GITHUB_TOKEN is required for repository access"); +} + +if (!repoOwner || !repoName) { + throw new Error(`Invalid repo: ${repo}`); +} + +if (mode === "issue" && !issueNumber) { + throw new Error("--issue-number is required unless --backfill true is set"); +} + +function gqlString(value) { + return JSON.stringify(value); +} + +function gqlNumber(value) { + return Number(value); +} + +function gqlNullableString(value) { + return value == null ? "null" : JSON.stringify(value); +} + +async function graphql(query, token) { + const t = token || repoTokens[0]; + const resp = await fetch("https://api.github.com/graphql", { + method: "POST", + headers: { + Authorization: `bearer ${t}`, + "Content-Type": "application/json", + "User-Agent": "dbx-project-triage/1.0", + }, + body: JSON.stringify({ query }), + }); + + const payload = await resp.json(); + if (payload.errors) { + throw new Error(`GraphQL request failed: ${JSON.stringify(payload.errors)}`); + } + if (!resp.ok) { + throw new Error(`GraphQL request failed: HTTP ${resp.status} ${resp.statusText}`); + } + return payload.data; +} + +function triageName(issue) { + const labels = new Set(issue.labels.nodes.map((label) => label.name)); + if (labels.has("question")) return "Needs Info"; + if (issue.assignees.nodes.length > 0) return "Ready"; + return "Inbox"; +} + +function singleSelectOptionsByName(field) { + return Object.fromEntries((field?.options || []).map((option) => [option.name, option.id])); +} + +function singleSelectOptionId(options, name) { + const exact = options[name]; + if (exact) return exact; + const target = name.toLowerCase(); + const entry = Object.entries(options).find(([optionName]) => optionName.toLowerCase() === target); + return entry?.[1]; +} + +async function getProjectConfig() { + const query = ` + query { + user(login: ${gqlString(projectOwner)}) { + projectV2(number: ${gqlNumber(projectNumber)}) { + id + title + fields(first: 50) { + nodes { + ... on ProjectV2Field { + id + name + dataType + } + ... on ProjectV2SingleSelectField { + id + name + options { + id + name + } + } + } + } + } + } + } + `; + + const data = await graphql(query, projectToken); + const project = data.user?.projectV2; + if (!project) { + throw new Error(`Project ${projectOwner}#${projectNumber} not found`); + } + + const triageField = project.fields.nodes.find((field) => field.name === "Triage"); + if (!triageField) { + throw new Error(`Project ${project.title} is missing a Triage field`); + } + const statusField = project.fields.nodes.find((field) => field.name === "Status"); + + return { + id: project.id, + title: project.title, + triageFieldId: triageField.id, + triageOptions: singleSelectOptionsByName(triageField), + statusFieldId: statusField?.id || "", + statusOptions: singleSelectOptionsByName(statusField), + }; +} + +async function fetchIssue(number) { + const query = ` + query { + repository(owner: ${gqlString(repoOwner)}, name: ${gqlString(repoName)}) { + issue(number: ${gqlNumber(number)}) { + id + number + title + url + state + assignees(first: 20) { + nodes { + login + } + } + labels(first: 50) { + nodes { + name + } + } + projectItems(first: 50) { + nodes { + id + project { + id + number + title + owner { + __typename + ... on User { + login + } + ... on Organization { + login + } + } + } + fieldValueByName(name: "Triage") { + ... on ProjectV2ItemFieldSingleSelectValue { + name + optionId + } + } + statusValue: fieldValueByName(name: "Status") { + ... on ProjectV2ItemFieldSingleSelectValue { + name + optionId + } + } + } + } + } + } + } + `; + + const data = await graphql(query, repoToken); + const issue = data.repository?.issue; + if (!issue) { + throw new Error(`Issue #${number} not found in ${repo}`); + } + return issue; +} + +async function addItemToProject(projectId, contentId) { + const mutation = ` + mutation { + addProjectV2ItemById(input: { projectId: ${gqlString(projectId)}, contentId: ${gqlString(contentId)} }) { + item { + id + } + } + } + `; + + const data = await graphql(mutation, projectToken); + + return data.addProjectV2ItemById.item.id; +} + +async function updateTriage({ projectId, itemId, fieldId, optionId }) { + const mutation = ` + mutation { + updateProjectV2ItemFieldValue( + input: { + projectId: ${gqlString(projectId)} + itemId: ${gqlString(itemId)} + fieldId: ${gqlString(fieldId)} + value: { singleSelectOptionId: ${gqlString(optionId)} } + } + ) { + projectV2Item { + id + } + } + } + `; + + await graphql(mutation, projectToken); +} + +async function updateSingleSelectField({ projectId, itemId, fieldId, optionId }) { + const mutation = ` + mutation { + updateProjectV2ItemFieldValue( + input: { + projectId: ${gqlString(projectId)} + itemId: ${gqlString(itemId)} + fieldId: ${gqlString(fieldId)} + value: { singleSelectOptionId: ${gqlString(optionId)} } + } + ) { + projectV2Item { + id + } + } + } + `; + + await graphql(mutation, projectToken); +} + +async function syncIssue(projectConfig, number) { + const issue = await fetchIssue(number); + const targetTriage = triageName(issue); + const optionId = projectConfig.triageOptions[targetTriage]; + if (!optionId) { + throw new Error(`Missing Triage option: ${targetTriage}`); + } + + let projectItem = issue.projectItems.nodes.find( + (item) => + item.project.id === projectConfig.id || + (item.project.number === projectNumber && item.project.owner?.login === projectOwner), + ); + + if (!projectItem) { + // 只有被 assign 的 issue 才进入 project 看板;未分配的留在 issue 列表, + // 等 assigned 事件触发后再纳入。已在 project 里的 issue 仍随 label/assign 变化同步。 + if (issue.assignees.nodes.length === 0) { + console.log(`Issue #${issue.number} has no assignee, skip adding to project`); + return; + } + const itemId = await addItemToProject(projectConfig.id, issue.id); + projectItem = { + id: itemId, + fieldValueByName: null, + statusValue: null, + }; + console.log(`Added issue #${issue.number} to ${projectConfig.title}`); + } + + const currentOptionId = projectItem.fieldValueByName?.optionId || ""; + if (currentOptionId !== optionId) { + await updateTriage({ + projectId: projectConfig.id, + itemId: projectItem.id, + fieldId: projectConfig.triageFieldId, + optionId, + }); + console.log(`Set issue #${issue.number} triage to ${targetTriage}`); + } else { + console.log(`Issue #${issue.number} triage already ${targetTriage}`); + } + + if (eventAction === "assigned" && issue.state === "OPEN") { + const targetStatus = "In Progress"; + const statusOptionId = singleSelectOptionId(projectConfig.statusOptions, targetStatus); + if (!projectConfig.statusFieldId) { + throw new Error(`Project ${projectConfig.title} is missing a Status field`); + } + if (!statusOptionId) { + throw new Error(`Missing Status option: ${targetStatus}`); + } + + const currentStatusOptionId = projectItem.statusValue?.optionId || ""; + if (currentStatusOptionId !== statusOptionId) { + await updateSingleSelectField({ + projectId: projectConfig.id, + itemId: projectItem.id, + fieldId: projectConfig.statusFieldId, + optionId: statusOptionId, + }); + console.log(`Set issue #${issue.number} status to ${targetStatus}`); + } else { + console.log(`Issue #${issue.number} status already ${targetStatus}`); + } + } +} + +async function fetchOpenIssueNumbers() { + const numbers = []; + let cursor = null; + while (true) { + const query = ` + query { + repository(owner: ${gqlString(repoOwner)}, name: ${gqlString(repoName)}) { + issues(first: 100, after: ${gqlNullableString(cursor)}, states: OPEN, orderBy: { field: CREATED_AT, direction: ASC }) { + nodes { + number + } + pageInfo { + endCursor + hasNextPage + } + } + } + } + `; + const data = await graphql(query, repoToken); + const issues = data.repository?.issues; + if (!issues) break; + numbers.push(...issues.nodes.map((issue) => issue.number)); + if (!issues.pageInfo.hasNextPage) break; + cursor = issues.pageInfo.endCursor; + } + return numbers; +} + +async function main() { + const projectConfig = await getProjectConfig(); + if (mode === "backfill") { + const numbers = await fetchOpenIssueNumbers(); + console.log(`Backfilling ${numbers.length} open issues into ${projectConfig.title}`); + for (const number of numbers) { + await syncIssue(projectConfig, number); + } + return; + } + + await syncIssue(projectConfig, issueNumber); +} + +await main(); diff --git a/.github/workflows/1panel-appstore.yml b/.github/workflows/1panel-appstore.yml new file mode 100644 index 0000000..213864e --- /dev/null +++ b/.github/workflows/1panel-appstore.yml @@ -0,0 +1,59 @@ +name: 1Panel App Store + +on: + workflow_dispatch: + inputs: + version: + description: "Version to submit (e.g. 0.5.3)" + required: true + +jobs: + submit: + runs-on: ubuntu-latest + env: + REPO_OWNER: t8y2 + steps: + - uses: actions/checkout@v5 + + - name: Submit to 1Panel App Store + env: + TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} + GH_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} + run: | + VERSION="${{ github.event.inputs.version }}" + + git clone --depth 1 -b localApps \ + "https://x-access-token:${TAP_GITHUB_TOKEN}@github.com/${REPO_OWNER}/appstore-1panel.git" \ + appstore + cd appstore + + APP_DIR="apps/dbx" + mkdir -p "${APP_DIR}/latest" + + cp "${{ github.workspace }}/deploy/1panel/data.yml" "${APP_DIR}/data.yml" + cp "${{ github.workspace }}/deploy/1panel/README.md" "${APP_DIR}/README.md" + if [ -f "${{ github.workspace }}/deploy/1panel/logo.png" ]; then + cp "${{ github.workspace }}/deploy/1panel/logo.png" "${APP_DIR}/logo.png" + fi + cp -r "${{ github.workspace }}/deploy/1panel/latest/." "${APP_DIR}/latest/" + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + BRANCH="app/dbx-${VERSION}" + git checkout -b "${BRANCH}" + git add "${APP_DIR}" + + if git diff --cached --quiet; then + echo "1Panel app store is already up to date." + else + git commit -m "feat(dbx): release ${VERSION}" + git push origin "${BRANCH}" + gh pr create \ + --repo "okxlin/appstore" \ + --head "${REPO_OWNER}:${BRANCH}" \ + --title "feat(dbx): release ${VERSION}" \ + --body "Automated release of DBX v${VERSION}" \ + --base localApps + echo "::notice::1Panel App Store PR created for ${VERSION}" + fi diff --git a/.github/workflows/agents-release.yml b/.github/workflows/agents-release.yml new file mode 100644 index 0000000..dfab86c --- /dev/null +++ b/.github/workflows/agents-release.yml @@ -0,0 +1,620 @@ +name: Agents Release + +on: + push: + tags: ["agents-v*"] + +permissions: + contents: write + +concurrency: + group: dbx-release-main + cancel-in-progress: false + +jobs: + bump-versions: + runs-on: ubuntu-latest + outputs: + versions: ${{ steps.bump.outputs.versions }} + prev_versions: ${{ steps.bump.outputs.prev_versions }} + prev_tag: ${{ steps.bump.outputs.prev_tag }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Detect changes and bump versions + id: bump + shell: bash + run: | + LEGACY_REPO="https://github.com/t8y2/dbx-agents.git" + LEGACY_BASE_TAG="v0.2.33" + PREV_TAG=$(git tag --sort=-creatordate | grep '^agents-v' | sed -n '2p') + SKIP_BUMP=false + MIGRATED_FIRST_RELEASE=false + PREV_VERSIONS_FILE="" + + if [ -z "$PREV_TAG" ]; then + echo "No previous agents-v tag found; treating this as the first migrated agents release" + PREV_TAG=$(git rev-list --max-parents=0 HEAD) + + TMP_LEGACY="$(mktemp -d)" + git clone --depth 1 --branch "$LEGACY_BASE_TAG" "$LEGACY_REPO" "$TMP_LEGACY" + PREV_VERSIONS_FILE="$(mktemp)" + cp "$TMP_LEGACY/versions.json" "$PREV_VERSIONS_FILE" + rm -rf "$TMP_LEGACY" + + SKIP_BUMP=true + MIGRATED_FIRST_RELEASE=true + fi + echo "Comparing $PREV_TAG..HEAD" + + ARGS=(--prev-tag "$PREV_TAG" --migrated-first-release "$MIGRATED_FIRST_RELEASE" --write) + if [ "$SKIP_BUMP" = "true" ]; then + ARGS+=(--skip-bump) + fi + if [ -n "$PREV_VERSIONS_FILE" ]; then + ARGS+=(--prev-versions-file "$PREV_VERSIONS_FILE") + fi + + node .github/scripts/bump-agent-versions.mjs "${ARGS[@]}" + + if ! git diff --quiet -- agents/versions.json; then + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add agents/versions.json + git commit -m "chore: bump module versions [skip ci]" + git fetch origin main --no-tags + git rebase origin/main + git push origin HEAD:main + fi + + build-agents: + needs: [bump-versions] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: | + 8 + 21 + - uses: gradle/actions/setup-gradle@v4 + - run: ./gradlew shadowJar --parallel + working-directory: agents + - run: python3 scripts/validate_agent_jars.py + working-directory: agents + - uses: actions/upload-artifact@v4 + with: + name: agent-jars + path: "agents/drivers/*/build/libs/dbx-agent-*.jar" + + build-oracle-native: + needs: [bump-versions] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: "1.22.x" + - name: Test Oracle native agent + working-directory: agents/drivers/oracle-go + run: go test ./... + - name: Cross-compile Oracle native agent + shell: bash + run: | + mkdir -p release-native + cd agents/drivers/oracle-go + declare -A TARGETS=( + ["macos-aarch64"]="darwin/arm64" + ["macos-x64"]="darwin/amd64" + ["linux-aarch64"]="linux/arm64" + ["linux-x64"]="linux/amd64" + ["windows-aarch64"]="windows/arm64" + ["windows-x64"]="windows/amd64" + ) + for platform in "${!TARGETS[@]}"; do + IFS=/ read -r goos goarch <<< "${TARGETS[$platform]}" + output="../../../release-native/dbx-agent-oracle-${platform}" + if [[ "$goos" == "windows" ]]; then + output="${output}.exe" + fi + echo "Building $platform ($goos/$goarch)" + CGO_ENABLED=0 GOOS="$goos" GOARCH="$goarch" go build -trimpath -ldflags="-s -w" -o "$output" . + done + ls -lh ../../../release-native + - uses: actions/upload-artifact@v4 + with: + name: oracle-native + path: "release-native/dbx-agent-oracle-*" + + build-xugu-native: + needs: [bump-versions] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: "1.22.x" + - name: Test Xugu native agent + working-directory: agents/drivers/xugu + run: GONOSUMDB=gitee.com/XuguDB/go-xugu-driver go test ./... + - name: Cross-compile Xugu native agent + shell: bash + run: | + mkdir -p release-native + cd agents/drivers/xugu + declare -A TARGETS=( + ["macos-aarch64"]="darwin/arm64" + ["macos-x64"]="darwin/amd64" + ["linux-aarch64"]="linux/arm64" + ["linux-x64"]="linux/amd64" + ["windows-aarch64"]="windows/arm64" + ["windows-x64"]="windows/amd64" + ) + for platform in "${!TARGETS[@]}"; do + IFS=/ read -r goos goarch <<< "${TARGETS[$platform]}" + output="../../../release-native/dbx-agent-xugu-${platform}" + if [[ "$goos" == "windows" ]]; then + output="${output}.exe" + fi + echo "Building $platform ($goos/$goarch)" + GONOSUMDB=gitee.com/XuguDB/go-xugu-driver CGO_ENABLED=0 GOOS="$goos" GOARCH="$goarch" go build -trimpath -ldflags="-s -w" -o "$output" . + done + ls -lh ../../../release-native + - uses: actions/upload-artifact@v4 + with: + name: xugu-native + path: "release-native/dbx-agent-xugu-*" + + build-jre: + runs-on: ubuntu-latest + strategy: + matrix: + include: + - jre-key: "21" + java-version: "21" + modules: "java.base,java.sql,java.sql.rowset,java.naming,java.management,java.desktop,java.security.jgss,java.security.sasl,jdk.security.auth,jdk.security.jgss,jdk.charsets,jdk.unsupported,java.scripting,java.compiler" + steps: + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: ${{ matrix.java-version }} + - name: Build JRE for all platforms + shell: bash + run: | + MODULES="${{ matrix.modules }}" + JLINK_OPTS="--strip-debug --no-header-files --no-man-pages --compress=zip-6" + JRE_KEY="${{ matrix.jre-key }}" + + jlink --add-modules $MODULES $JLINK_OPTS --output dbx-jre + tar czf dbx-jre-${JRE_KEY}-linux-x64.tar.gz dbx-jre + rm -rf dbx-jre + + ADOPTIUM="https://api.adoptium.net/v3/binary/latest/${{ matrix.java-version }}/ga" + declare -A PLATFORMS=( + ["macos-aarch64"]="mac/aarch64" + ["macos-x64"]="mac/x64" + ["linux-aarch64"]="linux/aarch64" + ["windows-x64"]="windows/x64" + ) + for platform in "${!PLATFORMS[@]}"; do + os_arch="${PLATFORMS[$platform]}" + echo "=== Downloading JDK for $platform ($os_arch) ===" + if [[ "$platform" == windows-* ]]; then + curl -L -o jdk-$platform.zip "$ADOPTIUM/$os_arch/jdk/hotspot/normal/eclipse?project=jdk" + mkdir -p jdk-$platform + unzip -q jdk-$platform.zip -d jdk-$platform-tmp + mv jdk-$platform-tmp/*/* jdk-$platform/ || mv jdk-$platform-tmp/* jdk-$platform/ + rm -rf jdk-$platform-tmp jdk-$platform.zip + else + curl -L -o jdk-$platform.tar.gz "$ADOPTIUM/$os_arch/jdk/hotspot/normal/eclipse?project=jdk" + mkdir -p jdk-$platform + tar xzf jdk-$platform.tar.gz -C jdk-$platform --strip-components=1 + rm -f jdk-$platform.tar.gz + fi + JAVA_HOME_CROSS="jdk-$platform" + if [ -d "$JAVA_HOME_CROSS/Contents/Home/jmods" ]; then + JMODS="$JAVA_HOME_CROSS/Contents/Home/jmods" + else + JMODS="$JAVA_HOME_CROSS/jmods" + fi + LLVM_OBJCOPY=$(ls /usr/bin/llvm-objcopy-* 2>/dev/null | sort -V | tail -1) + if [ -z "$LLVM_OBJCOPY" ]; then LLVM_OBJCOPY=$(which llvm-objcopy 2>/dev/null || true); fi + CROSS_OPTS="" + if [ -n "$LLVM_OBJCOPY" ]; then + CROSS_OPTS="--strip-native-debug-symbols=objcopy=$LLVM_OBJCOPY" + else + CROSS_OPTS="--disable-plugin strip-native-debug-symbols" + fi + jlink --module-path "$JMODS" --add-modules $MODULES $JLINK_OPTS $CROSS_OPTS --output dbx-jre + tar czf dbx-jre-${JRE_KEY}-$platform.tar.gz dbx-jre + rm -rf dbx-jre jdk-$platform + done + + ls -lh dbx-jre-*.tar.gz + - uses: actions/upload-artifact@v4 + with: + name: jre-${{ matrix.jre-key }} + path: "dbx-jre-*.tar.gz" + + release: + needs: [bump-versions, build-agents, build-oracle-native, build-xugu-native, build-jre] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Flatten artifacts + run: | + mkdir -p release + find artifacts/agent-jars -name '*.jar' -exec cp {} release/ \; + find artifacts/oracle-native -type f -name 'dbx-agent-oracle-*' -exec cp {} release/ \; + find artifacts/xugu-native -type f -name 'dbx-agent-xugu-*' -exec cp {} release/ \; + find artifacts -name 'dbx-jre-*.tar.gz' -exec cp {} release/ \; + ls -lh release/ + + - name: Generate agent-registry.json + env: + MODULE_VERSIONS: ${{ needs.bump-versions.outputs.versions }} + run: | + TAG="${GITHUB_REF_NAME}" + REPO="${GITHUB_REPOSITORY}" + RELEASE_VERSION="${TAG#agents-v}" + + get_module_version() { + local name="$1" + echo "$MODULE_VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$name','${RELEASE_VERSION}'))" + } + + generate_jar_entry() { + local name="$1" label="$2" file="$3" jre_key="$4" version="$5" external_driver="$6" native_json="$7" + local sha256=$(sha256sum "$file" | cut -d' ' -f1) + local size=$(stat -c%s "$file") + local url="https://github.com/${REPO}/releases/download/${TAG}/$(basename $file)" + local native_line="" + if [ -n "$native_json" ]; then + native_line=" \"native\": {${native_json} + }," + fi + cat < release/agent-registry.json < /dev/null + echo "=== agent-registry.json ===" + cat release/agent-registry.json + + - name: Build offline ZIP bundles + run: bash agents/scripts/build_offline_zip.sh release + + - name: Generate release notes + env: + MODULE_VERSIONS: ${{ needs.bump-versions.outputs.versions }} + PREV_VERSIONS: ${{ needs.bump-versions.outputs.prev_versions }} + PREV_TAG: ${{ needs.bump-versions.outputs.prev_tag }} + run: | + NOTES="" + DRIVER_NAMES=() + for f in release/dbx-agent-*.jar; do + DRIVER_NAMES+=("$(basename "$f" .jar | sed 's/dbx-agent-//')") + done + for name in oracle xugu; do + [ -f "release/dbx-agent-${name}.jar" ] && continue + compgen -G "release/dbx-agent-${name}-*" > /dev/null && DRIVER_NAMES+=("$name") + done + + native_only_label() { + local name="$1" + case "$name" in + oracle) echo "Oracle" ;; + xugu) echo "虚谷 XuguDB" ;; + *) echo "$name" ;; + esac + } + + for name in "${DRIVER_NAMES[@]}"; do + old_ver=$(echo "$PREV_VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$name',''))") + new_ver=$(echo "$MODULE_VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$name',''))") + [ "$old_ver" = "$new_ver" ] && continue + + jar_file="release/dbx-agent-${name}.jar" + if [ -f "$jar_file" ]; then + label=$(unzip -p "$jar_file" META-INF/MANIFEST.MF | awk -F': ' 'BEGIN{IGNORECASE=1} /^Agent-Label:/ {sub(/\r$/, "", $2); print $2; exit}' || echo "$name") + [ -z "$label" ] && label="$name" + else + label=$(native_only_label "$name") + fi + + NOTES="${NOTES}### ${label} (${old_ver} → ${new_ver})"$'\n' + if [ "$name" = "oracle" ]; then + LOG_PATH="agents/drivers/oracle-go/" + elif [ -d "agents/drivers/$name" ]; then + LOG_PATH="agents/drivers/$name/" + else + LOG_PATH="agents/$name/" + fi + LOG_PATHS=("$LOG_PATH") + while IFS= read -r line; do + [ -n "$line" ] && NOTES="${NOTES}- ${line}"$'\n' + done < <(git log --oneline "$PREV_TAG"..HEAD -- "${LOG_PATHS[@]}" | sed 's/^[0-9a-f]* //') + + # include common changes if any + while IFS= read -r line; do + [ -n "$line" ] && NOTES="${NOTES}- ${line}"$'\n' + done < <(git log --oneline "$PREV_TAG"..HEAD -- agents/common/ | sed 's/^[0-9a-f]* //') + NOTES="${NOTES}"$'\n' + done + + if [ -z "$NOTES" ]; then + NOTES="Routine rebuild, no agent-specific changes."$'\n' + fi + + printf "## 更新内容\n\n%s" "$NOTES" > RELEASE_NOTES.md + echo "=== Release Notes ===" + cat RELEASE_NOTES.md + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + files: release/* + body_path: RELEASE_NOTES.md + make_latest: false + + - name: Update agents-latest GitHub release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + git tag -f agents-latest "$GITHUB_SHA" + git push origin refs/tags/agents-latest --force + + if gh release view agents-latest --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then + gh release upload agents-latest release/* --repo "$GITHUB_REPOSITORY" --clobber + gh release edit agents-latest \ + --repo "$GITHUB_REPOSITORY" \ + --title "Agents latest" \ + --notes "Moving release for the latest DBX agent registry, driver artifacts, managed JRE archives, and offline bundles." \ + --latest=false + else + gh release create agents-latest release/* \ + --repo "$GITHUB_REPOSITORY" \ + --title "Agents latest" \ + --notes "Moving release for the latest DBX agent registry, driver artifacts, managed JRE archives, and offline bundles." \ + --latest=false + fi + + - name: Upload to R2 + env: + MODULE_VERSIONS: ${{ needs.bump-versions.outputs.versions }} + PREV_VERSIONS: ${{ needs.bump-versions.outputs.prev_versions }} + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + R2_ENDPOINT: "https://${{ secrets.R2_ACCOUNT_ID }}.r2.cloudflarestorage.com" + R2_BUCKET: "s3://${{ secrets.R2_BUCKET_NAME }}" + run: | + # Always upload agent-registry.json + aws s3 cp release/agent-registry.json \ + "$R2_BUCKET/agents/agent-registry.json" \ + --endpoint-url "$R2_ENDPOINT" + echo "Uploaded agent-registry.json" + + # Upload only changed driver JARs + UPLOADED=0 + SKIPPED=0 + for f in release/dbx-agent-*.jar; do + [ ! -f "$f" ] && continue + name=$(basename "$f" .jar | sed 's/dbx-agent-//') + old_ver=$(echo "$PREV_VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$name',''))" 2>/dev/null) + new_ver=$(echo "$MODULE_VERSIONS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('$name',''))" 2>/dev/null) + if [ "$old_ver" = "$new_ver" ] && [ -n "$old_ver" ]; then + echo "Skip $(basename $f) (unchanged $old_ver)" + SKIPPED=$((SKIPPED + 1)) + continue + fi + aws s3 cp "$f" \ + "$R2_BUCKET/agents/drivers/$(basename $f)" \ + --endpoint-url "$R2_ENDPOINT" + echo "Uploaded $(basename $f) ($old_ver → $new_ver)" + UPLOADED=$((UPLOADED + 1)) + done + echo "Drivers: $UPLOADED uploaded, $SKIPPED skipped" + + for f in release/dbx-agent-*; do + [ -f "$f" ] || continue + [[ "$f" != *.jar ]] || continue + aws s3 cp "$f" \ + "$R2_BUCKET/agents/drivers/$(basename $f)" \ + --endpoint-url "$R2_ENDPOINT" + echo "Uploaded $(basename $f)" + done + + # Upload JRE — always overwrite to ensure latest modules + for f in release/dbx-jre-*.tar.gz; do + [ ! -f "$f" ] && continue + key="agents/jre/$(basename $f)" + aws s3 cp "$f" "$R2_BUCKET/$key" --endpoint-url "$R2_ENDPOINT" + echo "Uploaded $(basename $f)" + done + + sync-release-to-cnb: + name: Sync agents releases to CNB + needs: release + if: ${{ always() && needs.release.result == 'success' }} + runs-on: ubuntu-latest + continue-on-error: true + strategy: + fail-fast: false + matrix: + tag: ["${{ github.ref_name }}", "agents-latest"] + steps: + - name: Sync release assets to CNB + env: + TAG_NAME: ${{ matrix.tag }} + GITHUB_REPOSITORY: ${{ github.repository }} + GITHUB_USERNAME: ${{ github.repository_owner }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CNB_REPOSITORY: dbxio.com/dbx + CNB_USERNAME: cnb + CNB_TOKEN: ${{ secrets.CNB_TOKEN }} + run: | + set -euo pipefail + wget -q https://cnb.cool/znb/mpgrm/-/releases/download/v0.1.0/mpgrm_linux_amd64.tar.gz + tar -xf mpgrm_linux_amd64.tar.gz + chmod +x mpgrm + ./mpgrm releases sync \ + --repo "https://github.com/${GITHUB_REPOSITORY}.git" \ + --target-repo "https://cnb.cool/${CNB_REPOSITORY}.git" \ + --tags "${TAG_NAME}" + + sync-release-to-atomgit: + name: Sync agents releases to AtomGit + needs: release + if: ${{ always() && needs.release.result == 'success' }} + runs-on: ubuntu-latest + continue-on-error: true + strategy: + fail-fast: false + matrix: + tag: ["${{ github.ref_name }}", "agents-latest"] + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + - name: Sync release assets to AtomGit + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG_NAME: ${{ matrix.tag }} + GITHUB_REPOSITORY: ${{ github.repository }} + ATOMGIT_TOKEN: ${{ secrets.ATOMGIT_TOKEN }} + ATOMGIT_REPOSITORY: t8y2/dbx + run: | + set -euo pipefail + git fetch origin "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}" --force + git remote add atomgit "https://t8y2:${ATOMGIT_TOKEN}@atomgit.com/t8y2/dbx.git" + git push atomgit "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}" --force + mkdir -p "$RUNNER_TEMP/github-release" "$RUNNER_TEMP/release-assets" + gh release view "$TAG_NAME" --repo "$GITHUB_REPOSITORY" \ + --json tagName,name,body,targetCommitish,isPrerelease,isDraft,assets \ + > "$RUNNER_TEMP/github-release/release.json" + gh release download "$TAG_NAME" --repo "$GITHUB_REPOSITORY" \ + --dir "$RUNNER_TEMP/release-assets" --clobber + node .github/scripts/sync-atomgit-release.mjs \ + --github-release "$RUNNER_TEMP/github-release/release.json" \ + --assets-dir "$RUNNER_TEMP/release-assets" \ + ${{ matrix.tag == 'agents-latest' && '--replace-assets' || '' }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5fa41de --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,248 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + RUSTFLAGS: -C debuginfo=line-tables-only + +jobs: + frontend: + needs: changes + if: needs.changes.outputs.frontend == 'true' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v5 + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + cache: pnpm + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev libsecret-1-dev + + - name: Install frontend dependencies + run: pnpm install --frozen-lockfile + + - name: Frontend check + run: pnpm check + + - name: Node package tests + run: pnpm test:packages + + - name: Node package publish dry run + run: pnpm publish:dry-run + + rust-fmt-clippy: + needs: changes + if: needs.changes.outputs.rust == 'true' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v5 + + - name: Free disk space + run: | + sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android /usr/local/.ghcup || true + docker system prune -af || true + df -h + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev libsecret-1-dev + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + components: clippy, rustfmt + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: "./ -> target" + shared-key: ci-rust-fmt-clippy-x86_64-unknown-linux-gnu + + - name: Cargo fmt check + run: cargo fmt --check + + - name: Cargo clippy + run: cargo clippy --workspace --locked --all-targets + + rust-test: + needs: changes + if: needs.changes.outputs.rust == 'true' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v5 + + - name: Free disk space + run: | + sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android /usr/local/.ghcup || true + docker system prune -af || true + df -h + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev libsecret-1-dev + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: "./ -> target" + shared-key: ci-rust-test-x86_64-unknown-linux-gnu + + - name: Cargo test + run: cargo test --workspace --locked + + rust: + needs: [changes, rust-fmt-clippy, rust-test] + if: always() && needs.changes.outputs.rust == 'true' + runs-on: ubuntu-22.04 + steps: + - name: Check Rust jobs + run: | + if [ "${{ needs.rust-fmt-clippy.result }}" != "success" ]; then + echo "rust-fmt-clippy result: ${{ needs.rust-fmt-clippy.result }}" + exit 1 + fi + if [ "${{ needs.rust-test.result }}" != "success" ]; then + echo "rust-test result: ${{ needs.rust-test.result }}" + exit 1 + fi + + jdbc: + needs: changes + if: needs.changes.outputs.jdbc == 'true' + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Setup Java + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: "17" + cache: maven + + - name: JDBC plugin version guard + env: + BASE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }} + run: | + if [ -z "$BASE_SHA" ] || echo "$BASE_SHA" | grep -Eq '^0+$'; then + BASE_SHA="HEAD~1" + fi + node .github/scripts/check-jdbc-plugin-version.mjs "$BASE_SHA" HEAD + + - name: JDBC plugin package check + run: ./plugins/jdbc/package.sh + + changes: + runs-on: ubuntu-22.04 + outputs: + frontend: ${{ steps.filter.outputs.frontend }} + rust: ${{ steps.filter.outputs.rust }} + jdbc: ${{ steps.filter.outputs.jdbc }} + agents: ${{ steps.filter.outputs.agents }} + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Detect changed areas + uses: dorny/paths-filter@v3 + id: filter + with: + filters: | + frontend: + - 'apps/desktop/**' + - 'packages/**' + - 'pnpm-lock.yaml' + - 'package.json' + - '.oxfmtrc.json' + - 'scripts/run-check.mjs' + - '.github/workflows/ci.yml' + rust: + - 'crates/**' + - 'src-tauri/**' + - 'Cargo.toml' + - 'Cargo.lock' + - 'rust-toolchain*' + - '.github/workflows/ci.yml' + jdbc: + - 'plugins/jdbc/**' + agents: + - 'agents/**' + + agents: + needs: changes + if: needs.changes.outputs.agents == 'true' + runs-on: ubuntu-22.04 + defaults: + run: + working-directory: agents + steps: + - uses: actions/checkout@v5 + + - name: Setup Java + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: | + 8 + 21 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: "1.22.x" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Agent script tests + run: python3 -m unittest discover -s scripts -p '*_test.py' + + - name: Agent validation + run: python3 scripts/validate_agents.py + + - name: Oracle native agent tests + run: go test ./... + working-directory: agents/drivers/oracle-go + + - name: Xugu native agent tests + run: GONOSUMDB=gitee.com/XuguDB/go-xugu-driver go test ./... + working-directory: agents/drivers/xugu + + - name: Oracle native agent build + run: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o /tmp/dbx-agent-oracle-linux-x64 . + working-directory: agents/drivers/oracle-go + + - name: Xugu native agent build + run: GONOSUMDB=gitee.com/XuguDB/go-xugu-driver CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o /tmp/dbx-agent-xugu-linux-x64 . + working-directory: agents/drivers/xugu + + - name: Java agent tests and packages + run: ./gradlew test shadowJar --continue + + - name: Agent jar validation + run: python3 scripts/validate_agent_jars.py diff --git a/.github/workflows/docker-dev.yml b/.github/workflows/docker-dev.yml new file mode 100644 index 0000000..2aa9958 --- /dev/null +++ b/.github/workflows/docker-dev.yml @@ -0,0 +1,126 @@ +name: Docker Dev + +on: + workflow_dispatch: + +env: + CNB_REPOSITORY: "dbxio.com/dbx" + CNB_REGISTRY: "docker.cnb.cool" + +jobs: + docker: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: [linux/amd64, linux/arm64] + steps: + - uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to CNB Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.CNB_REGISTRY }} + username: cnb + password: ${{ secrets.CNB_TOKEN }} + + - name: Build and push Docker Hub by digest + id: build-dockerhub + uses: docker/build-push-action@v6 + with: + context: . + file: deploy/Dockerfile + platforms: ${{ matrix.platform }} + outputs: type=image,name=${{ secrets.DOCKERHUB_USERNAME }}/dbx,push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha,scope=${{ matrix.platform }}-dev + cache-to: type=gha,scope=${{ matrix.platform }}-dev,mode=max + + - name: Build and push CNB by digest + id: build-cnb + uses: docker/build-push-action@v6 + with: + context: . + file: deploy/Dockerfile + platforms: ${{ matrix.platform }} + outputs: type=image,name=${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha,scope=${{ matrix.platform }}-dev + + - name: Export digests + run: | + mkdir -p /tmp/digests/dockerhub /tmp/digests/cnb + dockerhub_digest="${{ steps.build-dockerhub.outputs.digest }}" + cnb_digest="${{ steps.build-cnb.outputs.digest }}" + touch "/tmp/digests/dockerhub/${dockerhub_digest#sha256:}" + touch "/tmp/digests/cnb/${cnb_digest#sha256:}" + + - name: Upload Docker Hub digest + uses: actions/upload-artifact@v7 + with: + name: dockerhub-digests-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }} + path: /tmp/digests/dockerhub/* + if-no-files-found: error + retention-days: 1 + + - name: Upload CNB digest + uses: actions/upload-artifact@v7 + with: + name: cnb-digests-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }} + path: /tmp/digests/cnb/* + if-no-files-found: error + retention-days: 1 + + docker-manifest: + needs: docker + runs-on: ubuntu-latest + steps: + - name: Download Docker Hub digests + uses: actions/download-artifact@v8 + with: + path: /tmp/digests/dockerhub + pattern: dockerhub-digests-* + merge-multiple: true + + - name: Download CNB digests + uses: actions/download-artifact@v8 + with: + path: /tmp/digests/cnb + pattern: cnb-digests-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to CNB Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.CNB_REGISTRY }} + username: cnb + password: ${{ secrets.CNB_TOKEN }} + + - name: Create manifest list and push + run: | + docker buildx imagetools create \ + -t ${{ secrets.DOCKERHUB_USERNAME }}/dbx:dev \ + $(cd /tmp/digests/dockerhub && printf '${{ secrets.DOCKERHUB_USERNAME }}/dbx@sha256:%s ' *) + + docker buildx imagetools create \ + -t ${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }}:dev \ + $(cd /tmp/digests/cnb && printf '${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }}@sha256:%s ' *) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..352bab3 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,35 @@ +name: Deploy Docs + +on: + push: + branches: [main] + paths: ["docs/**"] + workflow_run: + workflows: ["Publish Packages"] + types: [completed] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: pages + cancel-in-progress: true + +jobs: + build: + if: github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-node@v6 + with: + node-version: 22 + - uses: pnpm/action-setup@v6 + - run: cd docs && pnpm install --frozen-lockfile --ignore-workspace && pnpm build + - name: Deploy to Cloudflare Workers + working-directory: docs + run: pnpm dlx wrangler@4 deploy + env: + CLOUDFLARE_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }} + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/.github/workflows/i18n-autofill.yml b/.github/workflows/i18n-autofill.yml new file mode 100644 index 0000000..198cbd4 --- /dev/null +++ b/.github/workflows/i18n-autofill.yml @@ -0,0 +1,154 @@ +name: I18n Autofill + +on: + pull_request_target: + types: [opened, synchronize, reopened, ready_for_review] + paths: + - "apps/desktop/src/i18n/locales/**" + - ".github/scripts/i18n-autofill.mjs" + - ".github/workflows/i18n-autofill.yml" + +permissions: + contents: write + issues: write + pull-requests: read + +concurrency: + group: i18n-autofill-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + autofill: + if: github.event.pull_request.draft == false + runs-on: ubuntu-22.04 + steps: + - name: Checkout trusted base script + uses: actions/checkout@v5 + with: + ref: ${{ github.event.pull_request.base.sha }} + + - name: Copy trusted script + run: cp .github/scripts/i18n-autofill.mjs "$RUNNER_TEMP/i18n-autofill.mjs" + + - name: Checkout pull request branch + uses: actions/checkout@v5 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.sha }} + token: ${{ secrets.I18N_BOT_TOKEN || secrets.GITHUB_TOKEN }} + fetch-depth: 0 + + - name: Fetch base branch + env: + BASE_REF: ${{ github.event.pull_request.base.ref }} + run: | + git remote add base "https://github.com/${{ github.repository }}.git" + git fetch --no-tags --depth=1 base "${BASE_REF}" + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + + - name: Autofill missing i18n entries + env: + DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} + DEEPSEEK_MODEL: ${{ vars.DEEPSEEK_MODEL || 'deepseek-v4-pro' }} + I18N_BASE_REF: base/${{ github.event.pull_request.base.ref }} + I18N_SUMMARY_FILE: ${{ runner.temp }}/i18n-summary.json + run: node "$RUNNER_TEMP/i18n-autofill.mjs" --write + + - name: Commit and push translation patch + id: patch + env: + PR_HEAD_REF: ${{ github.event.pull_request.head.ref }} + run: | + if git diff --quiet -- apps/desktop/src/i18n/locales; then + echo "No i18n autofill changes to commit" + echo "changed=false" >> "$GITHUB_OUTPUT" + exit 0 + fi + + git config user.name "dbx-i18n-bot" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add apps/desktop/src/i18n/locales + git commit -m "chore(i18n): autofill new translations" + if git push origin "HEAD:${PR_HEAD_REF}"; then + echo "push_failed=false" >> "$GITHUB_OUTPUT" + else + echo "push_failed=true" >> "$GITHUB_OUTPUT" + git diff HEAD~1 HEAD -- apps/desktop/src/i18n/locales > "$RUNNER_TEMP/i18n-autofill.patch" + fi + echo "changed=true" >> "$GITHUB_OUTPUT" + + - name: Comment autofill result + if: steps.patch.outputs.changed == 'true' && steps.patch.outputs.push_failed != 'true' + env: + GH_TOKEN: ${{ secrets.I18N_BOT_TOKEN || secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + SUMMARY_FILE: ${{ runner.temp }}/i18n-summary.json + BODY_FILE: ${{ runner.temp }}/i18n-autofill-comment.md + run: | + node <<'NODE' + const fs = require("node:fs"); + + const summary = JSON.parse(fs.readFileSync(process.env.SUMMARY_FILE, "utf8")); + const keyCount = summary.newKeys.length; + const localeRows = summary.updatedLocales + .map(({ locale, count }) => `| \`${locale}\` | ${count} |`) + .join("\n"); + const body = [ + "### 🌐 I18n autofill completed", + "", + `✅ Added translations for **${keyCount}** new \`${summary.sourceLocale}\` i18n ${keyCount === 1 ? "key" : "keys"}.`, + "", + "| Locale | Added entries |", + "| --- | ---: |", + localeRows, + ].join("\n"); + + fs.writeFileSync(process.env.BODY_FILE, `${body}\n`); + NODE + + gh pr comment "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --body-file "$BODY_FILE" + + - name: Comment push failure + if: steps.patch.outputs.changed == 'true' && steps.patch.outputs.push_failed == 'true' + env: + GH_TOKEN: ${{ secrets.I18N_BOT_TOKEN || secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + SUMMARY_FILE: ${{ runner.temp }}/i18n-summary.json + PATCH_FILE: ${{ runner.temp }}/i18n-autofill.patch + BODY_FILE: ${{ runner.temp }}/i18n-autofill-push-failed.md + run: | + node <<'NODE' + const fs = require("node:fs"); + + const summary = JSON.parse(fs.readFileSync(process.env.SUMMARY_FILE, "utf8")); + const patch = fs.readFileSync(process.env.PATCH_FILE, "utf8"); + const keyCount = summary.newKeys.length; + const localeRows = summary.updatedLocales + .map(({ locale, count }) => `| \`${locale}\` | ${count} |`) + .join("\n"); + const patchPreview = patch.length > 60000 + ? `${patch.slice(0, 60000)}\n\n[Patch truncated in comment. Please check the workflow artifact/log for the full diff.]` + : patch; + const body = [ + "### ⚠️ I18n autofill needs manual apply", + "", + `I generated translations for **${keyCount}** new \`${summary.sourceLocale}\` i18n ${keyCount === 1 ? "key" : "keys"}, but could not push a patch to this PR branch.`, + "", + "| Locale | Missing entries |", + "| --- | ---: |", + localeRows, + "", + "#### Patch preview", + "```diff", + patchPreview, + "```", + ].join("\n"); + + fs.writeFileSync(process.env.BODY_FILE, `${body}\n`); + NODE + + gh pr comment "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --body-file "$BODY_FILE" diff --git a/.github/workflows/issue-claim.yml b/.github/workflows/issue-claim.yml new file mode 100644 index 0000000..6ba9c0e --- /dev/null +++ b/.github/workflows/issue-claim.yml @@ -0,0 +1,30 @@ +name: Issue Claim + +on: + issue_comment: + types: [created] + +concurrency: + group: issue-claim-${{ github.event.issue.number }} + cancel-in-progress: false + +permissions: + contents: read + issues: write + +jobs: + claim: + runs-on: ubuntu-latest + if: ${{ !github.event.issue.pull_request }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v5 + + - name: Handle /claim command + run: node .github/scripts/issue-claim.mjs + env: + ISSUE_NUMBER: ${{ github.event.issue.number }} + COMMENT_BODY: ${{ github.event.comment.body }} + COMMENT_USER: ${{ github.event.comment.user.login }} + COMMENT_USER_TYPE: ${{ github.event.comment.user.type }} diff --git a/.github/workflows/issue-database-label.yml b/.github/workflows/issue-database-label.yml new file mode 100644 index 0000000..df17320 --- /dev/null +++ b/.github/workflows/issue-database-label.yml @@ -0,0 +1,30 @@ +name: Issue Triage Labels + +on: + issues: + types: [opened, edited, reopened] + +concurrency: + group: issue-database-label-${{ github.event.issue.number }} + cancel-in-progress: true + +permissions: + contents: read + issues: write + +jobs: + label: + runs-on: ubuntu-latest + if: ${{ !github.event.issue.pull_request }} + steps: + - uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + + - name: Triage issue labels and title + run: node .github/scripts/label-issue-database.mjs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/mcp-release.yml b/.github/workflows/mcp-release.yml new file mode 100644 index 0000000..f758a6a --- /dev/null +++ b/.github/workflows/mcp-release.yml @@ -0,0 +1,342 @@ +name: Node Packages Release + +on: + workflow_dispatch: + inputs: + version: + description: "Package version to publish, for example 0.4.4" + required: true + +permissions: + contents: write + id-token: write + +concurrency: + group: dbx-release-main + cancel-in-progress: false + +jobs: + prepare: + name: Prepare package release + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + tag: ${{ steps.version.outputs.tag }} + + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + registry-url: https://registry.npmjs.org + cache: pnpm + cache-dependency-path: pnpm-lock.yaml + + - name: Check npm token + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + if [ -z "${NODE_AUTH_TOKEN}" ]; then + echo "::error::NPM_TOKEN secret is required to publish DBX Node packages." + exit 1 + fi + + - name: Install native build dependencies + run: | + sudo apt-get update + sudo apt-get install -y libsecret-1-dev + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Set package versions + id: version + env: + VERSION: ${{ github.event.inputs.version }} + run: | + node <<'NODE' + const fs = require("fs"); + + const version = process.env.VERSION.trim(); + if (!/^\d+\.\d+\.\d+(-[0-9A-Za-z.-]+)?$/.test(version)) { + throw new Error(`Invalid semver version: ${version}`); + } + + const readJson = (path) => JSON.parse(fs.readFileSync(path, "utf8")); + const writeJson = (path, data) => fs.writeFileSync(path, `${JSON.stringify(data, null, 2)}\n`); + + for (const path of [ + "packages/node-core/package.json", + "packages/cli/package.json", + "packages/mcp-server/package.json", + ]) { + const pkg = readJson(path); + pkg.version = version; + writeJson(path, pkg); + } + + const serverPath = "packages/mcp-server/server.json"; + const server = readJson(serverPath); + server.version = version; + for (const packageInfo of server.packages ?? []) { + if (packageInfo.registryType === "npm" && packageInfo.identifier === "@dbx-app/mcp-server") { + packageInfo.version = version; + } + } + writeJson(serverPath, server); + + fs.appendFileSync(process.env.GITHUB_OUTPUT, `version=${version}\n`); + fs.appendFileSync(process.env.GITHUB_OUTPUT, `tag=packages-v${version}\n`); + NODE + + - name: Run package tests + run: pnpm test:packages + + - name: Build and pack packages + run: pnpm publish:dry-run + + - name: Configure git author + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Commit package release version + run: | + VERSION="${{ steps.version.outputs.version }}" + git add packages/node-core/package.json packages/cli/package.json packages/mcp-server/package.json packages/mcp-server/server.json + if git diff --cached --quiet; then + echo "Package versions already committed for ${VERSION}." + else + git commit -m "chore(packages): release ${VERSION} [skip node-packages-release]" + fi + + - name: Rebase package release commit and push + env: + RELEASE_TOKEN: ${{ secrets.MCP_RELEASE_TOKEN }} + run: | + TAG="${{ steps.version.outputs.tag }}" + if [ -n "${RELEASE_TOKEN}" ]; then + git remote set-url origin "https://x-access-token:${RELEASE_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" + fi + git fetch origin main --no-tags + git rebase origin/main + REMOTE_TAG_SHA="$(git ls-remote --tags origin "refs/tags/${TAG}" | awk '{print $1}')" + HEAD_SHA="$(git rev-parse HEAD)" + if [ -n "${REMOTE_TAG_SHA}" ]; then + if [ "${REMOTE_TAG_SHA}" != "${HEAD_SHA}" ]; then + echo "::error::Remote tag ${TAG} already exists at ${REMOTE_TAG_SHA}, expected ${HEAD_SHA}." + exit 1 + fi + echo "Remote tag ${TAG} already points at ${HEAD_SHA}." + else + git tag -f "${TAG}" "${HEAD_SHA}" + fi + git push origin HEAD:main + if [ -z "${REMOTE_TAG_SHA}" ]; then + git push origin "refs/tags/${TAG}:refs/tags/${TAG}" + fi + + publish-node-core: + name: Publish node-core + runs-on: ubuntu-latest + needs: prepare + outputs: + published-or-existing: ${{ steps.publish.outputs.published_or_existing }} + + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ needs.prepare.outputs.tag }} + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + registry-url: https://registry.npmjs.org + cache: pnpm + cache-dependency-path: pnpm-lock.yaml + + - name: Install native build dependencies + run: | + sudo apt-get update + sudo apt-get install -y libsecret-1-dev + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Publish Node core + id: publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + VERSION: ${{ needs.prepare.outputs.version }} + run: | + if npm view "@dbx-app/node-core@${VERSION}" version >/dev/null 2>&1; then + echo "@dbx-app/node-core@${VERSION} already exists on npm; skipping." + echo "published_or_existing=true" >> "$GITHUB_OUTPUT" + exit 0 + fi + pnpm --filter @dbx-app/node-core publish --access public --provenance --no-git-checks + echo "published_or_existing=true" >> "$GITHUB_OUTPUT" + + publish-leaf-packages: + name: Publish ${{ matrix.package-name }} + runs-on: ubuntu-latest + needs: [prepare, publish-node-core] + strategy: + fail-fast: false + matrix: + include: + - package-name: "@dbx-app/cli" + filter: "@dbx-app/cli" + - package-name: "@dbx-app/mcp-server" + filter: "@dbx-app/mcp-server" + + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ needs.prepare.outputs.tag }} + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + registry-url: https://registry.npmjs.org + cache: pnpm + cache-dependency-path: pnpm-lock.yaml + + - name: Install native build dependencies + run: | + sudo apt-get update + sudo apt-get install -y libsecret-1-dev + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build workspace dependencies + run: pnpm --filter @dbx-app/node-core build + + - name: Publish package + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + VERSION: ${{ needs.prepare.outputs.version }} + PACKAGE_NAME: ${{ matrix.package-name }} + PACKAGE_FILTER: ${{ matrix.filter }} + run: | + if npm view "${PACKAGE_NAME}@${VERSION}" version >/dev/null 2>&1; then + echo "${PACKAGE_NAME}@${VERSION} already exists on npm; skipping." + exit 0 + fi + pnpm --filter "${PACKAGE_FILTER}" publish --access public --provenance --no-git-checks + + publish-homebrew-formula: + name: Publish Homebrew formula + runs-on: ubuntu-latest + needs: [prepare, publish-leaf-packages] + steps: + - name: Download CLI npm tarball and compute SHA256 + id: cli-hash + env: + VERSION: ${{ needs.prepare.outputs.version }} + run: | + VERSION="${VERSION}" + NPM_TARBALL="cli-${VERSION}.tgz" + NPM_URL="https://registry.npmjs.org/@dbx-app/cli/-/${NPM_TARBALL}" + + # Poll npm until the package is available (CDN propagation delay) + for i in $(seq 1 12); do + if curl -fsSLI "${NPM_URL}" >/dev/null 2>&1; then + echo "Package found on attempt ${i}" + break + fi + echo "Waiting for npm CDN (attempt ${i}/12)..." + sleep 10 + done + + curl -fsSL -o "${NPM_TARBALL}" "${NPM_URL}" + CLI_SHA256=$(sha256sum "${NPM_TARBALL}" | cut -d ' ' -f 1) + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + echo "sha256=${CLI_SHA256}" >> "$GITHUB_OUTPUT" + echo " cli version: ${VERSION}" + echo " sha256: ${CLI_SHA256}" + + - name: Push formula to homebrew-tap + env: + TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} + CLI_VERSION: ${{ steps.cli-hash.outputs.version }} + CLI_SHA256: ${{ steps.cli-hash.outputs.sha256 }} + run: | + git clone --depth 1 \ + "https://x-access-token:${TAP_GITHUB_TOKEN}@github.com/t8y2/homebrew-tap.git" \ + homebrew-tap + cd homebrew-tap + mkdir -p Formula + + cat > Formula/dbx-cli.rb <<'RUBY_EOF' + class DbxCli < Formula + desc "Command-line interface for DBX database connections, schema, and safe queries" + homepage "https://github.com/t8y2/dbx" + url "https://registry.npmjs.org/@dbx-app/cli/-/cli-__CLI_VERSION__.tgz" + sha256 "__CLI_SHA256__" + license "Apache-2.0" + + depends_on "node" + + on_linux do + depends_on "pkgconf" => :build + depends_on "libsecret" + end + + def install + system "npm", "install", *std_npm_args + bin.install_symlink libexec.glob("bin/*") + + # Rebuild better-sqlite3 and keytar native bindings for the current platform. + # prebuild-install is blocked by the Homebrew sandbox during npm install, + # so we must rebuild them explicitly via node-gyp. + node_modules = libexec/"lib/node_modules/@dbx-app/cli/node_modules" + + cd node_modules/"better-sqlite3" do + system "npm", "run", "build-release" + end + + cd node_modules/"keytar" do + rm_r "prebuilds" if File.directory?("prebuilds") + system "npm", "run", "build" + end + end + + test do + assert_path_exists bin/"dbx" + system bin/"dbx", "doctor" + end + end + RUBY_EOF + + sed -i 's/^ //' Formula/dbx-cli.rb + sed -i "s/__CLI_VERSION__/${CLI_VERSION}/g" Formula/dbx-cli.rb + sed -i "s/__CLI_SHA256__/${CLI_SHA256}/g" Formula/dbx-cli.rb + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add Formula/dbx-cli.rb + + if git diff --cached --quiet; then + echo "CLI Homebrew formula is already up to date." + else + git commit -m "dbx-cli ${CLI_VERSION}" + git push + echo "::notice::CLI Homebrew formula updated to ${CLI_VERSION}" + fi diff --git a/.github/workflows/notify.yml b/.github/workflows/notify.yml new file mode 100644 index 0000000..12649a2 --- /dev/null +++ b/.github/workflows/notify.yml @@ -0,0 +1,200 @@ +name: Notifications + +on: + # issues: + # types: [opened] + pull_request_target: + types: [opened, closed] + release: + types: [published, released] + +jobs: + notify: + runs-on: ubuntu-latest + if: ${{ github.event_name != 'release' || (!github.event.release.draft && !github.event.release.prerelease) }} + steps: + - name: Build message + id: msg + env: + EVENT_NAME: ${{ github.event_name }} + EVENT_ACTION: ${{ github.event.action }} + # ISSUE_TITLE: ${{ github.event.issue.title }} + # ISSUE_URL: ${{ github.event.issue.html_url }} + # ISSUE_USER: ${{ github.event.issue.user.login }} + # ISSUE_BODY: ${{ github.event.issue.body }} + PR_TITLE: ${{ github.event.pull_request.title }} + PR_URL: ${{ github.event.pull_request.html_url }} + PR_USER: ${{ github.event.pull_request.user.login }} + PR_MERGED: ${{ github.event.pull_request.merged }} + PR_MERGED_BY: ${{ github.event.pull_request.merged_by.login }} + RELEASE_TAG: ${{ github.event.release.tag_name }} + RELEASE_NAME: ${{ github.event.release.name }} + RELEASE_URL: ${{ github.event.release.html_url }} + RELEASE_BODY: ${{ github.event.release.body }} + run: | + python3 - <<'PYEOF' + import os + + event = os.environ["EVENT_NAME"] + action = os.environ.get("EVENT_ACTION", "") + msg = None + + # if event == "issues": + # title = os.environ["ISSUE_TITLE"] + # url = os.environ["ISSUE_URL"] + # user = os.environ["ISSUE_USER"] + # msg = "\n".join([ + # "📋 新 Issue", + # f"标题: {title}", + # f"提交者: {user}", + # f"链接: {url}", + # ]) + # + # elif event == "release": + if event == "release": + tag = os.environ["RELEASE_TAG"] + name = os.environ["RELEASE_NAME"] + url = os.environ["RELEASE_URL"] + body = os.environ.get("RELEASE_BODY", "")[:800] + + import re + body = re.sub(r'#{1,6}\s*', '', body) + body = re.sub(r'\*\*(.+?)\*\*', r'\1', body) + body = re.sub(r'\*(.+?)\*', r'\1', body) + body = re.sub(r'`(.+?)`', r'\1', body) + body = re.sub(r'\[(.+?)\]\(.+?\)', r'\1', body) + body = re.sub(r'\n{3,}', '\n\n', body) + body = body.strip() + + msg = "\n".join([ + f"🚀 新版本发布 {tag}", + "", + body, + "", + f"下载: {url}", + ]) + + elif event in ("pull_request", "pull_request_target"): + title = os.environ["PR_TITLE"] + url = os.environ["PR_URL"] + if action == "opened": + user = os.environ["PR_USER"] + msg = "\n".join([ + "🔀 新 Pull Request", + f"标题: {title}", + f"提交者: {user}", + f"链接: {url}", + ]) + elif action == "closed" and os.environ.get("PR_MERGED") == "true": + user = os.environ.get("PR_MERGED_BY", "unknown") + msg = "\n".join([ + "✅ PR 已合并", + f"标题: {title}", + f"合并者: {user}", + f"链接: {url}", + ]) + + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + if msg: + f.write(f"skip=false\n") + delim = "EOF_MSG" + f.write(f"msg<<{delim}\n{msg}\n{delim}\n") + else: + f.write(f"skip=true\n") + PYEOF + + # - name: AI Analysis for Issue + # id: ai + # if: ${{ github.event_name == 'issues' && steps.msg.outputs.skip != 'true' }} + # env: + # ISSUE_TITLE: ${{ github.event.issue.title }} + # ISSUE_BODY: ${{ github.event.issue.body }} + # ISSUE_USER: ${{ github.event.issue.user.login }} + # DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} + # run: | + # python3 - <<'PYEOF' + # import os, json, urllib.request + # + # title = os.environ["ISSUE_TITLE"] + # body = (os.environ.get("ISSUE_BODY") or "(无描述)")[:800] + # user = os.environ.get("ISSUE_USER", "unknown") + # api_key = os.environ.get("DEEPSEEK_API_KEY", "") + # + # if not api_key: + # with open(os.environ["GITHUB_OUTPUT"], "a") as f: + # f.write("analysis=\n") + # exit(0) + # + # prompt = f"""分析这个 GitHub Issue,用中文回复。格式要求(严格遵守,不要多余内容): + # + # 总结: [一句话概括核心问题] + # 优先级: [P0紧急/P1重要/P2普通/P3低优] + # 合理性: [有效问题/重复报告/信息不足/不是bug] + # 建议: [一句话给出处理建议或关联方向] + # + # --- + # 标题: {title} + # 提交者: {user} + # 内容: {body}""" + # + # req = urllib.request.Request( + # "https://api.deepseek.com/v1/chat/completions", + # data=json.dumps({ + # "model": "deepseek-v4-pro", + # "max_tokens": 300, + # "messages": [{"role": "user", "content": prompt}], + # }).encode(), + # headers={ + # "Authorization": f"Bearer {api_key}", + # "Content-Type": "application/json", + # }, + # ) + # + # try: + # resp = urllib.request.urlopen(req, timeout=20) + # data = json.loads(resp.read()) + # text = data["choices"][0]["message"]["content"] + # except Exception as e: + # text = f"(AI 分析暂时不可用: {e})" + # + # with open(os.environ["GITHUB_OUTPUT"], "a") as f: + # delim = "EOF_ANALYSIS" + # f.write(f"analysis<<{delim}\n{text}\n{delim}\n") + # PYEOF + + - name: Send to Feishu + if: ${{ steps.msg.outputs.skip != 'true' && github.event_name != 'release' }} + env: + FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }} + MSG_CONTENT: ${{ steps.msg.outputs.msg }} + run: | + curl -s -X POST "$FEISHU_WEBHOOK_URL" \ + -H 'Content-Type: application/json' \ + -d "$(jq -n --arg text "$MSG_CONTENT" '{msg_type: "text", content: {text: $text}}')" + + - name: Send to QQ group + if: steps.msg.outputs.skip != 'true' + env: + SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} + HOST: ${{ secrets.DEPLOY_HOST }} + ASTRBOT_API_KEY: ${{ secrets.ASTRBOT_API_KEY }} + MSG_CONTENT: ${{ steps.msg.outputs.msg }} + # AI_ANALYSIS: ${{ steps.ai.outputs.analysis }} + run: | + mkdir -p ~/.ssh + echo "$SSH_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "$HOST" >> ~/.ssh/known_hosts 2>/dev/null + + # if [ -n "$AI_ANALYSIS" ]; then + # MSG_CONTENT="${MSG_CONTENT} + # + # 🤖 AI 分析: + # ${AI_ANALYSIS}" + # fi + + MSG=$(echo "$MSG_CONTENT" | jq -Rs .) + ssh "root@${HOST}" "curl -s -X POST http://localhost:6185/api/v1/im/message \ + -H 'Authorization: Bearer ${ASTRBOT_API_KEY}' \ + -H 'Content-Type: application/json' \ + -d '{\"umo\": \"default:GroupMessage:1087880322\", \"message\": ${MSG}}'" diff --git a/.github/workflows/project-triage.yml b/.github/workflows/project-triage.yml new file mode 100644 index 0000000..cd95e2a --- /dev/null +++ b/.github/workflows/project-triage.yml @@ -0,0 +1,48 @@ +name: Project Triage + +on: + issues: + types: [opened, reopened, labeled, unlabeled, assigned, unassigned] + workflow_dispatch: + inputs: + backfill: + description: Sync all open issues into DBX Issue Triage + required: false + default: "false" + +permissions: + contents: read + issues: read + +jobs: + sync-project-triage: + runs-on: ubuntu-latest + env: + PROJECT_TOKEN: ${{ secrets.PROJECT_AUTOMATION_TOKEN }} + PROJECT_OWNER: t8y2 + PROJECT_NUMBER: "1" + steps: + - uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22.13.0 + + - name: Validate project token + run: | + if [ -z "$PROJECT_TOKEN" ]; then + echo "Missing PROJECT_AUTOMATION_TOKEN secret" + exit 1 + fi + + - name: Sync current issue + if: ${{ github.event_name == 'issues' }} + env: + ISSUE_NUMBER: ${{ github.event.issue.number }} + ISSUE_EVENT_ACTION: ${{ github.event.action }} + run: node .github/scripts/sync-project-triage.mjs --issue-number "$ISSUE_NUMBER" --event-action "$ISSUE_EVENT_ACTION" + + - name: Backfill open issues + if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.backfill == 'true' }} + run: node .github/scripts/sync-project-triage.mjs --backfill true diff --git a/.github/workflows/publish-packages.yml b/.github/workflows/publish-packages.yml new file mode 100644 index 0000000..ece7a22 --- /dev/null +++ b/.github/workflows/publish-packages.yml @@ -0,0 +1,382 @@ +name: Publish Packages + +on: + workflow_dispatch: + inputs: + tag: + description: "Release tag (e.g. v0.3.10)" + required: true + +permissions: + contents: write + +env: + APP_NAME: dbx + PRODUCT_NAME: DBX + REPO_OWNER: t8y2 + +jobs: + publish: + name: Publish to Homebrew & Scoop + runs-on: ubuntu-latest + steps: + - name: Extract version from tag + id: version + run: | + TAG="${{ github.event.inputs.tag }}" + TAG="$(echo "${TAG}" | xargs)" + VERSION="${TAG#v}" + if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then + echo "::error::Tag '${TAG}' does not look like a semver version." + exit 1 + fi + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + echo "tag=${TAG}" >> "$GITHUB_OUTPUT" + + - name: Download release assets + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mkdir -p artifacts + VERSION="${{ steps.version.outputs.version }}" + TAG="${{ steps.version.outputs.tag }}" + + ASSETS=( + "${PRODUCT_NAME}_${VERSION}_aarch64.dmg" + "${PRODUCT_NAME}_${VERSION}_x64.dmg" + "${PRODUCT_NAME}_${VERSION}_x64-setup.exe" + "${PRODUCT_NAME}_${VERSION}_arm64-setup.exe" + ) + + for ASSET in "${ASSETS[@]}"; do + echo "::group::Downloading ${ASSET}" + gh release download "${TAG}" \ + --repo "${{ github.repository }}" \ + --pattern "${ASSET}" \ + --dir artifacts \ + --clobber + echo "::endgroup::" + done + + ls -lh artifacts/ + + - name: Compute SHA256 hashes + id: hashes + run: | + VERSION="${{ steps.version.outputs.version }}" + + compute_hash() { + local file="$1" name="$2" + if [[ ! -f "${file}" ]]; then + echo "::error::Missing artifact: ${file}" + exit 1 + fi + local hash + hash=$(sha256sum "${file}" | cut -d ' ' -f 1) + echo "${name}=${hash}" >> "$GITHUB_OUTPUT" + echo " ${name}: ${hash}" + } + + echo "SHA256 hashes:" + compute_hash "artifacts/${PRODUCT_NAME}_${VERSION}_aarch64.dmg" "sha_dmg_arm64" + compute_hash "artifacts/${PRODUCT_NAME}_${VERSION}_x64.dmg" "sha_dmg_x64" + compute_hash "artifacts/${PRODUCT_NAME}_${VERSION}_x64-setup.exe" "sha_exe_x64" + compute_hash "artifacts/${PRODUCT_NAME}_${VERSION}_arm64-setup.exe" "sha_exe_arm64" + + - name: Publish Homebrew Cask + env: + TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} + run: | + VERSION="${{ steps.version.outputs.version }}" + SHA_ARM64="${{ steps.hashes.outputs.sha_dmg_arm64 }}" + SHA_X64="${{ steps.hashes.outputs.sha_dmg_x64 }}" + + git clone --depth 1 \ + "https://x-access-token:${TAP_GITHUB_TOKEN}@github.com/${REPO_OWNER}/homebrew-tap.git" \ + homebrew-tap + cd homebrew-tap + mkdir -p Casks + + cat > Casks/dbx.rb <<'RUBY_EOF' + cask "dbx" do + arch arm: "aarch64", intel: "x64" + + version "__VERSION__" + sha256 arm: "__SHA_ARM64__", + intel: "__SHA_X64__" + + url "https://github.com/__OWNER__/__APP__/releases/download/v#{version}/__PRODUCT___#{version}_#{arch}.dmg", + verified: "github.com/__OWNER__/__APP__/" + name "DBX" + desc "Database management tool" + homepage "https://dbxio.com/" + + depends_on macos: :big_sur + + app "DBX.app" + + zap trash: [ + "~/Library/Application Support/com.dbx.app", + "~/Library/Caches/com.dbx.app", + "~/Library/Logs/com.dbx.app", + "~/Library/Preferences/com.dbx.app.plist", + ] + end + RUBY_EOF + + sed -i 's/^ //' Casks/dbx.rb + + sed -i "s/__VERSION__/${VERSION}/g" Casks/dbx.rb + sed -i "s/__OWNER__/${REPO_OWNER}/g" Casks/dbx.rb + sed -i "s/__APP__/${APP_NAME}/g" Casks/dbx.rb + sed -i "s/__PRODUCT__/${PRODUCT_NAME}/g" Casks/dbx.rb + sed -i "s/__SHA_ARM64__/${SHA_ARM64}/g" Casks/dbx.rb + sed -i "s/__SHA_X64__/${SHA_X64}/g" Casks/dbx.rb + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git add Casks/dbx.rb + + if git diff --cached --quiet; then + echo "Homebrew Cask is already up to date." + else + git commit -m "dbx ${VERSION}" + git push + echo "::notice::Homebrew Cask updated to ${VERSION}" + fi + + - name: Publish Scoop manifest + env: + TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }} + run: | + VERSION="${{ steps.version.outputs.version }}" + SHA_EXE_X64="${{ steps.hashes.outputs.sha_exe_x64 }}" + SHA_EXE_ARM64="${{ steps.hashes.outputs.sha_exe_arm64 }}" + + git clone --depth 1 \ + "https://x-access-token:${TAP_GITHUB_TOKEN}@github.com/${REPO_OWNER}/scoop-bucket.git" \ + scoop-bucket + cd scoop-bucket + + cat > dbx.json <> "$GITHUB_OUTPUT" + + - name: Download release assets + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mkdir -p assets + gh release download "${{ steps.version.outputs.tag }}" \ + --repo "${{ github.repository }}" \ + --dir assets \ + --clobber + ls -lh assets/ + + - name: Rewrite latest.json download URLs to R2 CDN + run: | + TAG="${{ steps.version.outputs.tag }}" + LATEST_JSON="assets/latest.json" + if [ ! -f "$LATEST_JSON" ]; then + echo "::warning::latest.json not found, skipping URL rewrite" + exit 0 + fi + echo "Before:" + jq '.platforms[]?.url // empty' "$LATEST_JSON" + jq --arg tag "$TAG" ' + (.platforms[]?.url?) |= ( + sub("https://github\\.com/t8y2/dbx/releases/download/" + $tag + "/"; "https://dl.dbxio.com/releases/latest/") + + "?v=" + $tag + ) + ' "$LATEST_JSON" > "$LATEST_JSON.tmp" + mv "$LATEST_JSON.tmp" "$LATEST_JSON" + echo "After:" + jq '.platforms[]?.url // empty' "$LATEST_JSON" + + - name: Upload to R2 (versioned) + run: | + aws s3 sync ./assets "s3://${{ secrets.R2_BUCKET_NAME }}/releases/${{ steps.version.outputs.tag }}/" \ + --endpoint-url "https://${{ secrets.R2_ACCOUNT_ID }}.r2.cloudflarestorage.com" + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + + - name: Upload to R2 (latest) + run: | + aws s3 sync ./assets "s3://${{ secrets.R2_BUCKET_NAME }}/releases/latest/" \ + --endpoint-url "https://${{ secrets.R2_ACCOUNT_ID }}.r2.cloudflarestorage.com" \ + --cache-control "no-cache" \ + --delete + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + + - name: Purge Cloudflare cache + run: | + set -euo pipefail + zone_id="${CLOUDFLARE_ZONE_ID:-}" + if [ -z "$zone_id" ]; then + zone_id="$(curl -fsSL \ + -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \ + -H "Content-Type: application/json" \ + "https://api.cloudflare.com/client/v4/zones?name=dbxio.com" \ + | jq -r '.result[0].id // empty')" + fi + + if [ -z "$zone_id" ]; then + echo "::error::Cloudflare zone dbxio.com not found. Set CLOUDFLARE_ZONE_ID or grant Zone:Read to CLOUDFLARE_API_TOKEN." + exit 1 + fi + + curl -fsSL -X POST \ + -H "Authorization: Bearer ${CLOUDFLARE_API_TOKEN}" \ + -H "Content-Type: application/json" \ + --data '{"purge_everything":true}' \ + "https://api.cloudflare.com/client/v4/zones/${zone_id}/purge_cache" \ + | jq -e '.success == true' + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }} + + promote-release: + name: Promote to Release + needs: [publish, upload-r2] + runs-on: ubuntu-latest + steps: + - name: Promote prerelease to release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + TAG="${{ github.event.inputs.tag }}" + gh release edit "${TAG}" \ + --repo "${{ github.repository }}" \ + --prerelease=false \ + --latest + echo "::notice::Release ${TAG} promoted from prerelease to latest release" + + notify-qq: + name: QQ Notify + needs: [promote-release] + runs-on: ubuntu-latest + steps: + - name: Build message + id: msg + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ github.event.inputs.tag }} + run: | + RELEASE_JSON=$(gh release view "${TAG}" --repo "${{ github.repository }}" --json tagName,name,url,body) + export RELEASE_TAG=$(echo "$RELEASE_JSON" | jq -r '.tagName') + export RELEASE_URL=$(echo "$RELEASE_JSON" | jq -r '.url') + export RELEASE_BODY=$(echo "$RELEASE_JSON" | jq -r '.body') + + python3 - <<'PYEOF' + import os, re + + tag = os.environ["RELEASE_TAG"] + url = os.environ["RELEASE_URL"] + body = os.environ.get("RELEASE_BODY", "")[:800] + + body = re.sub(r'#{1,6}\s*', '', body) + body = re.sub(r'\*\*(.+?)\*\*', r'\1', body) + body = re.sub(r'\*(.+?)\*', r'\1', body) + body = re.sub(r'`(.+?)`', r'\1', body) + body = re.sub(r'\[(.+?)\]\(.+?\)', r'\1', body) + body = re.sub(r'\n{3,}', '\n\n', body) + body = body.strip() + + msg = "\n".join([ + "━━━━━━━━━━━━━━━", + f"🚀 新版本发布 {tag}", + "━━━━━━━━━━━━━━━", + "", + body, + "", + f"下载: {url}", + "━━━━━━━━━━━━━━━", + ]) + + with open(os.environ["GITHUB_OUTPUT"], "a") as f: + delim = "EOF_MSG" + f.write(f"msg<<{delim}\n{msg}\n{delim}\n") + PYEOF + + - name: Send to QQ group + env: + SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} + HOST: ${{ secrets.DEPLOY_HOST }} + ASTRBOT_API_KEY: ${{ secrets.ASTRBOT_API_KEY }} + MSG_CONTENT: ${{ steps.msg.outputs.msg }} + run: | + mkdir -p ~/.ssh + echo "$SSH_KEY" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/id_ed25519 + ssh-keyscan -H "$HOST" >> ~/.ssh/known_hosts 2>/dev/null + + PAYLOAD=$(jq -nc --arg msg "$MSG_CONTENT" \ + '{"umo": "default:GroupMessage:1087880322", "message": $msg}') + printf '%s' "$PAYLOAD" | ssh "root@${HOST}" "curl -fsS -X POST http://localhost:6185/api/v1/im/message \ + -H 'Authorization: Bearer ${ASTRBOT_API_KEY}' \ + -H 'Content-Type: application/json' \ + --data-binary @-" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..789e415 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,557 @@ +name: Release + +on: + push: + tags: + - "v*" + +permissions: + contents: write + +env: + CNB_REPOSITORY: "dbxio.com/dbx" + CNB_USERNAME: "cnb" + CNB_REGISTRY: "docker.cnb.cool" + +jobs: + bump-jdbc-plugin-version: + runs-on: ubuntu-latest + outputs: + changed: ${{ steps.bump.outputs.changed }} + old_version: ${{ steps.bump.outputs.old_version }} + new_version: ${{ steps.bump.outputs.new_version }} + prev_tag: ${{ steps.prev-tag.outputs.prev_tag }} + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Find previous release tag + id: prev-tag + shell: bash + run: | + PREV_TAG=$(git tag --sort=-creatordate | grep '^v' | sed -n '2p') + if [ -z "$PREV_TAG" ]; then + PREV_TAG=$(git rev-list --max-parents=0 HEAD) + fi + echo "prev_tag=${PREV_TAG}" >> "$GITHUB_OUTPUT" + echo "Comparing ${PREV_TAG}..HEAD" + + - name: Detect JDBC plugin changes and bump version + id: bump + shell: bash + run: | + BUMP_OUTPUT="$(node .github/scripts/bump-jdbc-plugin-version.mjs "${{ steps.prev-tag.outputs.prev_tag }}" HEAD --write)" + echo "$BUMP_OUTPUT" + echo "$BUMP_OUTPUT" >> "$GITHUB_OUTPUT" + + - name: Commit JDBC plugin version bump + if: steps.bump.outputs.changed == 'true' + shell: bash + run: | + TMP_DIR="$(mktemp -d)" + cp plugins/jdbc/pom.xml "$TMP_DIR/pom.xml" + cp plugins/jdbc/manifest.json "$TMP_DIR/manifest.json" + + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git fetch origin main + git switch -C jdbc-plugin-version-bump origin/main + cp "$TMP_DIR/pom.xml" plugins/jdbc/pom.xml + cp "$TMP_DIR/manifest.json" plugins/jdbc/manifest.json + git add plugins/jdbc/pom.xml plugins/jdbc/manifest.json + if git diff --cached --quiet; then + echo "JDBC plugin version ${{ steps.bump.outputs.new_version }} is already on main." + exit 0 + fi + git commit -m "chore(jdbc): bump plugin version [skip ci]" + git push origin HEAD:main + + build: + strategy: + fail-fast: false + matrix: + include: + - platform: macos-latest + target: aarch64-apple-darwin + - platform: macos-15-intel + target: x86_64-apple-darwin + - platform: ubuntu-22.04 + target: x86_64-unknown-linux-gnu + - platform: ubuntu-22.04-arm + target: aarch64-unknown-linux-gnu + - platform: windows-2022 + target: x86_64-pc-windows-msvc + arch: x64 + - platform: windows-2022 + target: aarch64-pc-windows-msvc + arch: arm64 + + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v5 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: 22 + + - name: Setup pnpm + uses: pnpm/action-setup@v6 + + - name: Install frontend dependencies + run: pnpm install + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Compute Rust dependency hash + id: deps-hash + shell: bash + run: | + { + find . -name Cargo.toml -not -path './target/*' -print0 \ + | sort -z \ + | xargs -0 sed -E '/^version = /d' + grep -v '^version = ' Cargo.lock + } | sha256sum | cut -d' ' -f1 | { + read -r hash + echo "hash=${hash:0:20}" >> "$GITHUB_OUTPUT" + } + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: "./ -> target" + shared-key: release-${{ matrix.target }}-${{ steps.deps-hash.outputs.hash }} + add-rust-environment-hash-key: false + cache-on-failure: true + + - name: Install Apple certificate (macOS) + if: startsWith(matrix.platform, 'macos') + env: + APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} + APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} + run: | + CERTIFICATE_PATH=$RUNNER_TEMP/certificate.p12 + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + echo -n "$APPLE_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH + security create-keychain -p "" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "" $KEYCHAIN_PATH + security import $CERTIFICATE_PATH -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security set-key-partition-list -S apple-tool:,apple: -k "" $KEYCHAIN_PATH + security list-keychains -d user -s $KEYCHAIN_PATH login.keychain-db + + - name: Install system dependencies (Linux) + if: startsWith(matrix.platform, 'ubuntu') + run: | + sudo apt-get update + sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev xdg-utils + + - name: Setup Tauri signing key + shell: bash + run: | + echo "${{ secrets.TAURI_SIGNING_PRIVATE_KEY_BASE64 }}" | base64 --decode > "$RUNNER_TEMP/updater.key" + KEY_B64=$(base64 < "$RUNNER_TEMP/updater.key" | tr -d '\r\n') + echo "TAURI_SIGNING_PRIVATE_KEY=$KEY_B64" >> "$GITHUB_ENV" + if [ -n "${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}" ]; then + echo "TAURI_SIGNING_PRIVATE_KEY_PASSWORD=${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}" >> "$GITHUB_ENV" + fi + + - name: Generate release notes + id: release-notes + shell: bash + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + BODY="$(gh api "repos/${GITHUB_REPOSITORY}/releases/generate-notes" \ + -f tag_name="${GITHUB_REF_NAME}" \ + --jq '.body')" + if [ -z "$BODY" ]; then + BODY="DBX ${GITHUB_REF_NAME}" + fi + DELIM="RELEASE_NOTES_$(date +%s%N)" + { + echo "body<<$DELIM" + printf '%s\n' "$BODY" + echo "$DELIM" + } >> "$GITHUB_OUTPUT" + + - name: Build Tauri app + uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + APPLE_SIGNING_IDENTITY: ${{ startsWith(matrix.platform, 'macos') && secrets.APPLE_SIGNING_IDENTITY || '' }} + APPLE_ID: ${{ startsWith(matrix.platform, 'macos') && secrets.APPLE_ID || '' }} + APPLE_PASSWORD: ${{ startsWith(matrix.platform, 'macos') && secrets.APPLE_PASSWORD || '' }} + APPLE_TEAM_ID: ${{ startsWith(matrix.platform, 'macos') && secrets.APPLE_TEAM_ID || '' }} + with: + tagName: ${{ github.ref_name }} + releaseName: "DBX ${{ github.ref_name }}" + releaseBody: ${{ steps.release-notes.outputs.body }} + releaseDraft: true + prerelease: false + args: --target ${{ matrix.target }} + + - name: Upload Windows portable ZIP + if: matrix.arch == 'x64' || matrix.arch == 'arm64' + shell: pwsh + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + $version = "${env:GITHUB_REF_NAME}".TrimStart("v") + $arch = "${{ matrix.arch }}" + $portableRoot = "portable" + $portableDir = Join-Path $portableRoot "DBX_${version}_${arch}" + $zipName = "DBX_${version}_${arch}-portable.zip" + $exePath = "target/${{ matrix.target }}/release/dbx.exe" + + if (!(Test-Path $exePath)) { + Write-Error "Missing Windows executable: $exePath" + exit 1 + } + + New-Item -ItemType Directory -Force -Path $portableDir | Out-Null + Copy-Item $exePath (Join-Path $portableDir "DBX.exe") -Force + Copy-Item "LICENSE" (Join-Path $portableDir "LICENSE") -Force + Copy-Item "README.md" (Join-Path $portableDir "README.md") -Force + Set-Content -Path (Join-Path $portableDir "portable.dbx") -Value "" -NoNewline + + Compress-Archive -Path (Join-Path $portableDir "*") -DestinationPath $zipName -Force + gh release upload "${env:GITHUB_REF_NAME}" $zipName --repo "${env:GITHUB_REPOSITORY}" --clobber + + - name: Upload Windows WebView2 offline installer + if: matrix.arch == 'x64' || matrix.arch == 'arm64' + shell: pwsh + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + $version = "${env:GITHUB_REF_NAME}".TrimStart("v") + $arch = "${{ matrix.arch }}" + $bundleDir = "target/${{ matrix.target }}/release/bundle/nsis" + $offlineName = "DBX_${version}_${arch}-webview2-offline-setup.exe" + $before = @{} + + if (Test-Path $bundleDir) { + Get-ChildItem $bundleDir -Filter "*.exe" | ForEach-Object { $before[$_.FullName] = $_.LastWriteTimeUtc } + } + + pnpm tauri bundle --bundles nsis --target ${{ matrix.target }} --config src-tauri/tauri.webview2-offline.conf.json + + $installer = Get-ChildItem $bundleDir -Filter "*.exe" | + Where-Object { !$before.ContainsKey($_.FullName) -or $_.LastWriteTimeUtc -gt $before[$_.FullName] } | + Sort-Object LastWriteTimeUtc -Descending | + Select-Object -First 1 + + if (!$installer) { + Write-Error "Missing WebView2 offline installer in ${bundleDir}" + exit 1 + } + + Copy-Item $installer.FullName $offlineName -Force + gh release upload "${env:GITHUB_REF_NAME}" $offlineName --repo "${env:GITHUB_REPOSITORY}" --clobber + + cleanup-release-signatures: + needs: build + runs-on: ubuntu-latest + steps: + - name: Remove standalone updater signature assets + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + mapfile -t SIG_ASSETS < <( + gh release view "${GITHUB_REF_NAME}" \ + --repo "${GITHUB_REPOSITORY}" \ + --json assets \ + --jq '.assets[].name | select(endswith(".sig"))' + ) + + if [ "${#SIG_ASSETS[@]}" -eq 0 ]; then + echo "No standalone .sig release assets found." + exit 0 + fi + + for ASSET in "${SIG_ASSETS[@]}"; do + echo "Deleting release asset: ${ASSET}" + gh release delete-asset "${GITHUB_REF_NAME}" "${ASSET}" \ + --repo "${GITHUB_REPOSITORY}" \ + --yes + done + + jdbc-plugin: + needs: [cleanup-release-signatures, bump-jdbc-plugin-version] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Setup Java + uses: actions/setup-java@v5 + with: + distribution: temurin + java-version: "17" + cache: maven + + - name: Apply automatic JDBC plugin version bump + shell: bash + run: node .github/scripts/bump-jdbc-plugin-version.mjs "${{ needs.bump-jdbc-plugin-version.outputs.prev_tag }}" HEAD --write + + - name: Read JDBC plugin version + id: jdbc-plugin + shell: bash + run: | + VERSION="$(grep -m1 '' plugins/jdbc/pom.xml | sed -E 's/.*([^<]+)<.*/\1/')" + echo "version=${VERSION}" >> "$GITHUB_OUTPUT" + + - name: Package JDBC plugin + run: ./plugins/jdbc/package.sh + + - name: Upload JDBC plugin asset + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh release upload "${GITHUB_REF_NAME}" \ + "plugins/jdbc/dist/dbx-jdbc-plugin-${{ steps.jdbc-plugin.outputs.version }}.zip" \ + "plugins/jdbc/dist/dbx-jdbc-plugin-latest.zip" \ + --repo "${GITHUB_REPOSITORY}" \ + --clobber + + - name: Add JDBC plugin metadata to latest.json + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + mkdir -p "$RUNNER_TEMP/latest-json" + gh release download "${GITHUB_REF_NAME}" \ + --repo "${GITHUB_REPOSITORY}" \ + --pattern latest.json \ + --dir "$RUNNER_TEMP/latest-json" + node .github/scripts/augment-latest-json-jdbc-plugin.mjs \ + "$RUNNER_TEMP/latest-json/latest.json" \ + "${{ steps.jdbc-plugin.outputs.version }}" \ + "1" \ + "https://github.com/t8y2/dbx/releases/latest/download/dbx-jdbc-plugin-latest.zip" + gh release upload "${GITHUB_REF_NAME}" \ + "$RUNNER_TEMP/latest-json/latest.json" \ + --repo "${GITHUB_REPOSITORY}" \ + --clobber + + publish: + needs: [cleanup-release-signatures, docker-manifest, jdbc-plugin] + runs-on: ubuntu-latest + steps: + - name: Publish draft release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release edit ${{ github.ref_name }} --repo ${{ github.repository }} --draft=false --prerelease + + sync-release-to-cnb: + name: Sync release to CNB + needs: publish + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Download GitHub release assets + env: + TAG_NAME: ${{ github.ref_name }} + GITHUB_REPOSITORY: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + mkdir -p "$RUNNER_TEMP/github-release" "$RUNNER_TEMP/release-assets" + gh release view "$TAG_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --json tagName,name,body,targetCommitish,isPrerelease,isDraft,assets \ + > "$RUNNER_TEMP/github-release/release.json" + gh release download "$TAG_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --dir "$RUNNER_TEMP/release-assets" \ + --clobber + + - name: Sync release assets to CNB + env: + CNB_TOKEN: ${{ secrets.CNB_TOKEN }} + CNB_UPLOAD_CONCURRENCY: "3" + run: | + node .github/scripts/sync-cnb-release.mjs \ + --github-release "$RUNNER_TEMP/github-release/release.json" \ + --assets-dir "$RUNNER_TEMP/release-assets" + + sync-release-to-atomgit: + name: Sync release to AtomGit + needs: publish + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Ensure AtomGit tag exists + env: + TAG_NAME: ${{ github.ref_name }} + ATOMGIT_TOKEN: ${{ secrets.ATOMGIT_TOKEN }} + run: | + set -euo pipefail + git fetch origin "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}" --force + git remote add atomgit "https://t8y2:${ATOMGIT_TOKEN}@atomgit.com/t8y2/dbx.git" + git push atomgit "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}" --force + + - name: Download GitHub release assets + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG_NAME: ${{ github.ref_name }} + GITHUB_REPOSITORY: ${{ github.repository }} + run: | + set -euo pipefail + mkdir -p "$RUNNER_TEMP/github-release" "$RUNNER_TEMP/release-assets" + gh release view "$TAG_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --json tagName,name,body,targetCommitish,isPrerelease,isDraft,assets \ + > "$RUNNER_TEMP/github-release/release.json" + gh release download "$TAG_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --dir "$RUNNER_TEMP/release-assets" \ + --clobber + + - name: Sync release assets to AtomGit + env: + ATOMGIT_TOKEN: ${{ secrets.ATOMGIT_TOKEN }} + ATOMGIT_REPOSITORY: "t8y2/dbx" + # AtomGit throttles concurrent large-asset uploads, which can expire their temporary upload URLs. + ATOMGIT_UPLOAD_CONCURRENCY: "1" + run: | + set -euo pipefail + node .github/scripts/sync-atomgit-release.mjs \ + --github-release "$RUNNER_TEMP/github-release/release.json" \ + --assets-dir "$RUNNER_TEMP/release-assets" + + docker: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: [linux/amd64, linux/arm64] + steps: + - uses: actions/checkout@v5 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to CNB Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.CNB_REGISTRY }} + username: cnb + password: ${{ secrets.CNB_TOKEN }} + + - name: Build and push Docker Hub by digest + id: build-dockerhub + uses: docker/build-push-action@v6 + with: + context: . + file: deploy/Dockerfile + platforms: ${{ matrix.platform }} + outputs: type=image,name=${{ secrets.DOCKERHUB_USERNAME }}/dbx,push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha,scope=${{ matrix.platform }} + cache-to: type=gha,scope=${{ matrix.platform }},mode=max + + - name: Build and push CNB by digest + id: build-cnb + uses: docker/build-push-action@v6 + with: + context: . + file: deploy/Dockerfile + platforms: ${{ matrix.platform }} + outputs: type=image,name=${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha,scope=${{ matrix.platform }} + + - name: Export digests + run: | + mkdir -p /tmp/digests/dockerhub /tmp/digests/cnb + dockerhub_digest="${{ steps.build-dockerhub.outputs.digest }}" + cnb_digest="${{ steps.build-cnb.outputs.digest }}" + touch "/tmp/digests/dockerhub/${dockerhub_digest#sha256:}" + touch "/tmp/digests/cnb/${cnb_digest#sha256:}" + + - name: Upload Docker Hub digest + uses: actions/upload-artifact@v7 + with: + name: dockerhub-digests-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }} + path: /tmp/digests/dockerhub/* + if-no-files-found: error + retention-days: 1 + + - name: Upload CNB digest + uses: actions/upload-artifact@v7 + with: + name: cnb-digests-${{ matrix.platform == 'linux/amd64' && 'amd64' || 'arm64' }} + path: /tmp/digests/cnb/* + if-no-files-found: error + retention-days: 1 + + docker-manifest: + needs: docker + runs-on: ubuntu-latest + steps: + - name: Download Docker Hub digests + uses: actions/download-artifact@v8 + with: + path: /tmp/digests/dockerhub + pattern: dockerhub-digests-* + merge-multiple: true + + - name: Download CNB digests + uses: actions/download-artifact@v8 + with: + path: /tmp/digests/cnb + pattern: cnb-digests-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to CNB Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.CNB_REGISTRY }} + username: cnb + password: ${{ secrets.CNB_TOKEN }} + + - name: Extract version from tag + id: version + run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" + + - name: Create manifest list and push + run: | + docker buildx imagetools create \ + -t ${{ secrets.DOCKERHUB_USERNAME }}/dbx:${{ steps.version.outputs.version }} \ + -t ${{ secrets.DOCKERHUB_USERNAME }}/dbx:latest \ + $(cd /tmp/digests/dockerhub && printf '${{ secrets.DOCKERHUB_USERNAME }}/dbx@sha256:%s ' *) + + docker buildx imagetools create \ + -t ${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }}:${{ steps.version.outputs.version }} \ + -t ${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }}:latest \ + $(cd /tmp/digests/cnb && printf '${{ env.CNB_REGISTRY }}/${{ env.CNB_REPOSITORY }}@sha256:%s ' *) diff --git a/.github/workflows/spam-comment-guard.yml b/.github/workflows/spam-comment-guard.yml new file mode 100644 index 0000000..0567844 --- /dev/null +++ b/.github/workflows/spam-comment-guard.yml @@ -0,0 +1,41 @@ +name: Spam Comment Guard + +on: + issue_comment: + types: [created] + +# 用 PROJECT_AUTOMATION_TOKEN(owner PAT)调 DELETE,GITHUB_TOKEN 本身无需写权限 +permissions: + contents: read + +jobs: + delete-malicious-link: + runs-on: ubuntu-latest + # 跳过机器人与仓库 owner,避免误删维护者的正当评论 + if: ${{ github.event.comment.user.type != 'Bot' && github.event.comment.user.login != github.repository_owner }} + env: + # owner PAT:GITHUB_TOKEN 非 admin 删不掉别人的评论,必须用 owner 令牌 + GH_TOKEN: ${{ secrets.PROJECT_AUTOMATION_TOKEN }} + COMMENT_ID: ${{ github.event.comment.id }} + COMMENT_BODY: ${{ github.event.comment.body }} + COMMENT_USER: ${{ github.event.comment.user.login }} + ISSUE_URL: ${{ github.event.issue.html_url }} + REPO: ${{ github.repository }} + steps: + - name: Delete comment containing malicious attachment link + run: | + set -euo pipefail + + # 命中外部恶意附件链接即删除评论。两条分支: + # 1) 外部 http(s) 直链 .zip(排除 GitHub 自有域名的 release/archive/raw/attachments) + # 2) markdown 链接文本以 .zip/.exe/.scr/.7z 结尾且指向外部域名—— + # 规避手法常把 .zip 放链接文本、URL 用 // 协议相对或 %2E 编码域名 + # 如需扩展扩展名,修改下方两处列表即可。 + if ! printf '%s' "$COMMENT_BODY" | grep -qiP 'https?://(?!(?:github\.com|[^/]*\.githubusercontent\.com)/)[^[:space:]<>"]+\.zip([?#][^[:space:]<>"]*)?|\[[^\]]*\.(zip|7z|exe|scr)\]\((?!(?:https?:)?//(?:github\.com|[^/]*\.githubusercontent\.com)/)[^)]*\)'; then + echo "No malicious attachment link detected, skipping" + exit 0 + fi + + echo "Detected malicious attachment link in comment by @$COMMENT_USER on $ISSUE_URL — deleting" + # 物理删除评论,内容对所有人不可见。DELETE 返回 204 无响应体。 + gh api -X DELETE "repos/${REPO}/issues/comments/${COMMENT_ID}" diff --git a/.github/workflows/sync-atomgit-release-assets.yml b/.github/workflows/sync-atomgit-release-assets.yml new file mode 100644 index 0000000..4c6e87c --- /dev/null +++ b/.github/workflows/sync-atomgit-release-assets.yml @@ -0,0 +1,62 @@ +name: Sync AtomGit Release Assets + +on: + workflow_dispatch: + inputs: + tag: + description: "Release tag to sync" + required: true + type: string + +permissions: + contents: read + +env: + ATOMGIT_REPOSITORY: "t8y2/dbx" + +jobs: + sync-release-to-atomgit: + name: Sync release to AtomGit + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Ensure AtomGit tag exists + env: + TAG_NAME: ${{ inputs.tag }} + ATOMGIT_TOKEN: ${{ secrets.ATOMGIT_TOKEN }} + run: | + set -euo pipefail + git fetch origin "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}" --force + git remote add atomgit "https://t8y2:${ATOMGIT_TOKEN}@atomgit.com/t8y2/dbx.git" + git push atomgit "refs/tags/${TAG_NAME}:refs/tags/${TAG_NAME}" --force + + - name: Download GitHub release assets + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG_NAME: ${{ inputs.tag }} + GITHUB_REPOSITORY: ${{ github.repository }} + run: | + set -euo pipefail + mkdir -p "$RUNNER_TEMP/github-release" "$RUNNER_TEMP/release-assets" + gh release view "$TAG_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --json tagName,name,body,targetCommitish,isPrerelease,isDraft,assets \ + > "$RUNNER_TEMP/github-release/release.json" + gh release download "$TAG_NAME" \ + --repo "$GITHUB_REPOSITORY" \ + --dir "$RUNNER_TEMP/release-assets" \ + --clobber + + - name: Sync release assets to AtomGit + env: + ATOMGIT_TOKEN: ${{ secrets.ATOMGIT_TOKEN }} + ATOMGIT_REPOSITORY: ${{ env.ATOMGIT_REPOSITORY }} + run: | + set -euo pipefail + node .github/scripts/sync-atomgit-release.mjs \ + --github-release "$RUNNER_TEMP/github-release/release.json" \ + --assets-dir "$RUNNER_TEMP/release-assets" diff --git a/.github/workflows/sync-changelog.yml b/.github/workflows/sync-changelog.yml new file mode 100644 index 0000000..009d02d --- /dev/null +++ b/.github/workflows/sync-changelog.yml @@ -0,0 +1,46 @@ +name: Sync Changelog to R2 + +on: + workflow_run: + workflows: ["Publish Packages"] + types: [completed] + workflow_dispatch: + +jobs: + sync: + if: github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - uses: actions/setup-node@v6 + with: + node-version: 22 + + - name: Generate changelog JSON + run: node .github/scripts/sync-changelog.mjs + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} + + - name: Upload to R2 + run: | + pip install awscli --quiet + aws s3 cp releases-cn.json "s3://${R2_BUCKET_NAME}/changelog/releases-cn.json" \ + --endpoint-url "https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com" \ + --content-type application/json + if [ -f releases-en.json ]; then + aws s3 cp releases-en.json "s3://${R2_BUCKET_NAME}/changelog/releases-en.json" \ + --endpoint-url "https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com" \ + --content-type application/json + fi + if [ -f latest-en.json ]; then + aws s3 cp latest-en.json "s3://${R2_BUCKET_NAME}/changelog/latest-en.json" \ + --endpoint-url "https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com" \ + --content-type application/json + fi + env: + AWS_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} + R2_ACCOUNT_ID: ${{ secrets.R2_ACCOUNT_ID }} + R2_BUCKET_NAME: ${{ secrets.R2_BUCKET_NAME }} diff --git a/.github/workflows/sync-cnb-release-assets.yml b/.github/workflows/sync-cnb-release-assets.yml new file mode 100644 index 0000000..ddea29b --- /dev/null +++ b/.github/workflows/sync-cnb-release-assets.yml @@ -0,0 +1,40 @@ +name: Sync CNB Release Assets + +on: + workflow_dispatch: + inputs: + tag: + description: "Release tag to sync" + required: true + type: string + +permissions: + contents: read + +env: + CNB_REPOSITORY: "dbxio.com/dbx" + +jobs: + sync-release-to-cnb: + name: Sync release to CNB + runs-on: ubuntu-latest + steps: + - name: Sync release assets to CNB + env: + TAG_NAME: ${{ inputs.tag }} + GITHUB_REPOSITORY: ${{ github.repository }} + GITHUB_USERNAME: ${{ github.repository_owner }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CNB_USERNAME: cnb + CNB_TOKEN: ${{ secrets.CNB_TOKEN }} + run: | + set -euo pipefail + + wget -q https://cnb.cool/znb/mpgrm/-/releases/download/v0.1.0/mpgrm_linux_amd64.tar.gz + tar -xf mpgrm_linux_amd64.tar.gz + chmod +x mpgrm + + ./mpgrm releases sync \ + --repo "https://github.com/${GITHUB_REPOSITORY}.git" \ + --target-repo "https://cnb.cool/${CNB_REPOSITORY}.git" \ + --tags "${TAG_NAME}" diff --git a/.github/workflows/sync-mirrors.yml b/.github/workflows/sync-mirrors.yml new file mode 100644 index 0000000..3dfd21e --- /dev/null +++ b/.github/workflows/sync-mirrors.yml @@ -0,0 +1,80 @@ +name: Sync Mirrors + +on: + push: + branches: + - main + tags: + - "**" + delete: + workflow_dispatch: + +# Mirror providers reject concurrent forced updates to the same ref. Serialize all +# branch, tag, and delete events so rapid GitHub pushes cannot race each other. +concurrency: + group: sync-mirrors + cancel-in-progress: false + +jobs: + sync-cnb: + name: Sync to CNB + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Push to CNB + env: + CNB_TOKEN: ${{ secrets.CNB_TOKEN }} + run: | + set -euo pipefail + git remote add cnb "https://cnb:${CNB_TOKEN}@cnb.cool/dbxio.com/dbx.git" + git push cnb --all --force + if [ "${GITHUB_REF_TYPE}" = "tag" ]; then + git push cnb ":refs/tags/${GITHUB_REF_NAME}" || true + fi + git push cnb --tags --force + + sync-atomgit: + name: Sync to AtomGit + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Push to AtomGit + env: + ATOMGIT_TOKEN: ${{ secrets.ATOMGIT_TOKEN }} + run: | + set -euo pipefail + git remote add atomgit "https://t8y2:${ATOMGIT_TOKEN}@atomgit.com/t8y2/dbx.git" + git push atomgit --all --force + if [ "${GITHUB_REF_TYPE}" = "tag" ]; then + git push atomgit ":refs/tags/${GITHUB_REF_NAME}" || true + fi + git push atomgit --tags --force + + sync-gitee: + name: Sync to Gitee + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v5 + with: + fetch-depth: 0 + + - name: Push to Gitee + env: + GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }} + run: | + set -euo pipefail + git remote add gitee "https://codetty:${GITEE_TOKEN}@gitee.com/codetty/dbx.git" + git push gitee --all --force + if [ "${GITHUB_REF_TYPE}" = "tag" ]; then + git push gitee ":refs/tags/${GITHUB_REF_NAME}" || true + fi + git push gitee --tags --force diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..880af71 --- /dev/null +++ b/.gitignore @@ -0,0 +1,66 @@ +# Dependencies +node_modules/ +.claude/ +.codex/ +.superpowers/ +.trellis/ +.worktrees/ +openspec/ +.mcp.json +AGENTS.md +CLAUDE.md + +# Build output +dist/ +coverage/ +/target/ +plugins/jdbc/target/ +plugins/jdbc/dependency-reduced-pom.xml +plugins/jdbc/lib/*.jar +plugins/jdbc/dist/ +docs/.next/ +docs/out/ +docs/.source/ +docs/superpowers/ +src-tauri/*.dylib + +# OS files +.DS_Store +Thumbs.db + +# Editor +*.swp +*.swo +*~ +.vscode/ +.idea/ + +# GitHub (keep workflows) +.github/* +!.github/workflows/ +!.github/scripts/ +!.github/ISSUE_TEMPLATE/ + +# Env +.env +.env.* +!.env.example + +# Temp +tmp/ + +# Logs +*.log + + +# Generated changelog data +releases-*.json +latest-en.json + +test.pdb +portable/ +DBX_*_x64-portable.zip +.agents/skills +.pnpm-store/* +.dbx-web +_dev diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..a8d5342 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,20 @@ +pnpm exec lint-staged + +# Only format and re-add Rust files that are already staged +TOPLEVEL=$(git rev-parse --show-toplevel) + +format_staged_rust() { + dir="$1" + staged=$(git diff --staged --name-only --diff-filter=ACM -- "$dir" | grep '\.rs$' || true) + if [ -n "$staged" ]; then + echo "Formatting staged Rust files in $dir" + cargo fmt --manifest-path "$TOPLEVEL/$dir/Cargo.toml" + echo "$staged" | while IFS= read -r f; do + git add "$TOPLEVEL/$f" 2>/dev/null || true + done + fi +} + +format_staged_rust "src-tauri" +format_staged_rust "crates/dbx-core" +format_staged_rust "crates/dbx-web" diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..6fa8dec --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +22.13.0 diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..660b096 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,9 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "printWidth": 300, + "tabWidth": 2, + "singleQuote": false, + "trailingComma": "all", + "bracketSpacing": true, + "arrowParens": "always" +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..959b663 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,143 @@ +# Contributing to DBX + +Thanks for taking a look at DBX. Whether you fix a typo, improve docs, or tackle a database-specific bug, every PR helps. + +## Where to Start + +1. Browse [open issues](https://github.com/t8y2/dbx/issues). Good first targets are labeled `documentation`, `good first issue`, or issues in a database you already use. +2. Comment on the issue you want to work on. Say what you plan to do so others do not duplicate the effort. For community issues, you can also comment `/claim` when that workflow is enabled. +3. Fork the repo, create a branch, and open a PR against `main`. + +If you are not sure what to pick, documentation and small UX fixes are a solid first contribution. See [examples/](examples/) and the [official docs](https://dbxio.com/en/docs/what-is-dbx) for the current structure. + +## Development Setup + +### Prerequisites + +- Node.js >= 22.13.0 +- pnpm 10.27.0 +- Rust >= 1.77 +- Make + +Linux desktop builds also need WebKit/GTK packages. See [README.md](README.md#getting-started) for the exact commands. + +### Run Locally + +```bash +git clone https://github.com/t8y2/dbx.git +cd dbx +make +``` + +`make` installs dependencies when needed and starts the Tauri desktop dev environment. + +Useful shortcuts: + +```bash +make dev-fast # skip DuckDB during local dev +make dev-web # frontend only +make dev-backend # web backend only +make docs # preview the documentation site +make cargo-check-fast # fast Rust checks +``` + +### JDBC Agent Drivers + +Agent driver projects live under `agents/`. Java/JDBC driver builds and tests require JDK 21; Gradle can auto-download the toolchain when available. + +```bash +cd agents +./gradlew test +``` + +## Project Layout + +| Path | Purpose | +| --- | --- | +| `src/` | Vue frontend | +| `src-tauri/` | Tauri desktop shell and command layer | +| `crates/dbx-core/` | Shared Rust database logic | +| `crates/dbx-web/` | Docker / Web HTTP backend | +| `packages/cli/` | `@dbx-app/cli` | +| `packages/mcp-server/` | `@dbx-app/mcp-server` | +| `packages/node-core/` | Shared Node.js bridge and direct-query logic | +| `docs/` | Official documentation site | +| `examples/` | Sample configs and automation scripts | +| `agents/` | JDBC agent driver projects | + +## Making Changes + +### Branch Naming + +Use a short descriptive branch name, for example: + +- `docs/web-api-reference` +- `fix/mysql-connection-timeout` +- `feat/redis-key-search` + +### Scope + +Keep PRs focused. A docs-only PR should not include unrelated code changes. A bug fix should not also refactor nearby modules unless that refactor is required for the fix. + +### Commits + +Write commit messages in plain language: + +- `docs: add web API reference for Docker deployments` +- `fix(redis): handle empty scan cursor` +- `feat(schema): show catalog info for Doris` + +### Tests + +Run the checks that match your change: + +```bash +make cargo-check-fast +make cargo-test-fast +pnpm test +``` + +For frontend or package changes, run the relevant package tests under `packages/` or `packages/app-tests/`. + +### Documentation + +User-facing docs live in two places: + +- Repository docs: `README.md`, `CONTRIBUTING.md`, package READMEs, and `examples/` +- Website docs: `docs/content/docs/` + +If you add a new docs page under `docs/content/docs/`, register it in: + +- `docs/content/docs/meta.json` +- `docs/content/docs/meta.cn.json` + +Preview locally with: + +```bash +make docs +``` + +## Pull Requests + +1. Push your branch to your fork. +2. Open a PR against `https://github.com/t8y2/dbx` `main`. +3. Link the related issue in the PR description. +4. Explain what changed, how you tested it, and any screenshots if the UI changed. + +Small PRs are easier to review and merge. + +## What We Are Looking For + +- Documentation improvements and translations +- Reproducible bug fixes with clear before/after behavior +- Database-specific fixes where you can verify against a real instance +- Tests for non-trivial logic changes +- Examples that show CLI, MCP, Docker, or Web API usage + +## Community + +- [Discord](https://discord.gg/W7NyVDRt6a) +- [GitHub Issues](https://github.com/t8y2/dbx/issues) +- [Official docs](https://dbxio.com/en/docs/what-is-dbx) + +Merged contributors appear on the [DBX contributors wall](https://dbxio.com/en/community). diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md new file mode 100644 index 0000000..29f398a --- /dev/null +++ b/CONTRIBUTING.zh-CN.md @@ -0,0 +1,143 @@ +# 参与 DBX 贡献 + +感谢你愿意花时间了解 DBX。不管是改一个错别字、补文档,还是修某个数据库相关的问题,都很有价值。 + +## 从哪里开始 + +1. 浏览 [Issues](https://github.com/t8y2/dbx/issues)。优先看 `documentation`、`good first issue`,或者你手头正好有测试环境的数据库相关问题。 +2. 在 Issue 下留言说明你想做什么,避免重复劳动。部分社区 Issue 也支持评论 `/claim` 来认领。 +3. Fork 仓库,新建分支开发,然后向 `main` 提 PR。 + +如果暂时不确定做什么,文档和小体验修复很适合第一次贡献。可以先看 [examples/](examples/) 和[官方文档](https://dbxio.com/cn/docs/what-is-dbx) 熟悉项目结构。 + +## 开发环境 + +### 环境要求 + +- Node.js >= 22.13.0 +- pnpm 10.27.0 +- Rust >= 1.77 +- Make + +Linux 桌面端还需要 WebKit/GTK 相关依赖,具体命令见 [README.zh-CN.md](README.zh-CN.md#快速开始)。 + +### 本地运行 + +```bash +git clone https://github.com/t8y2/dbx.git +cd dbx +make +``` + +`make` 会在需要时安装依赖,并启动 Tauri 桌面端开发环境。 + +常用命令: + +```bash +make dev-fast # 本地开发跳过 DuckDB +make dev-web # 只启动前端 +make dev-backend # 只启动 Web 后端 +make docs # 本地预览文档站 +make cargo-check-fast # 快速 Rust 检查 +``` + +### JDBC Agent 驱动 + +Agent 驱动工程在 `agents/` 目录。Java/JDBC 驱动构建和测试需要 JDK 21;环境允许时 Gradle 可以自动下载对应 toolchain。 + +```bash +cd agents +./gradlew test +``` + +## 项目结构 + +| 路径 | 说明 | +| --- | --- | +| `src/` | Vue 前端 | +| `src-tauri/` | Tauri 桌面端壳层与命令层 | +| `crates/dbx-core/` | 共享 Rust 数据库逻辑 | +| `crates/dbx-web/` | Docker / Web HTTP 后端 | +| `packages/cli/` | `@dbx-app/cli` | +| `packages/mcp-server/` | `@dbx-app/mcp-server` | +| `packages/node-core/` | Node.js bridge 与直连查询逻辑 | +| `docs/` | 官方文档站 | +| `examples/` | 配置与自动化示例 | +| `agents/` | JDBC Agent 驱动工程 | + +## 开发约定 + +### 分支命名 + +分支名尽量简短明确,例如: + +- `docs/web-api-reference` +- `fix/mysql-connection-timeout` +- `feat/redis-key-search` + +### 控制改动范围 + +一个 PR 只做一类事。文档 PR 不要夹带无关代码;修 Bug 时也不要顺手大重构,除非重构是修复所必需的。 + +### 提交说明 + +提交信息用自然语言写清楚即可: + +- `docs: add web API reference for Docker deployments` +- `fix(redis): handle empty scan cursor` +- `feat(schema): show catalog info for Doris` + +### 测试 + +按改动范围跑对应检查: + +```bash +make cargo-check-fast +make cargo-test-fast +pnpm test +``` + +如果改的是前端或某个 package,再补跑对应目录下的测试。 + +### 文档 + +用户文档主要分两块: + +- 仓库内文档:`README.md`、`CONTRIBUTING.md`、各 package README、`examples/` +- 官网文档:`docs/content/docs/` + +如果在 `docs/content/docs/` 新增页面,记得同步更新: + +- `docs/content/docs/meta.json` +- `docs/content/docs/meta.cn.json` + +本地预览: + +```bash +make docs +``` + +## 提 PR + +1. 把分支推到你自己的 Fork。 +2. 向 `https://github.com/t8y2/dbx` 的 `main` 提 PR。 +3. 在 PR 描述里关联相关 Issue。 +4. 写清楚改了什么、怎么验证的;如果涉及 UI,附上截图。 + +改动越小,越容易 review 和合并。 + +## 欢迎的贡献类型 + +- 文档改进与翻译 +- 可复现、行为清晰的 Bug 修复 +- 你有真实测试环境的数据库专项修复 +- 非平凡逻辑的测试补充 +- CLI、MCP、Docker、Web API 的使用示例 + +## 社区 + +- [Discord](https://discord.gg/W7NyVDRt6a) +- [GitHub Issues](https://github.com/t8y2/dbx/issues) +- [官方文档](https://dbxio.com/cn/docs/what-is-dbx) + +合并后的贡献者会出现在 [DBX 贡献墙](https://dbxio.com/cn/community)。 diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..10c7ac6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,10781 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common 0.1.7", + "generic-array 0.14.7", +] + +[[package]] +name = "aead" +version = "0.6.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b657e772794c6b04730ea897b66a058ccd866c16d1967da05eeeecec39043fe" +dependencies = [ + "crypto-common 0.2.2", + "inout 0.2.2", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures 0.2.17", +] + +[[package]] +name = "aes" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66bd29a732b644c0431c6140f370d097879203d79b80c94a6747ba0872adaef8" +dependencies = [ + "cipher 0.5.2", + "cpubits", + "cpufeatures 0.3.0", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead 0.5.2", + "aes 0.8.4", + "cipher 0.4.4", + "ctr 0.9.2", + "ghash 0.5.1", + "subtle", +] + +[[package]] +name = "aes-gcm" +version = "0.11.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22c0c90bbe8d4f77c3ca9ddabe41a1f8382d6fc1f7cea89459d0f320371f972" +dependencies = [ + "aead 0.6.0-rc.10", + "aes 0.9.0", + "cipher 0.5.2", + "ctr 0.10.1", + "ghash 0.6.0", + "subtle", +] + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "const-random", + "getrandom 0.3.4", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android_log-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" + +[[package]] +name = "android_logger" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb4e440d04be07da1f1bf44fb4495ebd58669372fe0cffa6e48595ac5bd88a3" +dependencies = [ + "android_log-sys", + "env_filter", + "log", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" + +[[package]] +name = "ar_archive_writer" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb93bbb63b9c227414f6eb3a0adfddca591a8ce1e9b60661bb08969b87e340b" +dependencies = [ + "object", +] + +[[package]] +name = "arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "arboard" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" +dependencies = [ + "clipboard-win", + "image", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "parking_lot", + "percent-encoding", + "windows-sys 0.60.2", + "wl-clipboard-rs", + "x11rb", +] + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures 0.2.17", + "password-hash", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "arrow" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "378530e55cd479eda3c14eb345310799717e6f76d0c332041e8487022166b471" +dependencies = [ + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", +] + +[[package]] +name = "arrow-arith" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0ab212d2c1886e802f51c5212d78ebbcbb0bec980fff9dadc1eb8d45cd0b738" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "num-traits", +] + +[[package]] +name = "arrow-array" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd33d3e92f207444098c75b42de99d329562be0cf686b307b097cc52b4e999e" +dependencies = [ + "ahash 0.8.12", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.17.1", + "num-complex", + "num-integer", + "num-traits", +] + +[[package]] +name = "arrow-buffer" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6cd424c2693bcdbc150d843dc9d4d137dd2de4782ce6df491ad11a3a0416c0" +dependencies = [ + "bytes", + "half", + "num-bigint", + "num-traits", +] + +[[package]] +name = "arrow-cast" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c5aefb56a2c02e9e2b30746241058b85f8983f0fcff2ba0c6d09006e1cded7f" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-ord", + "arrow-schema", + "arrow-select", + "atoi", + "base64 0.22.1", + "chrono", + "comfy-table", + "half", + "lexical-core", + "num-traits", + "ryu", +] + +[[package]] +name = "arrow-data" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c88210023a2bfee1896af366309a3028fc3bcbd6515fa29a7990ee1baa08ee0" +dependencies = [ + "arrow-buffer", + "arrow-schema", + "half", + "num-integer", + "num-traits", +] + +[[package]] +name = "arrow-ord" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bffd8fd2579286a5d63bac898159873e5094a79009940bcb42bbfce4f19f1d0" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", +] + +[[package]] +name = "arrow-row" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab5994731204603c73ba69267616c50f80780774c6bb0476f1f830625115e0c" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", +] + +[[package]] +name = "arrow-schema" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f633dbfdf39c039ada1bf9e34c694816eb71fbb7dc78f613993b7245e078a1ed" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "arrow-select" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd065c54172ac787cf3f2f8d4107e0d3fdc26edba76fdf4f4cc170258942222" +dependencies = [ + "ahash 0.8.12", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num-traits", +] + +[[package]] +name = "arrow-string" +version = "58.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29dd7cda3ab9692f43a2e4acc444d760cc17b12bb6d8232ddf64e9bab7c06b42" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num-traits", + "regex", + "regex-syntax", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-compression" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" +dependencies = [ + "compression-codecs", + "compression-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.1.4", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75" +dependencies = [ + "async-channel", + "async-io", + "async-lock", + "async-signal", + "async-task", + "blocking", + "cfg-if", + "event-listener", + "futures-lite", + "rustix 1.1.4", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "async-signal" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5aaafa020cf5053a01f2a60e8ff5dccf550f0f77ec54a4e47285ac2bab485" +dependencies = [ + "async-io", + "async-lock", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 1.1.4", + "signal-hook-registry", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "asynchronous-codec" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + +[[package]] +name = "atk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" +dependencies = [ + "atk-sys", + "glib", + "libc", +] + +[[package]] +name = "atk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atoi_simd" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a49e05797ca52e312a0c658938b7d00693ef037799ef7187678f212d7684cf" +dependencies = [ + "debug_unsafe", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "aws-lc-rs" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ec2f1fc3ec205783a5da9a7e6c1509cc69dedf09a1949e412c1e18469326d00" +dependencies = [ + "aws-lc-sys", + "untrusted 0.7.1", + "zeroize", +] + +[[package]] +name = "aws-lc-sys" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a2f9779ce85b93ab6170dd940ad0169b5766ff848247aff13bb788b832fe3f4" +dependencies = [ + "cc", + "cmake", + "dunce", + "fs_extra", +] + +[[package]] +name = "axum" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" +dependencies = [ + "axum-core", + "base64 0.22.1", + "bytes", + "form_urlencoded", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "multer", + "percent-encoding", + "pin-project-lite", + "serde_core", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sha1 0.10.6", + "sync_wrapper", + "tokio", + "tokio-tungstenite", + "tower", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "sync_wrapper", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "base16ct" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd307490d624467aa6f74b0eabb77633d1f758a7b25f12bceb0b22e08d9726f6" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" + +[[package]] +name = "bcrypt-pbkdf" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aeac2e1fe888769f34f05ac343bbef98b14d1ffb292ab69d4608b3abc86f2a2" +dependencies = [ + "blowfish", + "pbkdf2 0.12.2", + "sha2 0.10.9", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" +dependencies = [ + "serde_core", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd35008169921d80bc60d3d0ab416eecb028c4cd653352907921d95084790be" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "710f1dd022ef4e93f8a438b4ba958de7f64308434fa6a87104481645cc30068b" +dependencies = [ + "hybrid-array", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2", +] + +[[package]] +name = "blocking" +version = "1.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "blowfish" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" +dependencies = [ + "byteorder", + "cipher 0.4.4", +] + +[[package]] +name = "borsh" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd1e3f8955a5d7de9fab72fc8373fade9fb8a703968cb200ae3dc6cf08e185a" +dependencies = [ + "borsh-derive", + "bytes", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfcfdc083699101d5a7965e49925975f2f55060f94f9a05e7187be95d530ca59" +dependencies = [ + "once_cell", + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "brotli" +version = "8.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bd8b9603c7aa97359dbd97ecf258968c95f3adddd6db2f7e7a5bef101c84560" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "874bb8112abecc98cbd6d81ea4fa7e94fb9449648c93cc89aa40c81c24d7de03" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bson" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969a9ba84b0ff843813e7249eed1678d9b6607ce5a3b8f0a47af3fcf7978e6e" +dependencies = [ + "ahash 0.8.12", + "base64 0.22.1", + "bitvec", + "getrandom 0.2.17", + "getrandom 0.3.4", + "hex", + "indexmap 2.14.0", + "js-sys", + "once_cell", + "rand 0.9.4", + "serde", + "serde_bytes", + "serde_json", + "time", + "uuid", +] + +[[package]] +name = "btoi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" +dependencies = [ + "num-traits", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "byte-unit" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6d47a4e2961fb8721bcfc54feae6455f2f64e7054f9bc67e875f0e77f4c58d" +dependencies = [ + "rust_decimal", + "schemars 1.2.1", + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bytemuck" +version = "1.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8efb64bd706a16a1bdde310ae86b351e4d21550d98d056f22f8a7f7a2183fec" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" +dependencies = [ + "serde", +] + +[[package]] +name = "bzip2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +dependencies = [ + "libbz2-rs-sys", +] + +[[package]] +name = "cairo-rs" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" +dependencies = [ + "bitflags 2.11.1", + "cairo-sys-rs", + "glib", + "libc", + "once_cell", + "thiserror 1.0.69", +] + +[[package]] +name = "cairo-sys-rs" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "calamine" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a9acfeb1555aa8def91fe8ff208aadaea850c109968ec35ac965edbe7d210b" +dependencies = [ + "atoi_simd", + "byteorder", + "codepage", + "encoding_rs", + "fast-float2", + "log", + "quick-xml 0.37.5", + "serde", + "zip 4.6.1", +] + +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "cargo_toml" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374b7c592d9c00c1f4972ea58390ac6b18cbb6ab79011f3bdc90a0b82ca06b77" +dependencies = [ + "serde", + "toml 0.9.12+spec-1.1.0", +] + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "cbc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" +dependencies = [ + "cipher 0.5.2", +] + +[[package]] +name = "cc" +version = "1.2.62" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfb" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f" +dependencies = [ + "byteorder", + "fnv", + "uuid", +] + +[[package]] +name = "cfg-expr" +version = "0.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" +dependencies = [ + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if", + "cipher 0.4.4", + "cpufeatures 0.2.17", +] + +[[package]] +name = "chacha20" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "rand_core 0.10.1", +] + +[[package]] +name = "chrono" +version = "0.4.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-link 0.2.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common 0.1.7", + "inout 0.1.4", +] + +[[package]] +name = "cipher" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" +dependencies = [ + "block-buffer 0.12.0", + "crypto-common 0.2.2", + "inout 0.2.2", +] + +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + +[[package]] +name = "cmake" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678" +dependencies = [ + "cc", +] + +[[package]] +name = "cmov" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f88a43d011fc4a6876cb7344703e297c71dda42494fee094d5f7c76bf13f746" + +[[package]] +name = "codepage" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f68d061bc2828ae826206326e61251aca94c1e4a5305cf52d9138639c918b4" +dependencies = [ + "encoding_rs", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[package]] +name = "comfy-table" +version = "7.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a65ebfec4fb190b6f90e944a817d60499ee0744e582530e2c9900a22e591d9a" +dependencies = [ + "crossterm", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "compression-codecs" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2548391e9c1929c21bf6aa2680af86fe4c1b33e6cea9ac1cfeec0bd11218cf" +dependencies = [ + "compression-core", + "flate2", + "memchr", +] + +[[package]] +name = "compression-core" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc14f565cf027a105f7a44ccf9e5b424348421a1d8952a8fc9d499d313107789" + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "connection-string" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "510ca239cf13b7f8d16a2b48f263de7b4f8c566f0af58d901031473c76afb1e3" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-oid" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c" + +[[package]] +name = "const-random" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" +dependencies = [ + "const-random-macro", +] + +[[package]] +name = "const-random-macro" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.17", + "once_cell", + "tiny-keccak", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "time", + "version_check", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "064badf302c3194842cf2c5d61f56cc88e54a759313879cdf03abdd27d0c3b97" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.10.1", + "core-graphics-types 0.2.0", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.10.1", + "libc", +] + +[[package]] +name = "core-text" +version = "20.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9d2790b5c08465d49f8dc05c8bcae9fea467855947db39b0f8145c091aaced5" +dependencies = [ + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "cpubits" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b85f9c39137c3a891689859392b1bd49812121d0d61c9caf00d46ed5ce06ae" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "cpufeatures" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201" +dependencies = [ + "libc", +] + +[[package]] +name = "crc16" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff" + +[[package]] +name = "crc32fast" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crossterm" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" +dependencies = [ + "bitflags 2.11.1", + "crossterm_winapi", + "parking_lot", + "rustix 0.38.44", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "crypto-bigint" +version = "0.7.0-rc.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96dacf199529fb801ae62a9aafdc01b189e9504c0d1ee1512a4c16bcd8666a93" +dependencies = [ + "cpubits", + "ctutils", + "getrandom 0.4.2", + "hybrid-array", + "num-traits", + "rand_core 0.10.1", + "serdect", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array 0.14.7", + "rand_core 0.6.4", + "typenum", +] + +[[package]] +name = "crypto-common" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453" +dependencies = [ + "getrandom 0.4.2", + "hybrid-array", + "rand_core 0.10.1", +] + +[[package]] +name = "crypto-primes" +version = "0.7.0-pre.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6081ce8b60c0e533e2bba42771b94eb6149052115f4179744d5779883dc98583" +dependencies = [ + "crypto-bigint", + "libm", + "rand_core 0.10.1", +] + +[[package]] +name = "cssparser" +version = "0.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae61cf9c0abb83bd659dab65b7e4e38d8236824c85f0f804f173567bda257d2" +dependencies = [ + "cssparser-macros", + "dtoa-short", + "itoa", + "phf", + "smallvec", +] + +[[package]] +name = "cssparser-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctor" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "352d39c2f7bef1d6ad73db6f5160efcaed66d94ef8c6c573a8410c00bf909a98" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher 0.4.4", +] + +[[package]] +name = "ctr" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21" +dependencies = [ + "cipher 0.5.2", +] + +[[package]] +name = "ctutils" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5515a3834141de9eafb9717ad39eea8247b5674e6066c404e8c4b365d2a29e" +dependencies = [ + "cmov", + "subtle", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "curve25519-dalek-derive", + "fiat-crypto 0.2.9", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "5.0.0-pre.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335f1947f241137a14106b6f5acc5918a5ede29c9d71d3f2cb1678d5075d9fc3" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "curve25519-dalek-derive", + "digest 0.11.3", + "fiat-crypto 0.3.0", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "darling" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" +dependencies = [ + "darling_core 0.20.11", + "darling_macro 0.20.11", +] + +[[package]] +name = "darling" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" +dependencies = [ + "darling_core 0.23.0", + "darling_macro 0.23.0", +] + +[[package]] +name = "darling_core" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", +] + +[[package]] +name = "darling_core" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" +dependencies = [ + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.20.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" +dependencies = [ + "darling_core 0.20.11", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "darling_macro" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" +dependencies = [ + "darling_core 0.23.0", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "data-encoding" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8" + +[[package]] +name = "dbus" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b942602992bb7acfd1f51c49811c58a610ef9181b6e66f3e519d79b540a3bf73" +dependencies = [ + "libc", + "libdbus-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "dbx" +version = "0.5.55" +dependencies = [ + "anyhow", + "axum", + "base64 0.22.1", + "calamine", + "chrono", + "csv", + "dbx-core", + "deadpool-postgres", + "duckdb", + "font-kit", + "futures", + "libloading 0.8.9", + "log", + "mongodb", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "percent-encoding", + "portpicker", + "redis", + "reqwest 0.12.28", + "russh", + "rust_decimal", + "rustls 0.23.40", + "serde", + "serde_json", + "tauri", + "tauri-build", + "tauri-plugin-clipboard-manager", + "tauri-plugin-deep-link", + "tauri-plugin-dialog", + "tauri-plugin-fs", + "tauri-plugin-log", + "tauri-plugin-process", + "tauri-plugin-shell", + "tauri-plugin-single-instance", + "tauri-plugin-updater", + "tauri-plugin-window-state", + "tiberius", + "tokio", + "tokio-postgres", + "tokio-util", + "uuid", + "zip 4.6.1", +] + +[[package]] +name = "dbx-core" +version = "0.1.0" +dependencies = [ + "aes-gcm 0.10.3", + "anyhow", + "argon2", + "async-trait", + "base64 0.22.1", + "bytes", + "calamine", + "chrono", + "csv", + "deadpool-postgres", + "duckdb", + "encoding_rs", + "font-kit", + "futures", + "iana-time-zone", + "jsonwebtoken", + "log", + "mongodb", + "mysql_async", + "pageant", + "percent-encoding", + "portpicker", + "rayon", + "redis", + "regex", + "reqwest 0.12.28", + "rusqlite", + "russh", + "rust_decimal", + "rustls 0.23.40", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "sha2 0.10.9", + "sqlparser", + "sysinfo", + "tiberius", + "tokio", + "tokio-postgres", + "tokio-postgres-rustls", + "tokio-util", + "uuid", + "webpki-roots 0.26.11", + "zip 4.6.1", +] + +[[package]] +name = "dbx-web" +version = "0.5.55" +dependencies = [ + "aes-gcm 0.10.3", + "argon2", + "async-stream", + "axum", + "base64 0.22.1", + "chrono", + "dbx-core", + "futures", + "log", + "pbkdf2 0.12.2", + "redis", + "reqwest 0.12.28", + "rustls 0.23.40", + "serde", + "serde_json", + "sha2 0.10.9", + "tokio", + "tokio-util", + "tower-http", + "tracing", + "tracing-subscriber", + "uuid", +] + +[[package]] +name = "deadpool" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" +dependencies = [ + "deadpool-runtime", + "lazy_static", + "num_cpus", + "tokio", +] + +[[package]] +name = "deadpool-postgres" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9" +dependencies = [ + "async-trait", + "deadpool", + "getrandom 0.2.17", + "tokio", + "tokio-postgres", + "tracing", +] + +[[package]] +name = "deadpool-runtime" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" +dependencies = [ + "tokio", +] + +[[package]] +name = "debug_unsafe" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eed2c4702fa172d1ce21078faa7c5203e69f5394d48cc436d25928394a867a2" + +[[package]] +name = "deflate64" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac6b926516df9c60bfa16e107b21086399f8285a44ca9711344b9e553c5146e2" + +[[package]] +name = "delegate" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid 0.9.6", + "der_derive", + "flagset", + "zeroize", +] + +[[package]] +name = "der" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fd89660b2dc699704064e59e9dba0147b903e85319429e131620d022be411b" +dependencies = [ + "const-oid 0.10.2", + "pem-rfc7468 1.0.0", + "zeroize", +] + +[[package]] +name = "der_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "deranged" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +dependencies = [ + "powerfmt", + "serde_core", +] + +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "derive-where" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d08b3a0bcc0d079199cd476b2cae8435016ec11d1c0986c6901c5ac223041534" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "derive_arbitrary" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.117", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "const-oid 0.9.6", + "crypto-common 0.1.7", + "subtle", +] + +[[package]] +name = "digest" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" +dependencies = [ + "block-buffer 0.12.0", + "const-oid 0.10.2", + "crypto-common 0.2.2", + "ctutils", +] + +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.11.1", + "block2", + "libc", + "objc2", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dlib" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" +dependencies = [ + "libloading 0.8.9", +] + +[[package]] +name = "dlopen2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2c5bd4158e66d1e215c49b837e11d62f3267b30c92f1d171c4d3105e3dc4d4" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fbbb781877580993a8707ec48672673ec7b81eeba04cfd2310bd28c08e47c8f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "dlv-list" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f" +dependencies = [ + "const-random", +] + +[[package]] +name = "dom_query" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521e380c0c8afb8d9a1e83a1822ee03556fc3e3e7dbc1fd30be14e37f9cb3f89" +dependencies = [ + "bit-set", + "cssparser", + "foldhash 0.2.0", + "html5ever", + "precomputed-hash", + "selectors", + "tendril", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" +dependencies = [ + "serde", +] + +[[package]] +name = "dtoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c3cf4824e2d5f025c7b531afcb2325364084a16806f6d47fbc1f5fbd9960590" + +[[package]] +name = "dtoa-short" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" +dependencies = [ + "dtoa", +] + +[[package]] +name = "dtor" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1057d6c64987086ff8ed0fd3fbf377a6b7d205cc7715868cd401705f715cbe4" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + +[[package]] +name = "duckdb" +version = "1.10503.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cb42b21e3be42ef14acda15ce8dc99c125ce5376b87c8016a432cf14ae65de1" +dependencies = [ + "arrow", + "cast", + "comfy-table", + "fallible-iterator 0.3.0", + "fallible-streaming-iterator", + "hashlink 0.10.0", + "libduckdb-sys", + "num-integer", + "rust_decimal", + "strum", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dwrote" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b35532432acc8b19ceed096e35dfa088d3ea037fe4f3c085f1f97f33b4d02" +dependencies = [ + "lazy_static", + "libc", + "winapi", + "wio", +] + +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + +[[package]] +name = "ecdsa" +version = "0.17.0-rc.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91bbdd377139884fafcad8dc43a760a3e1e681aa26db910257fa6535b70e1829" +dependencies = [ + "der 0.8.0", + "digest 0.11.3", + "elliptic-curve", + "rfc6979", + "signature", + "spki 0.8.0-rc.4", + "zeroize", +] + +[[package]] +name = "ed25519" +version = "3.0.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e914c7c52decb085cea910552e24c63ac019e3ab8bf001ff736da9a9d9d890" +dependencies = [ + "pkcs8", + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "3.0.0-pre.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053618a4c3d3bc24f188aa660ae75a46eeab74ef07fb415c61431e5e7cd4749b" +dependencies = [ + "curve25519-dalek 5.0.0-pre.6", + "ed25519", + "rand_core 0.10.1", + "serde", + "sha2 0.11.0", + "signature", + "subtle", + "zeroize", +] + +[[package]] +name = "either" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" + +[[package]] +name = "elliptic-curve" +version = "0.14.0-rc.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde7860544606d222fd6bd6d9f9a0773321bf78072a637e1d560a058c0031978" +dependencies = [ + "base16ct", + "crypto-bigint", + "crypto-common 0.2.2", + "digest 0.11.3", + "hkdf", + "hybrid-array", + "once_cell", + "pem-rfc7468 1.0.0", + "pkcs8", + "rand_core 0.10.1", + "rustcrypto-ff", + "rustcrypto-group", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "embed-resource" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31a88c8d26de40ed18fe748c547845aa39de1db3afd958f8cb91579f3644bcb" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 1.1.2+spec-1.1.0", + "vswhom", + "winreg", +] + +[[package]] +name = "embed_plist" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "endi" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b7e2430c6dff6a955451e2cfc438f09cea1965a9d6f87f7e3b90decc014099" + +[[package]] +name = "enum_dispatch" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "enumflags2" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "env_filter" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bf3c259d255ca70051b30e2e95b5446cdb8949ac4cd22c0d7fd634d89f568e2" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "error-code" +version = "3.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59" + +[[package]] +name = "event-listener" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fallible-iterator" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fast-float2" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" + +[[package]] +name = "fastrand" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" + +[[package]] +name = "fax" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf1079563223d5d59d83c85886a56e586cfd5c1a26292e971a0fa266531ac5a" + +[[package]] +name = "fdeflate" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "fern" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4316185f709b23713e41e3195f90edef7fb00c3ed4adc79769cf09cc762a3b29" +dependencies = [ + "log", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "fiat-crypto" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" + +[[package]] +name = "field-offset" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" +dependencies = [ + "memoffset", + "rustc_version", +] + +[[package]] +name = "filetime" +version = "0.2.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c287a33c7f0a620c38e641e7f60827713987b3c0f26e8ddc9462cc69cf75759" +dependencies = [ + "cfg-if", + "libc", +] + +[[package]] +name = "find-msvc-tools" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + +[[package]] +name = "flagset" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" + +[[package]] +name = "flate2" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" +dependencies = [ + "crc32fast", + "miniz_oxide", + "zlib-rs", +] + +[[package]] +name = "float-ord" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "font-kit" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c7e611d49285d4c4b2e1727b72cf05353558885cc5252f93707b845dfcaf3d3" +dependencies = [ + "bitflags 2.11.1", + "byteorder", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "core-text", + "dirs", + "dwrote", + "float-ord", + "freetype-sys", + "lazy_static", + "libc", + "log", + "pathfinder_geometry", + "pathfinder_simd", + "walkdir", + "winapi", + "yeslogic-fontconfig-sys", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "freetype-sys" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7edc5b9669349acfda99533e9e0bcf26a51862ab43b08ee7745c55d28eb134" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "fs_extra" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" + +[[package]] +name = "futures-executor" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "futures-sink" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" + +[[package]] +name = "futures-task" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" + +[[package]] +name = "futures-util" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gdk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" +dependencies = [ + "cairo-rs", + "gdk-pixbuf", + "gdk-sys", + "gio", + "glib", + "libc", + "pango", +] + +[[package]] +name = "gdk-pixbuf" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" +dependencies = [ + "gdk-pixbuf-sys", + "gio", + "glib", + "libc", + "once_cell", +] + +[[package]] +name = "gdk-pixbuf-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gdk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" +dependencies = [ + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkwayland-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140071d506d223f7572b9f09b5e155afbd77428cd5cc7af8f2694c41d98dfe69" +dependencies = [ + "gdk-sys", + "glib-sys", + "gobject-sys", + "libc", + "pkg-config", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3caa00e14351bebbc8183b3c36690327eb77c49abc2268dd4bd36b856db3fbfe" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", +] + +[[package]] +name = "gdkx11-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e7445fe01ac26f11601db260dd8608fe172514eb63b3b5e261ea6b0f4428d" +dependencies = [ + "gdk-sys", + "glib-sys", + "libc", + "system-deps", + "x11", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "generic-array" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dab9e9188e97a93276e1fe7b56401b851e2b45a46d045ca658100c1303ada649" +dependencies = [ + "generic-array 0.14.7", + "rustversion", + "typenum", +] + +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix 1.1.4", + "windows-link 0.2.1", +] + +[[package]] +name = "getrandom" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi 5.3.0", + "wasip2", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", + "rand_core 0.10.1", + "wasip2", + "wasip3", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval 0.6.2", +] + +[[package]] +name = "ghash" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" +dependencies = [ + "polyval 0.7.1", +] + +[[package]] +name = "gio" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "gio-sys", + "glib", + "libc", + "once_cell", + "pin-project-lite", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "gio-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", + "winapi", +] + +[[package]] +name = "glib" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" +dependencies = [ + "bitflags 2.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-task", + "futures-util", + "gio-sys", + "glib-macros", + "glib-sys", + "gobject-sys", + "libc", + "memchr", + "once_cell", + "smallvec", + "thiserror 1.0.69", +] + +[[package]] +name = "glib-macros" +version = "0.18.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" +dependencies = [ + "heck 0.4.1", + "proc-macro-crate 2.0.2", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "glib-sys" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" +dependencies = [ + "libc", + "system-deps", +] + +[[package]] +name = "glob" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" + +[[package]] +name = "gobject-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" +dependencies = [ + "glib-sys", + "libc", + "system-deps", +] + +[[package]] +name = "gtk" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" +dependencies = [ + "atk", + "cairo-rs", + "field-offset", + "futures-channel", + "gdk", + "gdk-pixbuf", + "gio", + "glib", + "gtk-sys", + "gtk3-macros", + "libc", + "pango", + "pkg-config", +] + +[[package]] +name = "gtk-sys" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" +dependencies = [ + "atk-sys", + "cairo-sys-rs", + "gdk-pixbuf-sys", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "pango-sys", + "system-deps", +] + +[[package]] +name = "gtk3-macros" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "h2" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "171fefbc92fe4a4de27e0698d6a5b392d6a0e333506bc49133760b3bcf948733" +dependencies = [ + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap 2.14.0", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "cfg-if", + "crunchy", + "num-traits", + "zerocopy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.12", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "hashlink" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.5", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-literal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e712f64ec3850b98572bffac52e2c6f282b29fe6c5fa6d42334b30be438d95c1" + +[[package]] +name = "hickory-net" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2295ed2f9c31e471e1428a8f88a3f0e1f4b27c15049592138d1eebe9c35b183" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "futures-channel", + "futures-io", + "futures-util", + "hickory-proto", + "idna", + "ipnet", + "jni 0.22.4", + "rand 0.10.1", + "thiserror 2.0.18", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-proto" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bab31817bfb44672a252e97fe81cd0c18d1b2cf892108922f6818820df8c643" +dependencies = [ + "data-encoding", + "idna", + "ipnet", + "jni 0.22.4", + "once_cell", + "prefix-trie", + "rand 0.10.1", + "ring", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d58d28879ceecde6607729660c2667a081ccdc082e082675042793960f178c" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-net", + "hickory-proto", + "ipconfig", + "ipnet", + "jni 0.22.4", + "moka", + "ndk-context", + "once_cell", + "parking_lot", + "rand 0.10.1", + "resolv-conf", + "smallvec", + "system-configuration", + "thiserror 2.0.18", + "tokio", + "tracing", +] + +[[package]] +name = "hkdf" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" +dependencies = [ + "hmac 0.13.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6303bc9732ae41b04cb554b844a762b4115a61bfaa81e3e83050991eeb56863f" +dependencies = [ + "digest 0.11.3", +] + +[[package]] +name = "html5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1054432bae2f14e0061e33d23402fbaa67a921d319d56adc6bcf887ddad1cbc2" +dependencies = [ + "log", + "markup5ever", +] + +[[package]] +name = "http" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" +dependencies = [ + "bytes", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +dependencies = [ + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9171a2ea8a68358193d15dd5d70c1c10a2afc3e7e4c5bc92bc9f025cebd7359c" + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hybrid-array" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" +dependencies = [ + "ctutils", + "subtle", + "typenum", + "zeroize", +] + +[[package]] +name = "hyper" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6299f016b246a94207e63da54dbe807655bf9e00044f73ded42c3ac5305fbcca" +dependencies = [ + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls 0.23.40", + "tokio", + "tokio-rustls 0.26.4", + "tower-service", + "webpki-roots 1.0.7", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.3", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry 0.6.1", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.62.2", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ico" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e795dff5605e0f04bff85ca41b51a96b83e80b281e96231bcaaf1ac35103371" +dependencies = [ + "byteorder", + "png 0.17.16", +] + +[[package]] +name = "icu_collections" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" + +[[package]] +name = "icu_properties" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" + +[[package]] +name = "icu_provider" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "id-arena" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "moxcms", + "num-traits", + "png 0.18.1", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", + "serde", + "serde_core", +] + +[[package]] +name = "infer" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a588916bfdfd92e71cacef98a63d9b1f0d74d6599980d11894290e7ddefffcf7" +dependencies = [ + "cfb", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "block-padding 0.3.3", + "generic-array 0.14.7", +] + +[[package]] +name = "inout" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" +dependencies = [ + "block-padding 0.4.2", + "hybrid-array", +] + +[[package]] +name = "internal-russh-forked-ssh-key" +version = "0.6.18+upstream-0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f8a978272e3cbdf4768f7363eb1c8e1e6ba63c52a3ed05e29e222da4aec7cb" +dependencies = [ + "argon2", + "bcrypt-pbkdf", + "crypto-bigint", + "ecdsa", + "ed25519-dalek", + "hex", + "hmac 0.13.0", + "num-bigint-dig", + "p256", + "p384", + "p521", + "rand_core 0.10.1", + "rsa", + "sec1", + "sha1 0.11.0", + "sha2 0.11.0", + "signature", + "ssh-cipher", + "ssh-encoding", + "subtle", + "zeroize", +] + +[[package]] +name = "internal-russh-num-bigint" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae8e22120c32fb4d19ec55fba35015f57095cd95a2e3b732e44457f5915b2ee8" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.10.1", + "rand_core 0.10.1", +] + +[[package]] +name = "ipconfig" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d40460c0ce33d6ce4b0630ad68ff63d6661961c48b6dba35e5a4d81cfb48222" +dependencies = [ + "socket2 0.6.3", + "widestring", + "windows-registry 0.6.1", + "windows-result 0.4.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "ipnet" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" +dependencies = [ + "serde", +] + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "javascriptcore-rs" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" +dependencies = [ + "bitflags 1.3.2", + "glib", + "javascriptcore-rs-sys", +] + +[[package]] +name = "javascriptcore-rs-sys" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.18", + "walkdir", + "windows-link 0.2.1", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.117", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "142bc4740e452c1e57ade0cbc129f139c9093e354346f0872ef985f4f5cf5f11" +dependencies = [ + "cfg-if", + "futures-util", + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "json-patch" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "863726d7afb6bc2590eeff7135d923545e5e964f004c2ccf8716c25e70a86f08" +dependencies = [ + "jsonptr", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "jsonptr" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dea2b27dd239b2556ed7a25ba842fe47fd602e7fc7433c2a8d6106d4d9edd70" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde" +dependencies = [ + "base64 0.22.1", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "keccak" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e24a010dd405bd7ed803e5253182815b41bf2e6a80cc3bfc066658e03a198aa" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", +] + +[[package]] +name = "kem" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01737161ba802849cfd486b5bd209d38ba4943494c249a8126005170c7621edd" +dependencies = [ + "crypto-common 0.2.2", + "rand_core 0.10.1", +] + +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.11.1", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "keyed_priority_queue" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" +dependencies = [ + "indexmap 2.14.0", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "leb128fmt" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" + +[[package]] +name = "lexical-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8d125a277f807e55a77304455eb7b1cb52f2b18c143b60e766c120bd64a594" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52a9f232fbd6f550bc0137dcb5f99ab674071ac2d690ac69704593cb4abbea56" +dependencies = [ + "lexical-parse-integer", + "lexical-util", +] + +[[package]] +name = "lexical-parse-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a7a039f8fb9c19c996cd7b2fcce303c1b2874fe1aca544edc85c4a5f8489b34" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "lexical-util" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2604dd126bb14f13fb5d1bd6a66155079cb9fa655b37f875b3a742c705dbed17" + +[[package]] +name = "lexical-write-float" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c438c87c013188d415fbabbb1dceb44249ab81664efbd31b14ae55dabb6361" +dependencies = [ + "lexical-util", + "lexical-write-integer", +] + +[[package]] +name = "lexical-write-integer" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "409851a618475d2d5796377cad353802345cba92c867d9fbcde9cf4eac4e14df" +dependencies = [ + "lexical-util", +] + +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading 0.7.4", + "once_cell", +] + +[[package]] +name = "libbz2-rs-sys" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b357333733e8260735ba5894eb928c02ecc69c78715f01a8019e7fa7f2db4c" + +[[package]] +name = "libc" +version = "0.2.186" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" + +[[package]] +name = "libdbus-sys" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "328c4789d42200f1eeec05bd86c9c13c7f091d2ba9a6ea35acdf51f31bc0f043" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "libduckdb-sys" +version = "1.10503.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9a4389c243e7afa0fbc8d8471031335ddc8a2dac4534f3290c9c2ba3edabab5" +dependencies = [ + "cc", + "flate2", + "pkg-config", + "reqwest 0.12.28", + "serde", + "serde_json", + "tar", + "vcpkg", + "zip 6.0.0", +] + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link 0.2.1", +] + +[[package]] +name = "liblzma" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6033b77c21d1f56deeae8014eb9fbe7bdf1765185a6c508b5ca82eeaed7f899" +dependencies = [ + "liblzma-sys", +] + +[[package]] +name = "liblzma-sys" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a60851d15cd8c5346eca4ab8babff585be2ae4bc8097c067291d3ffe2add3b6" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "libredox" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c" +dependencies = [ + "libc", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616ec5685824bcc94416c6d4a7a446eea774a31efd7062c8480ba6fd06d7a6e5" +dependencies = [ + "value-bag", +] + +[[package]] +name = "lru" +version = "0.16.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f66e8d5d03f609abc3a39e6f08e4164ebf1447a732906d39eb9b99b7919ef39" +dependencies = [ + "hashbrown 0.16.1", +] + +[[package]] +name = "lru-slab" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" + +[[package]] +name = "macro_magic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc33f9f0351468d26fbc53d9ce00a096c8522ecb42f19b50f34f2c422f76d21d" +dependencies = [ + "macro_magic_core", + "macro_magic_macros", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "macro_magic_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1687dc887e42f352865a393acae7cf79d98fab6351cde1f58e9e057da89bf150" +dependencies = [ + "const-random", + "derive-syn-parse", + "macro_magic_core_macros", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "macro_magic_core_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b02abfe41815b5bd98dbd4260173db2c116dda171dc0fe7838cb206333b83308" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "macro_magic_macros" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ea28ee64b88876bf45277ed9a5817c1817df061a74f2b988971a12570e5869" +dependencies = [ + "macro_magic_core", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "markup5ever" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8983d30f2915feeaaab2d6babdd6bc7e9ed1a00b66b5e6d74df19aa9c0e91862" +dependencies = [ + "log", + "tendril", + "web_atoms", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matchit" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "md-5" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b6441f590336821bb897fb28fc622898ccceb1d6cea3fde5ea86b090c4de98" +dependencies = [ + "cfg-if", + "digest 0.11.3", +] + +[[package]] +name = "md5" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" + +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minisign-verify" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22f9645cb765ea72b8111f36c522475d2daa0d22c957a9826437e97534bc4e9e" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys 0.61.2", +] + +[[package]] +name = "ml-kem" +version = "0.3.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8198b5db27ac9773534c371751a59dc18aec8b80aa141e69abfdd1dec2e3f78c" +dependencies = [ + "hybrid-array", + "kem", + "module-lattice", + "rand_core 0.10.1", + "sha3", +] + +[[package]] +name = "module-lattice" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c61b87c9683ab7cb1c6871d261ad5479b6b10ceb52c4352aaca3b5d35a8febe" +dependencies = [ + "ctutils", + "hybrid-array", + "num-traits", +] + +[[package]] +name = "moka" +version = "0.12.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "equivalent", + "parking_lot", + "portable-atomic", + "smallvec", + "tagptr", + "uuid", +] + +[[package]] +name = "mongocrypt" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da0cd419a51a5fb44819e290fbdb0665a54f21dead8923446a799c7f4d26ad9" +dependencies = [ + "bson", + "mongocrypt-sys", + "once_cell", + "serde", +] + +[[package]] +name = "mongocrypt-sys" +version = "0.1.5+1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224484c5d09285a7b8cb0a0c117e847ebd14cb6e4470ecf68cdb89c503b0edb9" + +[[package]] +name = "mongodb" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ba0cd571553d1f6936c6f180964776ece6ab7507dc8765f8a9c9c49d8cd00" +dependencies = [ + "base64 0.22.1", + "bitflags 2.11.1", + "bson", + "derive-where", + "derive_more", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hickory-net", + "hickory-proto", + "hickory-resolver", + "hmac 0.12.1", + "macro_magic", + "md-5 0.10.6", + "mongocrypt", + "mongodb-internal-macros", + "pbkdf2 0.12.2", + "percent-encoding", + "rand 0.9.4", + "rustc_version_runtime", + "rustls 0.23.40", + "serde", + "serde_bytes", + "serde_with", + "sha1 0.10.6", + "sha2 0.10.9", + "socket2 0.6.3", + "stringprep", + "strsim", + "take_mut", + "thiserror 2.0.18", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "typed-builder", + "uuid", + "webpki-roots 1.0.7", +] + +[[package]] +name = "mongodb-internal-macros" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99ceb1a9a1018e470077ec94cf3a8c2d0e6da542b2c05ea95a59a0a627147375" +dependencies = [ + "macro_magic", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "muda" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47a2e3dff89cd322c66647942668faee0a2b1f88ea6cbb4d374b4a8d7e92528c" +dependencies = [ + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.18", + "windows-sys 0.61.2", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "mysql-common-derive" +version = "0.32.1" +source = "git+https://github.com/t8y2/rust_mysql_common.git?rev=5b30d4912ebb23728f1196b2b9eb928eebb73f92#5b30d4912ebb23728f1196b2b9eb928eebb73f92" +dependencies = [ + "darling 0.20.11", + "heck 0.5.0", + "num-bigint", + "proc-macro-crate 3.5.0", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.117", + "termcolor", + "thiserror 2.0.18", +] + +[[package]] +name = "mysql_async" +version = "0.36.2" +source = "git+https://github.com/t8y2/mysql_async.git?rev=7b565fbe76a168828189f7b98fe3b1989344c54e#7b565fbe76a168828189f7b98fe3b1989344c54e" +dependencies = [ + "bytes", + "crossbeam-queue", + "flate2", + "futures-core", + "futures-sink", + "futures-util", + "keyed_priority_queue", + "lru", + "mysql_common", + "pem", + "percent-encoding", + "rand 0.9.4", + "rustls 0.23.40", + "rustls-pemfile 2.2.0", + "serde", + "serde_json", + "socket2 0.5.10", + "thiserror 2.0.18", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "twox-hash", + "url", + "webpki-roots 0.26.11", +] + +[[package]] +name = "mysql_common" +version = "0.35.5" +source = "git+https://github.com/t8y2/rust_mysql_common.git?rev=5b30d4912ebb23728f1196b2b9eb928eebb73f92#5b30d4912ebb23728f1196b2b9eb928eebb73f92" +dependencies = [ + "base64 0.22.1", + "bitflags 2.11.1", + "btoi", + "byteorder", + "bytes", + "chrono", + "crc32fast", + "curve25519-dalek 4.1.3", + "flate2", + "getrandom 0.3.4", + "mysql-common-derive", + "num-bigint", + "num-traits", + "regex", + "rust_decimal", + "saturating", + "serde", + "serde_json", + "sha1 0.10.6", + "sha2 0.10.9", + "thiserror 2.0.18", + "uuid", +] + +[[package]] +name = "native-tls" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe 0.2.1", + "openssl-sys", + "schannel", + "security-framework 3.7.0", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.11.1", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" +dependencies = [ + "bitflags 2.11.1", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + +[[package]] +name = "ntapi" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3b335231dfd352ffb0f8017f3b6027a4917f7df785ea2143d8af2adc66980ae" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" +dependencies = [ + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.6", + "serde", + "smallvec", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", + "objc2-exception-helper", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-data" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.11.1", + "dispatch2", + "objc2", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.11.1", + "dispatch2", + "objc2", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d563b38d2b97209f8e861173de434bd0214cf020e3423a52624cd1d989f006" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-location" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca347214e24bc973fc025fd0d36ebb179ff30536ed1f80252706db19ee452009" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-text" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-exception-helper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7a1c5fbb72d7735b076bb47b578523aedc40f3c439bea6dfd595c089d79d98a" +dependencies = [ + "cc", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.11.1", + "block2", + "libc", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-osa-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-app-kit", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.11.1", + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "objc2-system-configuration" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7216bd11cbda54ccabcab84d523dc93b858ec75ecfb3a7d89513fa22464da396" +dependencies = [ + "objc2-core-foundation", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-core-image", + "objc2-core-location", + "objc2-core-text", + "objc2-foundation", + "objc2-quartz-core", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df9128cbbfef73cda168416ccf7f837b62737d748333bfe9ab71c245d76613e" +dependencies = [ + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-web-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" +dependencies = [ + "bitflags 2.11.1", + "block2", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" +dependencies = [ + "critical-section", + "portable-atomic", +] + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "open" +version = "5.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fbaa89d2ddc8473c78a3adf69eea8cffa28c483b8e02a971ef31527cd0fc92c" +dependencies = [ + "dunce", + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "openssl" +version = "0.10.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" +dependencies = [ + "bitflags 2.11.1", + "cfg-if", + "foreign-types 0.3.2", + "libc", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-probe" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" + +[[package]] +name = "openssl-src" +version = "300.6.1+3.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.116" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28a22dc7140cda5f096e5e7724a6962ca81a7f8bfd2979f9b18c11af56318c4" +dependencies = [ + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-multimap" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49203cdcae0030493bad186b28da2fa25645fa276a51b6fec8010d281e02ef79" +dependencies = [ + "dlv-list", + "hashbrown 0.14.5", +] + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "osakit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732c71caeaa72c065bb69d7ea08717bd3f4863a4f451402fc9513e29dbd5261b" +dependencies = [ + "objc2", + "objc2-foundation", + "objc2-osa-kit", + "serde", + "serde_json", + "thiserror 2.0.18", +] + +[[package]] +name = "p256" +version = "0.14.0-rc.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "018bfbb86e05fd70a83e985921241035ee09fcd369c4a2c3680b389a01d2ad28" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primefield", + "primeorder", + "sha2 0.11.0", +] + +[[package]] +name = "p384" +version = "0.14.0-rc.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c91df688211f5957dbe2ab599dcbcaade8d6d3cdc15c5b350d350d7d07ce423" +dependencies = [ + "ecdsa", + "elliptic-curve", + "fiat-crypto 0.3.0", + "primefield", + "primeorder", + "sha2 0.11.0", +] + +[[package]] +name = "p521" +version = "0.14.0-rc.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de6cd9451de522549d36cc78a1b45a699a3d55a872e8ea0c8f0318e502d99e2c" +dependencies = [ + "base16ct", + "ecdsa", + "elliptic-curve", + "primefield", + "primeorder", + "sha2 0.11.0", +] + +[[package]] +name = "pageant" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f3a5ae18f65a85c67a77d18d42d3606c07948e3c17c1e5f74852b26589e88a5" +dependencies = [ + "base16ct", + "byteorder", + "bytes", + "delegate", + "futures", + "log", + "rand 0.10.1", + "sha2 0.11.0", + "thiserror 2.0.18", + "tokio", + "windows 0.62.2", + "windows-strings 0.5.1", +] + +[[package]] +name = "pango" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" +dependencies = [ + "gio", + "glib", + "libc", + "once_cell", + "pango-sys", +] + +[[package]] +name = "pango-sys" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" +dependencies = [ + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link 0.2.1", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "pathdiff" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" + +[[package]] +name = "pathfinder_geometry" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3" +dependencies = [ + "log", + "pathfinder_simd", +] + +[[package]] +name = "pathfinder_simd" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4500030c302e4af1d423f36f3b958d1aecb6c04184356ed5a833bf6b60435777" +dependencies = [ + "rustc_version", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac 0.12.1", +] + +[[package]] +name = "pbkdf2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112d82ceb8c5bf524d9af484d4e4970c9fd5a0cc15ba14ad93dccd28873b0629" +dependencies = [ + "digest 0.11.3", + "hmac 0.13.0", +] + +[[package]] +name = "pem" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" +dependencies = [ + "base64 0.22.1", + "serde_core", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pem-rfc7468" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6305423e0e7738146434843d1694d621cce767262b2a86910beab705e4493d9" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset", + "hashbrown 0.15.5", + "indexmap 2.14.0", +] + +[[package]] +name = "phf" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" +dependencies = [ + "phf_macros", + "phf_shared", + "serde", +] + +[[package]] +name = "phf_codegen" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49aa7f9d80421bca176ca8dbfebe668cc7a2684708594ec9f3c0db0805d5d6e1" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "135ace3a761e564ec88c03a77317a7c6b80bb7f7135ef2544dbe054243b89737" +dependencies = [ + "fastrand", + "phf_shared", +] + +[[package]] +name = "phf_macros" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812f032b54b1e759ccd5f8b6677695d5268c588701effba24601f6932f8269ef" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "phf_shared" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.8.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "986d2e952779af96ea048f160fd9194e1751b4faea78bcf3ceb456efe008088e" +dependencies = [ + "der 0.8.0", + "spki 0.8.0-rc.4", +] + +[[package]] +name = "pkcs5" +version = "0.8.0-rc.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5a777c6e26664bc9504b3ce3f6133f8f20d9071f130a4f9fcbd3186959d8dd6" +dependencies = [ + "aes 0.9.0", + "aes-gcm 0.11.0-rc.3", + "cbc 0.2.1", + "der 0.8.0", + "pbkdf2 0.13.0", + "rand_core 0.10.1", + "scrypt", + "sha2 0.11.0", + "spki 0.8.0-rc.4", +] + +[[package]] +name = "pkcs8" +version = "0.11.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12922b6296c06eb741b02d7b5161e3aaa22864af38dfa025a1a3ba3f68c84577" +dependencies = [ + "der 0.8.0", + "pkcs5", + "rand_core 0.10.1", + "spki 0.8.0-rc.4", +] + +[[package]] +name = "pkg-config" +version = "0.3.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" + +[[package]] +name = "plist" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092791278e026273c1b65bbdcfbba3a300f2994c896bd01ab01da613c29c46f1" +dependencies = [ + "base64 0.22.1", + "indexmap 2.14.0", + "quick-xml 0.39.4", + "serde", + "time", +] + +[[package]] +name = "png" +version = "0.17.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "png" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" +dependencies = [ + "bitflags 2.11.1", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 1.1.4", + "windows-sys 0.61.2", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash 0.5.1", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "opaque-debug", + "universal-hash 0.5.1", +] + +[[package]] +name = "polyval" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dfc63250416fea14f5749b90725916a6c903f599d51cb635aa7a52bfd03eede" +dependencies = [ + "cpubits", + "cpufeatures 0.3.0", + "universal-hash 0.6.1", +] + +[[package]] +name = "portable-atomic" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" + +[[package]] +name = "portpicker" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9" +dependencies = [ + "rand 0.8.6", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.11" +source = "git+https://github.com/t8y2/tokio-postgres-gaussdb.git?branch=master#8d50befeee7cdeb8ecdb97c7b790c91010971063" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator 0.2.0", + "hmac 0.13.0", + "md-5 0.11.0", + "memchr", + "pbkdf2 0.12.2", + "rand 0.10.1", + "sha1 0.10.6", + "sha2 0.11.0", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.13" +source = "git+https://github.com/t8y2/tokio-postgres-gaussdb.git?branch=master#8d50befeee7cdeb8ecdb97c7b790c91010971063" +dependencies = [ + "bytes", + "chrono", + "fallible-iterator 0.2.0", + "postgres-protocol", + "serde_core", + "serde_json", + "uuid", +] + +[[package]] +name = "potential_utf" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppmd-rust" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efca4c95a19a79d1c98f791f10aebd5c1363b473244630bb7dbde1dc98455a24" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prefix-trie" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cf6e3177f0684016a5c209b00882e15f8bdd3f3bb48f0491df10cd102d0c6e7" +dependencies = [ + "either", + "ipnet", + "num-traits", +] + +[[package]] +name = "pretty-hex" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5" + +[[package]] +name = "prettyplease" +version = "0.2.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" +dependencies = [ + "proc-macro2", + "syn 2.0.117", +] + +[[package]] +name = "primefield" +version = "0.14.0-rc.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93401c13cc7ff24684571cfca9d3cf9ebabfaf3d4b7b9963ade41ec54da196b5" +dependencies = [ + "crypto-bigint", + "crypto-common 0.2.2", + "rand_core 0.10.1", + "rustcrypto-ff", + "subtle", + "zeroize", +] + +[[package]] +name = "primeorder" +version = "0.14.0-rc.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c5c8a39bcd764bfedf456e8d55e115fe86dda3e0f555371849f2a41cbc9706" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" +dependencies = [ + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit 0.25.11+spec-1.1.0", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "proc-macro2" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645dbe486e346d9b5de3ef16ede18c26e6c70ad97418f4874b8b1889d6e761ea" +dependencies = [ + "ar_archive_writer", + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pxfm" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" + +[[package]] +name = "quick-error" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" + +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "encoding_rs", + "memchr", +] + +[[package]] +name = "quick-xml" +version = "0.39.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdcc8dd4e2f670d309a5f0e83fe36dfdc05af317008fea29144da1a2ac858e5e" +dependencies = [ + "memchr", +] + +[[package]] +name = "quinn" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" +dependencies = [ + "bytes", + "cfg_aliases", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls 0.23.40", + "socket2 0.6.3", + "thiserror 2.0.18", + "tokio", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-proto" +version = "0.11.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098" +dependencies = [ + "bytes", + "getrandom 0.3.4", + "lru-slab", + "rand 0.9.4", + "ring", + "rustc-hash", + "rustls 0.23.40", + "rustls-pki-types", + "slab", + "thiserror 2.0.18", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" +dependencies = [ + "cfg_aliases", + "libc", + "once_cell", + "socket2 0.6.3", + "tracing", + "windows-sys 0.60.2", +] + +[[package]] +name = "quote" +version = "1.0.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca0ecfa931c29007047d1bc58e623ab12e5590e8c7cc53200d5202b69266d8a" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.5", +] + +[[package]] +name = "rand" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207" +dependencies = [ + "chacha20 0.10.0", + "getrandom 0.4.2", + "rand_core 0.10.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.5", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.17", +] + +[[package]] +name = "rand_core" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "rayon" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "recursive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0786a43debb760f491b1bc0269fe5e84155353c67482b9e60d0cfb596054b43e" +dependencies = [ + "recursive-proc-macro-impl", + "stacker", +] + +[[package]] +name = "recursive-proc-macro-impl" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b" +dependencies = [ + "quote", + "syn 2.0.117", +] + +[[package]] +name = "redis" +version = "0.32.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "014cc767fefab6a3e798ca45112bccad9c6e0e218fbd49720042716c73cfef44" +dependencies = [ + "bytes", + "cfg-if", + "combine", + "crc16", + "futures-sink", + "futures-util", + "itoa", + "log", + "num-bigint", + "percent-encoding", + "pin-project-lite", + "rand 0.9.4", + "rustls 0.23.40", + "rustls-native-certs 0.8.3", + "ryu", + "sha1_smol", + "socket2 0.6.3", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.11.1", +] + +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.17", + "libredox", + "thiserror 2.0.18", +] + +[[package]] +name = "ref-cast" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "regex" +version = "1.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.12.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" +dependencies = [ + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.40", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.26.4", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams 0.4.2", + "web-sys", + "webpki-roots 1.0.7", +] + +[[package]] +name = "reqwest" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e0021ea2c22aed41653bc7e1419abb2c97e038ff2c33d0e1309e49a97deec0" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "js-sys", + "log", + "percent-encoding", + "pin-project-lite", + "rustls 0.23.40", + "rustls-pki-types", + "rustls-platform-verifier", + "serde", + "serde_json", + "sync_wrapper", + "tokio", + "tokio-rustls 0.26.4", + "tokio-util", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams 0.5.0", + "web-sys", +] + +[[package]] +name = "resolv-conf" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" + +[[package]] +name = "rfc6979" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5236ce872cac07e0fb3969b0cbf468c7d2f37d432f1b627dcb7b8d34563fb0c3" +dependencies = [ + "hmac 0.13.0", + "subtle", +] + +[[package]] +name = "rfd" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15ad77d9e70a92437d8f74c35d99b4e4691128df018833e99f90bcd36152672" +dependencies = [ + "block2", + "dispatch2", + "glib-sys", + "gobject-sys", + "gtk-sys", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.60.2", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.17", + "libc", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2297bf9c81a3f0dc96bc9521370b88f054168c29826a75e89c55ff196e7ed6a1" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d7b42d4b8d06048d3ac8db0eb31bcb942cbeb709f0b5f2b2ebde398d3038f5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rsa" +version = "0.10.0-rc.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb9fd8c1edd9e6a2693623baf0fe77ff05ce022a5d7746900ffc38a15c233de" +dependencies = [ + "const-oid 0.10.2", + "crypto-bigint", + "crypto-primes", + "digest 0.11.3", + "pkcs1", + "pkcs8", + "rand_core 0.10.1", + "sha2 0.11.0", + "signature", + "spki 0.8.0-rc.4", + "zeroize", +] + +[[package]] +name = "rusqlite" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" +dependencies = [ + "bitflags 2.11.1", + "fallible-iterator 0.3.0", + "fallible-streaming-iterator", + "hashlink 0.9.1", + "libsqlite3-sys", + "smallvec", +] + +[[package]] +name = "russh" +version = "0.60.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "324b92f459d3e42da294e14e8eb150d2215fcfb7c966838bc1127cd68bc05a0d" +dependencies = [ + "aead 0.6.0-rc.10", + "aes 0.8.4", + "aes 0.9.0", + "aes-gcm 0.11.0-rc.3", + "aws-lc-rs", + "bitflags 2.11.1", + "block-padding 0.3.3", + "byteorder", + "bytes", + "cbc 0.1.2", + "cbc 0.2.1", + "cipher 0.5.2", + "crypto-bigint", + "ctr 0.10.1", + "ctr 0.9.2", + "curve25519-dalek 5.0.0-pre.6", + "data-encoding", + "delegate", + "der 0.8.0", + "digest 0.10.7", + "ecdsa", + "ed25519-dalek", + "elliptic-curve", + "enum_dispatch", + "flate2", + "futures", + "generic-array 1.4.1", + "getrandom 0.2.17", + "ghash 0.6.0", + "hex-literal", + "hkdf", + "hmac 0.12.1", + "hmac 0.13.0", + "inout 0.1.4", + "internal-russh-forked-ssh-key", + "internal-russh-num-bigint", + "keccak", + "log", + "md5", + "ml-kem", + "module-lattice", + "num-bigint", + "p256", + "p384", + "p521", + "pageant", + "pbkdf2 0.12.2", + "pbkdf2 0.13.0", + "pkcs1", + "pkcs5", + "pkcs8", + "polyval 0.7.1", + "rand 0.10.1", + "rand_core 0.10.1", + "rsa", + "russh-cryptovec", + "russh-util", + "salsa20", + "scrypt", + "sec1", + "sha1 0.10.6", + "sha1 0.11.0", + "sha2 0.10.9", + "sha2 0.11.0", + "sha3", + "signature", + "spki 0.8.0-rc.4", + "ssh-encoding", + "subtle", + "thiserror 2.0.18", + "tokio", + "typenum", + "universal-hash 0.6.1", + "zeroize", +] + +[[package]] +name = "russh-cryptovec" +version = "0.60.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37cb4d0360bdd8935392a306d8b5edb539cc455b30e8bf13dd213a0cf7879b40" +dependencies = [ + "log", + "nix", + "ssh-encoding", + "windows-sys 0.61.2", +] + +[[package]] +name = "russh-util" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668424a5dde0bcb45b55ba7de8476b93831b4aa2fa6947e145f3b053e22c60b6" +dependencies = [ + "chrono", + "tokio", + "wasm-bindgen", + "wasm-bindgen-futures", +] + +[[package]] +name = "rust-ini" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "796e8d2b6696392a43bea58116b667fb4c29727dc5abd27d6acf338bb4f688c7" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rust_decimal" +version = "1.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c5108e3d4d903e21aac27f12ba5377b6b34f9f44b325e4894c7924169d06995" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "postgres-types", + "rand 0.8.6", + "rkyv", + "serde", + "serde_json", + "wasm-bindgen", +] + +[[package]] +name = "rustc-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustc_version_runtime" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dd18cd2bae1820af0b6ad5e54f4a51d0f3fcc53b05f845675074efcc7af071d" +dependencies = [ + "rustc_version", + "semver", +] + +[[package]] +name = "rustcrypto-ff" +version = "0.14.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd2a8adb347447693cd2ba0d218c4b66c62da9b0a5672b17b981e4291ec65ff6" +dependencies = [ + "rand_core 0.10.1", + "subtle", +] + +[[package]] +name = "rustcrypto-group" +version = "0.14.0-rc.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "369f9b61aa45933c062c9f6b5c3c50ab710687eca83dd3802653b140b43f85ed" +dependencies = [ + "rand_core 0.10.1", + "rustcrypto-ff", + "subtle", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.11.1", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.11.1", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef86cd5876211988985292b91c96a8f2d298df24e75989a43a3c73f2d4d8168b" +dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki 0.103.13", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe 0.1.6", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework 2.11.1", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63" +dependencies = [ + "openssl-probe 0.2.1", + "rustls-pki-types", + "schannel", + "security-framework 3.7.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a7197ae7eb376e574fe940d068c30fe0462554a3ddbe4eca7838e049c937a9" +dependencies = [ + "web-time", + "zeroize", +] + +[[package]] +name = "rustls-platform-verifier" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d1e2536ce4f35f4846aa13bff16bd0ff40157cdb14cc056c7b14ba41233ba0" +dependencies = [ + "core-foundation 0.10.1", + "core-foundation-sys", + "jni 0.22.4", + "log", + "once_cell", + "rustls 0.23.40", + "rustls-native-certs 0.8.3", + "rustls-platform-verifier-android", + "rustls-webpki 0.103.13", + "security-framework 3.7.0", + "security-framework-sys", + "webpki-root-certs", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-platform-verifier-android" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +dependencies = [ + "aws-lc-rs", + "ring", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + +[[package]] +name = "salsa20" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" +dependencies = [ + "cfg-if", + "cipher 0.5.2", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "saturating" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" + +[[package]] +name = "schannel" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "schemars" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", + "uuid", +] + +[[package]] +name = "schemars" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" +dependencies = [ + "dyn-clone", + "ref-cast", + "serde", + "serde_json", +] + +[[package]] +name = "schemars_derive" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.117", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scrypt" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d87af57419b594aa23fa95f09f0e06d80d84ba01c26148c43844cad6ff4485f0" +dependencies = [ + "cfg-if", + "pbkdf2 0.13.0", + "salsa20", + "sha2 0.11.0", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted 0.9.0", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56d437c2f19203ce5f7122e507831de96f3d2d4d3be5af44a0b0a09d8a80e4d" +dependencies = [ + "base16ct", + "ctutils", + "der 0.8.0", + "hybrid-array", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "selectors" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5d9c0c92a92d33f08817311cf3f2c29a3538a8240e94a6a3c622ce652d7e00c" +dependencies = [ + "bitflags 2.11.1", + "cssparser", + "derive_more", + "log", + "new_debug_unreachable", + "phf", + "phf_codegen", + "precomputed-hash", + "rustc-hash", + "servo_arc", + "smallvec", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde-untagged" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9faf48a4a2d2693be24c6289dbe26552776eb7737074e6722891fadbe6c5058" +dependencies = [ + "erased-serde", + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "serde_bytes" +version = "0.11.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_json" +version = "1.0.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +dependencies = [ + "indexmap 2.14.0", + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457" +dependencies = [ + "itoa", + "serde", + "serde_core", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serde_spanned" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_spanned" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6662b5879511e06e8999a8a235d848113e942c9124f211511b16466ee2995f26" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e72c1c2cb7b223fafb600a619537a871c2818583d619401b785e7c0b746ccde2" +dependencies = [ + "base64 0.22.1", + "bs58", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.14.0", + "schemars 0.9.0", + "schemars 1.2.1", + "serde_core", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b90c488738ecb4fb0262f41f43bc40efc5868d9fb744319ddf5f5317f417bfac" +dependencies = [ + "darling 0.23.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "serdect" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66cf8fedced2fcf12406bcb34223dffb92eaf34908ede12fed414c82b7f00b3e" +dependencies = [ + "base16ct", + "serde", +] + +[[package]] +name = "serialize-to-javascript" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f3666a07a197cdb77cdf306c32be9b7f598d7060d50cfd4d5aa04bfd92f6c5" +dependencies = [ + "serde", + "serde_json", + "serialize-to-javascript-impl", +] + +[[package]] +name = "serialize-to-javascript-impl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "servo_arc" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170fb83ab34de17dc69aa7c67482b22218ddb85da56546f9bd6b929e32a05930" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha1" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aacc4cc499359472b4abe1bf11d0b12e688af9a805fa5e3016f9a386dc2d0214" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures 0.2.17", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4" +dependencies = [ + "cfg-if", + "cpufeatures 0.3.0", + "digest 0.11.3", +] + +[[package]] +name = "sha3" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be176f1a57ce4e3d31c1a166222d9768de5954f811601fb7ca06fc8203905ce1" +dependencies = [ + "digest 0.11.3", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e362d9935bc50f019969e2f9ecd66786612daae13e8f277be7bfb66e8bed3f7" +dependencies = [ + "libc", + "sigchld", + "windows-sys 0.60.2", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "sigchld" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47106eded3c154e70176fc83df9737335c94ce22f821c32d17ed1db1f83badb1" +dependencies = [ + "libc", + "os_pipe", + "signal-hook", +] + +[[package]] +name = "signal-hook" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d881a16cf4426aa584979d30bd82cb33429027e42122b169753d6ef1085ed6e2" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + +[[package]] +name = "signature" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5" +dependencies = [ + "digest 0.11.3", + "rand_core 0.10.1", +] + +[[package]] +name = "simd-adler32" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" + +[[package]] +name = "simd_cesu8" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d585997b0ac10be3c5ee635f1bab02d512760d14b7c468801ac8a01d9ae5f1d" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.18", + "time", +] + +[[package]] +name = "siphasher" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "socket2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "softbuffer" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aac18da81ebbf05109ab275b157c22a653bb3c12cf884450179942f81bcbf6c3" +dependencies = [ + "bytemuck", + "js-sys", + "ndk", + "objc2", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle", + "redox_syscall", + "tracing", + "wasm-bindgen", + "web-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", + "gio", + "glib", + "libc", + "soup3-sys", +] + +[[package]] +name = "soup3-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" +dependencies = [ + "gio-sys", + "glib-sys", + "gobject-sys", + "libc", + "system-deps", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.10", +] + +[[package]] +name = "spki" +version = "0.8.0-rc.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8baeff88f34ed0691978ec34440140e1572b68c7dd4a495fd14a3dc1944daa80" +dependencies = [ + "base64ct", + "der 0.8.0", +] + +[[package]] +name = "sqlparser" +version = "0.62.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c6d1b651dc4edf07eead2a0c6c78016ce971bc2c10da5266861b13f25e7cec" +dependencies = [ + "log", + "recursive", + "sqlparser_derive", +] + +[[package]] +name = "sqlparser_derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6dd45d8fc1c79299bfbb7190e42ccbbdf6a5f52e4a6ad98d92357ea965bd289" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "ssh-cipher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" +dependencies = [ + "aes 0.8.4", + "aes-gcm 0.10.3", + "cbc 0.1.2", + "chacha20 0.9.1", + "cipher 0.4.4", + "ctr 0.9.2", + "poly1305", + "ssh-encoding", + "subtle", +] + +[[package]] +name = "ssh-encoding" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" +dependencies = [ + "base64ct", + "bytes", + "pem-rfc7468 0.7.0", + "sha2 0.10.9", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "stacker" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640c8cdd92b6b12f5bcb1803ca3bbf5ab96e5e6b6b96b9ab77dabe9e880b3190" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.61.2", +] + +[[package]] +name = "string_cache" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18596f8c785a729f2819c0f6a7eae6ebeebdfffbfe4214ae6b087f690e31901" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "string_cache_codegen" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "585635e46db231059f76c5849798146164652513eb9e8ab2685939dd90f29b69" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swift-rs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" +dependencies = [ + "base64 0.21.7", + "serde", + "serde_json", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "sysinfo" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" +dependencies = [ + "core-foundation-sys", + "libc", + "memchr", + "ntapi", + "rayon", + "windows 0.57.0", +] + +[[package]] +name = "system-configuration" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" +dependencies = [ + "bitflags 2.11.1", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-deps" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +dependencies = [ + "cfg-expr", + "heck 0.5.0", + "pkg-config", + "toml 0.8.2", + "version-compare", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "take_mut" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" + +[[package]] +name = "tao" +version = "0.35.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c93047acf68669466a34690ac58cca7010bd1b201e1ec86f1fd0a75d3dd4a9" +dependencies = [ + "bitflags 2.11.1", + "block2", + "core-foundation 0.10.1", + "core-graphics 0.25.0", + "crossbeam-channel", + "dbus", + "dispatch2", + "dlopen2", + "dpi", + "gdkwayland-sys", + "gdkx11-sys", + "gtk", + "jni 0.21.1", + "libc", + "log", + "ndk", + "ndk-sys", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "once_cell", + "parking_lot", + "percent-encoding", + "raw-window-handle", + "tao-macros", + "unicode-segmentation", + "url", + "windows 0.61.3", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "tao-macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6221d9a6003c78398e3b239969f352578258df48c8eb051caadae0015bc840" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "tauri" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437404997acf375d85f1177afa7e11bb971f274ed6a7b83a2a3e339015f4cc28" +dependencies = [ + "anyhow", + "bytes", + "cookie", + "dirs", + "dunce", + "embed_plist", + "getrandom 0.3.4", + "glob", + "gtk", + "heck 0.5.0", + "http", + "jni 0.21.1", + "libc", + "log", + "mime", + "muda", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "percent-encoding", + "plist", + "raw-window-handle", + "reqwest 0.13.3", + "serde", + "serde_json", + "serde_repr", + "serialize-to-javascript", + "swift-rs", + "tauri-build", + "tauri-macros", + "tauri-runtime", + "tauri-runtime-wry", + "tauri-utils", + "thiserror 2.0.18", + "tokio", + "tray-icon", + "url", + "webkit2gtk", + "webview2-com", + "window-vibrancy", + "windows 0.61.3", +] + +[[package]] +name = "tauri-build" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4aa1f9055fc23919a54e4e125052bed16ed04aef0487086e758fe01a67b451c7" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs", + "glob", + "heck 0.5.0", + "json-patch", + "schemars 0.8.22", + "semver", + "serde", + "serde_json", + "tauri-utils", + "tauri-winres", + "walkdir", +] + +[[package]] +name = "tauri-codegen" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4a0319528a025a38c4078e7dae2c446f4e63620ddb0659a643ede1cb38f90e9" +dependencies = [ + "base64 0.22.1", + "brotli", + "ico", + "json-patch", + "plist", + "png 0.17.16", + "proc-macro2", + "quote", + "semver", + "serde", + "serde_json", + "sha2 0.10.9", + "syn 2.0.117", + "tauri-utils", + "thiserror 2.0.18", + "time", + "url", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-macros" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae6cb4e3896c21d2f6da5b31251d2faea0153bba56ed0e970f918115dbee4924" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "tauri-codegen", + "tauri-utils", +] + +[[package]] +name = "tauri-plugin" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e126abc9e84e35cdfd01596140a73a1850cdb0df0a23acf0185776c30b469a6e" +dependencies = [ + "anyhow", + "glob", + "plist", + "schemars 0.8.22", + "serde", + "serde_json", + "tauri-utils", + "walkdir", +] + +[[package]] +name = "tauri-plugin-clipboard-manager" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "206dc20af4ed210748ba945c2774e60fd0acd52b9a73a028402caf809e9b6ecf" +dependencies = [ + "arboard", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", +] + +[[package]] +name = "tauri-plugin-deep-link" +version = "2.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ee75bc5627f77bfdf40c913255ebc258117b10ebe2b2239a1a1cf40b0b58aa" +dependencies = [ + "dunce", + "plist", + "rust-ini", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.18", + "tracing", + "url", + "windows-registry 0.5.3", + "windows-result 0.3.4", +] + +[[package]] +name = "tauri-plugin-dialog" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65981abb771e74e571a38196c3baa11c459379164791eba0e67abc1a5fac9884" +dependencies = [ + "log", + "raw-window-handle", + "rfd", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "tauri-plugin-fs", + "thiserror 2.0.18", + "url", +] + +[[package]] +name = "tauri-plugin-fs" +version = "2.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ecc274121aca0c036a2b42d1cbe83d368d348f54e0bb8a735c2b1548e8f371" +dependencies = [ + "anyhow", + "dunce", + "glob", + "log", + "objc2-foundation", + "percent-encoding", + "schemars 0.8.22", + "serde", + "serde_json", + "serde_repr", + "tauri", + "tauri-plugin", + "tauri-utils", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "url", +] + +[[package]] +name = "tauri-plugin-log" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7545bd67f070a4500432c826e2e0682146a1d6712aee22a2786490156b574d93" +dependencies = [ + "android_logger", + "byte-unit", + "fern", + "log", + "objc2", + "objc2-foundation", + "serde", + "serde_json", + "serde_repr", + "swift-rs", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "time", +] + +[[package]] +name = "tauri-plugin-process" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55511a7bf6cd70c8767b02c97bf8134fa434daf3926cfc1be0a0f94132d165a" +dependencies = [ + "tauri", + "tauri-plugin", +] + +[[package]] +name = "tauri-plugin-shell" +version = "2.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8457dbf9e2bab1edd8df22bb2c20857a59a9868e79cb3eac5ed639eec4d0c73b" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars 0.8.22", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", + "tokio", +] + +[[package]] +name = "tauri-plugin-single-instance" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8f29386f5e9fdc699182388a33ee80a56de436d91b67459e86afef426282af" +dependencies = [ + "serde", + "serde_json", + "tauri", + "thiserror 2.0.18", + "tracing", + "windows-sys 0.60.2", + "zbus", +] + +[[package]] +name = "tauri-plugin-updater" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806d9dac662c2e4594ff03c647a552f2c9bd544e7d0f683ec58f872f952ce4af" +dependencies = [ + "base64 0.22.1", + "dirs", + "flate2", + "futures-util", + "http", + "infer", + "log", + "minisign-verify", + "osakit", + "percent-encoding", + "reqwest 0.13.3", + "rustls 0.23.40", + "semver", + "serde", + "serde_json", + "tar", + "tauri", + "tauri-plugin", + "tempfile", + "thiserror 2.0.18", + "time", + "tokio", + "url", + "windows-sys 0.60.2", + "zip 4.6.1", +] + +[[package]] +name = "tauri-plugin-window-state" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73736611e14142408d15353e21e3cca2f12a3cfb523ad0ce85999b6d2ef1a704" +dependencies = [ + "bitflags 2.11.1", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror 2.0.18", +] + +[[package]] +name = "tauri-runtime" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48222d7116c8807eaa6fe2f372e023fae125084e61e6eca6d70b7961cdf129ef" +dependencies = [ + "cookie", + "dpi", + "gtk", + "http", + "jni 0.21.1", + "objc2", + "objc2-ui-kit", + "objc2-web-kit", + "raw-window-handle", + "serde", + "serde_json", + "tauri-utils", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webview2-com", + "windows 0.61.3", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b83849ee63ecb27a8e8d0fe51915ca215076914aca43f96db1179f0f415f6cd9" +dependencies = [ + "gtk", + "http", + "jni 0.21.1", + "log", + "objc2", + "objc2-app-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "softbuffer", + "tao", + "tauri-runtime", + "tauri-utils", + "url", + "webkit2gtk", + "webview2-com", + "windows 0.61.3", + "wry", +] + +[[package]] +name = "tauri-utils" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092379df9a707631978e6c56b1bc2401d387f01e2d4a3c123360d167bbb9aa95" +dependencies = [ + "anyhow", + "brotli", + "cargo_metadata", + "ctor", + "dom_query", + "dunce", + "glob", + "http", + "infer", + "json-patch", + "log", + "memchr", + "phf", + "plist", + "proc-macro2", + "quote", + "regex", + "schemars 0.8.22", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.18", + "toml 1.1.2+spec-1.1.0", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-winres" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc65d45c68858bfe420dd29e834b5d15dbecf8a07a8a16cf4d532c7b1f69d4b6" +dependencies = [ + "dunce", + "embed-resource", + "toml 1.1.2+spec-1.1.0", +] + +[[package]] +name = "tempfile" +version = "3.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" +dependencies = [ + "fastrand", + "getrandom 0.4.2", + "once_cell", + "rustix 1.1.4", + "windows-sys 0.61.2", +] + +[[package]] +name = "tendril" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4790fc369d5a530f4b544b094e31388b9b3a37c0f4652ade4505945f5660d24" +dependencies = [ + "new_debug_unreachable", + "utf-8", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tiberius" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1446cb4198848d1562301a3340424b4f425ef79f35ef9ee034769a9dd92c10d" +dependencies = [ + "async-trait", + "asynchronous-codec", + "byteorder", + "bytes", + "chrono", + "connection-string", + "encoding_rs", + "enumflags2", + "futures-util", + "num-traits", + "once_cell", + "pin-project-lite", + "pretty-hex", + "rust_decimal", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "thiserror 1.0.69", + "tokio", + "tokio-rustls 0.24.1", + "tokio-util", + "tracing", + "uuid", +] + +[[package]] +name = "tiff" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b63feaf3343d35b6ca4d50483f94843803b0f51634937cc2ec519fc32232bc52" +dependencies = [ + "fax", + "flate2", + "half", + "quick-error", + "weezl", + "zune-jpeg", +] + +[[package]] +name = "time" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" +dependencies = [ + "deranged", + "itoa", + "libc", + "num-conv", + "num_threads", + "powerfmt", + "serde_core", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" + +[[package]] +name = "time-macros" +version = "0.2.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e61e67053d25a4e82c844e8424039d9745781b3fc4f32b8d55ed50f5f667ef3" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tls_codec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de2e01245e2bb89d6f05801c564fa27624dbd7b1846859876c7dad82e90bf6b" +dependencies = [ + "tls_codec_derive", + "zeroize", +] + +[[package]] +name = "tls_codec_derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tokio" +version = "1.52.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.6.3", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.17" +source = "git+https://github.com/t8y2/tokio-postgres-gaussdb.git?branch=master#8d50befeee7cdeb8ecdb97c7b790c91010971063" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator 0.2.0", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.10.1", + "socket2 0.6.3", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-postgres-rustls" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27d684bad428a0f2481f42241f821db42c54e2dc81d8c00db8536c506b0a0144" +dependencies = [ + "const-oid 0.9.6", + "ring", + "rustls 0.23.40", + "tokio", + "tokio-postgres", + "tokio-rustls 0.26.4", + "x509-cert", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls 0.23.40", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f72a05e828585856dacd553fba484c242c46e391fb0e58917c942ee9202915c" +dependencies = [ + "futures-util", + "log", + "tokio", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "futures-util", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +dependencies = [ + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "toml_edit 0.20.2", +] + +[[package]] +name = "toml" +version = "0.9.12+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf92845e79fc2e2def6a5d828f0801e29a2f8acc037becc5ab08595c7d5e9863" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 0.7.5+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 0.7.15", +] + +[[package]] +name = "toml" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +dependencies = [ + "indexmap 2.14.0", + "serde_core", + "serde_spanned 1.1.1", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "toml_writer", + "winnow 1.0.3", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.14.0", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.25.11+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" +dependencies = [ + "indexmap 2.14.0", + "toml_datetime 1.1.1+spec-1.1.0", + "toml_parser", + "winnow 1.0.3", +] + +[[package]] +name = "toml_parser" +version = "1.1.2+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +dependencies = [ + "winnow 1.0.3", +] + +[[package]] +name = "toml_writer" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" + +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" +dependencies = [ + "async-compression", + "bitflags 2.11.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower", + "tower-layer", + "tower-service", + "tracing", + "url", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tray-icon" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15edbb0d80583e85ee8df283410038e17314df5cba30da2087a54a85216c0773" +dependencies = [ + "crossbeam-channel", + "dirs", + "libappindicator", + "muda", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation", + "once_cell", + "png 0.18.1", + "serde", + "thiserror 2.0.18", + "windows-sys 0.61.2", +] + +[[package]] +name = "tree_magic_mini" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" +dependencies = [ + "memchr", + "nom", + "petgraph", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8" +dependencies = [ + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.9.4", + "sha1 0.10.6", + "thiserror 2.0.18", +] + +[[package]] +name = "twox-hash" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c" + +[[package]] +name = "typed-builder" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "398a3a3c918c96de527dc11e6e846cd549d4508030b8a33e1da12789c856b81a" +dependencies = [ + "typed-builder-macro", +] + +[[package]] +name = "typed-builder-macro" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e48cea23f68d1f78eb7bc092881b6bb88d3d6b5b7e6234f6f9c911da1ffb221" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typenum" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" + +[[package]] +name = "uds_windows" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f6fb2847f6742cd76af783a2a2c49e9375d0a111c7bef6f71cd9e738c72d6e" +dependencies = [ + "memoffset", + "tempfile", + "windows-sys 0.61.2", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" + +[[package]] +name = "unicode-bidi" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-normalization" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" + +[[package]] +name = "unicode-segmentation" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common 0.1.7", + "subtle", +] + +[[package]] +name = "universal-hash" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" +dependencies = [ + "crypto-common 0.2.2", + "ctutils", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "urlpattern" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" +dependencies = [ + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf8-width" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1292c0d970b54115d14f2492fe0170adf21d68a1de108eebc51c1df4f346a091" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddd74a9687298c6858e9b88ec8935ec45d22e8fd5e6394fa1bd4e99a87789c76" +dependencies = [ + "getrandom 0.4.2", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "value-bag" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version-compare" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.3+wasi-0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" +dependencies = [ + "wit-bindgen 0.57.1", +] + +[[package]] +name = "wasip3" +version = "0.4.0+wasi-0.3.0-rc-2026-01-06" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" +dependencies = [ + "wit-bindgen 0.51.0", +] + +[[package]] +name = "wasite" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fe902b4a6b8028a753d5424909b764ccf79b7a209eac9bf97e59cda9f71a42" +dependencies = [ + "wasi 0.14.7+wasi-0.2.4", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.122" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed04576f974d2b2fba0f38c51dbc5518011e38c36bf1143164be765528fd409" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "serde", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9473dbd2991ae90b6291c3c32c30c6187ac49aa32f9905d1cce280ec1e110b0f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.122" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916151b09da36bd82f6615cbf3a419e2f0ba23a03c6160e8e92eb6bd4aa1dec6" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.122" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "299047362ccbfce148b67ab7e73349f77748e00c8296f9542adfad2ad82c5c5e" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 2.0.117", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.122" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a929b2c61f11ba3e9bc35b50c1f25cb38e0e892c0c231ae2b8cf78d5dad4437" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-encoder" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" +dependencies = [ + "leb128fmt", + "wasmparser", +] + +[[package]] +name = "wasm-metadata" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" +dependencies = [ + "anyhow", + "indexmap 2.14.0", + "wasm-encoder", + "wasmparser", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasm-streams" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1ec4f6517c9e11ae630e200b2b65d193279042e28edd4a2cda233e46670bbb" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmparser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" +dependencies = [ + "bitflags 2.11.1", + "hashbrown 0.15.5", + "indexmap 2.14.0", + "semver", +] + +[[package]] +name = "wayland-backend" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2857dd20b54e916ec7253b3d6b4d5c4d7d4ca2c33c2e11c6c76a99bd8744755d" +dependencies = [ + "cc", + "downcast-rs", + "rustix 1.1.4", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c7c96bb74690c3189b5c9cb4ca1627062bb23693a4fad9d8c3de958260144" +dependencies = [ + "bitflags 2.11.1", + "rustix 1.1.4", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "563a85523cade2429938e790815fd7319062103b9f4a2dc806e9b53b95982d8f" +dependencies = [ + "bitflags 2.11.1", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" +dependencies = [ + "bitflags 2.11.1", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c324a910fd86ebdc364a3e61ec1f11737d3b1d6c273c0239ee8ff4bc0d24b4a" +dependencies = [ + "proc-macro2", + "quick-xml 0.39.4", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" +dependencies = [ + "pkg-config", +] + +[[package]] +name = "web-sys" +version = "0.3.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621441cfc37b84979402712047321980c178f299193a3589d05b99e8763436" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web_atoms" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7cff6eef815df1834fd250e3a2ff436044d82a9f1bc1980ca1dbdf07effc538" +dependencies = [ + "phf", + "phf_codegen", + "string_cache", + "string_cache_codegen", +] + +[[package]] +name = "webkit2gtk" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1027150013530fb2eaf806408df88461ae4815a45c541c8975e61d6f2fc4793" +dependencies = [ + "bitflags 1.3.2", + "cairo-rs", + "gdk", + "gdk-sys", + "gio", + "gio-sys", + "glib", + "glib-sys", + "gobject-sys", + "gtk", + "gtk-sys", + "javascriptcore-rs", + "libc", + "once_cell", + "soup3", + "webkit2gtk-sys", +] + +[[package]] +name = "webkit2gtk-sys" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "916a5f65c2ef0dfe12fff695960a2ec3d4565359fdbb2e9943c974e06c734ea5" +dependencies = [ + "bitflags 1.3.2", + "cairo-sys-rs", + "gdk-sys", + "gio-sys", + "glib-sys", + "gobject-sys", + "gtk-sys", + "javascriptcore-rs-sys", + "libc", + "pkg-config", + "soup3-sys", + "system-deps", +] + +[[package]] +name = "webpki-root-certs" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31141ce3fc3e300ae89b78c0dd67f9708061d1d2eda54b8209346fd6be9a92c" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webpki-roots" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.7", +] + +[[package]] +name = "webpki-roots" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f5ee44c96cf55f1b349600768e3ece3a8f26010c05265ab73f945bb1a2eb9d" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webview2-com" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7130243a7a5b33c54a444e54842e6a9e133de08b5ad7b5861cd8ed9a6a5bc96a" +dependencies = [ + "webview2-com-macros", + "webview2-com-sys", + "windows 0.61.3", + "windows-core 0.61.2", + "windows-implement 0.60.2", + "windows-interface 0.59.3", +] + +[[package]] +name = "webview2-com-macros" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a921c1b6914c367b2b823cd4cde6f96beec77d30a939c8199bb377cf9b9b54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "webview2-com-sys" +version = "0.38.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "381336cfffd772377d291702245447a5251a2ffa5bad679c99e61bc48bacbf9c" +dependencies = [ + "thiserror 2.0.18", + "windows 0.61.3", + "windows-core 0.61.2", +] + +[[package]] +name = "weezl" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" + +[[package]] +name = "whoami" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "998767ef88740d1f5b0682a9c53c24431453923962269c2db68ee43788c5a40d" +dependencies = [ + "libc", + "libredox", + "objc2-system-configuration", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "window-vibrancy" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bec5a31f3f9362f2258fd0e9c9dd61a9ca432e7306cc78c444258f0dce9a9c" +dependencies = [ + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "raw-window-handle", + "windows-sys 0.59.0", + "windows-version", +] + +[[package]] +name = "windows" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +dependencies = [ + "windows-core 0.57.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows" +version = "0.61.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections 0.2.0", + "windows-core 0.61.2", + "windows-future 0.2.1", + "windows-link 0.1.3", + "windows-numerics 0.2.0", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections 0.3.2", + "windows-core 0.62.2", + "windows-future 0.3.2", + "windows-numerics 0.3.1", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core 0.62.2", +] + +[[package]] +name = "windows-core" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +dependencies = [ + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result 0.1.2", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement 0.60.2", + "windows-interface 0.59.3", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading 0.1.0", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", + "windows-threading 0.2.1", +] + +[[package]] +name = "windows-implement" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core 0.62.2", + "windows-link 0.2.1", +] + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", +] + +[[package]] +name = "windows-result" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows-version" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4060a1da109b9d0326b7262c8e12c84df67cc0dbc9e33cf49e01ccc2eb63631" +dependencies = [ + "windows-link 0.2.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winnow" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + +[[package]] +name = "wio" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" +dependencies = [ + "winapi", +] + +[[package]] +name = "wit-bindgen" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" +dependencies = [ + "wit-bindgen-rust-macro", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wit-bindgen-core" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" +dependencies = [ + "anyhow", + "heck 0.5.0", + "wit-parser", +] + +[[package]] +name = "wit-bindgen-rust" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" +dependencies = [ + "anyhow", + "heck 0.5.0", + "indexmap 2.14.0", + "prettyplease", + "syn 2.0.117", + "wasm-metadata", + "wit-bindgen-core", + "wit-component", +] + +[[package]] +name = "wit-bindgen-rust-macro" +version = "0.51.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" +dependencies = [ + "anyhow", + "prettyplease", + "proc-macro2", + "quote", + "syn 2.0.117", + "wit-bindgen-core", + "wit-bindgen-rust", +] + +[[package]] +name = "wit-component" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" +dependencies = [ + "anyhow", + "bitflags 2.11.1", + "indexmap 2.14.0", + "log", + "serde", + "serde_derive", + "serde_json", + "wasm-encoder", + "wasm-metadata", + "wasmparser", + "wit-parser", +] + +[[package]] +name = "wit-parser" +version = "0.244.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.14.0", + "log", + "semver", + "serde", + "serde_derive", + "serde_json", + "unicode-xid", + "wasmparser", +] + +[[package]] +name = "wl-clipboard-rs" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9651471a32e87d96ef3a127715382b2d11cc7c8bb9822ded8a7cc94072eb0a3" +dependencies = [ + "libc", + "log", + "os_pipe", + "rustix 1.1.4", + "thiserror 2.0.18", + "tree_magic_mini", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", +] + +[[package]] +name = "writeable" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" + +[[package]] +name = "wry" +version = "0.55.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186f9871daa55fd9c016578b810d149de58367113db7fb72b462d2323ce19514" +dependencies = [ + "base64 0.22.1", + "block2", + "cookie", + "crossbeam-channel", + "dirs", + "dom_query", + "dpi", + "dunce", + "gdkx11", + "gtk", + "http", + "javascriptcore-rs", + "jni 0.21.1", + "libc", + "ndk", + "objc2", + "objc2-app-kit", + "objc2-core-foundation", + "objc2-foundation", + "objc2-ui-kit", + "objc2-web-kit", + "once_cell", + "percent-encoding", + "raw-window-handle", + "sha2 0.10.9", + "soup3", + "tao-macros", + "thiserror 2.0.18", + "url", + "webkit2gtk", + "webkit2gtk-sys", + "webview2-com", + "windows 0.61.3", + "windows-core 0.61.2", + "windows-version", + "x11-dl", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x11" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "gethostname", + "rustix 1.1.4", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "x509-cert" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" +dependencies = [ + "const-oid 0.9.6", + "der 0.7.10", + "spki 0.7.3", + "tls_codec", +] + +[[package]] +name = "xattr" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" +dependencies = [ + "libc", + "rustix 1.1.4", +] + +[[package]] +name = "yeslogic-fontconfig-sys" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d8b8abf912b9a29ff112e1671c97c33636903d13a69712037190e6805af4f76" +dependencies = [ + "dlib", + "once_cell", + "pkg-config", +] + +[[package]] +name = "yoke" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zbus" +version = "5.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3bcbf15c8708d7fc1be0c993622e0a5cbd5e8b52bfa40afa4c3e0cd8d724ac1" +dependencies = [ + "async-broadcast", + "async-executor", + "async-io", + "async-lock", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "enumflags2", + "event-listener", + "futures-core", + "futures-lite", + "hex", + "libc", + "ordered-stream", + "rustix 1.1.4", + "serde", + "serde_repr", + "tracing", + "uds_windows", + "uuid", + "windows-sys 0.61.2", + "winnow 1.0.3", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "5.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51fa5406ad9175a8c825a931f8cf347116b531b3634fcb0b627c290f1f2516ff" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "zbus_names", + "zvariant", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "4.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7074f3e50b894eac91750142016d30d0a89be8e67dbfd9704fb875825760e52d" +dependencies = [ + "serde", + "winnow 1.0.3", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zerotrie" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + +[[package]] +name = "zip" +version = "4.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" +dependencies = [ + "aes 0.8.4", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.3.4", + "hmac 0.12.1", + "indexmap 2.14.0", + "liblzma", + "memchr", + "pbkdf2 0.12.2", + "ppmd-rust", + "sha1 0.10.6", + "time", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zip" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" +dependencies = [ + "arbitrary", + "crc32fast", + "flate2", + "indexmap 2.14.0", + "memchr", + "zopfli", +] + +[[package]] +name = "zlib-rs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be3d40e40a133f9c916ee3f9f4fa2d9d63435b5fbe1bfc6d9dae0aa0ada1513" + +[[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] +name = "zopfli" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "zune-core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" + +[[package]] +name = "zune-jpeg" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" +dependencies = [ + "zune-core", +] + +[[package]] +name = "zvariant" +version = "5.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c1567a6ec68df868cbbfde844cfc6d81649fe5109a62b116b19fabd53e618ee" +dependencies = [ + "endi", + "enumflags2", + "serde", + "winnow 1.0.3", + "zvariant_derive", + "zvariant_utils", +] + +[[package]] +name = "zvariant_derive" +version = "5.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7d5b780599bbde114e39d9a0799577fad1ced5105d38515745f7b3099d8ceda" +dependencies = [ + "proc-macro-crate 3.5.0", + "proc-macro2", + "quote", + "syn 2.0.117", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d464f5733ffa07a3164d656f18533caace9d0638596721355d73256a410d691" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.117", + "winnow 1.0.3", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..8b323eb --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,19 @@ +[workspace] +resolver = "2" +members = ["src-tauri", "crates/dbx-core", "crates/dbx-web"] + +[patch.crates-io] +tokio-postgres = { git = "https://github.com/t8y2/tokio-postgres-gaussdb.git", branch = "master" } +postgres-types = { git = "https://github.com/t8y2/tokio-postgres-gaussdb.git", branch = "master" } +postgres-protocol = { git = "https://github.com/t8y2/tokio-postgres-gaussdb.git", branch = "master" } +# Temporary compatibility patch for MySQL accounts using the deprecated +# sha256_password auth plugin. Remove after upstream support lands. +mysql_async = { git = "https://github.com/t8y2/mysql_async.git", rev = "7b565fbe76a168828189f7b98fe3b1989344c54e" } +mysql_common = { git = "https://github.com/t8y2/rust_mysql_common.git", rev = "5b30d4912ebb23728f1196b2b9eb928eebb73f92" } + +[profile.release] +panic = "abort" +strip = true +lto = true +codegen-units = 1 +opt-level = "s" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..620a5e3 --- /dev/null +++ b/Makefile @@ -0,0 +1,90 @@ +.DEFAULT_GOAL := dev + +PNPM ?= pnpm +TAURI_DEV_PORT ?= 1420 + +.PHONY: help install docs-install check-tauri-dev-port dev dev-fast dev-web dev-backend build package docs docs-build check test cargo-check-fast cargo-test-fast + +node_modules/.modules.yaml: package.json pnpm-lock.yaml + $(PNPM) install --frozen-lockfile + +docs/node_modules/.modules.yaml: docs/package.json docs/pnpm-lock.yaml + cd docs && $(PNPM) install --frozen-lockfile --ignore-workspace + +help: + @printf '%s\n' 'DBX development targets:' + @printf '%s\n' '' + @printf '%s\n' 'App:' + @printf ' %-23s %s\n' 'make' 'Start the local desktop development environment' + @printf ' %-23s %s\n' 'make dev' 'Start the local desktop development environment' + @printf ' %-23s %s\n' 'make dev-fast' 'Start Tauri dev without default Rust features' + @printf ' %-23s %s\n' 'make dev-web' 'Start the web frontend development server' + @printf ' %-23s %s\n' 'make dev-backend' 'Start the web backend development server' + @printf ' %-23s %s\n' 'make build' 'Run type checks and build the desktop frontend' + @printf ' %-23s %s\n' 'make package' 'Build the desktop app package' + @printf '%s\n' '' + @printf '%s\n' 'Docs:' + @printf ' %-23s %s\n' 'make docs' 'Start the documentation site development server' + @printf ' %-23s %s\n' 'make docs-build' 'Build the documentation site' + @printf ' %-23s %s\n' 'make docs-install' 'Install documentation site dependencies' + @printf '%s\n' '' + @printf '%s\n' 'Checks:' + @printf ' %-23s %s\n' 'make check' 'Run project checks' + @printf ' %-23s %s\n' 'make test' 'Run project tests' + @printf ' %-23s %s\n' 'make cargo-check-fast' 'Run Rust check without default features' + @printf ' %-23s %s\n' 'make cargo-test-fast' 'Run Rust tests without default features' + @printf '%s\n' '' + @printf '%s\n' 'Setup:' + @printf ' %-23s %s\n' 'make install' 'Install root project dependencies' + +install: + $(PNPM) install --frozen-lockfile + +docs-install: + cd docs && $(PNPM) install --frozen-lockfile --ignore-workspace + +check-tauri-dev-port: + @if lsof -nP -iTCP:$(TAURI_DEV_PORT) -sTCP:LISTEN >/dev/null 2>&1; then \ + echo "Port $(TAURI_DEV_PORT) is already in use. DBX Tauri dev requires http://localhost:$(TAURI_DEV_PORT)."; \ + echo ""; \ + lsof -nP -iTCP:$(TAURI_DEV_PORT) -sTCP:LISTEN; \ + echo ""; \ + echo "Stop the process above, then run make dev again. Example: kill "; \ + exit 1; \ + fi + +dev: node_modules/.modules.yaml check-tauri-dev-port + $(PNPM) dev:tauri + +dev-fast: node_modules/.modules.yaml check-tauri-dev-port + $(PNPM) tauri dev -- --no-default-features + +dev-web: node_modules/.modules.yaml + $(PNPM) dev:web + +dev-backend: node_modules/.modules.yaml + $(PNPM) dev:backend + +build: node_modules/.modules.yaml + $(PNPM) build:checked + +package: node_modules/.modules.yaml + $(PNPM) tauri build + +docs: docs/node_modules/.modules.yaml + cd docs && ./node_modules/.bin/next dev --hostname 127.0.0.1 + +docs-build: docs/node_modules/.modules.yaml + cd docs && ./node_modules/.bin/next build && node scripts/generate-sitemap.mjs + +check: node_modules/.modules.yaml + $(PNPM) check + +test: node_modules/.modules.yaml + $(PNPM) test + +cargo-check-fast: + cargo check --no-default-features + +cargo-test-fast: + cargo test --no-default-features diff --git a/README-NIX.md b/README-NIX.md new file mode 100644 index 0000000..99d1ed5 --- /dev/null +++ b/README-NIX.md @@ -0,0 +1,172 @@ +## Add to NixOS system configuration + +Add DBX as a flake input and include the package in `environment.systemPackages`. + +### `flake.nix` + +```nix +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + dbx = { + url = "github:t8y2/dbx"; + inputs.nixpkgs.follows = "nixpkgs"; # optional + }; + }; + + outputs = { self, nixpkgs, dbx, ... }: { + nixosConfigurations.my-machine = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + { + environment.systemPackages = [ + dbx.packages.x86_64-linux.dbx-desktop + ]; + } + ]; + }; + }; +} +``` + +### Apply + +```bash +sudo nixos-rebuild switch --flake .#my-machine +``` + +--- + +## Add via Home Manager + +This method installs DBX for a specific user through [Home Manager](https://github.com/nix-community/home-manager). + +> [!NOTE] +> The `inputs.nixpkgs.follows = "nixpkgs"` line is **optional**. +> It prevents Nix from downloading a second copy of nixpkgs, but it also makes +> DBX ineligible for the upstream binary cache (it will be built locally). +> Remove that line if you prefer to download a pre-built binary. + +### `flake.nix` (standalone Home Manager) + +```nix +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + dbx = { + url = "github:t8y2/dbx"; + inputs.nixpkgs.follows = "nixpkgs"; # optional + }; + }; + + outputs = { self, nixpkgs, home-manager, dbx, ... }: { + homeConfigurations."youruser" = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; + system = "x86_64-linux"; + modules = [ + { + home.packages = [ + dbx.packages.x86_64-linux.dbx-desktop + ]; + } + ]; + }; + }; +} +``` + +### `flake.nix` (NixOS + Home Manager as a NixOS module) + +```nix +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + dbx = { + url = "github:t8y2/dbx"; + inputs.nixpkgs.follows = "nixpkgs"; # optional + }; + }; + + outputs = { self, nixpkgs, home-manager, dbx, ... }: { + nixosConfigurations.my-machine = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.users.youruser = { + home.packages = [ + dbx.packages.x86_64-linux.dbx-desktop + ]; + }; + } + ]; + }; + }; +} +``` + +> Replace `youruser` with your actual Linux username and `my-machine` with your hostname. + +### Apply (standalone) + +```bash +home-manager switch --flake .#youruser +``` + +### Apply (NixOS module) + +```bash +sudo nixos-rebuild switch --flake .#my-machine +``` + +--- + +## Development Shell + +If you are contributing to DBX or building it from a local clone, the flake provides a fully configured development shell with Rust, Node.js, pnpm, and all GTK/WebKit system libraries: + +```bash +git clone https://github.com/t8y2/dbx +cd dbx +nix develop +``` + +Inside the shell: + +| Task | Command | +|---|---| +| Desktop app (Tauri) | `pnpm install && pnpm dev:tauri` | +| Web frontend only | `pnpm dev:web` | +| Web backend only | `pnpm dev:backend` | +| Release build | `pnpm tauri build` | + +--- + +## Building from Source + +Build the `dbx-desktop` package directly from the flake: + +```bash +nix build github:t8y2/dbx#dbx-desktop +# or, from a local clone: +nix build .#dbx-desktop +``` + +The resulting binary is available at `./result/bin/dbx`. + +--- diff --git a/README.md b/README.md new file mode 100644 index 0000000..36c99fc --- /dev/null +++ b/README.md @@ -0,0 +1,433 @@ +
+

60+ databases in 20 MB. Desktop & Docker self-hosting, with built-in AI assistant.

+ +

+ DBX screenshot +

+ +

+ + + Join QQ Group + Join WeChat Group + Join Discord +

+

+ t8y2%2Fdbx | Trendshift + Featured|HelloGitHub + DBX - Lightweight open-source database manager built with Rust | Product Hunt +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + AtomGit Stars + CNB +

+

+ English | 前往中文版本 +

+ +

+ + +

+

+ + +

+
+ +## Why DBX? + + + + + + + + + + +
+

🪶 20 MB, zero runtime bloat

+

No Java JRE. No Python venv. No bundled Chromium. DBX ships as a single small binary — download, install, connect. DBeaver needs Java; TablePlus is macOS-only. DBX runs everywhere with nothing extra.

+
+

🤖 AI that lives in your editor

+

Highlight a table, describe what you want, get SQL back — no copy-paste between tools. Works with Claude, OpenAI, or local models via Ollama. Built-in safety checks review AI-generated SQL before it runs.

+
+

🔌 MCP: your databases, AI-ready

+

DBX speaks the Model Context Protocol. Claude Code, Cursor, Windsurf, and other AI coding agents can query your databases through connections you already set up. One config, everywhere.

+
+

🌐 Desktop + Docker + Web

+

Native app on macOS, Windows, and Linux. Self-host via Docker for team access. Web version for browser-only environments. Same feature set. Same connections.

+
+ +## Features + +### 60+ Databases, One Tool + +MySQL, PostgreSQL, SQLite, Cloudflare D1, Redis, MongoDB, DuckDB, ClickHouse, SQL Server, Oracle, Elasticsearch, Qdrant, Milvus, Weaviate, MariaDB, TiDB, OceanBase, openGauss, GaussDB, KWDB, KingBase, Vastbase, GoldenDB, Doris, SelectDB, StarRocks, Manticore Search, Redshift, DM, TDengine, XuguDB, CockroachDB, Access, HighGo, and more. Agent/JDBC-oriented profiles extend DBX to H2, Snowflake, Trino, PrestoSQL, Hive, DB2, Informix, Neo4j, Cassandra, BigQuery, Kylin, SunDB, and custom JDBC connections. New native and agent-driven drivers also cover Databricks, SAP HANA, Teradata, Vertica, Firebird, Exasol, YashanDB, GBase 8a/8s, Databend, RQLite, Turso, InfluxDB, QuestDB, IoTDB, etcd, ZooKeeper, Nacos, IRIS, and more. Message queue admin is also available for Pulsar, Kafka, and RocketMQ. All in a single ~20 MB app. No bundled Chromium. + +### Query Editor + +CodeMirror 6 with SQL syntax highlighting, metadata-aware autocomplete, `Cmd+Enter` execution, selected SQL execution, SQL formatting, diagnostics, and 9 editor themes. Persistent query history, saved SQL snippets, tab restore, and SQL file execution keep repeat work close at hand. + +### AI SQL Assistant + +Describe what you want in plain language — get SQL back. DBX can explain queries, optimize SQL, fix errors, and run AI-generated SQL through built-in safety checks. Works with Claude, OpenAI, local models, or any OpenAI-compatible endpoint. + +### Data Grid + +Virtual-scrolled table that handles large result sets. Inline editing, SQL preview before save, WHERE / ORDER BY controls, DataGrip-style filters, LIKE / NOT LIKE context filters, sorting, full-text search, pagination, column resize, auto-fit, row numbers, zebra stripes, and full cell details. Export or copy as CSV, JSON, Markdown, XLSX, or INSERT statements. + +### Schema Tools + +- **Schema browser** — databases, schemas, tables, columns, indexes, foreign keys, triggers, with sidebar search & pin +- **Object browser** — grouped procedures, functions, views, and source editing where supported +- **Table structure editor** — reviewable column and index changes for supported engines +- **ER diagram** — visualize table relationships +- **Schema diff** — compare structures across connections +- **Explain plan** — visual query execution plan +- **Field lineage** — column-level lineage analysis +- **Database search** — find objects across large schemas + +### Data Operations + +- **Table import** — CSV, Excel +- **Data transfer** — migrate between databases +- **Database export** — full database dump +- **Data compare** — compare table data and review synchronization output +- **SQL file execution** — run `.sql` files directly +- **File preview** — drag & drop Parquet, CSV, JSON to preview instantly (powered by DuckDB) +- **Connection import** — bring connection profiles from DBeaver or Navicat + +### Specialized Browsers + +- **Redis** — key pattern search, batch key operations, command runner, TTL editing, and all data types (String, Hash, List, Set, ZSet, Stream) +- **MongoDB** — document CRUD with pagination, Atlas & replica set URL connection + +### Safety & Connectivity + +SSH tunnel (key & password) · database and AI proxy settings · auto-reconnect on connection loss · confirmation dialogs for destructive operations · encrypted config export/import · color-coded connections · driver store and optional JDBC plugin + +### Polished UI + +Dark mode with native title bar sync · 9 editor themes · English, 简体中文 & Español · layout preferences · built-in auto-update + +## AI Agent Integration (MCP) + +DBX provides an [MCP server](packages/mcp-server/) that lets AI coding agents query your databases using connections already configured in DBX. + +```bash +npx @dbx-app/mcp-server +``` + +Add to your `.mcp.json`: + +```json +{ + "mcpServers": { + "dbx": { "command": "npx", "args": ["-y", "@dbx-app/mcp-server"] } + } +} +``` + +Windows portable builds need `DBX_DATA_DIR` in the MCP config, pointing to the `data` directory next to `DBX.exe` (the folder that contains `dbx.db`). + +For DBX Web or Docker deployments, point the MCP server at the Web backend API. If the Web login page requires a password, set `DBX_WEB_PASSWORD` to the same password used there: + +```json +{ + "mcpServers": { + "dbx": { + "command": "npx", + "args": ["-y", "@dbx-app/mcp-server"], + "env": { + "DBX_WEB_URL": "http://localhost:4224", + "DBX_WEB_PASSWORD": "your-web-login-password" + } + } + } +} +``` + +Works with Claude Code, Cursor, Windsurf, and any MCP-compatible agent. Supports listing connections, browsing tables, executing SQL, and opening tables directly in DBX's UI. + +DBX also provides a dedicated CLI package for terminal, script, and Codex workflows: + +```bash +npm install -g @dbx-app/cli +# or via Homebrew +brew tap t8y2/dbx && brew install dbx-cli +dbx connections list --json +dbx query local "select 1" --json +``` + +See the [MCP server README](packages/mcp-server/README.md) and [CLI README](packages/cli/README.md) for details. + +## Install + +Download the latest release from the [Releases](https://github.com/t8y2/dbx/releases/latest) page. + +**Homebrew (macOS):** + +```bash +brew install --cask dbx +``` + +**Scoop (Windows):** + +```bash +scoop bucket add dbx https://github.com/t8y2/scoop-bucket +scoop install dbx +``` + +**WinGet (Windows):** + +``` +winget install t8y2.dbx +``` + +**Flatpak (Linux):** + +```bash +flatpak remote-add --if-not-exists flatpark https://dl.flatpark.org/flatpark.flatpakrepo +flatpak install flatpark com.dbxio.dbx +``` + +Updates then arrive through the regular `flatpak update`. See the [DBX page on FlatPark](https://flatpark.org/apps/com.dbxio.dbx/) for details. + +## Self-Hosted (Docker) + +DBX provides a web version that can be deployed via Docker. The examples use +the `latest` tag to pull the current release. + +```bash +docker run -d --pull=always --name dbx -p 4224:4224 -v dbx-data:/app/data t8y2/dbx:latest +``` + +This uses the cross-platform `dbx-data` named volume. Users in China can use +the CNB image, `docker.cnb.cool/dbxio.com/dbx:latest`, for faster pulls. + +For Docker Compose, `deploy/docker-compose.yml` remains the source-build +configuration. To deploy a published image, use +`deploy/docker-compose.release.yml`: + +```bash +docker compose -f deploy/docker-compose.release.yml up -d +``` + +```yaml +services: + dbx: + image: t8y2/dbx:latest + # For faster pulls in China, use the CNB image instead: + # image: docker.cnb.cool/dbxio.com/dbx:latest + pull_policy: always + ports: + - "4224:4224" + volumes: + - dbx-data:/app/data + restart: unless-stopped + +volumes: + dbx-data: +``` + +Open `http://localhost:4224` in your browser. Multi-arch images (amd64 / arm64) are available. + +To publish DBX under a reverse-proxy context path such as `/dbx`, set the +runtime base path and proxy the same prefix to the container: + +```yaml +environment: + - DBX_PUBLIC_BASE_PATH=/dbx +``` + +When building the frontend yourself with an absolute asset base, set +`VITE_DBX_BASE_PATH=/dbx/` before `pnpm build`. + +## Getting Started + +### Prerequisites + +- [Node.js](https://nodejs.org/) >= 18 +- [pnpm](https://pnpm.io/) +- [Rust](https://www.rust-lang.org/tools/install) >= 1.77 + +#### System Dependencies + +**macOS:** + +No additional dependencies required. + +**Linux (Ubuntu/Debian):** + +```bash +sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev +``` + +**NIXOS/NIX :** + +See README-NIX.md + +**Windows:** + +No additional dependencies required. + +### Development + +```bash +make +``` + +`make` installs root dependencies when needed and starts the local Tauri desktop development environment. + +> [!TIP] +> DuckDB compilation takes a while. If you're not working on DuckDB features, +> skip it to speed up local builds: +> +> ```bash +> # Fast checks (skip DuckDB) +> make cargo-check-fast +> make cargo-test-fast +> +> # Tauri dev without DuckDB +> make dev-fast +> ``` +> +> The `--no-default-features` flag only affects local development. +> Release builds (`pnpm tauri build`) always include DuckDB. + +Web version: + +```bash +make dev-web # frontend +make dev-backend # backend +``` + +Documentation site: + +```bash +make docs +``` + +The official DBX documentation site lives in `docs/`. If you want to improve the website content or documentation pages, edit the files under `docs/` and run `make docs` to preview the site locally. + +JDBC agent driver development projects live in `agents/`: + +```bash +cd agents +./gradlew test +``` + +Build artifacts from `agents/drivers//build/libs/` are picked up by local driver install flows when available. + +### Build + +```bash +make package +``` + +The installer will be in `src-tauri/target/release/bundle/`. + +## Tech Stack + +| Layer | Technology | +| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Framework | [Tauri 2](https://tauri.app/) | +| Frontend | [Vue 3](https://vuejs.org/) + TypeScript | +| UI | [shadcn-vue](https://www.shadcn-vue.com/) + Tailwind CSS | +| Editor | [CodeMirror 6](https://codemirror.net/) | +| Backend | Rust + [sqlx](https://github.com/launchbadge/sqlx) / [tiberius](https://github.com/prisma/tiberius) / [redis-rs](https://github.com/redis-rs/redis-rs) / [mongodb](https://github.com/mongodb/mongo-rust-driver) | + +## Documentation + +- [Official docs](https://dbxio.com/en/docs/what-is-dbx) — feature guides and tutorials +- [Contributing](CONTRIBUTING.md) — how to pick up issues and open PRs +- [Web API reference](docs/content/docs/web-api.mdx) — HTTP API for Docker/Web deployments +- [Examples](examples/) — CLI, MCP, Docker, and API samples + +## Community + +Discord +QQ Group +WeChat Group +[![LINUX DO](https://img.shields.io/badge/LINUX%20DO-Community-blue)](https://linux.do) + +## FAQ + +
+Is DBX free? +Yes. DBX is open source under Apache-2.0. All features are free. +
+ +
+Does DBX phone home? +No. DBX does not collect telemetry. The auto-update feature checks GitHub Releases for new versions — you can disable it in settings. +
+ +
+Can I use DBX without an internet connection? +Yes. The desktop app works fully offline. For air-gapped driver installs, download offline driver packages from the [Offline Drivers page](https://dbxio.com/en/drivers) on an internet-connected machine, transfer them to the offline machine, then import them in DBX from Settings > Driver Manager. AI features need network access to the model endpoint (or a local model via Ollama). +
+ +
+How is DBX different from DBeaver / TablePlus / Beekeeper Studio? +DBX is 20 MB with no runtime dependencies (no Java, no Python). It includes AI and MCP natively — not as plugins. It supports 60+ databases across desktop, Docker, and web from a single codebase. +
+ +
+What databases are supported? +MySQL, PostgreSQL, SQLite, Cloudflare D1, Redis, MongoDB, DuckDB, ClickHouse, SQL Server, Oracle, Elasticsearch, Qdrant, Milvus, Weaviate, MariaDB, TiDB, OceanBase, openGauss, GaussDB, KWDB, KingBase, Vastbase, GoldenDB, Doris, SelectDB, StarRocks, Manticore Search, Redshift, DM, TDengine, XuguDB, CockroachDB, Access, HighGo, and more. Agent/JDBC-oriented profiles extend support to H2, Snowflake, Trino, PrestoSQL, Hive, DB2, Informix, Neo4j, Cassandra, BigQuery, Kylin, SunDB, Databricks, SAP HANA, Teradata, Vertica, Firebird, Exasol, YashanDB, GBase 8a/8s, Databend, RQLite, Turso, InfluxDB, QuestDB, IoTDB, etcd, ZooKeeper, Nacos, IRIS, and custom JDBC connections. Message queue admin (Pulsar, Kafka, RocketMQ) is also supported. +
+ +
+How do I report a bug or request a feature? +Open an issue on GitHub Issues. +
+ +## Contributors + + + + + +## Star History + + + + + + Star History Chart + + + +## License + +[Apache-2.0](LICENSE) diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..db2551e --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub 来源说明 + +- 原始项目:`t8y2/dbx` +- 原始仓库:https://github.com/t8y2/dbx +- 导入方式:上游默认分支的最新快照 +- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准 +- 本文件仅用于记录来源,不代表 WeHub 是原项目作者 diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..8dc73a6 --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,427 @@ +
+

20 MB 驾驭 60+ 种数据库。桌面端 & Docker 自托管,内置 AI 助手。

+ +

+ DBX 截图 +

+ +

+ + + 加入 QQ 群 + 加入微信交流群 + 加入 Discord +

+

+ t8y2%2Fdbx | Trendshift + Featured|HelloGitHub + DBX - Lightweight open-source database manager built with Rust | Product Hunt +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + AtomGit Stars + CNB +

+

+ English | 简体中文 +

+ +

+ + +

+

+ + +

+
+ +## 为什么选择 DBX? + + + + + + + + + + +
+

🪶 20 MB,极致轻量

+

无需 Java 运行环境,无需 Python 虚拟环境,不内嵌 Chromium。DBX 是单个小巧的二进制文件——下载、安装、连接。DBeaver 依赖 Java;TablePlus 仅限 macOS。DBX 全平台可用,无需额外运行时。

+
+

🤖 AI 原生集成在编辑器里

+

选中一张表,描述你想要什么,直接得到 SQL——无需在工具之间复制粘贴。支持 Claude、OpenAI,或通过 Ollama 使用本地模型。内置安全检查会在执行前审查 AI 生成的 SQL。

+
+

🔌 MCP 协议:你的数据库,AI 就绪

+

DBX 原生支持 Model Context Protocol。Claude Code、Cursor、Windsurf 等 AI 编程助手可以直接通过你已配置的数据库连接查询数据。一次配置,处处可用。

+
+

🌐 桌面端 + Docker + Web

+

macOS、Windows、Linux 原生应用。通过 Docker 自托管供团队访问。Web 版本适配纯浏览器环境。同样的功能,同样的连接配置。

+
+ +## 功能特性 + +### 60+ 种数据库,一个工具搞定 + +MySQL、PostgreSQL、SQLite、Cloudflare D1、Redis、MongoDB、DuckDB、ClickHouse、SQL Server、Oracle、Elasticsearch、MariaDB、TiDB、OceanBase、openGauss、GaussDB、KWDB、KingBase、Vastbase、GoldenDB、Doris、SelectDB、StarRocks、Manticore Search、Redshift、DM、TDengine、虚谷 XuguDB、CockroachDB、Access、HighGo 等数据库都能直接连接。Agent/JDBC 方向的配置还可扩展到 H2、Snowflake、Trino、Hive、DB2、Informix、Neo4j、Cassandra、BigQuery、Kylin、SunDB 和自定义 JDBC。新增的原生与 Agent 驱动还覆盖了 Databricks、SAP HANA、Teradata、Vertica、Firebird、Exasol、崖山 YashanDB、GBase、Databend、RQLite、Turso、InfluxDB、QuestDB、IoTDB、etcd、IRIS 等。全部装进约 20 MB 的应用里,不内嵌 Chromium。 + +### 查询编辑器 + +CodeMirror 6 语法高亮、元数据感知自动补全、`Cmd+Enter` 执行、选中 SQL 执行、SQL 格式化、诊断提示,9 种编辑器主题。查询历史、常用 SQL 片段、标签页恢复和 SQL 文件执行让重复工作更顺手。 + +### AI SQL 助手 + +用自然语言描述你的需求,直接生成 SQL。还能解释查询、优化 SQL、修复错误,并通过内置安全检查执行 AI 生成的 SQL。支持 Claude、OpenAI、本地模型或任何 OpenAI 兼容端点。 + +### 数据表格 + +虚拟滚动,轻松应对大型结果集。行内编辑、保存前 SQL 预览、WHERE / ORDER BY 控件、DataGrip 风格过滤器、LIKE / NOT LIKE 右键过滤、排序、全文搜索、分页、列宽调整、自动列宽、行号、斑马纹和完整单元格详情。支持导出或复制为 CSV、JSON、Markdown、XLSX、INSERT 语句。 + +### Schema 工具 + +- **结构浏览** — 数据库、Schema、表、字段、索引、外键、触发器,支持侧边栏搜索和置顶 +- **对象浏览** — 按类型分组查看过程、函数、视图,并在支持的数据库中编辑源码 +- **表结构编辑器** — 对支持的数据库执行可审查的字段和索引变更 +- **ER 关系图** — 可视化表间关联 +- **Schema 对比** — 跨连接对比表结构差异 +- **执行计划** — 可视化查询执行计划 +- **字段血缘** — 字段级血缘分析 +- **数据库搜索** — 在大型 Schema 中快速查找对象 + +### 数据操作 + +- **数据导入** — CSV、Excel +- **数据迁移** — 在数据库之间迁移数据 +- **数据库导出** — 完整数据库导出 +- **数据对比** — 对比表数据并审查同步结果 +- **SQL 文件执行** — 直接执行 `.sql` 文件 +- **文件预览** — 拖入 Parquet、CSV、JSON 即时预览(基于 DuckDB) +- **连接导入** — 从 DBeaver 或 Navicat 导入连接配置 + +### 专项浏览器 + +- **Redis** — 模式匹配搜索、批量键操作、命令执行器、TTL 编辑,全数据类型支持(String、Hash、List、Set、ZSet、Stream) +- **MongoDB** — 文档增删改查、分页浏览,支持 Atlas 和副本集 URL 直连 + +### 安全与连接 + +SSH 隧道(密钥和密码认证)· 数据库和 AI 代理设置 · 断线自动重连 · 危险操作确认对话框 · 加密导出/导入连接配置 · 连接颜色标记 · 驱动商店与可选 JDBC 插件 + +### 精致 UI + +深色模式原生标题栏同步 · 9 种编辑器主题 · English、简体中文、Español · 布局偏好设置 · 内置自动更新 + +## AI 编程助手集成 (MCP) + +DBX 提供 [MCP Server](packages/mcp-server/),让 AI 编程助手直接使用 DBX 中已配置的数据库连接查询数据。 + +```bash +npx @dbx-app/mcp-server +``` + +在 `.mcp.json` 中添加: + +```json +{ + "mcpServers": { + "dbx": { "command": "npx", "args": ["-y", "@dbx-app/mcp-server"] } + } +} +``` + +Windows 便携版需要在 MCP 配置中设置 `DBX_DATA_DIR`,指向 `DBX.exe` 同级的 `data` 目录(即包含 `dbx.db` 的文件夹)。 + +如果连接的是 DBX Web 或 Docker 部署,请让 MCP Server 指向 Web 后端 API。如果 Web 登录页需要密码,`DBX_WEB_PASSWORD` 填写同一个 Web 登录密码: + +```json +{ + "mcpServers": { + "dbx": { + "command": "npx", + "args": ["-y", "@dbx-app/mcp-server"], + "env": { + "DBX_WEB_URL": "http://localhost:4224", + "DBX_WEB_PASSWORD": "你的 Web 登录密码" + } + } + } +} +``` + +支持 Claude Code、Cursor、Windsurf 等 MCP 兼容的 AI 助手。可列出连接、浏览表、执行 SQL,还能直接在 DBX 界面中打开表。 + +DBX 也提供独立 CLI 包,适合终端、脚本和 Codex 工作流: + +```bash +npm install -g @dbx-app/cli +# 或通过 Homebrew +brew tap t8y2/dbx && brew install dbx-cli +dbx connections list --json +dbx query local "select 1" --json +``` + +详见 [MCP Server 说明](packages/mcp-server/README.md) 和 [CLI 说明](packages/cli/README.md)。 + +## 安装 + +从 [Releases](https://github.com/t8y2/dbx/releases/latest) 页面下载最新版本。 + +**Homebrew (macOS):** + +```bash +brew install --cask dbx +``` + +**Scoop (Windows):** + +```bash +scoop bucket add dbx https://github.com/t8y2/scoop-bucket +scoop install dbx +``` + +**WinGet (Windows):** + +``` +winget install t8y2.dbx +``` + +**Flatpak (Linux):** + +```bash +flatpak remote-add --if-not-exists flatpark https://dl.flatpark.org/flatpark.flatpakrepo +flatpak install flatpark com.dbxio.dbx +``` + +之后通过常规的 `flatpak update` 即可获取更新。详见 [FlatPark 上的 DBX 页面](https://flatpark.org/apps/com.dbxio.dbx/)。 + +## 自托管 (Docker) + +DBX 提供 Web 版本,可通过 Docker 部署。示例使用 `latest` 标签以拉取当前发布版本。 + +```bash +docker run -d --pull=always --name dbx -p 4224:4224 -v dbx-data:/app/data t8y2/dbx:latest +``` + +这里使用跨平台的 `dbx-data` 命名卷。中国大陆用户可选用 CNB 镜像 +`docker.cnb.cool/dbxio.com/dbx:latest`,以获得更快的拉取速度。 + +使用 Docker Compose 时,`deploy/docker-compose.yml` 保留为源码构建配置。 +如需部署已发布的镜像,请使用 `deploy/docker-compose.release.yml`: + +```bash +docker compose -f deploy/docker-compose.release.yml up -d +``` + +```yaml +services: + dbx: + image: t8y2/dbx:latest + # 中国大陆用户可改用 CNB 镜像,以加快拉取速度: + # image: docker.cnb.cool/dbxio.com/dbx:latest + pull_policy: always + ports: + - "4224:4224" + volumes: + - dbx-data:/app/data + restart: unless-stopped + +volumes: + dbx-data: +``` + +如需通过 nginx 等反向代理发布到 `/dbx` 这类子路径下,设置运行时上下文路径,并将同一前缀代理到容器: + +```yaml +environment: + - DBX_PUBLIC_BASE_PATH=/dbx +``` + +如果自行从源码构建前端并希望使用绝对资源路径,可在 `pnpm build` 前设置 `VITE_DBX_BASE_PATH=/dbx/`。 + +浏览器访问 `http://localhost:4224`。支持 amd64 / arm64 双架构镜像。 + +## 快速开始 + +### 环境要求 + +- [Node.js](https://nodejs.org/) >= 18 +- [pnpm](https://pnpm.io/) +- [Rust](https://www.rust-lang.org/tools/install) >= 1.77 + +#### 系统依赖 + +**macOS:** + +无需额外安装。 + +**Linux (Ubuntu/Debian):** + +```bash +sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libappindicator3-dev librsvg2-dev patchelf libssl-dev +``` + +**NIXOS/NIX :** + +查看 README-NIX.md + +**Windows:** + +无需额外安装。 + +### 开发 + +```bash +make +``` + +`make` 会在需要时安装根目录依赖,并启动本地 Tauri 桌面端开发环境。 + +> [!TIP] +> DuckDB 从源码编译较慢。如果不涉及 DuckDB 功能,可以跳过以加速本地构建: +> +> ```bash +> # 快速检查(跳过 DuckDB) +> make cargo-check-fast +> make cargo-test-fast +> +> # Tauri 开发模式跳过 DuckDB +> make dev-fast +> ``` +> +> `--no-default-features` 仅影响本地开发,发布构建(`pnpm tauri build`)始终包含 DuckDB。 + +Web 版本: + +```bash +make dev-web # 前端 +make dev-backend # 后端 +``` + +文档站: + +```bash +make docs +``` + +DBX 官网文档位于 `docs/` 目录。如果你想贡献官网内容或文档页面,请修改 `docs/` 下的文件,并运行 `make docs` 在本地预览文档站。 + +JDBC Agent 驱动开发工程位于 `agents/` 目录: + +```bash +cd agents +./gradlew test +``` + +本地驱动安装流程会优先查找 `agents/drivers//build/libs/` 下的构建产物。 + +### 构建 + +```bash +make package +``` + +安装包输出在 `src-tauri/target/release/bundle/` 目录。 + +## 技术栈 + +| 层级 | 技术 | +| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 框架 | [Tauri 2](https://tauri.app/) | +| 前端 | [Vue 3](https://vuejs.org/) + TypeScript | +| UI | [shadcn-vue](https://www.shadcn-vue.com/) + Tailwind CSS | +| 编辑器 | [CodeMirror 6](https://codemirror.net/) | +| 后端 | Rust + [sqlx](https://github.com/launchbadge/sqlx) / [tiberius](https://github.com/prisma/tiberius) / [redis-rs](https://github.com/redis-rs/redis-rs) / [mongodb](https://github.com/mongodb/mongo-rust-driver) | + +## 文档 + +- [官方文档](https://dbxio.com/cn/docs/what-is-dbx) — 功能说明与使用教程 +- [贡献指南](CONTRIBUTING.zh-CN.md) — 如何认领 Issue 并提交 PR +- [Web API 参考](docs/content/docs/web-api.cn.mdx) — Docker/Web 部署的 HTTP API +- [示例代码](examples/) — CLI、MCP、Docker 与 API 示例 + +## 社区 + +Discord +QQ 群 +微信交流群 +[![LINUX DO](https://img.shields.io/badge/LINUX%20DO-社区-blue)](https://linux.do) + +## 常见问题 + +
+DBX 是免费的吗? +是的。DBX 基于 Apache-2.0 协议开源,所有功能均免费使用。 +
+ +
+DBX 会收集用户数据吗? +不会。DBX 不收集任何遥测数据。自动更新功能仅检查 GitHub Releases 获取新版本——你可以在设置中禁用它。 +
+ +
+可以离线使用吗? +可以。桌面端完全支持离线使用。内网环境安装驱动时,可在有网机器打开[离线驱动下载页](https://dbxio.com/cn/drivers)下载离线驱动包,传输到内网机器后,在 DBX 的「设置 > 驱动管理」中导入。AI 功能需要网络访问模型端点(或通过 Ollama 使用本地模型)。 +
+ +
+DBX 和 DBeaver / TablePlus / Beekeeper Studio 有什么区别? +DBX 仅 20 MB,无需运行时依赖(无需 Java、无需 Python)。AI 和 MCP 是原生内置功能,不是插件。单一代码库同时支持 60+ 数据库、桌面端、Docker 和 Web。 +
+ +
+支持哪些数据库? +MySQL、PostgreSQL、SQLite、Cloudflare D1、Redis、MongoDB、DuckDB、ClickHouse、SQL Server、Oracle、Elasticsearch、Qdrant、Milvus、Weaviate、MariaDB、TiDB、OceanBase、openGauss、GaussDB、KWDB、KingBase、Vastbase、GoldenDB、Doris、SelectDB、StarRocks、Manticore Search、Redshift、DM、TDengine、虚谷 XuguDB、CockroachDB、Access、HighGo 等。JDBC 方向配置可扩展到 H2、Snowflake、Trino、PrestoSQL、Hive、DB2、Informix、Neo4j、Cassandra、BigQuery、Kylin、SunDB、Databricks、SAP HANA、Teradata、Vertica、Firebird、Exasol、崖山 YashanDB、GBase 8a/8s、Databend、RQLite、Turso、InfluxDB、QuestDB、IoTDB、etcd、ZooKeeper、Nacos、IRIS 及自定义 JDBC 连接,并支持消息队列管理(Pulsar、Kafka、RocketMQ)。 +
+ +
+如何报告 Bug 或请求新功能? +在 GitHub Issues 提交 Issue。 +
+ +## 贡献者 + + + + + +## Star History + + + + + + Star History Chart + + + +## 开源协议 + +[Apache-2.0](LICENSE) diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..31abe6d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,30 @@ +# Security Policy + +## Reporting a Vulnerability + +Please do not report security vulnerabilities in public GitHub issues. + +Use GitHub's private vulnerability reporting for this repository when available. If that is not available to you, open a minimal GitHub issue asking for a private security contact without including exploit details, credentials, tokens, connection strings, database dumps, or screenshots containing secrets. + +## What to Include + +Helpful reports include: + +- Affected DBX version or commit. +- Operating system and installation method. +- The impacted component, such as desktop app, Docker service, CLI, MCP server, or JDBC plugin. +- Steps to reproduce in a safe test environment. +- Impact assessment and any known workaround. + +## Scope + +Security-sensitive areas include: + +- Connection storage, config import/export, and encryption. +- Database credential handling. +- SSH tunnel and proxy handling. +- AI provider keys and OpenAI-compatible endpoint configuration. +- MCP and CLI access to local DBX connections. +- Docker web service authentication and data directory handling. + +Please avoid testing against systems you do not own or have explicit permission to assess. diff --git a/agents/.gitignore b/agents/.gitignore new file mode 100644 index 0000000..e1afb2a --- /dev/null +++ b/agents/.gitignore @@ -0,0 +1,8 @@ +**/libs/*.jar +!drivers/oscar/libs/oscarJDBC8.jar +gradle.properties +build/ +*/bin/ +.gradle/ +.DS_Store +openspec diff --git a/agents/README.md b/agents/README.md new file mode 100644 index 0000000..51aa7e2 --- /dev/null +++ b/agents/README.md @@ -0,0 +1,114 @@ +# DBX Agents + +English | [简体中文](README.zh-CN.md) + +Agent drivers for [DBX](https://github.com/t8y2/dbx) — database support via JDBC and native database drivers. + +Each agent runs as a standalone process and communicates with DBX via stdin/stdout JSON-RPC 2.0. + +## Supported Databases + +| Agent | Database | JDBC Driver | +|-------|----------|-------------| +| access | Microsoft Access | UCanAccess | +| dameng | 达梦 DM8 | DM JDBC | +| kingbase | 人大金仓 KingbaseES | KingbaseES JDBC | +| vastbase | Vastbase | Vastbase JDBC | +| goldendb | GoldenDB | MySQL Connector/J | +| databend | Databend | Databend JDBC | +| databricks | Databricks SQL | Databricks JDBC | +| saphana | SAP HANA | SAP HANA JDBC | +| teradata | Teradata | Teradata JDBC | +| vertica | Vertica | Vertica JDBC | +| firebird | Firebird | Jaybird JDBC | +| exasol | Exasol | Exasol JDBC | +| oceanbase-oracle | OceanBase Oracle Mode | OceanBase JDBC | +| gbase8a | GBase 8a | External GBase 8a JDBC | +| gbase8s | GBase 8s | External GBase 8s JDBC | +| oracle | Oracle 10g+ | go-ora native agent | +| h2 | H2 | H2 JDBC | +| snowflake | Snowflake | Snowflake JDBC | +| trino | Trino (Presto) | Trino JDBC | +| hive | Apache Hive | Hive JDBC | +| db2 | IBM DB2 | DB2 JDBC | +| informix | IBM Informix | Informix JDBC | +| neo4j | Neo4j | Neo4j JDBC | +| cassandra | Apache Cassandra | Cassandra JDBC | +| bigquery | Google BigQuery | BigQuery JDBC | +| kylin | Apache Kylin | Kylin JDBC | +| sundb | SunDB | SunDB JDBC | +| tdengine | TDengine | taos-jdbcdriver (WebSocket, REST fallback) | +| yashandb | 崖山 YashanDB | YashanDB JDBC | +| xugu | 虚谷 XuguDB | XuguDB Go native agent | +| iotdb | Apache IoTDB | IoTDB JDBC | +| etcd | etcd | jetcd | +| zookeeper | Apache ZooKeeper | Apache Curator | + + +## Multi-JRE Support + +Most Java agents target JRE 21. Native agents, such as `oracle` and `xugu`, do not require a JRE. DBX downloads and manages the JRE 21 installation automatically for Java agents. + +## Choosing a Driver Language + +For new agents, prefer a **native (Go or Rust) driver** over a Java/JDBC agent whenever a mature, license-compatible native driver is available. Native agents ship as a single self-contained executable with no JRE, which significantly reduces memory footprint and startup time — the JVM baseline that every Java agent pays even when idle is avoided entirely. + +- **Native (Go/Rust)** — preferred when a usable native driver exists. See `drivers/oracle-go` (go-ora) and `drivers/xugu` as reference implementations. No JRE download or management is needed. +- **Java/JDBC** — the default fallback when only a JDBC driver exists for the database, or when the native driver is immature or unmaintained. Most agents still fall in this category. + +Native agents implement the same JSON-RPC contract and `versions.json` registration as Java agents; they ship an `agent` executable instead of `agent.jar`. If both a native and a Java path exist for the same database, default DBX to the native one and keep the Java variant only as a compatibility fallback — see how `oracle` (go-ora native) coexists with `oracle-legacy` / `oracle-10g`. + +## Build + +Requires JDK 21 (Gradle toolchain auto-downloads if needed). + +```bash +./gradlew shadowJar +(cd drivers/oracle-go && go build -o agent .) +(cd drivers/xugu && go build -o agent .) +``` + +Output JARs are in `drivers/{module}/build/libs/`. Native agents build from `drivers/oracle-go` and `drivers/xugu`. + +### Local DBX Runtime Test + +When changing a Java agent under `agents/drivers//` or shared Java agent protocol code, rebuild the target agent and replace the runtime JAR used by the local DBX app: + +```bash +./gradlew ::shadowJar +cp ~/.dbx/agents/drivers//agent.jar ~/.dbx/agents/drivers//agent.jar.bak +cp agents/drivers//build/libs/*-all.jar ~/.dbx/agents/drivers//agent.jar +``` + +Restart DBX or disconnect and reconnect the database so the new agent process loads the replacement JAR. + +Native agents such as `oracle` and `xugu` use the `agent` executable in the driver directory instead of `agent.jar`. + +## Versioning + +Agent module versions are tracked in [`versions.json`](versions.json). + +- **Changing an existing driver** — do not edit `versions.json` manually. The release CI diffs each `drivers//` directory against the previous tag and auto-bumps the patch version for every changed module (see [`bump-agent-versions.mjs`](../.github/scripts/bump-agent-versions.mjs)). A change to the shared `agents/common` runtime bumps every module that packages it. +- **Adding a new driver** — add an entry to `versions.json`, e.g. `"rabbitmq": "0.1.0"`. The CI only bumps keys already present in the file, so a new module is invisible to versioning until it is registered here. In the same change, also add the module to `settings.gradle` and the support table above — `versions.json` keys must match the agent modules declared in `settings.gradle`, excluding the infrastructure modules `common` and `test-support`. + +## Development + +- Agent authoring guide: [docs/agent-authoring.md](docs/agent-authoring.md) +- JDBC agent template: [docs/examples/jdbc-agent-template](docs/examples/jdbc-agent-template) +- Release checklist: [docs/release-checklist.md](docs/release-checklist.md) + +## Architecture + +``` +DBX Main Process (Rust/Tauri) + │ stdin/stdout (JSON-RPC 2.0) + ▼ +agent / java -jar dbx-agent-{type}.jar + │ + ▼ +Native driver / JDBC → Database +``` + +## License + +[AGPL-3.0](https://github.com/t8y2/dbx/blob/main/LICENSE) diff --git a/agents/README.zh-CN.md b/agents/README.zh-CN.md new file mode 100644 index 0000000..ef12499 --- /dev/null +++ b/agents/README.zh-CN.md @@ -0,0 +1,114 @@ +# DBX Agents + +[English](README.md) | 简体中文 + +DBX 的 Agent 驱动 —— 通过 JDBC 和原生数据库驱动支持各种数据库。 + +每个 agent 作为独立进程运行,通过 stdin/stdout 与 DBX 进行 JSON-RPC 2.0 通信。 + +## 支持的数据库 + +| Agent | 数据库 | JDBC 驱动 | +|-------|----------|-------------| +| access | Microsoft Access | UCanAccess | +| dameng | 达梦 DM8 | DM JDBC | +| kingbase | 人大金仓 KingbaseES | KingbaseES JDBC | +| vastbase | Vastbase | Vastbase JDBC | +| goldendb | GoldenDB | MySQL Connector/J | +| databend | Databend | Databend JDBC | +| databricks | Databricks SQL | Databricks JDBC | +| saphana | SAP HANA | SAP HANA JDBC | +| teradata | Teradata | Teradata JDBC | +| vertica | Vertica | Vertica JDBC | +| firebird | Firebird | Jaybird JDBC | +| exasol | Exasol | Exasol JDBC | +| oceanbase-oracle | OceanBase Oracle 模式 | OceanBase JDBC | +| gbase8a | GBase 8a | 外部 GBase 8a JDBC | +| gbase8s | GBase 8s | 外部 GBase 8s JDBC | +| oracle | Oracle 10g+ | go-ora 原生 agent | +| h2 | H2 | H2 JDBC | +| snowflake | Snowflake | Snowflake JDBC | +| trino | Trino (Presto) | Trino JDBC | +| hive | Apache Hive | Hive JDBC | +| db2 | IBM DB2 | DB2 JDBC | +| informix | IBM Informix | Informix JDBC | +| neo4j | Neo4j | Neo4j JDBC | +| cassandra | Apache Cassandra | Cassandra JDBC | +| bigquery | Google BigQuery | BigQuery JDBC | +| kylin | Apache Kylin | Kylin JDBC | +| sundb | SunDB | SunDB JDBC | +| tdengine | TDengine | taos-jdbcdriver(WebSocket,REST 兜底) | +| yashandb | 崖山 YashanDB | YashanDB JDBC | +| xugu | 虚谷 XuguDB | XuguDB Go 原生 agent | +| iotdb | Apache IoTDB | IoTDB JDBC | +| etcd | etcd | jetcd | +| zookeeper | Apache ZooKeeper | Apache Curator | + + +## 多 JRE 支持 + +多数 Java agent 以 JRE 21 为目标。原生 agent(如 `oracle` 和 `xugu`)不需要 JRE。对 Java agent,DBX 会自动下载并管理 JRE 21 安装。 + +## 选择驱动实现语言 + +对于新 agent,只要存在成熟、许可证兼容的原生驱动,优先选择**原生(Go 或 Rust)驱动**而非 Java/JDBC agent。原生 agent 以单一自包含可执行文件发布,无需 JRE,可显著降低内存占用和启动时间 —— 完全避开 Java agent 即便空闲也要付出的 JVM 基线开销。 + +- **原生(Go/Rust)** —— 存在可用原生驱动时首选。参考 `drivers/oracle-go`(go-ora)和 `drivers/xugu`。无需 JRE 下载与管理。 +- **Java/JDBC** —— 当某数据库只有 JDBC 驱动,或原生驱动不成熟、缺乏维护时的默认兜底方案。多数 agent 仍属此类。 + +原生 agent 实现与 Java agent 相同的 JSON-RPC 契约和 `versions.json` 登记;它发布的是 `agent` 可执行文件而非 `agent.jar`。若同一数据库同时存在原生和 Java 路径,DBX 默认使用原生方案,仅将 Java 变体作为兼容兜底保留 —— 参见 `oracle`(go-ora 原生)与 `oracle-legacy` / `oracle-10g` 的共存方式。 + +## 构建 + +需要 JDK 21(Gradle toolchain 会自动下载)。 + +```bash +./gradlew shadowJar +(cd drivers/oracle-go && go build -o agent .) +(cd drivers/xugu && go build -o agent .) +``` + +产物 JAR 在 `drivers/{module}/build/libs/`。原生 agent 从 `drivers/oracle-go` 和 `drivers/xugu` 构建。 + +### 本地 DBX 运行时测试 + +修改 `agents/drivers//` 下的 Java agent 或共享 Java agent 协议代码后,需重新构建目标 agent 并替换本地 DBX 应用使用的运行时 JAR: + +```bash +./gradlew ::shadowJar +cp ~/.dbx/agents/drivers//agent.jar ~/.dbx/agents/drivers//agent.jar.bak +cp agents/drivers//build/libs/*-all.jar ~/.dbx/agents/drivers//agent.jar +``` + +重启 DBX 或断开重连数据库,使新 agent 进程加载替换后的 JAR。 + +`oracle` 和 `xugu` 等原生 agent 使用驱动目录下的 `agent` 可执行文件而非 `agent.jar`。 + +## 版本管理 + +Agent 模块的版本记录在 [`versions.json`](versions.json) 中,遵循以下规则: + +- **修改现有驱动**:无需手动编辑 `versions.json`。发版 CI 会把每个 `drivers//` 目录与上一个 tag 做对比,对有变更的模块自动 bump patch 版本号(见 [`bump-agent-versions.mjs`](../.github/scripts/bump-agent-versions.mjs))。若改动的是共享运行时 `agents/common`,所有依赖它的模块会一并 bump。 +- **新增驱动**:在 `versions.json` 中新增一行,例如 `"rabbitmq": "0.1.0"`。CI 只 bump 文件里已存在的 key,所以新模块在登记到这里之前对版本管理完全不可见。同一次改动中,还要把模块加进 `settings.gradle` 并更新上方的支持表 —— `versions.json` 的 key 必须与 `settings.gradle` 声明的 agent 模块一致(不含 `common`、`test-support` 这类基础设施模块)。 + +## 开发 + +- Agent 编写指南:[docs/agent-authoring.md](docs/agent-authoring.md) +- JDBC agent 模板:[docs/examples/jdbc-agent-template](docs/examples/jdbc-agent-template) +- 发布检查清单:[docs/release-checklist.md](docs/release-checklist.md) + +## 架构 + +``` +DBX 主进程 (Rust/Tauri) + │ stdin/stdout (JSON-RPC 2.0) + ▼ +agent / java -jar dbx-agent-{type}.jar + │ + ▼ +原生驱动 / JDBC → 数据库 +``` + +## 许可证 + +[AGPL-3.0](https://github.com/t8y2/dbx/blob/main/LICENSE) diff --git a/agents/build.gradle b/agents/build.gradle new file mode 100644 index 0000000..5c9ca37 --- /dev/null +++ b/agents/build.gradle @@ -0,0 +1,54 @@ +plugins { + id 'com.gradleup.shadow' version '9.0.0-beta12' apply false +} + +def java8Projects = ['common', 'test-support'] as Set +def infrastructureProjects = ['common', 'test-support'] as Set +def legacyStandaloneProjects = ['mongodb', 'kafka'] as Set +def agentProjects = subprojects.findAll { !infrastructureProjects.contains(it.name) } +def jdbcAgentProjects = agentProjects.findAll { !legacyStandaloneProjects.contains(it.name) } + +allprojects { + repositories { + mavenCentral() + } +} + +subprojects { + if (name == 'test-support') { + apply plugin: 'java-library' + } else { + apply plugin: 'java' + } + + java { + toolchain { + languageVersion = JavaLanguageVersion.of(java8Projects.contains(name) ? 8 : 21) + } + } + + dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4' + } + + tasks.withType(Test).configureEach { + useJUnitPlatform() + } +} + +configure(agentProjects) { + apply plugin: 'com.gradleup.shadow' + + tasks.named('shadowJar') { + archiveBaseName = "dbx-agent-${project.name}" + archiveClassifier = '' + } +} + +configure(jdbcAgentProjects) { + dependencies { + implementation project(':common') + testImplementation project(':test-support') + } +} diff --git a/agents/common/build.gradle b/agents/common/build.gradle new file mode 100644 index 0000000..ee0d25b --- /dev/null +++ b/agents/common/build.gradle @@ -0,0 +1,3 @@ +dependencies { + implementation 'com.google.code.gson:gson:2.12.1' +} diff --git a/agents/common/src/main/java/com/dbx/agent/AbstractJdbcAgent.java b/agents/common/src/main/java/com/dbx/agent/AbstractJdbcAgent.java new file mode 100644 index 0000000..190db0d --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/AbstractJdbcAgent.java @@ -0,0 +1,240 @@ +package com.dbx.agent; + +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Types; +import java.util.ArrayList; +import java.util.List; + +public abstract class AbstractJdbcAgent extends BaseDatabaseAgent { + private Connection connection; + private String configuredDatabase = ""; + + @Override + public final Connection getConnection() { + return connection; + } + + @Override + public final void connect(ConnectParams params) { + uncheckedVoid(() -> { + loadDriver(params); + connection = openConnection(params); + configuredDatabase = params.getDatabase(); + afterConnect(params, connection); + }); + } + + @Override + public final boolean testConnection(ConnectParams params) { + return unchecked(() -> { + loadDriver(params); + try (Connection conn = openConnection(params)) { + return conn.isValid(5); + } + }); + } + + private void loadDriver(ConnectParams params) throws Exception { + List driverPaths = params.getJdbc_driver_paths(); + String driverClass = params.getJdbc_driver_class(); + if (driverClass == null || driverClass.isEmpty()) { + driverClass = driverClass(); + } + if (driverPaths != null && !driverPaths.isEmpty()) { + List urls = new ArrayList<>(); + for (String path : driverPaths) { + urls.add(Paths.get(path).toUri().toURL()); + } + URLClassLoader loader = new URLClassLoader(urls.toArray(new URL[0]), getClass().getClassLoader()); + Driver driver = (Driver) Class.forName(driverClass, true, loader).getDeclaredConstructor().newInstance(); + DriverManager.registerDriver(new DriverShim(driver)); + } else { + Class.forName(driverClass); + } + } + + private static final class DriverShim implements Driver { + private final Driver driver; + + DriverShim(Driver driver) { + this.driver = driver; + } + + @Override + public Connection connect(String url, java.util.Properties info) throws java.sql.SQLException { + return driver.connect(url, info); + } + + @Override + public boolean acceptsURL(String url) throws java.sql.SQLException { + return driver.acceptsURL(url); + } + + @Override + public java.sql.DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info) throws java.sql.SQLException { + return driver.getPropertyInfo(url, info); + } + + @Override + public int getMajorVersion() { + return driver.getMajorVersion(); + } + + @Override + public int getMinorVersion() { + return driver.getMinorVersion(); + } + + @Override + public boolean jdbcCompliant() { + return driver.jdbcCompliant(); + } + + @Override + public java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException { + return driver.getParentLogger(); + } + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + Connection conn = requireConnected(); + uncheckedVoid(() -> beforeQueryExecution(conn, options.getTimeoutSecs())); + return JdbcExecutor.INSTANCE.execute( + conn, + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + resultValueReader() + ); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + Connection conn = requireConnected(); + uncheckedVoid(() -> beforeQueryExecution(conn, options.getTimeoutSecs())); + return JdbcExecutor.INSTANCE.executePage( + conn, + sql, + schema, + this::setSchemaSQL, + options, + resultValueReader() + ); + } + + @Override + public QueryPageResult fetchQueryPage(String sessionId, int pageSize) { + return JdbcExecutor.INSTANCE.fetchPage(sessionId, pageSize); + } + + @Override + public boolean closeQuerySession(String sessionId) { + return JdbcExecutor.INSTANCE.closeQuerySession(sessionId); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + Connection conn = requireConnected(); + uncheckedVoid(() -> beforeQueryExecution(conn, options.getTimeoutSecs())); + return JdbcExecutor.INSTANCE.startTableRead( + conn, + sql, + schema, + this::setSchemaSQL, + options, + resultValueReader() + ); + } + + @Override + public QueryPageResult fetchTableReadPage(String sessionId, int pageSize) { + return JdbcExecutor.INSTANCE.fetchTableReadPage(sessionId, pageSize); + } + + @Override + public boolean closeTableReadSession(String sessionId) { + return JdbcExecutor.INSTANCE.closeTableReadSession(sessionId); + } + + @Override + public QueryResult executeTransaction(List statements, String schema) { + return TransactionExecutor.executeUpdateStatements(requireConnected(), statements, schema, this::setSchemaSQL); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + protected abstract String driverClass(); + + protected abstract String buildJdbcUrl(ConnectParams params); + + protected Connection openConnection(ConnectParams params) throws Exception { + return DriverManager.getConnection(buildJdbcUrl(params), params.getUsername(), params.getPassword()); + } + + protected void afterConnect(ConnectParams params, Connection connection) throws Exception { + } + + protected void beforeQueryExecution(Connection connection, int timeoutSecs) throws Exception { + } + + protected String getConfiguredDatabase() { + return configuredDatabase; + } + + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value; + switch (sqlType) { + case Types.BIGINT: + value = rs.getLong(index); + break; + case Types.INTEGER: + case Types.SMALLINT: + case Types.TINYINT: + value = rs.getInt(index); + break; + case Types.FLOAT: + case Types.REAL: + value = rs.getFloat(index); + break; + case Types.DOUBLE: + value = rs.getDouble(index); + break; + case Types.DECIMAL: + case Types.NUMERIC: + value = rs.getBigDecimal(index); + break; + case Types.BOOLEAN: + case Types.BIT: + value = rs.getBoolean(index); + break; + default: + value = rs.getString(index); + break; + } + return rs.wasNull() ? null : value; + }); + } + + protected JdbcExecutor.ResultValueReader resultValueReader() { + return this::resultValue; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/AgentProtocol.java b/agents/common/src/main/java/com/dbx/agent/AgentProtocol.java new file mode 100644 index 0000000..2dc6724 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/AgentProtocol.java @@ -0,0 +1,163 @@ +package com.dbx.agent; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +public final class AgentProtocol { + public static final int PROTOCOL_VERSION = 1; + + public static final String METHOD_HANDSHAKE = "handshake"; + public static final String METHOD_CONNECT = "connect"; + public static final String METHOD_TEST_CONNECTION = "test_connection"; + public static final String METHOD_VALIDATE_CONNECTION = "validate_connection"; + public static final String METHOD_LIST_DATABASES = "list_databases"; + public static final String METHOD_LIST_SCHEMAS = "list_schemas"; + public static final String METHOD_LIST_TABLES = "list_tables"; + public static final String METHOD_LIST_OBJECTS = "list_objects"; + public static final String METHOD_LIST_DATA_TYPES = "list_data_types"; + public static final String METHOD_COMPLETION_ASSISTANT_SEARCH_V1 = "completion_assistant_search_v1"; + public static final String METHOD_GET_OBJECT_SOURCE = "get_object_source"; + public static final String METHOD_GET_TABLE_DDL = "get_table_ddl"; + public static final String METHOD_GET_COLUMNS = "get_columns"; + public static final String METHOD_LIST_INDEXES = "list_indexes"; + public static final String METHOD_LIST_FOREIGN_KEYS = "list_foreign_keys"; + public static final String METHOD_LIST_TRIGGERS = "list_triggers"; + public static final String METHOD_EXECUTE_QUERY = "execute_query"; + public static final String METHOD_EXECUTE_QUERY_PAGE = "execute_query_page"; + public static final String METHOD_FETCH_QUERY_PAGE = "fetch_query_page"; + public static final String METHOD_CLOSE_QUERY_SESSION = "close_query_session"; + public static final String METHOD_START_TABLE_READ = "start_table_read"; + public static final String METHOD_FETCH_TABLE_READ_PAGE = "fetch_table_read_page"; + public static final String METHOD_CLOSE_TABLE_READ_SESSION = "close_table_read_session"; + public static final String METHOD_GET_EXPLAIN_INFO = "get_explain_info"; + public static final String METHOD_EXECUTE_BATCH = "execute_batch"; + public static final String METHOD_EXECUTE_TRANSACTION = "execute_transaction"; + public static final String METHOD_DISCONNECT = "disconnect"; + public static final String METHOD_SHUTDOWN = "shutdown"; + + public static final String MONGO_METHOD_LIST_DATABASES = "list_databases"; + public static final String MONGO_METHOD_LIST_COLLECTIONS = "list_collections"; + public static final String MONGO_METHOD_FIND_DOCUMENTS = "find_documents"; + /** + * MongoDB read path that returns documents as relaxed Extended JSON for transfer. + */ + public static final String MONGO_METHOD_FIND_DOCUMENTS_EXTENDED_JSON = "find_documents_extended_json"; + public static final String MONGO_METHOD_SERVER_VERSION = "server_version"; + public static final String MONGO_METHOD_CREATE_INDEX = "create_index"; + public static final String MONGO_METHOD_DROP_INDEXES = "drop_indexes"; + public static final String MONGO_METHOD_DROP_COLLECTION = "drop_collection"; + public static final String MONGO_METHOD_INSERT_DOCUMENT = "insert_document"; + public static final String MONGO_METHOD_UPDATE_DOCUMENT = "update_document"; + public static final String MONGO_METHOD_UPDATE_DOCUMENTS = "update_documents"; + public static final String MONGO_METHOD_DELETE_DOCUMENT = "delete_document"; + public static final String MONGO_METHOD_DELETE_DOCUMENTS = "delete_documents"; + + public static final String KV_METHOD_LIST_PREFIX = "kv_list_prefix"; + public static final String KV_METHOD_GET = "kv_get"; + public static final String KV_METHOD_PUT = "kv_put"; + public static final String KV_METHOD_DELETE = "kv_delete"; + + public static final String CAPABILITY_CONNECT = "connect"; + public static final String CAPABILITY_TEST_CONNECTION = "test_connection"; + public static final String CAPABILITY_METADATA = "metadata"; + public static final String CAPABILITY_QUERY = "query"; + public static final String CAPABILITY_PAGED_QUERY = "paged_query"; + public static final String CAPABILITY_TRANSACTION = "transaction"; + public static final String CAPABILITY_DDL = "ddl"; + public static final String CAPABILITY_KV = "kv"; + + public static final List CAPABILITIES = Collections.unmodifiableList(Arrays.asList( + CAPABILITY_CONNECT, + CAPABILITY_TEST_CONNECTION, + CAPABILITY_METADATA, + CAPABILITY_QUERY, + CAPABILITY_PAGED_QUERY, + CAPABILITY_TRANSACTION, + CAPABILITY_DDL + )); + + public static final List ALL_CAPABILITIES = Collections.unmodifiableList(Arrays.asList( + CAPABILITY_CONNECT, + CAPABILITY_TEST_CONNECTION, + CAPABILITY_METADATA, + CAPABILITY_QUERY, + CAPABILITY_PAGED_QUERY, + CAPABILITY_TRANSACTION, + CAPABILITY_DDL, + CAPABILITY_KV + )); + + public static final List COMMON_METHODS = Collections.unmodifiableList(Arrays.asList( + METHOD_HANDSHAKE, + METHOD_CONNECT, + METHOD_TEST_CONNECTION, + METHOD_VALIDATE_CONNECTION, + METHOD_LIST_DATABASES, + METHOD_LIST_SCHEMAS, + METHOD_LIST_TABLES, + METHOD_LIST_OBJECTS, + METHOD_LIST_DATA_TYPES, + METHOD_COMPLETION_ASSISTANT_SEARCH_V1, + METHOD_GET_OBJECT_SOURCE, + METHOD_GET_TABLE_DDL, + METHOD_GET_COLUMNS, + METHOD_LIST_INDEXES, + METHOD_LIST_FOREIGN_KEYS, + METHOD_LIST_TRIGGERS, + METHOD_EXECUTE_QUERY, + METHOD_EXECUTE_QUERY_PAGE, + METHOD_FETCH_QUERY_PAGE, + METHOD_CLOSE_QUERY_SESSION, + METHOD_START_TABLE_READ, + METHOD_FETCH_TABLE_READ_PAGE, + METHOD_CLOSE_TABLE_READ_SESSION, + METHOD_GET_EXPLAIN_INFO, + METHOD_EXECUTE_BATCH, + METHOD_EXECUTE_TRANSACTION, + METHOD_DISCONNECT, + METHOD_SHUTDOWN + )); + + public static final List MONGO_LEGACY_METHODS = Collections.unmodifiableList(Arrays.asList( + MONGO_METHOD_LIST_DATABASES, + MONGO_METHOD_LIST_COLLECTIONS, + MONGO_METHOD_FIND_DOCUMENTS, + MONGO_METHOD_FIND_DOCUMENTS_EXTENDED_JSON, + MONGO_METHOD_SERVER_VERSION, + MONGO_METHOD_CREATE_INDEX, + MONGO_METHOD_DROP_INDEXES, + MONGO_METHOD_DROP_COLLECTION, + MONGO_METHOD_INSERT_DOCUMENT, + MONGO_METHOD_UPDATE_DOCUMENT, + MONGO_METHOD_UPDATE_DOCUMENTS, + MONGO_METHOD_DELETE_DOCUMENT, + MONGO_METHOD_DELETE_DOCUMENTS + )); + + public static final List KV_METHODS = Collections.unmodifiableList(Arrays.asList( + KV_METHOD_LIST_PREFIX, + KV_METHOD_GET, + KV_METHOD_PUT, + KV_METHOD_DELETE + )); + + private AgentProtocol() { + } + + public static HandshakeResult handshakeResult() { + return new HandshakeResult(PROTOCOL_VERSION, PROTOCOL_VERSION, CAPABILITIES); + } + + public static final class HandshakeResult { + private final int protocolVersion; + private final int agentProtocolVersion; + private final List capabilities; + + private HandshakeResult(int protocolVersion, int agentProtocolVersion, List capabilities) { + this.protocolVersion = protocolVersion; + this.agentProtocolVersion = agentProtocolVersion; + this.capabilities = capabilities; + } + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/BaseDatabaseAgent.java b/agents/common/src/main/java/com/dbx/agent/BaseDatabaseAgent.java new file mode 100644 index 0000000..13b3531 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/BaseDatabaseAgent.java @@ -0,0 +1,134 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public abstract class BaseDatabaseAgent implements DatabaseAgent { + @Override + public List listObjects(String schema) { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + return result; + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + throw new UnsupportedOperationException("Object source is not supported"); + } + + @Override + public CompletionAssistantResponse completionAssistantSearch(CompletionAssistantRequest request) { + throw new UnsupportedOperationException("Completion assistant search is not supported by this agent"); + } + + @Override + public String getTableDdl(String schema, String table) { + List indexes; + try { + indexes = listIndexes(schema, table); + } catch (RuntimeException e) { + indexes = Collections.emptyList(); + } + + List foreignKeys; + try { + foreignKeys = listForeignKeys(schema, table); + } catch (RuntimeException e) { + foreignKeys = Collections.emptyList(); + } + + return DatabaseAgent.buildTableDdl(schema, table, getColumns(schema, table), indexes, foreignKeys); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + Connection conn = requireConnected(); + return JdbcExecutor.INSTANCE.executePage( + conn, + sql, + schema, + this::setSchemaSQL, + options, + JdbcExecutor.INSTANCE::defaultResultValue + ); + } + + @Override + public QueryPageResult fetchQueryPage(String sessionId, int pageSize) { + return JdbcExecutor.INSTANCE.fetchPage(sessionId, pageSize); + } + + @Override + public boolean closeQuerySession(String sessionId) { + return JdbcExecutor.INSTANCE.closeQuerySession(sessionId); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.startTableRead( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + JdbcExecutor.INSTANCE::defaultResultValue + ); + } + + @Override + public QueryPageResult fetchTableReadPage(String sessionId, int pageSize) { + return JdbcExecutor.INSTANCE.fetchTableReadPage(sessionId, pageSize); + } + + @Override + public boolean closeTableReadSession(String sessionId) { + return JdbcExecutor.INSTANCE.closeTableReadSession(sessionId); + } + + @Override + public QueryResult executeTransaction(List statements, String schema) { + return TransactionExecutor.executeUpdateStatements(requireConnected(), statements, schema, this::setSchemaSQL); + } + + @Override + public QueryResult executeBatch(List statements, String schema) { + return BatchExecutor.executeBatchStatements(requireConnected(), statements, schema, this::setSchemaSQL); + } + + protected Connection requireConnected() { + Connection conn = getConnection(); + if (conn == null) { + throw new IllegalStateException("Not connected"); + } + return conn; + } + + protected static T unchecked(ThrowingSupplier supplier) { + try { + return supplier.get(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + protected static void uncheckedVoid(ThrowingRunnable runnable) { + unchecked(() -> { + runnable.run(); + return null; + }); + } + + protected interface ThrowingSupplier { + T get() throws Exception; + } + + protected interface ThrowingRunnable { + void run() throws Exception; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/BatchExecutor.java b/agents/common/src/main/java/com/dbx/agent/BatchExecutor.java new file mode 100644 index 0000000..134ada0 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/BatchExecutor.java @@ -0,0 +1,98 @@ +package com.dbx.agent; + +import java.sql.BatchUpdateException; +import java.sql.Connection; +import java.sql.SQLFeatureNotSupportedException; +import java.sql.Statement; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +public final class BatchExecutor { + private BatchExecutor() { + } + + public static QueryResult executeBatchStatements( + Connection conn, + List statements, + String schema, + Function setSchemaSql + ) { + return unchecked(() -> { + long start = System.currentTimeMillis(); + applySchema(conn, schema, setSchemaSql); + long totalAffected = 0; + int statementCount = 0; + try (Statement stmt = conn.createStatement()) { + for (String statement : statements) { + String trimmed = JdbcExecutor.trimSql(statement); + if (trimmed.isEmpty()) { + continue; + } + stmt.addBatch(trimmed); + statementCount++; + } + if (statementCount > 0) { + totalAffected = affectedRows(executeBatch(stmt)); + } + } catch (BatchUpdateException e) { + long[] counts = e.getLargeUpdateCounts(); + int failedIndex = counts == null ? 1 : counts.length + 1; + throw new RuntimeException("Statement " + failedIndex + " failed: " + e.getMessage(), e); + } + return new QueryResult( + Collections.emptyList(), + Collections.emptyList(), + totalAffected, + System.currentTimeMillis() - start, + false + ); + }); + } + + private static long affectedRows(long[] updateCounts) { + long total = 0; + if (updateCounts == null) { + return total; + } + for (long count : updateCounts) { + if (count >= 0) { + total += count; + } else if (count == Statement.SUCCESS_NO_INFO) { + total += 1; + } + } + return total; + } + + private static long[] executeBatch(Statement stmt) throws Exception { + try { + return stmt.executeLargeBatch(); + } catch (SQLFeatureNotSupportedException | UnsupportedOperationException | AbstractMethodError e) { + int[] counts = stmt.executeBatch(); + long[] largeCounts = new long[counts.length]; + for (int i = 0; i < counts.length; i++) { + largeCounts[i] = counts[i]; + } + return largeCounts; + } + } + + private static void applySchema(Connection conn, String schema, Function setSchemaSql) throws Exception { + JdbcSchemaSwitcher.apply(conn, schema, setSchemaSql); + } + + private static T unchecked(ThrowingSupplier supplier) { + try { + return supplier.get(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private interface ThrowingSupplier { + T get() throws Exception; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/CheckConstraintInfo.java b/agents/common/src/main/java/com/dbx/agent/CheckConstraintInfo.java new file mode 100644 index 0000000..a38d7f6 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CheckConstraintInfo.java @@ -0,0 +1,19 @@ +package com.dbx.agent; + +public final class CheckConstraintInfo { + private final String name; + private final String definition; + + public CheckConstraintInfo(String name, String definition) { + this.name = name; + this.definition = definition; + } + + public String getName() { + return name; + } + + public String getDefinition() { + return definition; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ColumnInfo.java b/agents/common/src/main/java/com/dbx/agent/ColumnInfo.java new file mode 100644 index 0000000..d65df3b --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ColumnInfo.java @@ -0,0 +1,176 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class ColumnInfo { + private String name; + private String data_type; + private boolean is_nullable; + private String column_default; + private boolean is_primary_key; + private String extra; + private String comment; + private Integer numeric_precision; + private Integer numeric_scale; + private Integer character_maximum_length; + + public ColumnInfo() { + this("", "", true, null, false); + } + + public ColumnInfo(String name, String data_type, boolean is_nullable, String column_default, boolean is_primary_key) { + this(name, data_type, is_nullable, column_default, is_primary_key, null, null, null, null, null); + } + + public ColumnInfo( + String name, + String data_type, + boolean is_nullable, + String column_default, + boolean is_primary_key, + String extra, + String comment, + Integer numeric_precision, + Integer numeric_scale, + Integer character_maximum_length + ) { + this.name = name; + this.data_type = data_type; + this.is_nullable = is_nullable; + this.column_default = column_default; + this.is_primary_key = is_primary_key; + this.extra = extra; + this.comment = comment; + this.numeric_precision = numeric_precision; + this.numeric_scale = numeric_scale; + this.character_maximum_length = character_maximum_length; + } + + public String getName() { + return name; + } + + public String getData_type() { + return data_type; + } + + public boolean getIs_nullable() { + return is_nullable; + } + + public String getColumn_default() { + return column_default; + } + + public boolean getIs_primary_key() { + return is_primary_key; + } + + public String getExtra() { + return extra; + } + + public String getComment() { + return comment; + } + + public Integer getNumeric_precision() { + return numeric_precision; + } + + public Integer getNumeric_scale() { + return numeric_scale; + } + + public Integer getCharacter_maximum_length() { + return character_maximum_length; + } + + public void setName(String name) { + this.name = name; + } + + public void setData_type(String data_type) { + this.data_type = data_type; + } + + public void setIs_nullable(boolean is_nullable) { + this.is_nullable = is_nullable; + } + + public void setColumn_default(String column_default) { + this.column_default = column_default; + } + + public void setIs_primary_key(boolean is_primary_key) { + this.is_primary_key = is_primary_key; + } + + public void setExtra(String extra) { + this.extra = extra; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public void setNumeric_precision(Integer numeric_precision) { + this.numeric_precision = numeric_precision; + } + + public void setNumeric_scale(Integer numeric_scale) { + this.numeric_scale = numeric_scale; + } + + public void setCharacter_maximum_length(Integer character_maximum_length) { + this.character_maximum_length = character_maximum_length; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ColumnInfo)) return false; + ColumnInfo that = (ColumnInfo) other; + return is_nullable == that.is_nullable + && is_primary_key == that.is_primary_key + && Objects.equals(name, that.name) + && Objects.equals(data_type, that.data_type) + && Objects.equals(column_default, that.column_default) + && Objects.equals(extra, that.extra) + && Objects.equals(comment, that.comment) + && Objects.equals(numeric_precision, that.numeric_precision) + && Objects.equals(numeric_scale, that.numeric_scale) + && Objects.equals(character_maximum_length, that.character_maximum_length); + } + + @Override + public int hashCode() { + return Objects.hash( + name, + data_type, + is_nullable, + column_default, + is_primary_key, + extra, + comment, + numeric_precision, + numeric_scale, + character_maximum_length + ); + } + + @Override + public String toString() { + return "ColumnInfo(name=" + name + + ", data_type=" + data_type + + ", is_nullable=" + is_nullable + + ", column_default=" + column_default + + ", is_primary_key=" + is_primary_key + + ", extra=" + extra + + ", comment=" + comment + + ", numeric_precision=" + numeric_precision + + ", numeric_scale=" + numeric_scale + + ", character_maximum_length=" + character_maximum_length + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidate.java b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidate.java new file mode 100644 index 0000000..d541a49 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidate.java @@ -0,0 +1,41 @@ +package com.dbx.agent; + +public final class CompletionAssistantCandidate { + private final String name; + private final CompletionAssistantCandidateKind kind; + private final String database; + private final String schema; + private final String parent_schema; + private final String parent_name; + private final String comment; + private final String data_type; + + public CompletionAssistantCandidate( + String name, + CompletionAssistantCandidateKind kind, + String database, + String schema, + String parentSchema, + String parentName, + String comment, + String dataType + ) { + this.name = name; + this.kind = kind; + this.database = database; + this.schema = schema; + this.parent_schema = parentSchema; + this.parent_name = parentName; + this.comment = comment; + this.data_type = dataType; + } + + public String getName() { return name; } + public CompletionAssistantCandidateKind getKind() { return kind; } + public String getDatabase() { return database; } + public String getSchema() { return schema; } + public String getParent_schema() { return parent_schema; } + public String getParent_name() { return parent_name; } + public String getComment() { return comment; } + public String getData_type() { return data_type; } +} diff --git a/agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidateKind.java b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidateKind.java new file mode 100644 index 0000000..9e2a02d --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantCandidateKind.java @@ -0,0 +1,22 @@ +package com.dbx.agent; + +import com.google.gson.annotations.SerializedName; + +public enum CompletionAssistantCandidateKind { + @SerializedName("database") + DATABASE, + @SerializedName("schema") + SCHEMA, + @SerializedName("table") + TABLE, + @SerializedName("view") + VIEW, + @SerializedName("procedure") + PROCEDURE, + @SerializedName("function") + FUNCTION, + @SerializedName("column") + COLUMN, + @SerializedName("object") + OBJECT +} diff --git a/agents/common/src/main/java/com/dbx/agent/CompletionAssistantMatchMode.java b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantMatchMode.java new file mode 100644 index 0000000..6f44850 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantMatchMode.java @@ -0,0 +1,10 @@ +package com.dbx.agent; + +import com.google.gson.annotations.SerializedName; + +public enum CompletionAssistantMatchMode { + @SerializedName("prefix") + PREFIX, + @SerializedName("contains") + CONTAINS +} diff --git a/agents/common/src/main/java/com/dbx/agent/CompletionAssistantObjectKind.java b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantObjectKind.java new file mode 100644 index 0000000..ec7bbd3 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantObjectKind.java @@ -0,0 +1,22 @@ +package com.dbx.agent; + +import com.google.gson.annotations.SerializedName; + +public enum CompletionAssistantObjectKind { + @SerializedName("database") + DATABASE, + @SerializedName("schema") + SCHEMA, + @SerializedName("table") + TABLE, + @SerializedName("view") + VIEW, + @SerializedName("routine") + ROUTINE, + @SerializedName("procedure") + PROCEDURE, + @SerializedName("function") + FUNCTION, + @SerializedName("column") + COLUMN +} diff --git a/agents/common/src/main/java/com/dbx/agent/CompletionAssistantRequest.java b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantRequest.java new file mode 100644 index 0000000..a304f51 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantRequest.java @@ -0,0 +1,34 @@ +package com.dbx.agent; + +import java.util.ArrayList; +import java.util.List; + +public final class CompletionAssistantRequest { + private String connection_id; + private String database; + private String schema; + private List object_kinds = new ArrayList<>(); + private String mask = ""; + private boolean case_sensitive; + private boolean global_search; + private Integer max_results; + private boolean search_in_comments; + private boolean search_in_definitions; + private String parent_schema; + private String parent_name; + private CompletionAssistantMatchMode match_mode; + + public String getConnection_id() { return connection_id; } + public String getDatabase() { return database == null ? "" : database; } + public String getSchema() { return schema; } + public List getObject_kinds() { return object_kinds == null ? new ArrayList<>() : object_kinds; } + public String getMask() { return mask == null ? "" : mask; } + public boolean getCase_sensitive() { return case_sensitive; } + public boolean getGlobal_search() { return global_search; } + public Integer getMax_results() { return max_results; } + public boolean getSearch_in_comments() { return search_in_comments; } + public boolean getSearch_in_definitions() { return search_in_definitions; } + public String getParent_schema() { return parent_schema; } + public String getParent_name() { return parent_name; } + public CompletionAssistantMatchMode getMatch_mode() { return match_mode; } +} diff --git a/agents/common/src/main/java/com/dbx/agent/CompletionAssistantResponse.java b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantResponse.java new file mode 100644 index 0000000..c20c540 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/CompletionAssistantResponse.java @@ -0,0 +1,19 @@ +package com.dbx.agent; + +import java.util.List; + +public final class CompletionAssistantResponse { + private final List candidates; + private final boolean incomplete; + private final boolean fallback_used; + + public CompletionAssistantResponse(List candidates, boolean incomplete, boolean fallbackUsed) { + this.candidates = candidates; + this.incomplete = incomplete; + this.fallback_used = fallbackUsed; + } + + public List getCandidates() { return candidates; } + public boolean getIncomplete() { return incomplete; } + public boolean getFallback_used() { return fallback_used; } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ConfiguredJdbcAgent.java b/agents/common/src/main/java/com/dbx/agent/ConfiguredJdbcAgent.java new file mode 100644 index 0000000..7d75e41 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ConfiguredJdbcAgent.java @@ -0,0 +1,222 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public abstract class ConfiguredJdbcAgent extends AbstractJdbcAgent { + private final JdbcAgentProfile profile; + private String configuredDatabase = ""; + + protected ConfiguredJdbcAgent(JdbcAgentProfile profile) { + this.profile = profile; + } + + public JdbcAgentProfile getProfile() { + return profile; + } + + @Override + protected String driverClass() { + return profile.getDriverClass(); + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return profile.buildUrl(params); + } + + @Override + protected void afterConnect(ConnectParams params, Connection connection) { + configuredDatabase = params.getDatabase(); + } + + @Override + public List listDatabases() { + return StandardJdbcMetadata.INSTANCE.listDatabases(requireConnection(), configuredDatabase); + } + + @Override + public List listSchemas() { + return StandardJdbcMetadata.INSTANCE.listSchemas(requireConnection(), profile); + } + + @Override + public List listTables(String schema) { + return StandardJdbcMetadata.INSTANCE.listTables(requireConnection(), profile, configuredDatabase, schema); + } + + @Override + public List listTables(String schema, List objectTypes) { + return listTables(schema, new MetadataListConstraints(null, null, null, objectTypes)); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + return StandardJdbcMetadata.INSTANCE.listTables( + requireConnection(), + profile, + configuredDatabase, + schema, + constraints + ); + } + + @Override + public List listObjects(String schema) { + return StandardJdbcMetadata.INSTANCE.listObjects( + requireConnection(), + profile, + configuredDatabase, + schema, + MetadataListConstraints.NONE + ); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + return StandardJdbcMetadata.INSTANCE.listObjects( + requireConnection(), + profile, + configuredDatabase, + schema, + constraints + ); + } + + @Override + public List listDataTypes() { + return StandardJdbcMetadata.INSTANCE.listDataTypes(requireConnection()); + } + + @Override + public CompletionAssistantResponse completionAssistantSearch(CompletionAssistantRequest request) { + return StandardJdbcMetadata.INSTANCE.completionAssistantSearch(requireConnection(), profile, configuredDatabase, request); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + throw new UnsupportedOperationException("Object source is not supported"); + } + + @Override + public List getColumns(String schema, String table) { + return StandardJdbcMetadata.INSTANCE.getColumns(requireConnection(), profile, configuredDatabase, schema, table); + } + + @Override + public List listIndexes(String schema, String table) { + return StandardJdbcMetadata.INSTANCE.listIndexes(requireConnection(), schema, table); + } + + @Override + public List listForeignKeys(String schema, String table) { + return StandardJdbcMetadata.INSTANCE.listForeignKeys(requireConnection(), schema, table); + } + + @Override + public List listTriggers(String schema, String table) { + return StandardJdbcMetadata.INSTANCE.listTriggers(schema, table); + } + + @Override + public String getTableDdl(String schema, String table) { + List indexes; + try { + indexes = listIndexes(schema, table); + } catch (RuntimeException e) { + indexes = Collections.emptyList(); + } + + List foreignKeys; + try { + foreignKeys = listForeignKeys(schema, table); + } catch (RuntimeException e) { + foreignKeys = Collections.emptyList(); + } + + return DatabaseAgent.buildTableDdl(schema, table, getColumns(schema, table), indexes, foreignKeys); + } + + @Override + public String setSchemaSQL(String schema) { + if (profile.getSkipExecutionContext()) { + return ""; + } + return StandardJdbcMetadata.schemaSwitchSql(requireConnection(), profile, schema); + } + + protected Connection requireConnection() { + return requireConnected(); + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return super.resultValue(rs, index, sqlType); + } + + private static String normalizeTableType(String type) { + if (type == null || type.trim().isEmpty()) { + return "TABLE"; + } + if ("BASE TABLE".equals(type.toUpperCase(Locale.ROOT))) { + return "TABLE"; + } + return type; + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static Integer characterLength(ResultSet rs) throws Exception { + String typeName = rs.getString("TYPE_NAME"); + if (typeName == null) { + return null; + } + String normalized = typeName.toLowerCase(Locale.ROOT); + if (!normalized.contains("char") && !normalized.contains("text")) { + return null; + } + return intOrNull(rs, "COLUMN_SIZE"); + } + + private static String blankToNull(String value) { + return value == null || value.trim().isEmpty() ? null : value; + } + + private static void addNonBlank(Set values, String value) { + if (value != null && !value.trim().isEmpty()) { + values.add(value); + } + } + + private static final class IndexColumn { + private final int ordinal; + private final String name; + + private IndexColumn(int ordinal, String name) { + this.ordinal = ordinal; + this.name = name; + } + + private int getOrdinal() { + return ordinal; + } + + private String getName() { + return name; + } + } + +} diff --git a/agents/common/src/main/java/com/dbx/agent/ConnectParams.java b/agents/common/src/main/java/com/dbx/agent/ConnectParams.java new file mode 100644 index 0000000..3e4639a --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ConnectParams.java @@ -0,0 +1,243 @@ +package com.dbx.agent; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public final class ConnectParams { + private String host; + private int port; + private String database; + private String username; + private String password; + private String url_params; + private String connection_string; + private boolean mysql_compat_mode; + private String jdbc_driver_class; + private List jdbc_driver_paths; + private boolean ssl; + private String ca_cert_path; + private String client_cert_path; + private String client_key_path; + private String gbase_server; + private String informix_server; + + public ConnectParams() { + this("", 0, "", "", "", "", "", false, "", Collections.emptyList()); + } + + public ConnectParams( + String host, + int port, + String database, + String username, + String password, + String url_params, + String connection_string, + boolean mysql_compat_mode + ) { + this(host, port, database, username, password, url_params, connection_string, mysql_compat_mode, "", Collections.emptyList()); + } + + public ConnectParams( + String host, + int port, + String database, + String username, + String password, + String url_params, + String connection_string, + boolean mysql_compat_mode, + String jdbc_driver_class, + List jdbc_driver_paths + ) { + this.host = host; + this.port = port; + this.database = database; + this.username = username; + this.password = password; + this.url_params = url_params; + this.connection_string = connection_string; + this.mysql_compat_mode = mysql_compat_mode; + this.jdbc_driver_class = jdbc_driver_class; + this.jdbc_driver_paths = jdbc_driver_paths; + } + + public String getHost() { + return host; + } + + public int getPort() { + return port; + } + + public String getDatabase() { + return database; + } + + public String getUsername() { + return username; + } + + public String getPassword() { + return password; + } + + public String getUrl_params() { + return url_params; + } + + public String getConnection_string() { + return connection_string; + } + + public void setHost(String host) { + this.host = host; + } + + public void setPort(int port) { + this.port = port; + } + + public void setDatabase(String database) { + this.database = database; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setUrl_params(String url_params) { + this.url_params = url_params; + } + + public void setConnection_string(String connection_string) { + this.connection_string = connection_string; + } + + public boolean isMysql_compat_mode() { + return mysql_compat_mode; + } + + public void setMysql_compat_mode(boolean mysql_compat_mode) { + this.mysql_compat_mode = mysql_compat_mode; + } + + public String getJdbc_driver_class() { + return jdbc_driver_class; + } + + public void setJdbc_driver_class(String jdbc_driver_class) { + this.jdbc_driver_class = jdbc_driver_class; + } + + public List getJdbc_driver_paths() { + return jdbc_driver_paths; + } + + public void setJdbc_driver_paths(List jdbc_driver_paths) { + this.jdbc_driver_paths = jdbc_driver_paths; + } + + public boolean isSsl() { + return ssl; + } + + public void setSsl(boolean ssl) { + this.ssl = ssl; + } + + public String getCa_cert_path() { + return ca_cert_path; + } + + public void setCa_cert_path(String ca_cert_path) { + this.ca_cert_path = ca_cert_path; + } + + public String getClient_cert_path() { + return client_cert_path; + } + + public void setClient_cert_path(String client_cert_path) { + this.client_cert_path = client_cert_path; + } + + public String getClient_key_path() { + return client_key_path; + } + + public void setClient_key_path(String client_key_path) { + this.client_key_path = client_key_path; + } + + public String getGbase_server() { + return gbase_server; + } + + public void setGbase_server(String gbase_server) { + this.gbase_server = gbase_server; + } + + public String getInformix_server() { + return informix_server; + } + + public void setInformix_server(String informix_server) { + this.informix_server = informix_server; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ConnectParams)) return false; + ConnectParams that = (ConnectParams) other; + return port == that.port + && Objects.equals(host, that.host) + && Objects.equals(database, that.database) + && Objects.equals(username, that.username) + && Objects.equals(password, that.password) + && Objects.equals(url_params, that.url_params) + && Objects.equals(connection_string, that.connection_string) + && mysql_compat_mode == that.mysql_compat_mode + && Objects.equals(jdbc_driver_class, that.jdbc_driver_class) + && Objects.equals(jdbc_driver_paths, that.jdbc_driver_paths) + && ssl == that.ssl + && Objects.equals(ca_cert_path, that.ca_cert_path) + && Objects.equals(client_cert_path, that.client_cert_path) + && Objects.equals(client_key_path, that.client_key_path) + && Objects.equals(gbase_server, that.gbase_server) + && Objects.equals(informix_server, that.informix_server); + } + + @Override + public int hashCode() { + return Objects.hash(host, port, database, username, password, url_params, connection_string, + mysql_compat_mode, jdbc_driver_class, jdbc_driver_paths, ssl, ca_cert_path, client_cert_path, client_key_path, gbase_server, informix_server); + } + + @Override + public String toString() { + return "ConnectParams(host=" + host + + ", port=" + port + + ", database=" + database + + ", username=" + username + + ", password=" + password + + ", url_params=" + url_params + + ", connection_string=" + connection_string + + ", mysql_compat_mode=" + mysql_compat_mode + + ", jdbc_driver_class=" + jdbc_driver_class + + ", jdbc_driver_paths=" + jdbc_driver_paths + + ", ssl=" + ssl + + ", ca_cert_path=" + ca_cert_path + + ", client_cert_path=" + client_cert_path + + ", client_key_path=" + client_key_path + + ", gbase_server=" + gbase_server + + ", informix_server=" + informix_server + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/DatabaseAgent.java b/agents/common/src/main/java/com/dbx/agent/DatabaseAgent.java new file mode 100644 index 0000000..5e1b9a8 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/DatabaseAgent.java @@ -0,0 +1,211 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +public interface DatabaseAgent { + void connect(ConnectParams params); + + boolean testConnection(ConnectParams params); + + List listDatabases(); + + List listSchemas(); + + default List listSchemas(List visibleSchemas) { + if (visibleSchemas == null) { + return listSchemas(); + } + Set visible = new HashSet<>(visibleSchemas); + return listSchemas().stream().filter(visible::contains).collect(Collectors.toList()); + } + + List listTables(String schema); + + default List listTables(String schema, List objectTypes) { + return listTables(schema); + } + + default List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + // Keep old driver overrides for object type filtering, then apply the new optional constraints locally. + return normalized.filterTables(listTables(schema, normalized.getObjectTypes())); + } + + default List listObjects(String schema) { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + return result; + } + + default List listObjects(String schema, MetadataListConstraints constraints) { + return MetadataListConstraints.orNone(constraints).filterObjects(listObjects(schema)); + } + + default List listDataTypes() { + return Collections.emptyList(); + } + + default CompletionAssistantResponse completionAssistantSearch(CompletionAssistantRequest request) { + throw new UnsupportedOperationException("Completion assistant search is not supported by this agent"); + } + + List getColumns(String schema, String table); + + default ObjectSource getObjectSource(String schema, String name, String objectType) { + throw new UnsupportedOperationException("Object source is not supported"); + } + + default String getTableDdl(String schema, String table) { + List indexes; + try { + indexes = listIndexes(schema, table); + } catch (RuntimeException e) { + indexes = Collections.emptyList(); + } + + List foreignKeys; + try { + foreignKeys = listForeignKeys(schema, table); + } catch (RuntimeException e) { + foreignKeys = Collections.emptyList(); + } + + return buildTableDdl(schema, table, getColumns(schema, table), indexes, foreignKeys); + } + + List listIndexes(String schema, String table); + + List listForeignKeys(String schema, String table); + + List listTriggers(String schema, String table); + + default QueryResult executeQuery(String sql, String schema) { + return executeQuery(sql, schema, new ExecuteQueryOptions()); + } + + QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options); + + default QueryPageResult executeQueryPage(String sql, String schema) { + return executeQueryPage(sql, schema, new QueryPageOptions()); + } + + default QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + Connection conn = getConnection(); + if (conn == null) { + throw new IllegalStateException("Not connected"); + } + return JdbcExecutor.INSTANCE.executePage( + conn, + sql, + schema, + this::setSchemaSQL, + options, + JdbcExecutor.INSTANCE::defaultResultValue + ); + } + + default QueryPageResult fetchQueryPage(String sessionId, int pageSize) { + return JdbcExecutor.INSTANCE.fetchPage(sessionId, pageSize); + } + + default boolean closeQuerySession(String sessionId) { + return JdbcExecutor.INSTANCE.closeQuerySession(sessionId); + } + + default QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + Connection conn = getConnection(); + if (conn == null) { + throw new IllegalStateException("Not connected"); + } + return JdbcExecutor.INSTANCE.startTableRead( + conn, + sql, + schema, + this::setSchemaSQL, + options, + JdbcExecutor.INSTANCE::defaultResultValue + ); + } + + default QueryPageResult fetchTableReadPage(String sessionId, int pageSize) { + return JdbcExecutor.INSTANCE.fetchTableReadPage(sessionId, pageSize); + } + + default boolean closeTableReadSession(String sessionId) { + return JdbcExecutor.INSTANCE.closeTableReadSession(sessionId); + } + + /** + * Get DM execution plan. Supports two modes: + * mode="explain" (default) — direct plan, no execution + * mode="autotrace" — enable MONITOR_SQL_EXEC, execute SQL, then get plan with actual stats + * @return plan text + */ + default String getExplainInfo(String sql, String database, String schema, int timeoutSecs, String mode) { + throw new UnsupportedOperationException("getExplainInfo is not supported by this agent"); + } + + void disconnect(); + + Connection getConnection(); + + default QueryResult executeTransaction(List statements, String schema) { + Connection conn = getConnection(); + if (conn == null) { + throw new IllegalStateException("Not connected"); + } + return TransactionExecutor.executeUpdateStatements(conn, statements, schema, this::setSchemaSQL); + } + + default QueryResult executeBatch(List statements, String schema) { + Connection conn = getConnection(); + if (conn == null) { + throw new IllegalStateException("Not connected"); + } + return BatchExecutor.executeBatchStatements(conn, statements, schema, this::setSchemaSQL); + } + + default String setSchemaSQL(String schema) { + return "SET SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + static String buildTableDdl( + String schema, + String table, + List columns, + List indexes, + List foreignKeys + ) { + return DdlBuilder.buildTableDdl(schema, table, columns, indexes, foreignKeys); + } + + static String trimSql(String sql) { + String trimmed = sql.trim(); + while (trimmed.endsWith(";")) { + trimmed = trimmed.substring(0, trimmed.length() - 1).trim(); + } + return trimmed; + } + + static T unchecked(ThrowingSupplier supplier) { + try { + return supplier.get(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + interface ThrowingSupplier { + T get() throws Exception; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/DatabaseInfo.java b/agents/common/src/main/java/com/dbx/agent/DatabaseInfo.java new file mode 100644 index 0000000..e2c2f12 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/DatabaseInfo.java @@ -0,0 +1,41 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class DatabaseInfo { + private String name; + + public DatabaseInfo() { + this(""); + } + + public DatabaseInfo(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof DatabaseInfo)) return false; + DatabaseInfo that = (DatabaseInfo) other; + return Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } + + @Override + public String toString() { + return "DatabaseInfo(name=" + name + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java b/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java new file mode 100644 index 0000000..b03ef7e --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/DdlBuilder.java @@ -0,0 +1,228 @@ +package com.dbx.agent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +public final class DdlBuilder { + private DdlBuilder() { + } + + public static String buildTableDdl( + String schema, + String table, + List columns, + List indexes, + List foreignKeys + ) { + return buildTableDdl(schema, table, columns, indexes, foreignKeys, false, false); + } + + public static String buildTableDdl( + String schema, + String table, + List columns, + List indexes, + List foreignKeys, + boolean useBacktick + ) { + return buildTableDdl(schema, table, columns, indexes, foreignKeys, useBacktick, false); + } + + public static String buildTableDdl( + String schema, + String table, + List columns, + List indexes, + List foreignKeys, + boolean useBacktick, + boolean includeColumnComments + ) { + return buildTableDdl( + schema, + table, + columns, + indexes, + foreignKeys, + Collections.emptyList(), + useBacktick, + includeColumnComments + ); + } + + public static String buildTableDdl( + String schema, + String table, + List columns, + List indexes, + List foreignKeys, + List checkConstraints, + boolean useBacktick, + boolean includeColumnComments + ) { + String tableRef = qualifiedName(schema, table, useBacktick); + List columnLines = new ArrayList<>(); + for (ColumnInfo column : columns) { + StringBuilder line = new StringBuilder(); + line.append(" "); + line.append(quoteIdent(column.getName(), useBacktick)); + line.append(" "); + line.append(columnTypeSql(column)); + if (!column.getIs_nullable()) { + line.append(" NOT NULL"); + } + if (notBlank(column.getColumn_default())) { + line.append(" DEFAULT "); + line.append(column.getColumn_default()); + } + columnLines.add(line.toString()); + } + + List primaryKeys = new ArrayList<>(); + for (ColumnInfo column : columns) { + if (column.getIs_primary_key()) { + primaryKeys.add(quoteIdent(column.getName(), useBacktick)); + } + } + if (!primaryKeys.isEmpty()) { + columnLines.add(" PRIMARY KEY (" + join(primaryKeys, ", ") + ")"); + } + + for (ForeignKeyInfo fk : foreignKeys) { + columnLines.add( + " CONSTRAINT " + quoteIdent(fk.getName(), useBacktick) + + " FOREIGN KEY (" + quoteIdent(fk.getColumn(), useBacktick) + ") " + + "REFERENCES " + quoteIdent(fk.getRef_table(), useBacktick) + "(" + quoteIdent(fk.getRef_column(), useBacktick) + ")" + ); + } + + for (CheckConstraintInfo constraint : checkConstraints) { + if (!notBlank(constraint.getDefinition())) { + continue; + } + String name = notBlank(constraint.getName()) + ? "CONSTRAINT " + quoteIdent(constraint.getName(), useBacktick) + " " + : ""; + columnLines.add(" " + name + constraint.getDefinition()); + } + + StringBuilder ddl = new StringBuilder(); + ddl.append("CREATE TABLE "); + ddl.append(tableRef); + ddl.append(" (\n"); + ddl.append(join(columnLines, ",\n")); + ddl.append("\n);\n"); + + if (includeColumnComments) { + for (ColumnInfo column : columns) { + if (!notBlank(column.getComment())) { + continue; + } + ddl.append("\nCOMMENT ON COLUMN "); + ddl.append(tableRef); + ddl.append("."); + ddl.append(quoteIdent(column.getName(), useBacktick)); + ddl.append(" IS '"); + ddl.append(sqlStringBody(column.getComment())); + ddl.append("';"); + } + } + + for (IndexInfo index : indexes) { + if (index.getIs_primary()) { + continue; + } + String unique = index.getIs_unique() ? "UNIQUE " : ""; + String using = notBlank(index.getIndex_type()) ? " USING " + index.getIndex_type() : ""; + List quotedColumns = new ArrayList<>(); + for (String column : index.getColumns()) { + quotedColumns.add(quoteIdent(column, useBacktick)); + } + String filter = notBlank(index.getFilter()) ? " WHERE " + index.getFilter() : ""; + ddl.append("\nCREATE "); + ddl.append(unique); + ddl.append("INDEX "); + ddl.append(quoteIdent(index.getName(), useBacktick)); + ddl.append(" ON "); + ddl.append(tableRef); + ddl.append(using); + ddl.append(" ("); + ddl.append(join(quotedColumns, ", ")); + ddl.append(")"); + ddl.append(filter); + ddl.append(";"); + if (notBlank(index.getComment())) { + ddl.append("\nCOMMENT ON INDEX "); + if (notBlank(schema)) { + ddl.append(quoteIdent(schema, useBacktick)); + ddl.append("."); + } + ddl.append(quoteIdent(index.getName(), useBacktick)); + ddl.append(" IS '"); + ddl.append(sqlStringBody(index.getComment())); + ddl.append("';"); + } + } + + return ddl.toString(); + } + + private static String quoteIdent(String identifier, boolean useBacktick) { + return useBacktick + ? JdbcIdentifiers.INSTANCE.backtick(identifier) + : JdbcIdentifiers.INSTANCE.doubleQuote(identifier); + } + + private static String qualifiedName(String schema, String name, boolean useBacktick) { + if (!notBlank(schema)) { + return quoteIdent(name, useBacktick); + } + return quoteIdent(schema, useBacktick) + "." + quoteIdent(name, useBacktick); + } + + private static String columnTypeSql(ColumnInfo column) { + String type = column.getData_type(); + String normalized = type.toLowerCase(Locale.ROOT); + if (isCharacterType(normalized) && column.getCharacter_maximum_length() != null) { + return type + "(" + column.getCharacter_maximum_length() + ")"; + } + if (isNumericType(normalized) && column.getNumeric_precision() != null) { + if (column.getNumeric_scale() != null) { + return type + "(" + column.getNumeric_precision() + ", " + column.getNumeric_scale() + ")"; + } + return type + "(" + column.getNumeric_precision() + ")"; + } + return type; + } + + private static boolean isCharacterType(String normalized) { + return "character varying".equals(normalized) + || "varchar".equals(normalized) + || "char".equals(normalized) + || "character".equals(normalized); + } + + private static boolean isNumericType(String normalized) { + return "numeric".equals(normalized) || "decimal".equals(normalized); + } + + private static boolean notBlank(String value) { + return value != null && !value.trim().isEmpty(); + } + + private static String sqlStringBody(String value) { + return value.replace("'", "''"); + } + + private static String join(List values, String separator) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < values.size(); i++) { + if (i > 0) { + builder.append(separator); + } + builder.append(values.get(i)); + } + return builder.toString(); + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/EwkbWktDecoder.java b/agents/common/src/main/java/com/dbx/agent/EwkbWktDecoder.java new file mode 100644 index 0000000..96af67a --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/EwkbWktDecoder.java @@ -0,0 +1,671 @@ +package com.dbx.agent; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +/** + * Decode PostGIS EWKB / WKB byte streams (and PGgeometry / hex strings) into + * OGC Well-Known Text. Behaves identically to the Rust implementation in + * {@code crates/dbx-core/src/db/postgres.rs::ewkb_to_wkt}, including the + * {@code Z} / {@code M} / {@code ZM} dimension suffixes and {@code EMPTY} + * geometries. Used by the JDBC agent layer so that PostgresLike databases + * such as HighGo / KingBase / Vastbase / openGauss / GaussDB return WKT for + * {@code geometry}/{@code geography} columns instead of opaque hex blobs. + * + *

The decoder is permissive: any unrecognized payload (truncated bytes, + * unsupported geometry kind, non-hex strings, etc.) falls back to a hex + * representation prefixed with {@code 0x} so the cell remains visible. + */ +public final class EwkbWktDecoder { + /** Reflectively-detected PGgeometry classes that expose getValue() returning EWKT text. */ + private static final String[] PGGEOMETRY_CLASS_NAMES = new String[]{ + "org.postgis.PGgeometry", // legacy PostGIS-JDBC + "net.postgis.jdbc.PGgeometry", // modern PostGIS-JDBC (>= 2024 release) + "com.highgo.jdbc.geometry.PGgeometry" + }; + + /** + * Generic {@code org.postgresql.util.PGobject}-shaped classes. Their + * {@code getValue()} returns the textual representation the driver got off + * the wire. For PostGIS columns on HighGo / KingBase / Vastbase that text + * is the EWKB hex (e.g. {@code 0101000020E61000...}) — we still need to run + * it through the EWKB hex parser. + */ + private static final String[] PGOBJECT_CLASS_NAMES = new String[]{ + "org.postgresql.util.PGobject", + "com.highgo.jdbc.util.PGobject", + "org.postgresql.geometric.PGobject" + }; + + private EwkbWktDecoder() { + } + + /** + * Decode a JDBC-returned object from a {@code geometry} / {@code geography} + * column into a textual representation, preferring WKT. + * + *

Accepted inputs: + *

    + *
  • {@code null} — returned as-is.
  • + *
  • {@code byte[]} — interpreted as raw EWKB.
  • + *
  • A {@code PGgeometry}-like object exposing {@code getValue()} — the + * returned string is taken verbatim (already EWKT/WKT).
  • + *
  • {@link String} — if it looks like hex EWKB (with optional + * {@code 0x}/{@code \\x} prefix and a leading endian byte of + * {@code 00}/{@code 01}), it is decoded; otherwise returned as-is.
  • + *
+ * + * @param value raw column value + * @return decoded WKT, or a {@code 0x}-prefixed hex fallback, or {@code null} + */ + public static Object decode(Object value) { + if (value == null) { + return null; + } + if (value instanceof byte[]) { + return decodeBytes((byte[]) value); + } + if (value instanceof String) { + return decodeString((String) value); + } + // PGgeometry / PGobject and friends — pull out their getValue() text + // and run it through the same string path. For PostGIS-JDBC types + // getValue() yields EWKT (passes through unchanged); for the generic + // PGobject driver returns EWKB hex, which decodeString() decodes. + String pgValue = tryReflectiveGetValue(value); + if (pgValue != null) { + return decodeString(pgValue); + } + // Last resort: rely on toString() / underlying value. + return value.toString(); + } + + /** Decode a raw EWKB byte sequence; returns hex {@code 0x..} on failure. */ + static String decodeBytes(byte[] raw) { + if (raw == null) { + return null; + } + String wkt = parseEwkb(raw); + if (wkt != null) { + return wkt; + } + return bytesToHexWithPrefix(raw); + } + + /** + * Decode a string column. If the text matches an EWKB hex layout the bytes + * are decoded; otherwise (already WKT, ST_AsText output, etc.) returned + * unchanged. + */ + static String decodeString(String value) { + if (value == null) { + return null; + } + byte[] bytes = tryParseHex(value); + if (bytes == null) { + return value; + } + String wkt = parseEwkb(bytes); + if (wkt != null) { + return wkt; + } + // looked like hex but couldn't be parsed — preserve hex form. + return ensureHexPrefix(value); + } + + /** + * Try to extract textual value from PGgeometry / PGobject-like objects via + * {@code getValue()}. Returns {@code null} if the class doesn't match any + * known PostGIS / PostgreSQL JDBC type (or the call fails reflectively). + */ + private static String tryReflectiveGetValue(Object value) { + Class cls = value.getClass(); + if (!matchesAnyClassName(cls, PGGEOMETRY_CLASS_NAMES) + && !matchesAnyClassName(cls, PGOBJECT_CLASS_NAMES)) { + return null; + } + try { + Method getValue = cls.getMethod("getValue"); + Object result = getValue.invoke(value); + if (result instanceof String) { + return (String) result; + } + } catch (ReflectiveOperationException ignored) { + // fall through + } + return null; + } + + private static boolean matchesAnyClassName(Class cls, String[] names) { + Class current = cls; + while (current != null) { + for (String name : names) { + if (current.getName().equals(name)) { + return true; + } + for (Class iface : current.getInterfaces()) { + if (iface.getName().equals(name)) { + return true; + } + } + } + current = current.getSuperclass(); + } + return false; + } + + /** @return parsed bytes, or {@code null} if {@code value} is not hex EWKB. */ + static byte[] tryParseHex(String value) { + String s = value; + if (s.length() >= 2 && (s.startsWith("0x") || s.startsWith("0X"))) { + s = s.substring(2); + } else if (s.length() >= 2 && (s.startsWith("\\x") || s.startsWith("\\X"))) { + s = s.substring(2); + } + if (s.length() < 10 || (s.length() & 1) != 0) { + return null; + } + // First byte must be the WKB endian marker (00 = big, 01 = little) + char e0 = s.charAt(0); + char e1 = s.charAt(1); + if (!((e0 == '0') && (e1 == '0' || e1 == '1'))) { + return null; + } + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { + return null; + } + } + byte[] out = new byte[s.length() / 2]; + for (int i = 0; i < out.length; i++) { + int hi = Character.digit(s.charAt(i * 2), 16); + int lo = Character.digit(s.charAt(i * 2 + 1), 16); + out[i] = (byte) ((hi << 4) | lo); + } + return out; + } + + private static String ensureHexPrefix(String value) { + if (value.startsWith("0x") || value.startsWith("0X")) { + return value; + } + return "0x" + value; + } + + static String bytesToHexWithPrefix(byte[] bytes) { + StringBuilder sb = new StringBuilder(bytes.length * 2 + 2); + sb.append("0x"); + for (byte b : bytes) { + sb.append(Character.forDigit((b >> 4) & 0xF, 16)); + sb.append(Character.forDigit(b & 0xF, 16)); + } + return sb.toString(); + } + + // ── EWKB parser ──────────────────────────────────────────────────────── + + private static String parseEwkb(byte[] raw) { + if (raw == null || raw.length == 0) { + return null; + } + Reader reader = new Reader(raw); + Geometry g = parseGeometry(reader); + if (g == null || reader.pos != raw.length) { + return null; + } + return geometryToWkt(g); + } + + private static Geometry parseGeometry(Reader reader) { + Integer endian = reader.readU8(); + if (endian == null) { + return null; + } + boolean little; + if (endian == 0) { + little = false; + } else if (endian == 1) { + little = true; + } else { + return null; + } + Long typeWordBoxed = reader.readU32(little); + if (typeWordBoxed == null) { + return null; + } + long typeWord = typeWordBoxed; + Dims parsed = parseDimensions(typeWord); + long baseType = parsed.baseType; + if (parsed.hasSrid) { + if (reader.readU32(little) == null) { + return null; + } + } + Dimensions dims = parsed.dims; + switch ((int) baseType) { + case 1: { // Point + int len = dims.coordinateLen(); + List coords = new ArrayList<>(len); + for (int i = 0; i < len; i++) { + Double v = reader.readF64(little); + if (v == null) { + return null; + } + coords.add(v); + } + boolean allNan = true; + for (Double v : coords) { + if (!Double.isNaN(v)) { + allNan = false; + break; + } + } + return new Geometry(GeomKind.POINT, dims, allNan ? null : coords, null, null, null, null, null); + } + case 2: { // LineString + List> points = parsePoints(reader, little, dims); + if (points == null) return null; + return new Geometry(GeomKind.LINESTRING, dims, null, points, null, null, null, null); + } + case 3: { // Polygon + Long ringCount = reader.readU32(little); + if (ringCount == null) return null; + List>> rings = new ArrayList<>(); + for (int i = 0; i < ringCount; i++) { + List> ring = parsePoints(reader, little, dims); + if (ring == null) return null; + rings.add(ring); + } + return new Geometry(GeomKind.POLYGON, dims, null, null, rings, null, null, null); + } + case 4: { // MultiPoint + Long count = reader.readU32(little); + if (count == null) return null; + List> mpoints = new ArrayList<>(); + for (int i = 0; i < count; i++) { + List coords = readPointCoords(reader, dims); + if (coords == null) { + // sub-point parse failure (returning null != EMPTY); abort. + return null; + } + boolean allNan = true; + for (Double v : coords) { + if (!Double.isNaN(v)) { + allNan = false; + break; + } + } + mpoints.add(allNan ? null : coords); + } + return new Geometry(GeomKind.MULTIPOINT, dims, null, null, null, mpoints, null, null); + } + case 5: { // MultiLineString + Long count = reader.readU32(little); + if (count == null) return null; + List>> lines = new ArrayList<>(); + for (int i = 0; i < count; i++) { + Geometry sub = parseGeometry(reader); + if (sub == null || sub.kind != GeomKind.LINESTRING) return null; + lines.add(sub.points); + } + return new Geometry(GeomKind.MULTILINESTRING, dims, null, null, lines, null, null, null); + } + case 6: { // MultiPolygon + Long count = reader.readU32(little); + if (count == null) return null; + List>>> polys = new ArrayList<>(); + for (int i = 0; i < count; i++) { + Geometry sub = parseGeometry(reader); + if (sub == null || sub.kind != GeomKind.POLYGON) return null; + polys.add(sub.rings); + } + return new Geometry(GeomKind.MULTIPOLYGON, dims, null, null, null, null, polys, null); + } + case 7: { // GeometryCollection + Long count = reader.readU32(little); + if (count == null) return null; + List children = new ArrayList<>(); + for (int i = 0; i < count; i++) { + Geometry sub = parseGeometry(reader); + if (sub == null) return null; + children.add(sub); + } + return new Geometry(GeomKind.GEOMETRYCOLLECTION, dims, null, null, null, null, null, children); + } + default: + return null; + } + } + + private static List> parsePoints(Reader reader, boolean little, Dimensions dims) { + Long count = reader.readU32(little); + if (count == null) return null; + int dim = dims.coordinateLen(); + List> result = new ArrayList<>(); + for (int i = 0; i < count; i++) { + List coords = new ArrayList<>(dim); + for (int j = 0; j < dim; j++) { + Double v = reader.readF64(little); + if (v == null) return null; + coords.add(v); + } + result.add(coords); + } + return result; + } + + private static List readPointCoords(Reader reader, Dimensions parentDims) { + Integer endian = reader.readU8(); + if (endian == null) return null; + boolean little; + if (endian == 0) { + little = false; + } else if (endian == 1) { + little = true; + } else { + return null; + } + Long typeWord = reader.readU32(little); + if (typeWord == null) return null; + Dims parsed = parseDimensions(typeWord); + if (parsed.baseType != 1 || !parsed.dims.equals(parentDims)) { + return null; + } + if (parsed.hasSrid) { + if (reader.readU32(little) == null) return null; + } + int dim = parsed.dims.coordinateLen(); + List coords = new ArrayList<>(dim); + for (int i = 0; i < dim; i++) { + Double v = reader.readF64(little); + if (v == null) return null; + coords.add(v); + } + return coords; + } + + private static Dims parseDimensions(long typeWord) { + long baseType = typeWord & 0x1FFF_FFFFL; + boolean hasZ = (typeWord & 0x8000_0000L) != 0; + boolean hasM = (typeWord & 0x4000_0000L) != 0; + boolean hasSrid = (typeWord & 0x2000_0000L) != 0; + if (baseType >= 3000) { + hasZ = true; + hasM = true; + baseType -= 3000; + } else if (baseType >= 2000) { + hasM = true; + baseType -= 2000; + } else if (baseType >= 1000) { + hasZ = true; + baseType -= 1000; + } + return new Dims(baseType, new Dimensions(hasZ, hasM), hasSrid); + } + + // ── WKT formatting ───────────────────────────────────────────────────── + + private static String geometryToWkt(Geometry g) { + String suffix = g.dims.suffix(); + switch (g.kind) { + case POINT: + if (g.coords == null) { + return "POINT" + suffix + " EMPTY"; + } + return "POINT" + suffix + "(" + formatCoord(g.coords) + ")"; + case LINESTRING: + if (g.points == null || g.points.isEmpty()) { + return "LINESTRING" + suffix + " EMPTY"; + } + return "LINESTRING" + suffix + "(" + formatCoordSeq(g.points) + ")"; + case POLYGON: + if (g.rings == null || g.rings.isEmpty()) { + return "POLYGON" + suffix + " EMPTY"; + } + return "POLYGON" + suffix + "(" + joinRings(g.rings) + ")"; + case MULTIPOINT: + if (g.multiPoints == null || g.multiPoints.isEmpty()) { + return "MULTIPOINT" + suffix + " EMPTY"; + } + return "MULTIPOINT" + suffix + "(" + joinMultiPoints(g.multiPoints) + ")"; + case MULTILINESTRING: + if (g.rings == null || g.rings.isEmpty()) { + return "MULTILINESTRING" + suffix + " EMPTY"; + } + return "MULTILINESTRING" + suffix + "(" + joinRings(g.rings) + ")"; + case MULTIPOLYGON: + if (g.polygons == null || g.polygons.isEmpty()) { + return "MULTIPOLYGON" + suffix + " EMPTY"; + } + return "MULTIPOLYGON" + suffix + "(" + joinPolygons(g.polygons) + ")"; + case GEOMETRYCOLLECTION: + if (g.children == null || g.children.isEmpty()) { + return "GEOMETRYCOLLECTION" + suffix + " EMPTY"; + } + StringBuilder sb = new StringBuilder("GEOMETRYCOLLECTION").append(suffix).append("("); + for (int i = 0; i < g.children.size(); i++) { + if (i > 0) sb.append(','); + sb.append(geometryToWkt(g.children.get(i))); + } + sb.append(')'); + return sb.toString(); + default: + throw new IllegalStateException("unknown geometry kind: " + g.kind); + } + } + + private static String formatCoord(List coords) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < coords.size(); i++) { + if (i > 0) sb.append(' '); + sb.append(formatDouble(coords.get(i))); + } + return sb.toString(); + } + + private static String formatCoordSeq(List> points) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < points.size(); i++) { + if (i > 0) sb.append(','); + sb.append(formatCoord(points.get(i))); + } + return sb.toString(); + } + + private static String joinRings(List>> rings) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < rings.size(); i++) { + if (i > 0) sb.append(','); + sb.append('(').append(formatCoordSeq(rings.get(i))).append(')'); + } + return sb.toString(); + } + + private static String joinMultiPoints(List> mpoints) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < mpoints.size(); i++) { + if (i > 0) sb.append(','); + List p = mpoints.get(i); + if (p == null) { + sb.append("EMPTY"); + } else { + sb.append('(').append(formatCoord(p)).append(')'); + } + } + return sb.toString(); + } + + private static String joinPolygons(List>>> polys) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < polys.size(); i++) { + if (i > 0) sb.append(','); + sb.append('(').append(joinRings(polys.get(i))).append(')'); + } + return sb.toString(); + } + + /** + * Format a double the same way Rust's {@code f64::Display} does — shortest + * round-trippable decimal, trailing {@code .0} stripped (so {@code 116.0} + * becomes {@code "116"}, not {@code "116.0"}). + */ + static String formatDouble(double value) { + if (Double.isNaN(value)) { + return "NaN"; + } + if (Double.isInfinite(value)) { + return value > 0 ? "inf" : "-inf"; + } + String s = Double.toString(value); + // Strip trailing ".0" for whole-number doubles so output matches Rust. + if (s.endsWith(".0")) { + return s.substring(0, s.length() - 2); + } + return s; + } + + // ── helper structs ───────────────────────────────────────────────────── + + private enum GeomKind { + POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION + } + + private static final class Geometry { + final GeomKind kind; + final Dimensions dims; + final List coords; // POINT + final List> points; // LINESTRING + final List>> rings; // POLYGON / MULTILINESTRING (lines == rings shape-wise) + final List> multiPoints; // MULTIPOINT (null entry = EMPTY) + final List>>> polygons; // MULTIPOLYGON + final List children; // GEOMETRYCOLLECTION + + Geometry( + GeomKind kind, + Dimensions dims, + List coords, + List> points, + List>> rings, + List> multiPoints, + List>>> polygons, + List children + ) { + this.kind = kind; + this.dims = dims; + this.coords = coords; + this.points = points; + this.rings = rings; + this.multiPoints = multiPoints; + this.polygons = polygons; + this.children = children; + } + } + + private static final class Dimensions { + final boolean hasZ; + final boolean hasM; + + Dimensions(boolean hasZ, boolean hasM) { + this.hasZ = hasZ; + this.hasM = hasM; + } + + String suffix() { + if (hasZ && hasM) return " ZM"; + if (hasZ) return " Z"; + if (hasM) return " M"; + return ""; + } + + int coordinateLen() { + return 2 + (hasZ ? 1 : 0) + (hasM ? 1 : 0); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Dimensions)) return false; + Dimensions d = (Dimensions) o; + return hasZ == d.hasZ && hasM == d.hasM; + } + + @Override + public int hashCode() { + return (hasZ ? 1 : 0) * 31 + (hasM ? 1 : 0); + } + } + + private static final class Dims { + final long baseType; + final Dimensions dims; + final boolean hasSrid; + + Dims(long baseType, Dimensions dims, boolean hasSrid) { + this.baseType = baseType; + this.dims = dims; + this.hasSrid = hasSrid; + } + } + + private static final class Reader { + final byte[] raw; + int pos; + + Reader(byte[] raw) { + this.raw = raw; + } + + Integer readU8() { + if (pos >= raw.length) return null; + int v = raw[pos] & 0xFF; + pos += 1; + return v; + } + + Long readU32(boolean little) { + if (pos + 4 > raw.length) return null; + long v; + if (little) { + v = ((long) (raw[pos] & 0xFF)) + | ((long) (raw[pos + 1] & 0xFF) << 8) + | ((long) (raw[pos + 2] & 0xFF) << 16) + | ((long) (raw[pos + 3] & 0xFF) << 24); + } else { + v = ((long) (raw[pos] & 0xFF) << 24) + | ((long) (raw[pos + 1] & 0xFF) << 16) + | ((long) (raw[pos + 2] & 0xFF) << 8) + | ((long) (raw[pos + 3] & 0xFF)); + } + pos += 4; + return v & 0xFFFF_FFFFL; + } + + Double readF64(boolean little) { + if (pos + 8 > raw.length) return null; + long bits; + if (little) { + bits = ((long) (raw[pos] & 0xFF)) + | ((long) (raw[pos + 1] & 0xFF) << 8) + | ((long) (raw[pos + 2] & 0xFF) << 16) + | ((long) (raw[pos + 3] & 0xFF) << 24) + | ((long) (raw[pos + 4] & 0xFF) << 32) + | ((long) (raw[pos + 5] & 0xFF) << 40) + | ((long) (raw[pos + 6] & 0xFF) << 48) + | ((long) (raw[pos + 7] & 0xFF) << 56); + } else { + bits = ((long) (raw[pos] & 0xFF) << 56) + | ((long) (raw[pos + 1] & 0xFF) << 48) + | ((long) (raw[pos + 2] & 0xFF) << 40) + | ((long) (raw[pos + 3] & 0xFF) << 32) + | ((long) (raw[pos + 4] & 0xFF) << 24) + | ((long) (raw[pos + 5] & 0xFF) << 16) + | ((long) (raw[pos + 6] & 0xFF) << 8) + | ((long) (raw[pos + 7] & 0xFF)); + } + pos += 8; + return Double.longBitsToDouble(bits); + } + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ExecuteQueryOptions.java b/agents/common/src/main/java/com/dbx/agent/ExecuteQueryOptions.java new file mode 100644 index 0000000..ae33923 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ExecuteQueryOptions.java @@ -0,0 +1,67 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class ExecuteQueryOptions { + private int maxRows; + private Integer fetchSize; + private int timeoutSecs; + + public ExecuteQueryOptions() { + this(JdbcExecutor.DEFAULT_MAX_ROWS, null, 0); + } + + public ExecuteQueryOptions(int maxRows, Integer fetchSize) { + this(maxRows, fetchSize, 0); + } + + public ExecuteQueryOptions(int maxRows, Integer fetchSize, int timeoutSecs) { + this.maxRows = maxRows; + this.fetchSize = fetchSize; + this.timeoutSecs = timeoutSecs; + } + + public int getMaxRows() { + return maxRows; + } + + public Integer getFetchSize() { + return fetchSize; + } + + public int getTimeoutSecs() { + return timeoutSecs; + } + + public void setMaxRows(int maxRows) { + this.maxRows = maxRows; + } + + public void setFetchSize(Integer fetchSize) { + this.fetchSize = fetchSize; + } + + public void setTimeoutSecs(int timeoutSecs) { + this.timeoutSecs = timeoutSecs; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ExecuteQueryOptions)) return false; + ExecuteQueryOptions that = (ExecuteQueryOptions) other; + return maxRows == that.maxRows + && timeoutSecs == that.timeoutSecs + && Objects.equals(fetchSize, that.fetchSize); + } + + @Override + public int hashCode() { + return Objects.hash(maxRows, fetchSize, timeoutSecs); + } + + @Override + public String toString() { + return "ExecuteQueryOptions(maxRows=" + maxRows + ", fetchSize=" + fetchSize + ", timeoutSecs=" + timeoutSecs + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ExecuteQueryParams.java b/agents/common/src/main/java/com/dbx/agent/ExecuteQueryParams.java new file mode 100644 index 0000000..0f96201 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ExecuteQueryParams.java @@ -0,0 +1,78 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class ExecuteQueryParams { + private String sql; + private String schema; + private Integer maxRows; + private Integer fetchSize; + + public ExecuteQueryParams() { + this("", null, null, null); + } + + public ExecuteQueryParams(String sql, String schema, Integer maxRows, Integer fetchSize) { + this.sql = sql; + this.schema = schema; + this.maxRows = maxRows; + this.fetchSize = fetchSize; + } + + public String getSql() { + return sql; + } + + public String getSchema() { + return schema; + } + + public Integer getMaxRows() { + return maxRows; + } + + public Integer getFetchSize() { + return fetchSize; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public void setMaxRows(Integer maxRows) { + this.maxRows = maxRows; + } + + public void setFetchSize(Integer fetchSize) { + this.fetchSize = fetchSize; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ExecuteQueryParams)) return false; + ExecuteQueryParams that = (ExecuteQueryParams) other; + return Objects.equals(sql, that.sql) + && Objects.equals(schema, that.schema) + && Objects.equals(maxRows, that.maxRows) + && Objects.equals(fetchSize, that.fetchSize); + } + + @Override + public int hashCode() { + return Objects.hash(sql, schema, maxRows, fetchSize); + } + + @Override + public String toString() { + return "ExecuteQueryParams(sql=" + sql + + ", schema=" + schema + + ", maxRows=" + maxRows + + ", fetchSize=" + fetchSize + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ForeignKeyInfo.java b/agents/common/src/main/java/com/dbx/agent/ForeignKeyInfo.java new file mode 100644 index 0000000..de018df --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ForeignKeyInfo.java @@ -0,0 +1,78 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class ForeignKeyInfo { + private String name; + private String column; + private String ref_table; + private String ref_column; + + public ForeignKeyInfo() { + this("", "", "", ""); + } + + public ForeignKeyInfo(String name, String column, String ref_table, String ref_column) { + this.name = name; + this.column = column; + this.ref_table = ref_table; + this.ref_column = ref_column; + } + + public String getName() { + return name; + } + + public String getColumn() { + return column; + } + + public String getRef_table() { + return ref_table; + } + + public String getRef_column() { + return ref_column; + } + + public void setName(String name) { + this.name = name; + } + + public void setColumn(String column) { + this.column = column; + } + + public void setRef_table(String ref_table) { + this.ref_table = ref_table; + } + + public void setRef_column(String ref_column) { + this.ref_column = ref_column; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ForeignKeyInfo)) return false; + ForeignKeyInfo that = (ForeignKeyInfo) other; + return Objects.equals(name, that.name) + && Objects.equals(column, that.column) + && Objects.equals(ref_table, that.ref_table) + && Objects.equals(ref_column, that.ref_column); + } + + @Override + public int hashCode() { + return Objects.hash(name, column, ref_table, ref_column); + } + + @Override + public String toString() { + return "ForeignKeyInfo(name=" + name + + ", column=" + column + + ", ref_table=" + ref_table + + ", ref_column=" + ref_column + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/IndexInfo.java b/agents/common/src/main/java/com/dbx/agent/IndexInfo.java new file mode 100644 index 0000000..ea38747 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/IndexInfo.java @@ -0,0 +1,141 @@ +package com.dbx.agent; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public final class IndexInfo { + private String name; + private List columns; + private boolean is_unique; + private boolean is_primary; + private String filter; + private String index_type; + private List included_columns; + private String comment; + + public IndexInfo() { + this("", Collections.emptyList(), false, false); + } + + public IndexInfo(String name, List columns, boolean is_unique, boolean is_primary) { + this(name, columns, is_unique, is_primary, null, null, null, null); + } + + public IndexInfo( + String name, + List columns, + boolean is_unique, + boolean is_primary, + String filter, + String index_type, + List included_columns, + String comment + ) { + this.name = name; + this.columns = columns == null ? Collections.emptyList() : columns; + this.is_unique = is_unique; + this.is_primary = is_primary; + this.filter = filter; + this.index_type = index_type; + this.included_columns = included_columns; + this.comment = comment; + } + + public String getName() { + return name; + } + + public List getColumns() { + return columns; + } + + public boolean getIs_unique() { + return is_unique; + } + + public boolean getIs_primary() { + return is_primary; + } + + public String getFilter() { + return filter; + } + + public String getIndex_type() { + return index_type; + } + + public List getIncluded_columns() { + return included_columns; + } + + public String getComment() { + return comment; + } + + public void setName(String name) { + this.name = name; + } + + public void setColumns(List columns) { + this.columns = columns; + } + + public void setIs_unique(boolean is_unique) { + this.is_unique = is_unique; + } + + public void setIs_primary(boolean is_primary) { + this.is_primary = is_primary; + } + + public void setFilter(String filter) { + this.filter = filter; + } + + public void setIndex_type(String index_type) { + this.index_type = index_type; + } + + public void setIncluded_columns(List included_columns) { + this.included_columns = included_columns; + } + + public void setComment(String comment) { + this.comment = comment; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof IndexInfo)) return false; + IndexInfo that = (IndexInfo) other; + return is_unique == that.is_unique + && is_primary == that.is_primary + && Objects.equals(name, that.name) + && Objects.equals(columns, that.columns) + && Objects.equals(filter, that.filter) + && Objects.equals(index_type, that.index_type) + && Objects.equals(included_columns, that.included_columns) + && Objects.equals(comment, that.comment); + } + + @Override + public int hashCode() { + return Objects.hash(name, columns, is_unique, is_primary, filter, index_type, included_columns, comment); + } + + @Override + public String toString() { + return "IndexInfo(name=" + name + + ", columns=" + columns + + ", is_unique=" + is_unique + + ", is_primary=" + is_primary + + ", filter=" + filter + + ", index_type=" + index_type + + ", included_columns=" + included_columns + + ", comment=" + comment + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/JdbcAgentProfile.java b/agents/common/src/main/java/com/dbx/agent/JdbcAgentProfile.java new file mode 100644 index 0000000..433f817 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/JdbcAgentProfile.java @@ -0,0 +1,223 @@ +package com.dbx.agent; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +public class JdbcAgentProfile { + private final String driverClass; + private final String urlTemplate; + private final int defaultPort; + private final boolean skipExecutionContext; + private final Set excludedSchemas; + private final List tableTypes; + private final String identifierQuote; + private final String schemaSwitchPrefix; + private final boolean catalogFallbackEnabled; + private final boolean nativeTableDdlSupported; + private final boolean objectSourceSupported; + private final boolean triggersSupported; + + public JdbcAgentProfile(String driverClass, String urlTemplate) { + this(driverClass, urlTemplate, 0); + } + + public JdbcAgentProfile(String driverClass, String urlTemplate, int defaultPort) { + this(driverClass, urlTemplate, defaultPort, false); + } + + public JdbcAgentProfile(String driverClass, String urlTemplate, int defaultPort, boolean skipExecutionContext) { + this( + driverClass, + urlTemplate, + defaultPort, + skipExecutionContext, + Collections.emptySet(), + Arrays.asList("TABLE", "VIEW", "BASE TABLE", "MATERIALIZED VIEW", "SYSTEM TABLE", "SYSTEM VIEW") + ); + } + + public JdbcAgentProfile( + String driverClass, + String urlTemplate, + int defaultPort, + boolean skipExecutionContext, + Set excludedSchemas, + List tableTypes + ) { + this( + driverClass, + urlTemplate, + defaultPort, + skipExecutionContext, + excludedSchemas, + tableTypes, + "\"", + "SET SCHEMA", + true, + false, + false, + false + ); + } + + public JdbcAgentProfile( + String driverClass, + String urlTemplate, + int defaultPort, + boolean skipExecutionContext, + Set excludedSchemas, + List tableTypes, + String identifierQuote, + String schemaSwitchPrefix, + boolean catalogFallbackEnabled, + boolean nativeTableDdlSupported, + boolean objectSourceSupported, + boolean triggersSupported + ) { + this.driverClass = driverClass; + this.urlTemplate = urlTemplate; + this.defaultPort = defaultPort; + this.skipExecutionContext = skipExecutionContext; + this.excludedSchemas = excludedSchemas; + this.tableTypes = tableTypes; + this.identifierQuote = identifierQuote; + this.schemaSwitchPrefix = schemaSwitchPrefix; + this.catalogFallbackEnabled = catalogFallbackEnabled; + this.nativeTableDdlSupported = nativeTableDdlSupported; + this.objectSourceSupported = objectSourceSupported; + this.triggersSupported = triggersSupported; + } + + public String getDriverClass() { + return driverClass; + } + + public String getUrlTemplate() { + return urlTemplate; + } + + public int getDefaultPort() { + return defaultPort; + } + + public boolean getSkipExecutionContext() { + return skipExecutionContext; + } + + public Set getExcludedSchemas() { + return excludedSchemas; + } + + public List getTableTypes() { + return tableTypes; + } + + public String getIdentifierQuote() { + return identifierQuote; + } + + public String getSchemaSwitchPrefix() { + return schemaSwitchPrefix; + } + + public boolean getCatalogFallbackEnabled() { + return catalogFallbackEnabled; + } + + public boolean getNativeTableDdlSupported() { + return nativeTableDdlSupported; + } + + public boolean getObjectSourceSupported() { + return objectSourceSupported; + } + + public boolean getTriggersSupported() { + return triggersSupported; + } + + public String buildUrl(ConnectParams params) { + if (!params.getConnection_string().trim().isEmpty()) { + return params.getConnection_string(); + } + int port = params.getPort() > 0 ? params.getPort() : defaultPort; + String base = urlTemplate + .replace("{host}", params.getHost()) + .replace("{port}", Integer.toString(port)) + .replace("{database}", params.getDatabase()); + return appendUrlParams(base, params.getUrl_params()); + } + + public String quoteIdentifier(String identifier) { + return identifierQuote + identifier.replace(identifierQuote, identifierQuote + identifierQuote) + identifierQuote; + } + + public String schemaSwitchSql(String schema) { + return schemaSwitchSql(schema, identifierQuote); + } + + public String schemaSwitchSql(String schema, String quote) { + if (skipExecutionContext) { + return ""; + } + return schemaSwitchPrefix + " " + quote + schema.replace(quote, quote + quote) + quote; + } + + private static String appendUrlParams(String url, String urlParams) { + String params = trimUrlParams(urlParams); + if (params.isEmpty()) { + return url; + } + if (usesColonProperties(url) && !params.endsWith(";")) { + params = params + ";"; + } + String separator = urlParamSeparator(url); + return url + separator + params; + } + + private static String trimUrlParams(String urlParams) { + String value = urlParams == null ? "" : urlParams.trim(); + while (value.startsWith("?") || value.startsWith("&") || value.startsWith(";") || value.startsWith(":") || value.startsWith(",")) { + value = value.substring(1); + } + return value; + } + + private static String urlParamSeparator(String url) { + if (startsWithIgnoreCase(url, "jdbc:sqlserver:") || startsWithIgnoreCase(url, "jdbc:exa:")) { + return url.endsWith(";") ? "" : ";"; + } + if (startsWithIgnoreCase(url, "jdbc:teradata:")) { + return url.endsWith(",") ? "" : ","; + } + if (usesColonProperties(url)) { + if (url.endsWith(":") || url.endsWith(";")) { + return ""; + } + return hasColonProperties(url) ? ";" : ":"; + } + return url.contains("?") ? "&" : "?"; + } + + private static boolean usesColonProperties(String url) { + return startsWithIgnoreCase(url, "jdbc:db2:") || startsWithIgnoreCase(url, "jdbc:informix-sqli:"); + } + + private static boolean hasColonProperties(String url) { + int schemeEnd = url.indexOf("://"); + if (schemeEnd < 0) { + return false; + } + int pathStart = url.indexOf('/', schemeEnd + 3); + if (pathStart < 0) { + return false; + } + return url.indexOf(':', pathStart + 1) >= 0; + } + + private static boolean startsWithIgnoreCase(String value, String prefix) { + return value.regionMatches(true, 0, prefix, 0, prefix.length()); + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/JdbcExecutor.java b/agents/common/src/main/java/com/dbx/agent/JdbcExecutor.java new file mode 100644 index 0000000..cbd77dc --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/JdbcExecutor.java @@ -0,0 +1,706 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.sql.Blob; +import java.sql.Clob; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.SQLXML; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; + +public final class JdbcExecutor { + public static final JdbcExecutor INSTANCE = new JdbcExecutor(); + public static final int DEFAULT_MAX_ROWS = 10000; + public static final long QUERY_SESSION_IDLE_TIMEOUT_MILLIS = 10 * 60 * 1000L; + + private final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); + private final ConcurrentHashMap tableReadSessions = new ConcurrentHashMap<>(); + + private JdbcExecutor() { + } + + public QueryResult execute(Connection conn, String sql, String schema, Function setSchemaSql) { + return execute(conn, sql, schema, setSchemaSql, DEFAULT_MAX_ROWS, null, this::defaultResultValue); + } + + public QueryResult execute( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + int maxRows, + Integer fetchSize + ) { + return execute(conn, sql, schema, setSchemaSql, maxRows, fetchSize, this::defaultResultValue); + } + + public QueryResult execute( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + int maxRows, + Integer fetchSize, + ResultValueReader valueReader + ) { + return execute(conn, sql, schema, setSchemaSql, maxRows, fetchSize, 0, valueReader); + } + + public QueryResult execute( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + int maxRows, + Integer fetchSize, + int timeoutSecs, + ResultValueReader valueReader + ) { + return unchecked(() -> { + String trimmedSql = trimSql(sql); + long start = System.currentTimeMillis(); + + applySchema(conn, schema, setSchemaSql); + + try (Statement stmt = conn.createStatement()) { + int effectiveMaxRows = Math.max(maxRows, 1); + stmt.setMaxRows(effectiveMaxRows + 1); + applyQueryTimeout(stmt, timeoutSecs); + if (fetchSize != null && fetchSize > 0) { + stmt.setFetchSize(fetchSize); + } + // SQL dumps often contain BEGIN/COMMIT/ROLLBACK as executable statements. + // Do not translate them to Connection.commit(), which requires autoCommit=false. + boolean hasResultSet = stmt.execute(trimmedSql); + long elapsed = System.currentTimeMillis() - start; + if (hasResultSet) { + try (ResultSet rs = stmt.getResultSet()) { + return readResultSet(rs, elapsed, effectiveMaxRows, valueReader); + } + } + + int updateCount = stmt.getUpdateCount(); + return new QueryResult( + Collections.emptyList(), + Collections.emptyList(), + updateCount >= 0 ? updateCount : 0, + elapsed, + false + ); + } + }); + } + + public QueryResult readResultSet(ResultSet rs, long executionTimeMs) { + return readResultSet(rs, executionTimeMs, DEFAULT_MAX_ROWS, this::defaultResultValue); + } + + public QueryResult readResultSet( + ResultSet rs, + long executionTimeMs, + int maxRows, + ResultValueReader valueReader + ) { + return unchecked(() -> { + ResultSetMetaData meta = rs.getMetaData(); + int colCount = meta.getColumnCount(); + List columns = new ArrayList<>(colCount); + List columnTypes = new ArrayList<>(colCount); + // Cache JDBC column metadata once; some drivers resolve it lazily, + // and row reading is the hot path. + int[] sqlTypeByIndex = new int[colCount]; + String[] typeNameByIndex = new String[colCount]; + for (int i = 1; i <= colCount; i++) { + columns.add(meta.getColumnLabel(i)); + sqlTypeByIndex[i - 1] = safeColumnSqlType(meta, i); + String typeName = safeColumnTypeName(meta, i); + columnTypes.add(typeName); + typeNameByIndex[i - 1] = typeName; + } + + List> rows = new ArrayList<>(initialRowCapacity(maxRows)); + boolean truncated = false; + while (rs.next()) { + if (rows.size() >= maxRows) { + truncated = true; + break; + } + rows.add(rowValues(rs, valueReader, sqlTypeByIndex, typeNameByIndex)); + } + + return new QueryResult(columns, columnTypes, rows, 0L, executionTimeMs, truncated); + }); + } + + public QueryPageResult executePage( + Connection conn, + String sql, + String schema, + Function setSchemaSql + ) { + return executePage(conn, sql, schema, setSchemaSql, new QueryPageOptions(), this::defaultResultValue); + } + + public QueryPageResult executePage( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + QueryPageOptions options + ) { + return executePage(conn, sql, schema, setSchemaSql, options, this::defaultResultValue); + } + + public QueryPageResult executePage( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + QueryPageOptions options, + ResultValueReader valueReader + ) { + return executePage(conn, sql, schema, setSchemaSql, options, valueReader, sessions); + } + + public QueryPageResult startTableRead( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + QueryPageOptions options, + ResultValueReader valueReader + ) { + return executePage(conn, sql, schema, setSchemaSql, options, valueReader, tableReadSessions); + } + + private QueryPageResult executePage( + Connection conn, + String sql, + String schema, + Function setSchemaSql, + QueryPageOptions options, + ResultValueReader valueReader, + ConcurrentHashMap targetSessions + ) { + return unchecked(() -> { + expireIdleSessions(targetSessions, System.currentTimeMillis(), QUERY_SESSION_IDLE_TIMEOUT_MILLIS); + String trimmedSql = trimSql(sql); + long start = System.currentTimeMillis(); + + applySchema(conn, schema, setSchemaSql); + + Statement stmt = conn.createStatement(); + try { + applyQueryTimeout(stmt, options.getTimeoutSecs()); + if (options.getFetchSize() != null && options.getFetchSize() > 0) { + stmt.setFetchSize(options.getFetchSize()); + } + // Keep script transaction-control statements in the SQL stream. + // JDBC transaction APIs are reserved for executeTransaction. + boolean hasResultSet = stmt.execute(trimmedSql); + long elapsed = System.currentTimeMillis() - start; + if (!hasResultSet) { + int updateCount = stmt.getUpdateCount(); + stmt.close(); + return new QueryPageResult( + Collections.emptyList(), + Collections.emptyList(), + updateCount >= 0 ? updateCount : 0, + elapsed + ); + } + + ResultSet rs = stmt.getResultSet(); + ResultSetMetaData meta = rs.getMetaData(); + String sessionId = UUID.randomUUID().toString(); + int colCount = meta.getColumnCount(); + List columns = new ArrayList<>(colCount); + List columnTypes = new ArrayList<>(colCount); + // Cache JDBC column metadata once; fetching a page should only read row values. + int[] sqlTypeByIndex = new int[colCount]; + String[] typeNameByIndex = new String[colCount]; + for (int i = 1; i <= colCount; i++) { + columns.add(meta.getColumnLabel(i)); + sqlTypeByIndex[i - 1] = safeColumnSqlType(meta, i); + String typeName = safeColumnTypeName(meta, i); + columnTypes.add(typeName); + typeNameByIndex[i - 1] = typeName; + } + QuerySession session = new QuerySession( + sessionId, + stmt, + rs, + columns, + columnTypes, + sqlTypeByIndex, + typeNameByIndex, + Math.max(options.getMaxRows(), 1), + valueReader + ); + targetSessions.put(sessionId, session); + return readSessionPage(targetSessions, session, options.getPageSize(), elapsed); + } catch (Exception e) { + try { + stmt.close(); + } catch (Exception ignored) { + } + throw e; + } + }); + } + + public QueryPageResult fetchPage(String sessionId, int pageSize) { + expireIdleQuerySessions(); + return fetchSessionPage(sessions, sessionId, pageSize, "Query session not found"); + } + + public boolean closeQuerySession(String sessionId) { + return closeSession(sessions, sessionId); + } + + public QueryPageResult fetchTableReadPage(String sessionId, int pageSize) { + expireIdleTableReadSessions(); + return fetchSessionPage(tableReadSessions, sessionId, pageSize, "Table read session not found"); + } + + public boolean closeTableReadSession(String sessionId) { + return closeSession(tableReadSessions, sessionId); + } + + public void closeAllQuerySessions() { + closeAllSessions(sessions); + } + + public void closeAllTableReadSessions() { + closeAllSessions(tableReadSessions); + } + + public int expireIdleQuerySessions() { + return expireIdleQuerySessions(System.currentTimeMillis(), QUERY_SESSION_IDLE_TIMEOUT_MILLIS); + } + + public int expireIdleQuerySessions(long nowMillis, long idleTimeoutMillis) { + return expireIdleSessions(sessions, nowMillis, idleTimeoutMillis); + } + + public int expireIdleTableReadSessions() { + return expireIdleTableReadSessions(System.currentTimeMillis(), QUERY_SESSION_IDLE_TIMEOUT_MILLIS); + } + + public int expireIdleTableReadSessions(long nowMillis, long idleTimeoutMillis) { + return expireIdleSessions(tableReadSessions, nowMillis, idleTimeoutMillis); + } + + private int expireIdleSessions( + ConcurrentHashMap targetSessions, + long nowMillis, + long idleTimeoutMillis + ) { + if (idleTimeoutMillis < 0) { + return 0; + } + int closed = 0; + List snapshot = new ArrayList<>(targetSessions.values()); + for (QuerySession session : snapshot) { + boolean expired; + synchronized (session) { + expired = nowMillis - session.lastAccessedAtMillis >= idleTimeoutMillis; + } + if (expired && closeSession(targetSessions, session.id)) { + closed += 1; + } + } + return closed; + } + + public Object defaultResultValue(ResultSet rs, int index, int sqlType) throws SQLException { + Object value; + switch (sqlType) { + case Types.BIGINT: + value = rs.getLong(index); + break; + case Types.INTEGER: + case Types.SMALLINT: + case Types.TINYINT: + value = rs.getInt(index); + break; + case Types.FLOAT: + case Types.REAL: + value = rs.getFloat(index); + break; + case Types.DOUBLE: + value = rs.getDouble(index); + break; + case Types.DECIMAL: + case Types.NUMERIC: + value = rs.getBigDecimal(index); + break; + case Types.BOOLEAN: + case Types.BIT: + value = rs.getBoolean(index); + break; + case Types.CHAR: + case Types.VARCHAR: + case Types.LONGVARCHAR: + case Types.NCHAR: + case Types.NVARCHAR: + case Types.LONGNVARCHAR: + case Types.CLOB: + case Types.NCLOB: + value = rs.getString(index); + break; + case Types.BINARY: + case Types.VARBINARY: + case Types.LONGVARBINARY: + case Types.BLOB: + value = bytesToHex(rs.getBytes(index)); + break; + case Types.SQLXML: + value = sqlXmlToString(rs.getSQLXML(index)); + break; + default: + value = normalizeResultValue(rs.getObject(index)); + break; + } + return rs.wasNull() ? null : value; + } + + public static Object stringResultValue(ResultSet rs, int index, int sqlType) throws SQLException { + Object value; + switch (sqlType) { + case Types.BINARY: + case Types.VARBINARY: + case Types.LONGVARBINARY: + case Types.BLOB: + value = bytesToHex(rs.getBytes(index)); + break; + case Types.SQLXML: + value = sqlXmlToString(rs.getSQLXML(index)); + break; + default: + value = rs.getString(index); + break; + } + return rs.wasNull() ? null : value; + } + + public static Object normalizeResultValue(Object value) throws SQLException { + if (value == null) { + return null; + } + if (value instanceof Clob) { + Clob clob = (Clob) value; + return clob.getSubString(1, Math.toIntExact(clob.length())); + } + if (value instanceof Blob) { + Blob blob = (Blob) value; + return bytesToHex(blob.getBytes(1, Math.toIntExact(blob.length()))); + } + if (value instanceof SQLXML) { + SQLXML sqlxml = (SQLXML) value; + return sqlxml.getString(); + } + if (value instanceof byte[]) { + byte[] bytes = (byte[]) value; + return bytesToHex(bytes); + } + return value instanceof Number || value instanceof Boolean ? value : value.toString(); + } + + public static String bytesToHex(byte[] bytes) { + if (bytes == null) { + return null; + } + StringBuilder result = new StringBuilder(bytes.length * 2 + 2); + result.append("0x"); + for (byte b : bytes) { + result.append(Character.forDigit((b >> 4) & 0xF, 16)); + result.append(Character.forDigit(b & 0xF, 16)); + } + return result.toString(); + } + + private static String sqlXmlToString(SQLXML value) throws SQLException { + return value == null ? null : value.getString(); + } + + private QueryPageResult fetchSessionPage( + ConcurrentHashMap targetSessions, + String sessionId, + int pageSize, + String missingMessage + ) { + QuerySession session = targetSessions.get(sessionId); + if (session == null) { + throw new IllegalArgumentException(missingMessage); + } + synchronized (session) { + return readSessionPage(targetSessions, session, pageSize, 0L); + } + } + + private QueryPageResult readSessionPage( + ConcurrentHashMap targetSessions, + QuerySession session, + int pageSize, + long executionTimeMs + ) { + return unchecked(() -> { + session.lastAccessedAtMillis = System.currentTimeMillis(); + int effectivePageSize = Math.max(pageSize, 1); + List> rows = new ArrayList<>(initialRowCapacity(effectivePageSize)); + + if (session.pendingRow != null) { + rows.add(session.pendingRow); + session.pendingRow = null; + } + + while (rows.size() < effectivePageSize && session.rowsRead < session.maxRows) { + if (!session.resultSet.next()) { + closeSession(targetSessions, session.id); + return new QueryPageResult(session.columns, session.columnTypes, rows, 0L, executionTimeMs, false, null, false); + } + rows.add(rowValues(session.resultSet, session.valueReader, session.sqlTypeByIndex, session.typeNameByIndex)); + session.rowsRead += 1; + } + + if (session.rowsRead >= session.maxRows) { + boolean truncated = session.resultSet.next(); + closeSession(targetSessions, session.id); + return new QueryPageResult(session.columns, session.columnTypes, rows, 0L, executionTimeMs, truncated, null, false); + } + + boolean hasMore = session.resultSet.next(); + if (!hasMore) { + closeSession(targetSessions, session.id); + return new QueryPageResult(session.columns, session.columnTypes, rows, 0L, executionTimeMs, false, null, false); + } + + session.pendingRow = rowValues(session.resultSet, session.valueReader, session.sqlTypeByIndex, session.typeNameByIndex); + session.rowsRead += 1; + return new QueryPageResult(session.columns, session.columnTypes, rows, 0L, executionTimeMs, false, session.id, true); + }); + } + + private void closeAllSessions(ConcurrentHashMap targetSessions) { + List ids = new ArrayList<>(targetSessions.keySet()); + for (String id : ids) { + closeSession(targetSessions, id); + } + } + + private boolean closeSession(ConcurrentHashMap targetSessions, String sessionId) { + QuerySession session = targetSessions.remove(sessionId); + if (session == null) { + return false; + } + synchronized (session) { + try { + session.resultSet.close(); + } catch (Exception ignored) { + } + try { + session.statement.close(); + } catch (Exception ignored) { + } + } + return true; + } + + static String safeColumnTypeName(ResultSetMetaData meta, int columnIndex) { + try { + String name = meta.getColumnTypeName(columnIndex); + return name == null ? "" : name; + } catch (SQLException ignored) { + return ""; + } + } + + static int safeColumnSqlType(ResultSetMetaData meta, int columnIndex) { + try { + return meta.getColumnType(columnIndex); + } catch (SQLException ignored) { + return Types.OTHER; + } + } + + private List rowValues( + ResultSet rs, + ResultValueReader valueReader, + int[] sqlTypeByIndex, + String[] typeNameByIndex + ) throws SQLException { + int colCount = sqlTypeByIndex.length; + List row = new ArrayList<>(colCount); + for (int i = 1; i <= colCount; i++) { + int sqlType = sqlTypeByIndex[i - 1]; + Object value; + if (valueReader instanceof ColumnAwareResultValueReader) { + String typeName = typeNameByIndex != null && i - 1 < typeNameByIndex.length + ? typeNameByIndex[i - 1] + : ""; + value = ((ColumnAwareResultValueReader) valueReader).read(rs, i, sqlType, typeName); + } else { + value = valueReader.read(rs, i, sqlType); + } + row.add(value); + } + return row; + } + + private static int initialRowCapacity(int requestedRows) { + if (requestedRows <= 0) { + return 0; + } + return Math.min(requestedRows, 1024); + } + + private void applySchema(Connection conn, String schema, Function setSchemaSql) throws SQLException { + try { + JdbcSchemaSwitcher.apply(conn, schema, setSchemaSql); + } catch (SQLException e) { + throw e; + } catch (Exception e) { + throw new SQLException(e); + } + } + + private static void applyQueryTimeout(Statement stmt, int timeoutSecs) throws SQLException { + if (timeoutSecs > 0) { + stmt.setQueryTimeout(timeoutSecs); + } + } + + private QueryResult emptyQueryResult(long start) { + return new QueryResult( + Collections.emptyList(), + Collections.emptyList(), + 0L, + System.currentTimeMillis() - start + ); + } + + private QueryPageResult emptyQueryPageResult(long start) { + return new QueryPageResult( + Collections.emptyList(), + Collections.emptyList(), + 0L, + System.currentTimeMillis() - start + ); + } + + static String trimSql(String sql) { + String trimmed = stripTrailingSlashDelimiter(sql.trim()); + if (isPlSqlBlock(trimmed)) { + return trimmed; + } + while (trimmed.endsWith(";")) { + trimmed = trimmed.substring(0, trimmed.length() - 1).trim(); + } + return trimmed; + } + + private static String stripTrailingSlashDelimiter(String sql) { + String trimmed = sql.trim(); + if (!trimmed.endsWith("/")) { + return trimmed; + } + int slashStart = trimmed.length() - 1; + int lineStart = trimmed.lastIndexOf('\n', slashStart - 1) + 1; + if (!trimmed.substring(lineStart, slashStart).trim().isEmpty()) { + return trimmed; + } + String beforeSlash = trimmed.substring(0, lineStart).trim(); + return isPlSqlBlock(beforeSlash) ? beforeSlash : trimmed; + } + + private static boolean isPlSqlBlock(String sql) { + String upperSql = sql.toUpperCase(Locale.ROOT).trim(); + if (!upperSql.startsWith("DECLARE") && !upperSql.startsWith("BEGIN")) { + return false; + } + return upperSql.matches("(?s).*\\bEND\\s+(?!IF\\b|LOOP\\b|CASE\\b)[A-Z0-9_$#]+\\s*;\\s*$") + || upperSql.matches("(?s).*\\bEND\\s*;\\s*$"); + } + + private static T unchecked(ThrowingSupplier supplier) { + try { + return supplier.get(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @FunctionalInterface + public interface ResultValueReader { + Object read(ResultSet rs, int index, int sqlType) throws SQLException; + } + + /** + * Optional extension of {@link ResultValueReader} that exposes the JDBC + * {@code getColumnTypeName} alongside the SQL type code, allowing per-driver + * agents to convert vendor-specific column types (e.g. PostGIS + * {@code geometry}) without re-querying the metadata. + */ + public interface ColumnAwareResultValueReader extends ResultValueReader { + Object read(ResultSet rs, int index, int sqlType, String columnTypeName) throws SQLException; + + @Override + default Object read(ResultSet rs, int index, int sqlType) throws SQLException { + return read(rs, index, sqlType, safeColumnTypeName(rs.getMetaData(), index)); + } + } + + private interface ThrowingSupplier { + T get() throws Exception; + } + + private static final class QuerySession { + private final String id; + private final Statement statement; + private final ResultSet resultSet; + private final List columns; + private final List columnTypes; + private final int[] sqlTypeByIndex; + private final String[] typeNameByIndex; + private final int maxRows; + private final ResultValueReader valueReader; + private int rowsRead; + private List pendingRow; + private long lastAccessedAtMillis; + + private QuerySession( + String id, + Statement statement, + ResultSet resultSet, + List columns, + List columnTypes, + int[] sqlTypeByIndex, + String[] typeNameByIndex, + int maxRows, + ResultValueReader valueReader + ) { + this.id = id; + this.statement = statement; + this.resultSet = resultSet; + this.columns = columns; + this.columnTypes = columnTypes; + this.sqlTypeByIndex = sqlTypeByIndex; + this.typeNameByIndex = typeNameByIndex; + this.maxRows = maxRows; + this.valueReader = valueReader; + this.lastAccessedAtMillis = System.currentTimeMillis(); + } + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/JdbcIdentifiers.java b/agents/common/src/main/java/com/dbx/agent/JdbcIdentifiers.java new file mode 100644 index 0000000..92f34ec --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/JdbcIdentifiers.java @@ -0,0 +1,16 @@ +package com.dbx.agent; + +public final class JdbcIdentifiers { + public static final JdbcIdentifiers INSTANCE = new JdbcIdentifiers(); + + private JdbcIdentifiers() { + } + + public String doubleQuote(String identifier) { + return "\"" + identifier.replace("\"", "\"\"") + "\""; + } + + public String backtick(String identifier) { + return "`" + identifier.replace("`", "``") + "`"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/JdbcSchemaSwitcher.java b/agents/common/src/main/java/com/dbx/agent/JdbcSchemaSwitcher.java new file mode 100644 index 0000000..76ffa5a --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/JdbcSchemaSwitcher.java @@ -0,0 +1,68 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.function.Function; + +final class JdbcSchemaSwitcher { + private JdbcSchemaSwitcher() { + } + + static void apply(Connection conn, String schema, Function setSchemaSql) throws Exception { + if (schema == null || schema.trim().isEmpty()) { + return; + } + + SchemaSqlResult schemaSqlResult = applySchemaSql(conn, schema, setSchemaSql); + Exception schemaSqlError = schemaSqlResult.error; + if (schemaSqlError == null) { + return; + } + + try { + conn.setSchema(schema); + return; + } catch (SQLException | AbstractMethodError ignored) { + // Some JDBC drivers only expose schema switching through SQL. + } + try { + conn.setCatalog(schema); + return; + } catch (SQLException | AbstractMethodError ignored) { + // Last fallback failed as well; surface the SQL-switch error below. + } + + if (schemaSqlResult.attempted) { + throw schemaSqlError; + } + } + + private static SchemaSqlResult applySchemaSql(Connection conn, String schema, Function setSchemaSql) { + String schemaSql; + try { + schemaSql = setSchemaSql.apply(schema); + } catch (RuntimeException e) { + return new SchemaSqlResult(true, e); + } + if (schemaSql == null || schemaSql.trim().isEmpty()) { + return new SchemaSqlResult(false, new SQLException("No schema switch SQL provided")); + } + try (Statement stmt = conn.createStatement()) { + stmt.execute(schemaSql); + return new SchemaSqlResult(true, null); + } catch (SQLException | AbstractMethodError e) { + return new SchemaSqlResult(true, e instanceof SQLException ? (SQLException) e : new SQLException(e)); + } + } + + private static final class SchemaSqlResult { + private final boolean attempted; + private final Exception error; + + private SchemaSqlResult(boolean attempted, Exception error) { + this.attempted = attempted; + this.error = error; + } + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/JsonRpcServer.java b/agents/common/src/main/java/com/dbx/agent/JsonRpcServer.java new file mode 100644 index 0000000..b978a90 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/JsonRpcServer.java @@ -0,0 +1,373 @@ +package com.dbx.agent; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializer; +import com.google.gson.reflect.TypeToken; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.lang.reflect.Type; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.sql.Connection; +import java.util.Collections; +import java.util.List; + +public final class JsonRpcServer { + private static final long CONNECTION_VALIDATION_INTERVAL_MILLIS = 5_000L; + + private final DatabaseAgent agent; + private final Gson gson = new GsonBuilder() + // JDBC DECIMAL/NUMERIC values can exceed JavaScript Number precision after JSON-RPC parsing. + .registerTypeAdapter( + BigDecimal.class, + (JsonSerializer) (value, type, context) -> new JsonPrimitive(value.toPlainString()) + ) + .registerTypeAdapter( + BigInteger.class, + (JsonSerializer) (value, type, context) -> new JsonPrimitive(value.toString()) + ) + .create(); + private ConnectParams lastConnectParams; + private long lastConnectionValidationTimeMillis; + + public JsonRpcServer(DatabaseAgent agent) { + this.agent = agent; + } + + public void run() { + System.out.println("{\"ready\":true}"); + System.out.flush(); + + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + String response = handleRequest(line); + System.out.println(response); + System.out.flush(); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + String handleRequest(String line) { + JsonObject req = JsonParser.parseString(line).getAsJsonObject(); + JsonElement id = req.get("id"); + String method = req.get("method").getAsString(); + JsonObject params = paramsObject(req); + + JsonObject response = new JsonObject(); + response.addProperty("jsonrpc", "2.0"); + response.add("id", id); + + try { + Object result = dispatch(method, params); + response.add("result", gson.toJsonTree(result)); + return gson.toJson(response); + } catch (Throwable e) { + JsonObject error = new JsonObject(); + error.addProperty("code", -1); + error.addProperty("message", e.getMessage() == null ? e.toString() : e.getMessage()); + response.add("error", error); + return gson.toJson(response); + } + } + + private Object dispatch(String method, JsonObject params) throws Exception { + if (AgentProtocol.METHOD_HANDSHAKE.equals(method)) { + return AgentProtocol.handshakeResult(); + } + if (AgentProtocol.METHOD_CONNECT.equals(method)) { + lastConnectParams = gson.fromJson(params, ConnectParams.class); + agent.connect(lastConnectParams); + lastConnectionValidationTimeMillis = 0L; + return Collections.singletonMap("ok", true); + } + if (AgentProtocol.METHOD_TEST_CONNECTION.equals(method)) { + if (!agent.testConnection(gson.fromJson(params, ConnectParams.class))) { + throw new RuntimeException("Connection failed"); + } + return Collections.singletonMap("ok", true); + } + if (AgentProtocol.METHOD_VALIDATE_CONNECTION.equals(method)) { + Connection conn = agent.getConnection(); + boolean valid = false; + if (conn != null) { + try { + valid = !conn.isClosed() && conn.isValid(2); + } catch (Exception ignored) { + } + } + if (!valid) { + throw new IllegalStateException("Connection is not valid"); + } + return Collections.singletonMap("ok", true); + } + ensureLiveConnection(method); + if (AgentProtocol.METHOD_LIST_DATABASES.equals(method)) { + return agent.listDatabases(); + } + if (AgentProtocol.METHOD_LIST_SCHEMAS.equals(method)) { + switchCatalog(params); + return agent.listSchemas(stringListOrNull(params, "visible_schemas")); + } + if (AgentProtocol.METHOD_LIST_TABLES.equals(method)) { + switchCatalog(params); + return agent.listTables(params.get("schema").getAsString(), metadataListConstraints(params)); + } + if (AgentProtocol.METHOD_LIST_OBJECTS.equals(method)) { + switchCatalog(params); + return agent.listObjects(params.get("schema").getAsString(), metadataListConstraints(params)); + } + if (AgentProtocol.METHOD_LIST_DATA_TYPES.equals(method)) { + switchCatalog(params); + return agent.listDataTypes(); + } + if (AgentProtocol.METHOD_COMPLETION_ASSISTANT_SEARCH_V1.equals(method)) { + switchCatalog(params); + return agent.completionAssistantSearch(gson.fromJson(params, CompletionAssistantRequest.class)); + } + if (AgentProtocol.METHOD_GET_OBJECT_SOURCE.equals(method)) { + switchCatalog(params); + return agent.getObjectSource( + params.get("schema").getAsString(), + params.get("name").getAsString(), + params.get("object_type").getAsString() + ); + } + if (AgentProtocol.METHOD_GET_TABLE_DDL.equals(method)) { + switchCatalog(params); + return agent.getTableDdl(params.get("schema").getAsString(), params.get("table").getAsString()); + } + if (AgentProtocol.METHOD_GET_COLUMNS.equals(method)) { + switchCatalog(params); + return agent.getColumns(params.get("schema").getAsString(), params.get("table").getAsString()); + } + if (AgentProtocol.METHOD_LIST_INDEXES.equals(method)) { + switchCatalog(params); + return agent.listIndexes(params.get("schema").getAsString(), params.get("table").getAsString()); + } + if (AgentProtocol.METHOD_LIST_FOREIGN_KEYS.equals(method)) { + switchCatalog(params); + return agent.listForeignKeys(params.get("schema").getAsString(), params.get("table").getAsString()); + } + if (AgentProtocol.METHOD_LIST_TRIGGERS.equals(method)) { + switchCatalog(params); + return agent.listTriggers(params.get("schema").getAsString(), params.get("table").getAsString()); + } + if (AgentProtocol.METHOD_EXECUTE_QUERY.equals(method)) { + return agent.executeQuery( + params.get("sql").getAsString(), + stringOrNull(params, "schema"), + new ExecuteQueryOptions( + intOrDefault(params, "maxRows", JdbcExecutor.DEFAULT_MAX_ROWS), + intOrNull(params, "fetchSize"), + intOrDefault(params, "timeoutSecs", 0) + ) + ); + } + if (AgentProtocol.METHOD_EXECUTE_QUERY_PAGE.equals(method)) { + return agent.executeQueryPage( + params.get("sql").getAsString(), + stringOrNull(params, "schema"), + new QueryPageOptions( + intOrDefault(params, "pageSize", 100), + intOrNull(params, "fetchSize"), + intOrDefault(params, "maxRows", JdbcExecutor.DEFAULT_MAX_ROWS), + intOrDefault(params, "timeoutSecs", 0) + ) + ); + } + if (AgentProtocol.METHOD_FETCH_QUERY_PAGE.equals(method)) { + return agent.fetchQueryPage( + params.get("sessionId").getAsString(), + intOrDefault(params, "pageSize", 100) + ); + } + if (AgentProtocol.METHOD_CLOSE_QUERY_SESSION.equals(method)) { + return agent.closeQuerySession(params.get("sessionId").getAsString()); + } + if (AgentProtocol.METHOD_START_TABLE_READ.equals(method)) { + return agent.startTableRead( + params.get("sql").getAsString(), + stringOrNull(params, "schema"), + new QueryPageOptions( + intOrDefault(params, "pageSize", 100), + intOrNull(params, "fetchSize"), + intOrDefault(params, "maxRows", JdbcExecutor.DEFAULT_MAX_ROWS), + intOrDefault(params, "timeoutSecs", 0) + ) + ); + } + if (AgentProtocol.METHOD_FETCH_TABLE_READ_PAGE.equals(method)) { + return agent.fetchTableReadPage( + params.get("sessionId").getAsString(), + intOrDefault(params, "pageSize", 100) + ); + } + if (AgentProtocol.METHOD_CLOSE_TABLE_READ_SESSION.equals(method)) { + return agent.closeTableReadSession(params.get("sessionId").getAsString()); + } + if (AgentProtocol.METHOD_GET_EXPLAIN_INFO.equals(method)) { + String plan = agent.getExplainInfo( + params.get("sql").getAsString(), + stringOrNull(params, "database"), + stringOrNull(params, "schema"), + intOrDefault(params, "timeoutSecs", -1), + stringOrNull(params, "mode") + ); + java.util.HashMap result = new java.util.HashMap<>(); + result.put("plan", plan); + result.put("has_actual_stats", "autotrace".equals(stringOrNull(params, "mode"))); + return result; + } + if (AgentProtocol.METHOD_EXECUTE_TRANSACTION.equals(method)) { + Type statementsType = new TypeToken>() {}.getType(); + List statements = gson.fromJson(params.get("statements"), statementsType); + return agent.executeTransaction(statements, stringOrNull(params, "schema")); + } + if (AgentProtocol.METHOD_EXECUTE_BATCH.equals(method)) { + Type statementsType = new TypeToken>() {}.getType(); + List statements = gson.fromJson(params.get("statements"), statementsType); + return agent.executeBatch(statements, stringOrNull(params, "schema")); + } + if (AgentProtocol.METHOD_DISCONNECT.equals(method)) { + JdbcExecutor.INSTANCE.closeAllQuerySessions(); + JdbcExecutor.INSTANCE.closeAllTableReadSessions(); + agent.disconnect(); + lastConnectParams = null; + return Collections.singletonMap("ok", true); + } + if (AgentProtocol.METHOD_SHUTDOWN.equals(method)) { + JdbcExecutor.INSTANCE.closeAllQuerySessions(); + JdbcExecutor.INSTANCE.closeAllTableReadSessions(); + agent.disconnect(); + lastConnectParams = null; + System.exit(0); + return Collections.singletonMap("ok", true); + } + throw new IllegalArgumentException("Unknown method: " + method); + } + + private void switchCatalog(JsonObject params) throws Exception { + String database = stringOrNull(params, "database"); + if (database != null && !database.trim().isEmpty() && agent.getConnection() != null) { + String currentCatalog = null; + try { + currentCatalog = agent.getConnection().getCatalog(); + } catch (Exception ignored) { + } + if (currentCatalog == null || !currentCatalog.trim().equalsIgnoreCase(database.trim())) { + try { + agent.getConnection().setCatalog(database); + } catch (Exception ignored) { + } + } + } + } + + private void ensureLiveConnection(String method) { + if (lastConnectParams == null || !shouldValidateConnection(method)) { + return; + } + Connection conn = agent.getConnection(); + if (conn == null) { + return; + } + long now = System.currentTimeMillis(); + if (lastConnectionValidationTimeMillis > 0 + && now - lastConnectionValidationTimeMillis < CONNECTION_VALIDATION_INTERVAL_MILLIS) { + return; + } + boolean valid = false; + try { + valid = !conn.isClosed() && conn.isValid(2); + } catch (Exception ignored) { + } + if (valid) { + lastConnectionValidationTimeMillis = now; + return; + } + + JdbcExecutor.INSTANCE.closeAllQuerySessions(); + JdbcExecutor.INSTANCE.closeAllTableReadSessions(); + try { + agent.disconnect(); + } catch (Exception ignored) { + } + agent.connect(lastConnectParams); + lastConnectionValidationTimeMillis = System.currentTimeMillis(); + } + + private static boolean shouldValidateConnection(String method) { + return !AgentProtocol.METHOD_HANDSHAKE.equals(method) + && !AgentProtocol.METHOD_CONNECT.equals(method) + && !AgentProtocol.METHOD_TEST_CONNECTION.equals(method) + && !AgentProtocol.METHOD_VALIDATE_CONNECTION.equals(method) + && !AgentProtocol.METHOD_FETCH_QUERY_PAGE.equals(method) + && !AgentProtocol.METHOD_CLOSE_QUERY_SESSION.equals(method) + && !AgentProtocol.METHOD_FETCH_TABLE_READ_PAGE.equals(method) + && !AgentProtocol.METHOD_CLOSE_TABLE_READ_SESSION.equals(method) + && !AgentProtocol.METHOD_DISCONNECT.equals(method) + && !AgentProtocol.METHOD_SHUTDOWN.equals(method); + } + + private static JsonObject paramsObject(JsonObject req) { + JsonElement params = req.get("params"); + if (params == null || params instanceof JsonNull || !params.isJsonObject()) { + return new JsonObject(); + } + return params.getAsJsonObject(); + } + + private static String stringOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + if (element == null || element instanceof JsonNull) { + return null; + } + return element.getAsString(); + } + + private List stringListOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + if (element == null || element instanceof JsonNull) { + return null; + } + Type listType = new TypeToken>() {}.getType(); + return gson.fromJson(element, listType); + } + + private static Integer intOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + if (element == null || element instanceof JsonNull) { + return null; + } + return element.getAsInt(); + } + + private MetadataListConstraints metadataListConstraints(JsonObject params) { + return new MetadataListConstraints( + stringOrNull(params, "filter"), + intOrNull(params, "limit"), + intOrNull(params, "offset"), + stringListOrNull(params, "object_types") + ); + } + + private static int intOrDefault(JsonObject object, String key, int defaultValue) { + Integer value = intOrNull(object, key); + return value == null ? defaultValue : value; + } + +} diff --git a/agents/common/src/main/java/com/dbx/agent/MetadataListConstraints.java b/agents/common/src/main/java/com/dbx/agent/MetadataListConstraints.java new file mode 100644 index 0000000..9e8b4f0 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/MetadataListConstraints.java @@ -0,0 +1,221 @@ +package com.dbx.agent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +public final class MetadataListConstraints { + public static final MetadataListConstraints NONE = new MetadataListConstraints(null, null, null, null); + + private final String filter; + private final Integer limit; + private final Integer offset; + private final List objectTypes; + + public MetadataListConstraints(String filter, Integer limit, Integer offset, List objectTypes) { + this.filter = normalizeFilter(filter); + this.limit = limit == null || limit <= 0 ? null : limit; + this.offset = offset == null || offset <= 0 ? null : offset; + this.objectTypes = normalizeObjectTypes(objectTypes); + } + + public static MetadataListConstraints orNone(MetadataListConstraints constraints) { + return constraints == null ? NONE : constraints; + } + + public String getFilter() { + return filter; + } + + public Integer getLimit() { + return limit; + } + + public Integer getOffset() { + return offset; + } + + public List getObjectTypes() { + return objectTypes.isEmpty() ? null : objectTypes; + } + + public boolean hasFilter() { + return !filter.isEmpty(); + } + + public boolean hasLimit() { + return limit != null; + } + + public boolean hasOffset() { + return offset != null; + } + + public boolean hasObjectTypes() { + return !objectTypes.isEmpty(); + } + + public MetadataListConstraints withoutPaging() { + return new MetadataListConstraints(filter, null, null, objectTypes); + } + + public String fuzzyLikePattern() { + if (filter.isEmpty()) { + return "%%"; + } + StringBuilder builder = new StringBuilder(filter.length() * 2 + 2); + builder.append('%'); + for (int i = 0; i < filter.length(); i++) { + char ch = filter.charAt(i); + if (ch == '\\' || ch == '%' || ch == '_') { + builder.append('\\'); + } + builder.append(ch); + builder.append('%'); + } + return builder.toString(); + } + + public boolean includesTableLikeTypes() { + if (objectTypes.isEmpty()) { + return true; + } + return objectTypes.contains("TABLE") + || objectTypes.contains("VIEW") + || objectTypes.contains("MATERIALIZED_VIEW"); + } + + public boolean tableTypeAllowed(String tableType) { + if (objectTypes.isEmpty()) { + return true; + } + return objectTypes.contains(normalizeTableType(tableType)); + } + + public boolean objectTypeAllowed(String objectType) { + if (objectTypes.isEmpty()) { + return true; + } + String normalized = normalizeObjectType(objectType); + return !normalized.isEmpty() && objectTypes.contains(normalized); + } + + public boolean nameMatches(String name) { + return textMatches(name); + } + + public boolean nameOrCommentMatches(String name, String comment) { + return textMatches(name) || textMatches(comment); + } + + private boolean textMatches(String text) { + if (filter.isEmpty()) { + return true; + } + if (text == null) { + return false; + } + String candidate = text.toLowerCase(Locale.ROOT); + return candidate.contains(filter) || (filter.length() >= 2 && fuzzySubsequenceMatches(candidate, filter)); + } + + public List filterTables(List tables) { + List result = new ArrayList<>(); + int skipped = 0; + int max = limit == null ? Integer.MAX_VALUE : limit; + int start = offset == null ? 0 : offset; + for (TableInfo table : tables) { + if (!nameOrCommentMatches(table.getName(), table.getComment()) + || !tableTypeAllowed(table.getTable_type())) { + continue; + } + if (skipped++ < start) { + continue; + } + if (result.size() >= max) { + break; + } + result.add(table); + } + return result; + } + + public List filterObjects(List objects) { + List result = new ArrayList<>(); + int skipped = 0; + int max = limit == null ? Integer.MAX_VALUE : limit; + int start = offset == null ? 0 : offset; + for (ObjectInfo object : objects) { + if (!nameOrCommentMatches(object.getName(), object.getComment()) + || !objectTypeAllowed(object.getObject_type())) { + continue; + } + if (skipped++ < start) { + continue; + } + if (result.size() >= max) { + break; + } + result.add(object); + } + return result; + } + + private static String normalizeFilter(String value) { + if (value == null) { + return ""; + } + return value.trim().toLowerCase(Locale.ROOT); + } + + private static List normalizeObjectTypes(List values) { + if (values == null || values.isEmpty()) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + for (String value : values) { + String normalized = normalizeObjectType(value); + if (!normalized.isEmpty() && !result.contains(normalized)) { + result.add(normalized); + } + } + Collections.sort(result); + return Collections.unmodifiableList(result); + } + + private static String normalizeTableType(String value) { + String normalized = normalizeObjectType(value); + return normalized.isEmpty() ? "TABLE" : normalized; + } + + private static String normalizeObjectType(String value) { + if (value == null || value.trim().isEmpty()) { + return ""; + } + String upper = value.trim().toUpperCase(Locale.ROOT).replace(' ', '_'); + if (upper.contains("MATERIALIZED") && upper.contains("VIEW")) { + return "MATERIALIZED_VIEW"; + } + if (upper.equals("STABLE") || upper.equals("BASE_TABLE") || upper.contains("TABLE")) { + return "TABLE"; + } + if (upper.contains("VIEW")) { + return "VIEW"; + } + return upper; + } + + private static boolean fuzzySubsequenceMatches(String candidate, String expected) { + int cursor = 0; + for (int i = 0; i < expected.length(); i++) { + char ch = expected.charAt(i); + cursor = candidate.indexOf(ch, cursor); + if (cursor < 0) { + return false; + } + cursor++; + } + return true; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/MetadataSqlSupport.java b/agents/common/src/main/java/com/dbx/agent/MetadataSqlSupport.java new file mode 100644 index 0000000..c5c85e0 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/MetadataSqlSupport.java @@ -0,0 +1,95 @@ +package com.dbx.agent; + +import java.sql.PreparedStatement; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +public final class MetadataSqlSupport { + private MetadataSqlSupport() { + } + + public static void appendNameFilter(StringBuilder sql, List args, String column, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (!normalized.hasFilter()) { + return; + } + sql.append(" AND UPPER(").append(column).append(") LIKE ? ESCAPE '\\\\'"); + args.add(normalized.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + + public static void appendLimitOffset(StringBuilder sql, List args, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (!normalized.hasLimit()) { + return; + } + sql.append(" LIMIT ?"); + args.add(normalized.getLimit()); + if (normalized.hasOffset()) { + sql.append(" OFFSET ?"); + args.add(normalized.getOffset()); + } + } + + public static void appendOffsetFetch(StringBuilder sql, List args, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (normalized.hasOffset()) { + sql.append(" OFFSET ? ROWS"); + args.add(normalized.getOffset()); + } + if (normalized.hasLimit()) { + sql.append(normalized.hasOffset() ? " FETCH NEXT ? ROWS ONLY" : " FETCH FIRST ? ROWS ONLY"); + args.add(normalized.getLimit()); + } + } + + public static void appendLiteralLimitOffset(StringBuilder sql, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (!normalized.hasLimit()) { + return; + } + sql.append(" LIMIT ").append(normalized.getLimit()); + if (normalized.hasOffset()) { + sql.append(" OFFSET ").append(normalized.getOffset()); + } + } + + public static void appendLiteralOffsetFetch(StringBuilder sql, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (normalized.hasOffset()) { + sql.append(" OFFSET ").append(normalized.getOffset()).append(" ROWS"); + } + if (normalized.hasLimit()) { + sql.append(normalized.hasOffset() ? " FETCH NEXT " : " FETCH FIRST ") + .append(normalized.getLimit()) + .append(" ROWS ONLY"); + } + } + + public static void appendLiteralSkipFirst(StringBuilder sql, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (normalized.hasOffset()) { + sql.append("SKIP ").append(normalized.getOffset()).append(' '); + } + if (normalized.hasLimit()) { + sql.append("FIRST ").append(normalized.getLimit()).append(' '); + } + } + + public static String placeholders(int count) { + return String.join(", ", Collections.nCopies(count, "?")); + } + + public static void bind(PreparedStatement stmt, List args) throws Exception { + for (int index = 0; index < args.size(); index += 1) { + Object arg = args.get(index); + if (arg instanceof Integer) { + stmt.setInt(index + 1, (Integer) arg); + } else if (arg == null) { + stmt.setObject(index + 1, null); + } else { + stmt.setString(index + 1, String.valueOf(arg)); + } + } + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ObjectInfo.java b/agents/common/src/main/java/com/dbx/agent/ObjectInfo.java new file mode 100644 index 0000000..00b2639 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ObjectInfo.java @@ -0,0 +1,82 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class ObjectInfo { + private String name; + private String object_type; + private String schema; + private String comment; + + public ObjectInfo() { + this("", "", null, null); + } + + public ObjectInfo(String name, String object_type) { + this(name, object_type, null, null); + } + + public ObjectInfo(String name, String object_type, String schema, String comment) { + this.name = name; + this.object_type = object_type; + this.schema = schema; + this.comment = comment; + } + + public String getName() { + return name; + } + + public String getObject_type() { + return object_type; + } + + public String getSchema() { + return schema; + } + + public String getComment() { + return comment; + } + + public void setName(String name) { + this.name = name; + } + + public void setObject_type(String object_type) { + this.object_type = object_type; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public void setComment(String comment) { + this.comment = comment; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ObjectInfo)) return false; + ObjectInfo that = (ObjectInfo) other; + return Objects.equals(name, that.name) + && Objects.equals(object_type, that.object_type) + && Objects.equals(schema, that.schema) + && Objects.equals(comment, that.comment); + } + + @Override + public int hashCode() { + return Objects.hash(name, object_type, schema, comment); + } + + @Override + public String toString() { + return "ObjectInfo(name=" + name + + ", object_type=" + object_type + + ", schema=" + schema + + ", comment=" + comment + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/ObjectSource.java b/agents/common/src/main/java/com/dbx/agent/ObjectSource.java new file mode 100644 index 0000000..13e9d25 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/ObjectSource.java @@ -0,0 +1,98 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class ObjectSource { + private String name; + private String object_type; + private String schema; + private String source; + private boolean editable; + + public ObjectSource() { + this("", "", null, "", true); + } + + public ObjectSource(String name, String object_type, String source) { + this(name, object_type, null, source, true); + } + + public ObjectSource(String name, String object_type, String schema, String source) { + this(name, object_type, schema, source, true); + } + + public ObjectSource(String name, String object_type, String schema, String source, boolean editable) { + this.name = name; + this.object_type = object_type; + this.schema = schema; + this.source = source; + this.editable = editable; + } + + public String getName() { + return name; + } + + public String getObject_type() { + return object_type; + } + + public String getSchema() { + return schema; + } + + public String getSource() { + return source; + } + + public boolean isEditable() { + return editable; + } + + public void setName(String name) { + this.name = name; + } + + public void setObject_type(String object_type) { + this.object_type = object_type; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public void setSource(String source) { + this.source = source; + } + + public void setEditable(boolean editable) { + this.editable = editable; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof ObjectSource)) return false; + ObjectSource that = (ObjectSource) other; + return Objects.equals(name, that.name) + && Objects.equals(object_type, that.object_type) + && Objects.equals(schema, that.schema) + && Objects.equals(source, that.source) + && editable == that.editable; + } + + @Override + public int hashCode() { + return Objects.hash(name, object_type, schema, source, editable); + } + + @Override + public String toString() { + return "ObjectSource(name=" + name + + ", object_type=" + object_type + + ", schema=" + schema + + ", source=" + source + + ", editable=" + editable + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/PostgresLikeAgent.java b/agents/common/src/main/java/com/dbx/agent/PostgresLikeAgent.java new file mode 100644 index 0000000..fa3bd15 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/PostgresLikeAgent.java @@ -0,0 +1,554 @@ +package com.dbx.agent; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +public abstract class PostgresLikeAgent extends AbstractJdbcAgent { + private final PostgresLikeAgentProfile profile; + private boolean mysqlCompatMode = false; + + protected PostgresLikeAgent(PostgresLikeAgentProfile profile) { + this.profile = profile; + } + + public PostgresLikeAgentProfile getProfile() { + return profile; + } + + public void setMysqlCompatMode(boolean mysqlCompatMode) { + this.mysqlCompatMode = mysqlCompatMode; + } + + public boolean isMysqlCompatMode() { + return mysqlCompatMode; + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + geometryAwareResolver() + ); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.executePage( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + geometryAwareResolver() + ); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.startTableRead( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + geometryAwareResolver() + ); + } + + /** + * Wrap {@link AbstractJdbcAgent#resultValue} so PostGIS-style {@code geometry} + * and {@code geography} columns are decoded into WKT (matching the native + * tokio_postgres path in {@code crates/dbx-core/src/db/postgres.rs}). + */ + private JdbcExecutor.ColumnAwareResultValueReader geometryAwareResolver() { + return (rs, index, sqlType, columnTypeName) -> { + if (isPostgisGeometryTypeName(columnTypeName)) { + Object raw = rs.getObject(index); + if (rs.wasNull() || raw == null) { + return null; + } + return EwkbWktDecoder.decode(raw); + } + return resultValue(rs, index, sqlType, columnTypeName); + }; + } + + protected Object resultValue(ResultSet rs, int index, int sqlType, String columnTypeName) { + return resultValue(rs, index, sqlType); + } + + static boolean isPostgisGeometryTypeName(String columnTypeName) { + if (columnTypeName == null) { + return false; + } + String trimmed = columnTypeName.trim().toLowerCase(Locale.ROOT); + if (trimmed.isEmpty()) { + return false; + } + // Strip optional schema prefix (e.g. "public.geometry") or "(srid,type)" suffix. + int dot = trimmed.lastIndexOf('.'); + if (dot >= 0 && dot < trimmed.length() - 1) { + trimmed = trimmed.substring(dot + 1); + } + int paren = trimmed.indexOf('('); + if (paren >= 0) { + trimmed = trimmed.substring(0, paren); + } + return "geometry".equals(trimmed) || "geography".equals(trimmed); + } + + private String quoteIdentifier(String identifier) { + return mysqlCompatMode + ? JdbcIdentifiers.INSTANCE.backtick(identifier) + : JdbcIdentifiers.INSTANCE.doubleQuote(identifier); + } + + @Override + protected String driverClass() { + return profile.getDriverClass(); + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return profile.buildUrl(params); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement("SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname"); + ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString("datname"))); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement( + "SELECT n.nspname AS schema_name " + + "FROM pg_catalog.pg_namespace n " + + "WHERE n.nspname NOT IN ('pg_catalog','information_schema','pg_toast') " + + "AND n.nspname NOT LIKE 'pg_toast_temp_%' " + + "AND n.nspname NOT LIKE 'pg_temp_%' " + + "ORDER BY n.nspname" + ); ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(rs.getString("schema_name")); + } + } + return result; + }); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement( + "SELECT c.relname AS table_name, " + + "CASE c.relkind " + + "WHEN 'r' THEN 'TABLE' " + + "WHEN 'p' THEN 'TABLE' " + + "WHEN 'v' THEN 'VIEW' " + + "WHEN 'm' THEN 'MATERIALIZED VIEW' " + + "WHEN 'f' THEN 'FOREIGN TABLE' " + + "ELSE 'TABLE' END AS table_type, " + + "obj_description(c.oid) AS table_comment " + + "FROM pg_catalog.pg_class c " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "WHERE n.nspname = ? AND c.relkind IN ('r','p','v','m','f') " + + "ORDER BY c.relname" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String tableType = normalizeTableType(rs.getString("table_type")); + result.add(new TableInfo(rs.getString("table_name"), tableType, rs.getString("table_comment"))); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement( + "SELECT p.proname AS routine_name, " + + "CASE p.prokind WHEN 'p' THEN 'PROCEDURE' ELSE 'FUNCTION' END AS routine_type " + + "FROM pg_catalog.pg_proc p " + + "JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace " + + "WHERE n.nspname = ? AND p.prokind IN ('p','f') " + + "ORDER BY p.proname" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement( + "SELECT c.relname AS sequence_name, 'SEQUENCE' AS object_type " + + "FROM pg_catalog.pg_class c " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "WHERE n.nspname = ? AND c.relkind = 'S' " + + "ORDER BY c.relname" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public String getTableDdl(String schema, String table) { + List indexes; + try { + indexes = listIndexes(schema, table); + } catch (RuntimeException e) { + indexes = Collections.emptyList(); + } + + List foreignKeys; + try { + foreignKeys = listForeignKeys(schema, table); + } catch (RuntimeException e) { + foreignKeys = Collections.emptyList(); + } + + List checkConstraints; + try { + checkConstraints = listCheckConstraints(schema, table); + } catch (RuntimeException e) { + // Some PostgreSQL-compatible databases expose incomplete catalog APIs. + // DDL generation should still succeed with columns, indexes, and foreign keys. + checkConstraints = Collections.emptyList(); + } + + return DdlBuilder.buildTableDdl( + schema, + table, + getColumns(schema, table), + indexes, + foreignKeys, + checkConstraints, + mysqlCompatMode, + true + ); + } + + protected List listCheckConstraints(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT co.conname AS constraint_name, pg_catalog.pg_get_constraintdef(co.oid, true) AS constraint_definition " + + "FROM pg_catalog.pg_constraint co " + + "JOIN pg_catalog.pg_class c ON c.oid = co.conrelid " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "WHERE co.contype = 'c' AND n.nspname = ? AND c.relname = ? " + + "ORDER BY co.conname"; + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new CheckConstraintInfo( + rs.getString("constraint_name"), + rs.getString("constraint_definition") + )); + } + } + } + return result; + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String upperType = objectType.toUpperCase(); + String sql; + if ("VIEW".equals(upperType) || "MATERIALIZED VIEW".equals(upperType)) { + sql = "SELECT pg_get_viewdef(to_regclass(?), true)"; + } else if ("FUNCTION".equals(upperType)) { + sql = "SELECT pg_get_functiondef(p.oid)\n" + + "FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace\n" + + "WHERE n.nspname = ? AND p.proname = ? AND p.prokind = 'f'\n" + + "ORDER BY p.oid LIMIT 1"; + } else if ("PROCEDURE".equals(upperType)) { + sql = "SELECT pg_get_functiondef(p.oid)\n" + + "FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace\n" + + "WHERE n.nspname = ? AND p.proname = ? AND p.prokind = 'p'\n" + + "ORDER BY p.oid LIMIT 1"; + } else { + throw new IllegalArgumentException("Unsupported object type: " + objectType); + } + + String source; + if ("VIEW".equals(upperType) || "MATERIALIZED VIEW".equals(upperType)) { + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, quoteQualifiedIdentifier(schema, name)); + try (ResultSet rs = stmt.executeQuery()) { + source = rs.next() ? coalesce(rs.getString(1)) : ""; + } + } + } else { + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, name); + try (ResultSet rs = stmt.executeQuery()) { + source = rs.next() ? coalesce(rs.getString(1)) : ""; + } + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Set primaryKeys = primaryKeys(schema, table); + List result = new ArrayList<>(); + String sql = "SELECT a.attname AS column_name, " + + "format_type(a.atttypid, a.atttypmod) AS data_type, " + + "NOT a.attnotnull AS is_nullable, " + + "pg_get_expr(ad.adbin, ad.adrelid) AS column_default, " + + "col_description(a.attrelid, a.attnum) AS column_comment, " + + "CASE WHEN t.typname = 'numeric' AND a.atttypmod > 0 " + + "THEN ((a.atttypmod - 4) >> 16) & 65535 ELSE NULL END AS numeric_precision, " + + "CASE WHEN t.typname = 'numeric' AND a.atttypmod > 0 " + + "THEN (a.atttypmod - 4) & 65535 ELSE NULL END AS numeric_scale, " + + "CASE WHEN t.typname IN ('varchar', 'bpchar') AND a.atttypmod > 0 " + + "THEN a.atttypmod - 4 ELSE NULL END AS character_maximum_length " + + "FROM pg_catalog.pg_attribute a " + + "JOIN pg_catalog.pg_type t ON t.oid = a.atttypid " + + "JOIN pg_catalog.pg_class c ON c.oid = a.attrelid " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "LEFT JOIN pg_catalog.pg_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum " + + "WHERE n.nspname = ? AND c.relname = ? " + + "AND a.attnum > 0 AND NOT a.attisdropped " + + "ORDER BY a.attnum"; + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String colName = rs.getString("column_name"); + result.add(new ColumnInfo( + colName, + rs.getString("data_type"), + rs.getBoolean("is_nullable"), + rs.getString("column_default"), + primaryKeys.contains(colName), + null, + rs.getString("column_comment"), + intObject(rs, "numeric_precision"), + intObject(rs, "numeric_scale"), + intObject(rs, "character_maximum_length") + )); + } + } + } + return result; + }); + } + + private Set primaryKeys(String schema, String table) { + return unchecked(() -> { + Set primaryKeys = new LinkedHashSet<>(); + String sql = "SELECT a.attname AS column_name " + + "FROM pg_catalog.pg_constraint co " + + "JOIN pg_catalog.pg_class c ON c.oid = co.conrelid " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "JOIN LATERAL (SELECT unnest(co.conkey) AS attnum, generate_series(1, array_length(co.conkey, 1)) AS ord) AS pk_cols ON true " + + "JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid AND a.attnum = pk_cols.attnum " + + "WHERE co.contype = 'p' " + + "AND n.nspname = ? " + + "AND c.relname = ? " + + "ORDER BY pk_cols.ord"; + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + primaryKeys.add(rs.getString("column_name")); + } + } + } + return primaryKeys; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT i.relname AS index_name, am.amname AS index_type, " + + "ix.indisunique AS is_unique, ix.indisprimary AS is_primary, " + + "array_agg(a.attname ORDER BY k.n) AS columns " + + "FROM pg_index ix " + + "JOIN pg_class t ON t.oid = ix.indrelid " + + "JOIN pg_class i ON i.oid = ix.indexrelid " + + "JOIN pg_namespace n ON n.oid = t.relnamespace " + + "JOIN pg_am am ON am.oid = i.relam " + + "JOIN LATERAL (SELECT unnest(ix.indkey) AS attnum, generate_series(1, array_length(ix.indkey, 1)) AS n) AS k ON true " + + "JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = k.attnum " + + "WHERE n.nspname = ? AND t.relname = ? " + + "GROUP BY i.relname, am.amname, ix.indisunique, ix.indisprimary " + + "ORDER BY i.relname"; + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + Object[] columnArray = (Object[]) rs.getArray("columns").getArray(); + List columns = new ArrayList<>(); + for (Object column : columnArray) { + columns.add(String.valueOf(column)); + } + result.add(new IndexInfo( + rs.getString("index_name"), + columns, + rs.getBoolean("is_unique"), + rs.getBoolean("is_primary"), + null, + rs.getString("index_type"), + null, + null + )); + } + } + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT co.conname AS constraint_name, " + + "a.attname AS column_name, " + + "rc.relname AS ref_table, " + + "ra.attname AS ref_column " + + "FROM pg_catalog.pg_constraint co " + + "JOIN pg_catalog.pg_class c ON c.oid = co.conrelid " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "JOIN pg_catalog.pg_class rc ON rc.oid = co.confrelid " + + "JOIN LATERAL (SELECT unnest(co.conkey) AS attnum, generate_series(1, array_length(co.conkey, 1)) AS ord) AS fk ON true " + + "JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid AND a.attnum = fk.attnum " + + "JOIN LATERAL (SELECT unnest(co.confkey) AS attnum, generate_series(1, array_length(co.confkey, 1)) AS ord) AS pk ON pk.ord = fk.ord " + + "JOIN pg_catalog.pg_attribute ra ON ra.attrelid = rc.oid AND ra.attnum = pk.attnum " + + "WHERE co.contype = 'f' " + + "AND n.nspname = ? " + + "AND c.relname = ? " + + "ORDER BY co.conname, fk.ord"; + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString("constraint_name"), + rs.getString("column_name"), + rs.getString("ref_table"), + rs.getString("ref_column") + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT tg.tgname AS trigger_name, " + + "trim(trailing ',' FROM (" + + "CASE WHEN (tg.tgtype & 4) <> 0 THEN 'INSERT,' ELSE '' END || " + + "CASE WHEN (tg.tgtype & 8) <> 0 THEN 'DELETE,' ELSE '' END || " + + "CASE WHEN (tg.tgtype & 16) <> 0 THEN 'UPDATE,' ELSE '' END || " + + "CASE WHEN (tg.tgtype & 32) <> 0 THEN 'TRUNCATE,' ELSE '' END" + + ")) AS event_manipulation, " + + "CASE WHEN (tg.tgtype & 2) <> 0 THEN 'BEFORE' ELSE 'AFTER' END AS action_timing " + + "FROM pg_catalog.pg_trigger tg " + + "JOIN pg_catalog.pg_class c ON c.oid = tg.tgrelid " + + "JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace " + + "WHERE n.nspname = ? AND c.relname = ? AND NOT tg.tgisinternal " + + "ORDER BY tg.tgname"; + try (java.sql.PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo( + rs.getString("trigger_name"), + rs.getString("event_manipulation"), + rs.getString("action_timing") + )); + } + } + } + return result; + }); + } + + @Override + public String setSchemaSQL(String schema) { + return "SET search_path TO " + quoteIdentifier(schema); + } + + private java.sql.Connection requireConnection() { + return requireConnected(); + } + + private static String normalizeTableType(String type) { + if (type == null || type.trim().isEmpty()) return "TABLE"; + if ("BASE TABLE".equals(type)) return "TABLE"; + return type; + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + private String quoteQualifiedIdentifier(String schema, String name) { + return quoteIdentifier(schema) + "." + quoteIdentifier(name); + } + + private static Integer intObject(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/PostgresLikeAgentProfile.java b/agents/common/src/main/java/com/dbx/agent/PostgresLikeAgentProfile.java new file mode 100644 index 0000000..f4ba2a8 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/PostgresLikeAgentProfile.java @@ -0,0 +1,30 @@ +package com.dbx.agent; + +public final class PostgresLikeAgentProfile { + private final String driverClass; + private final String urlTemplate; + + public PostgresLikeAgentProfile(String driverClass, String urlTemplate) { + this.driverClass = driverClass; + this.urlTemplate = urlTemplate; + } + + public String getDriverClass() { + return driverClass; + } + + public String getUrlTemplate() { + return urlTemplate; + } + + public String buildUrl(ConnectParams params) { + return new JdbcAgentProfile( + driverClass, + urlTemplate, + 0, + false, + java.util.Collections.emptySet(), + java.util.Arrays.asList("TABLE", "VIEW", "MATERIALIZED VIEW", "SYSTEM TABLE", "SYSTEM VIEW") + ).buildUrl(params); + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/QueryPageOptions.java b/agents/common/src/main/java/com/dbx/agent/QueryPageOptions.java new file mode 100644 index 0000000..293c7aa --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/QueryPageOptions.java @@ -0,0 +1,82 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class QueryPageOptions { + private int pageSize; + private Integer fetchSize; + private int maxRows; + private int timeoutSecs; + + public QueryPageOptions() { + this(100, null, JdbcExecutor.DEFAULT_MAX_ROWS, 0); + } + + public QueryPageOptions(int pageSize, Integer fetchSize, int maxRows) { + this(pageSize, fetchSize, maxRows, 0); + } + + public QueryPageOptions(int pageSize, Integer fetchSize, int maxRows, int timeoutSecs) { + this.pageSize = pageSize; + this.fetchSize = fetchSize; + this.maxRows = maxRows; + this.timeoutSecs = timeoutSecs; + } + + public int getPageSize() { + return pageSize; + } + + public Integer getFetchSize() { + return fetchSize; + } + + public int getMaxRows() { + return maxRows; + } + + public int getTimeoutSecs() { + return timeoutSecs; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public void setFetchSize(Integer fetchSize) { + this.fetchSize = fetchSize; + } + + public void setMaxRows(int maxRows) { + this.maxRows = maxRows; + } + + public void setTimeoutSecs(int timeoutSecs) { + this.timeoutSecs = timeoutSecs; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof QueryPageOptions)) return false; + QueryPageOptions that = (QueryPageOptions) other; + return pageSize == that.pageSize + && maxRows == that.maxRows + && timeoutSecs == that.timeoutSecs + && Objects.equals(fetchSize, that.fetchSize); + } + + @Override + public int hashCode() { + return Objects.hash(pageSize, fetchSize, maxRows, timeoutSecs); + } + + @Override + public String toString() { + return "QueryPageOptions(pageSize=" + pageSize + + ", fetchSize=" + fetchSize + + ", maxRows=" + maxRows + + ", timeoutSecs=" + timeoutSecs + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/QueryPageParams.java b/agents/common/src/main/java/com/dbx/agent/QueryPageParams.java new file mode 100644 index 0000000..a0ab76b --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/QueryPageParams.java @@ -0,0 +1,90 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class QueryPageParams { + private String sql; + private String schema; + private Integer pageSize; + private Integer fetchSize; + private Integer maxRows; + + public QueryPageParams() { + this("", null, null, null, null); + } + + public QueryPageParams(String sql, String schema, Integer pageSize, Integer fetchSize, Integer maxRows) { + this.sql = sql; + this.schema = schema; + this.pageSize = pageSize; + this.fetchSize = fetchSize; + this.maxRows = maxRows; + } + + public String getSql() { + return sql; + } + + public String getSchema() { + return schema; + } + + public Integer getPageSize() { + return pageSize; + } + + public Integer getFetchSize() { + return fetchSize; + } + + public Integer getMaxRows() { + return maxRows; + } + + public void setSql(String sql) { + this.sql = sql; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public void setFetchSize(Integer fetchSize) { + this.fetchSize = fetchSize; + } + + public void setMaxRows(Integer maxRows) { + this.maxRows = maxRows; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof QueryPageParams)) return false; + QueryPageParams that = (QueryPageParams) other; + return Objects.equals(sql, that.sql) + && Objects.equals(schema, that.schema) + && Objects.equals(pageSize, that.pageSize) + && Objects.equals(fetchSize, that.fetchSize) + && Objects.equals(maxRows, that.maxRows); + } + + @Override + public int hashCode() { + return Objects.hash(sql, schema, pageSize, fetchSize, maxRows); + } + + @Override + public String toString() { + return "QueryPageParams(sql=" + sql + + ", schema=" + schema + + ", pageSize=" + pageSize + + ", fetchSize=" + fetchSize + + ", maxRows=" + maxRows + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/QueryPageResult.java b/agents/common/src/main/java/com/dbx/agent/QueryPageResult.java new file mode 100644 index 0000000..051cb0a --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/QueryPageResult.java @@ -0,0 +1,163 @@ +package com.dbx.agent; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public final class QueryPageResult { + private List columns; + private List column_types; + private List> rows; + private long affected_rows; + private long execution_time_ms; + private boolean truncated; + private String session_id; + private boolean has_more; + + public QueryPageResult() { + this(Collections.emptyList(), Collections.emptyList(), 0L, 0L, false, null, false); + } + + public QueryPageResult(List columns, List> rows, long affected_rows, long execution_time_ms) { + this(columns, rows, affected_rows, execution_time_ms, false, null, false); + } + + public QueryPageResult( + List columns, + List> rows, + long affected_rows, + long execution_time_ms, + boolean truncated + ) { + this(columns, rows, affected_rows, execution_time_ms, truncated, null, false); + } + + public QueryPageResult( + List columns, + List> rows, + long affected_rows, + long execution_time_ms, + boolean truncated, + String session_id, + boolean has_more + ) { + this(columns, null, rows, affected_rows, execution_time_ms, truncated, session_id, has_more); + } + + public QueryPageResult( + List columns, + List column_types, + List> rows, + long affected_rows, + long execution_time_ms, + boolean truncated, + String session_id, + boolean has_more + ) { + this.columns = columns == null ? Collections.emptyList() : columns; + this.column_types = column_types == null ? Collections.emptyList() : column_types; + this.rows = QueryResult.normalizeRows(rows); + this.affected_rows = affected_rows; + this.execution_time_ms = execution_time_ms; + this.truncated = truncated; + this.session_id = session_id; + this.has_more = has_more; + } + + public List getColumns() { + return columns; + } + + public List getColumn_types() { + return column_types; + } + + public List> getRows() { + return rows; + } + + public long getAffected_rows() { + return affected_rows; + } + + public long getExecution_time_ms() { + return execution_time_ms; + } + + public boolean getTruncated() { + return truncated; + } + + public String getSession_id() { + return session_id; + } + + public boolean getHas_more() { + return has_more; + } + + public void setColumns(List columns) { + this.columns = columns; + } + + public void setColumn_types(List column_types) { + this.column_types = column_types; + } + + public void setRows(List> rows) { + this.rows = rows; + } + + public void setAffected_rows(long affected_rows) { + this.affected_rows = affected_rows; + } + + public void setExecution_time_ms(long execution_time_ms) { + this.execution_time_ms = execution_time_ms; + } + + public void setTruncated(boolean truncated) { + this.truncated = truncated; + } + + public void setSession_id(String session_id) { + this.session_id = session_id; + } + + public void setHas_more(boolean has_more) { + this.has_more = has_more; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof QueryPageResult)) return false; + QueryPageResult that = (QueryPageResult) other; + return affected_rows == that.affected_rows + && execution_time_ms == that.execution_time_ms + && truncated == that.truncated + && has_more == that.has_more + && Objects.equals(columns, that.columns) + && Objects.equals(column_types, that.column_types) + && Objects.equals(rows, that.rows) + && Objects.equals(session_id, that.session_id); + } + + @Override + public int hashCode() { + return Objects.hash(columns, column_types, rows, affected_rows, execution_time_ms, truncated, session_id, has_more); + } + + @Override + public String toString() { + return "QueryPageResult(columns=" + columns + + ", column_types=" + column_types + + ", rows=" + rows + + ", affected_rows=" + affected_rows + + ", execution_time_ms=" + execution_time_ms + + ", truncated=" + truncated + + ", session_id=" + session_id + + ", has_more=" + has_more + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/QueryResult.java b/agents/common/src/main/java/com/dbx/agent/QueryResult.java new file mode 100644 index 0000000..c38881a --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/QueryResult.java @@ -0,0 +1,137 @@ +package com.dbx.agent; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +public final class QueryResult { + private List columns; + private List column_types; + private List> rows; + private long affected_rows; + private long execution_time_ms; + private boolean truncated; + + public QueryResult() { + this(Collections.emptyList(), Collections.emptyList(), 0L, 0L, false); + } + + public QueryResult(List columns, List> rows, long affected_rows, long execution_time_ms) { + this(columns, rows, affected_rows, execution_time_ms, false); + } + + public QueryResult( + List columns, + List> rows, + long affected_rows, + long execution_time_ms, + boolean truncated + ) { + this(columns, null, rows, affected_rows, execution_time_ms, truncated); + } + + public QueryResult( + List columns, + List column_types, + List> rows, + long affected_rows, + long execution_time_ms, + boolean truncated + ) { + this.columns = columns == null ? Collections.emptyList() : columns; + this.column_types = column_types == null ? Collections.emptyList() : column_types; + this.rows = normalizeRows(rows); + this.affected_rows = affected_rows; + this.execution_time_ms = execution_time_ms; + this.truncated = truncated; + } + + public List getColumns() { + return columns; + } + + public List getColumn_types() { + return column_types; + } + + public List> getRows() { + return rows; + } + + public long getAffected_rows() { + return affected_rows; + } + + public long getExecution_time_ms() { + return execution_time_ms; + } + + public boolean getTruncated() { + return truncated; + } + + public void setColumns(List columns) { + this.columns = columns; + } + + public void setColumn_types(List column_types) { + this.column_types = column_types; + } + + public void setRows(List> rows) { + this.rows = rows; + } + + public void setAffected_rows(long affected_rows) { + this.affected_rows = affected_rows; + } + + public void setExecution_time_ms(long execution_time_ms) { + this.execution_time_ms = execution_time_ms; + } + + public void setTruncated(boolean truncated) { + this.truncated = truncated; + } + + static List> normalizeRows(List> input) { + if (input == null) { + return Collections.emptyList(); + } + List> normalized = new ArrayList<>(input.size()); + for (List row : input) { + normalized.add(row == null ? Collections.emptyList() : new ArrayList(row)); + } + return normalized; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof QueryResult)) return false; + QueryResult that = (QueryResult) other; + return affected_rows == that.affected_rows + && execution_time_ms == that.execution_time_ms + && truncated == that.truncated + && Objects.equals(columns, that.columns) + && Objects.equals(column_types, that.column_types) + && Objects.equals(rows, that.rows); + } + + @Override + public int hashCode() { + return Objects.hash(columns, column_types, rows, affected_rows, execution_time_ms, truncated); + } + + @Override + public String toString() { + return "QueryResult(columns=" + columns + + ", column_types=" + column_types + + ", rows=" + rows + + ", affected_rows=" + affected_rows + + ", execution_time_ms=" + execution_time_ms + + ", truncated=" + truncated + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/SchemaTableParams.java b/agents/common/src/main/java/com/dbx/agent/SchemaTableParams.java new file mode 100644 index 0000000..fc389c6 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/SchemaTableParams.java @@ -0,0 +1,51 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class SchemaTableParams { + private String schema; + private String table; + + public SchemaTableParams() { + this("", ""); + } + + public SchemaTableParams(String schema, String table) { + this.schema = schema; + this.table = table; + } + + public String getSchema() { + return schema; + } + + public String getTable() { + return table; + } + + public void setSchema(String schema) { + this.schema = schema; + } + + public void setTable(String table) { + this.table = table; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof SchemaTableParams)) return false; + SchemaTableParams that = (SchemaTableParams) other; + return Objects.equals(schema, that.schema) && Objects.equals(table, that.table); + } + + @Override + public int hashCode() { + return Objects.hash(schema, table); + } + + @Override + public String toString() { + return "SchemaTableParams(schema=" + schema + ", table=" + table + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/StandardJdbcMetadata.java b/agents/common/src/main/java/com/dbx/agent/StandardJdbcMetadata.java new file mode 100644 index 0000000..9a6eada --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/StandardJdbcMetadata.java @@ -0,0 +1,716 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class StandardJdbcMetadata { + public static final StandardJdbcMetadata INSTANCE = new StandardJdbcMetadata(); + + private StandardJdbcMetadata() { + } + + public List listDatabases(Connection conn, String configuredDatabase) { + return unchecked(() -> { + Set names = new LinkedHashSet<>(); + try { + try (ResultSet rs = conn.getMetaData().getCatalogs()) { + while (rs.next()) { + addNonBlank(names, rs.getString("TABLE_CAT")); + } + } + } catch (Exception ignored) { + } + addNonBlank(names, configuredDatabase); + addNonBlank(names, conn.getCatalog()); + + List result = new ArrayList<>(); + for (String name : names) { + result.add(new DatabaseInfo(name)); + } + return result; + }); + } + + public List listSchemas(Connection conn, JdbcAgentProfile profile) { + return unchecked(() -> { + Set names = new LinkedHashSet<>(); + DatabaseMetaData meta = conn.getMetaData(); + try { + appendSchemas(names, meta.getSchemas(null, null)); + } catch (Exception | AbstractMethodError first) { + try { + appendSchemas(names, meta.getSchemas()); + } catch (Exception | AbstractMethodError ignored) { + } + } + try { + addNonBlank(names, conn.getSchema()); + } catch (Exception | AbstractMethodError ignored) { + } + + List result = new ArrayList<>(); + for (String name : names) { + if (!profile.getExcludedSchemas().contains(name.toUpperCase(Locale.ROOT))) { + result.add(name); + } + } + Collections.sort(result); + return result; + }); + } + + public List listTables(Connection conn, JdbcAgentProfile profile, String configuredDatabase, String schema) { + return listTables(conn, profile, configuredDatabase, schema, MetadataListConstraints.NONE); + } + + public List listTables( + Connection conn, + JdbcAgentProfile profile, + String configuredDatabase, + String schema, + MetadataListConstraints constraints + ) { + return unchecked(() -> { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (!normalized.includesTableLikeTypes()) { + return Collections.emptyList(); + } + DatabaseMetaData meta = conn.getMetaData(); + List result = new ArrayList<>(); + appendTables(result, meta, profile, null, schema, normalized); + if (result.isEmpty() && profile.getCatalogFallbackEnabled() && !configuredDatabase.trim().isEmpty()) { + appendTables(result, meta, profile, configuredDatabase, schema, normalized); + } + result.sort(Comparator.comparing(TableInfo::getName)); + return normalized.filterTables(result); + }); + } + + public List listObjects(List tables, String schema) { + return listObjects(tables, schema, MetadataListConstraints.NONE); + } + + public List listObjects(List tables, String schema, MetadataListConstraints constraints) { + List result = new ArrayList<>(); + for (TableInfo table : tables) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + return MetadataListConstraints.orNone(constraints).filterObjects(result); + } + + public List listObjects( + Connection conn, + JdbcAgentProfile profile, + String configuredDatabase, + String schema, + MetadataListConstraints constraints + ) { + return unchecked(() -> { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + MetadataListConstraints tableConstraints = + new MetadataListConstraints(normalized.getFilter(), null, null, normalized.getObjectTypes()); + List result = new ArrayList<>( + listObjects(listTables(conn, profile, configuredDatabase, schema, tableConstraints), schema) + ); + DatabaseMetaData meta = conn.getMetaData(); + appendRoutines(result, meta, null, blankToNull(schema), schema); + if (!containsRoutine(result) + && profile.getCatalogFallbackEnabled() + && configuredDatabase != null + && !configuredDatabase.trim().isEmpty()) { + appendRoutines(result, meta, configuredDatabase, blankToNull(schema), schema); + } + result.sort(Comparator.comparing(ObjectInfo::getName)); + return normalized.filterObjects(result); + }); + } + + public List listDataTypes(Connection conn) { + return unchecked(() -> { + Set seen = new LinkedHashSet<>(); + List names = new ArrayList<>(); + try (ResultSet rs = conn.getMetaData().getTypeInfo()) { + while (rs.next()) { + String name = rs.getString("TYPE_NAME"); + if (name == null || name.trim().isEmpty()) { + continue; + } + String trimmed = name.trim(); + if (seen.add(trimmed.toLowerCase(Locale.ROOT))) { + names.add(trimmed); + } + } + } + return names; + }); + } + + public CompletionAssistantResponse completionAssistantSearch( + Connection conn, + JdbcAgentProfile profile, + String configuredDatabase, + CompletionAssistantRequest request + ) { + return unchecked(() -> { + int limit = boundedLimit(request.getMax_results()); + List candidates = new ArrayList<>(); + List kinds = normalizedObjectKinds(request); + DatabaseMetaData meta = conn.getMetaData(); + String catalog = blankToNull(request.getDatabase()); + String schema = completionSchema(request); + + if (containsKind(kinds, CompletionAssistantObjectKind.SCHEMA)) { + appendCompletionSchemas(candidates, meta, profile, request, limit); + } + if (candidates.size() < limit && containsTableLike(kinds)) { + appendCompletionTables(candidates, meta, profile, catalog, schema, request, kinds, limit); + if (candidates.isEmpty() && profile.getCatalogFallbackEnabled() && configuredDatabase != null && !configuredDatabase.trim().isEmpty()) { + appendCompletionTables(candidates, meta, profile, configuredDatabase, schema, request, kinds, limit); + } + } + if (candidates.size() < limit && containsKind(kinds, CompletionAssistantObjectKind.COLUMN)) { + appendCompletionColumns(candidates, meta, catalog, schema, request, limit); + if (candidates.isEmpty() && profile.getCatalogFallbackEnabled() && configuredDatabase != null && !configuredDatabase.trim().isEmpty()) { + appendCompletionColumns(candidates, meta, configuredDatabase, schema, request, limit); + } + } + + return new CompletionAssistantResponse(candidates, candidates.size() >= limit, false); + }); + } + + public List getColumns(Connection conn, JdbcAgentProfile profile, String configuredDatabase, String schema, String table) { + return unchecked(() -> { + DatabaseMetaData meta = conn.getMetaData(); + Set primaryKeys = primaryKeys(meta, null, schema, table); + List result = new ArrayList<>(); + appendColumns(result, meta, null, schema, table, primaryKeys); + if (!result.isEmpty() && primaryKeys.isEmpty() && profile.getCatalogFallbackEnabled() && hasConfiguredDatabase(configuredDatabase)) { + Set fallbackPrimaryKeys = primaryKeys(meta, configuredDatabase, schema, table); + markPrimaryKeys(result, fallbackPrimaryKeys); + } + if (result.isEmpty() && profile.getCatalogFallbackEnabled() && hasConfiguredDatabase(configuredDatabase)) { + Set fallbackPrimaryKeys = primaryKeys(meta, configuredDatabase, schema, table); + appendColumns(result, meta, configuredDatabase, schema, table, fallbackPrimaryKeys); + } + return result; + }); + } + + public List listIndexes(Connection conn, String schema, String table) { + return unchecked(() -> { + DatabaseMetaData meta = conn.getMetaData(); + Map> indexes = new LinkedHashMap<>(); + Map unique = new LinkedHashMap<>(); + try (ResultSet rs = meta.getIndexInfo(null, blankToNull(schema), table, false, false)) { + while (rs.next()) { + String name = rs.getString("INDEX_NAME"); + String column = rs.getString("COLUMN_NAME"); + if (name == null || column == null) { + continue; + } + indexes.computeIfAbsent(name, ignored -> new ArrayList<>()).add( + new IndexColumn(rs.getShort("ORDINAL_POSITION"), column) + ); + unique.put(name, !rs.getBoolean("NON_UNIQUE")); + } + } + + List result = new ArrayList<>(); + for (Map.Entry> entry : indexes.entrySet()) { + List orderedColumns = entry.getValue(); + orderedColumns.sort(Comparator.comparingInt(IndexColumn::getOrdinal)); + List columns = new ArrayList<>(); + for (IndexColumn column : orderedColumns) { + columns.add(column.getName()); + } + String name = entry.getKey(); + result.add(new IndexInfo( + name, + columns, + Boolean.TRUE.equals(unique.get(name)), + "PRIMARY".equalsIgnoreCase(name), + null, + null, + null, + null + )); + } + return result; + }); + } + + public List listForeignKeys(Connection conn, String schema, String table) { + return unchecked(() -> { + DatabaseMetaData meta = conn.getMetaData(); + List result = new ArrayList<>(); + try (ResultSet rs = meta.getImportedKeys(null, blankToNull(schema), table)) { + while (rs.next()) { + String name = rs.getString("FK_NAME"); + result.add(new ForeignKeyInfo( + name == null ? "" : name, + rs.getString("FKCOLUMN_NAME"), + rs.getString("PKTABLE_NAME"), + rs.getString("PKCOLUMN_NAME") + )); + } + } + return result; + }); + } + + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + private static String[] getDriverTableTypes(DatabaseMetaData meta, JdbcAgentProfile profile) throws Exception { + Set configuredTypes = new LinkedHashSet<>(); + for (String type : profile.getTableTypes()) { + if (type != null) { + configuredTypes.add(type.toUpperCase(Locale.ROOT)); + } + } + try (ResultSet rs = meta.getTableTypes()) { + List types = new ArrayList<>(); + while (rs.next()) { + String type = rs.getString("TABLE_TYPE"); + if (type != null && configuredTypes.contains(type.toUpperCase(Locale.ROOT))) { + types.add(type); + } + } + if (!types.isEmpty()) { + return types.toArray(new String[0]); + } + } catch (Exception ignored) { + } + return profile.getTableTypes().toArray(new String[profile.getTableTypes().size()]); + } + + public static String getIdentifierQuote(Connection conn, JdbcAgentProfile profile) { + try { + String quote = conn.getMetaData().getIdentifierQuoteString(); + if (quote != null && !quote.trim().isEmpty()) { + return quote.trim(); + } + } catch (Exception ignored) { + } + return profile.getIdentifierQuote(); + } + + public static String quoteIdentifier(String identifier, String quote) { + return quote + identifier.replace(quote, quote + quote) + quote; + } + + public static String schemaSwitchSql(Connection conn, JdbcAgentProfile profile, String schema) { + if (profile.getSkipExecutionContext()) { + return profile.schemaSwitchSql(schema); + } + String quote = getIdentifierQuote(conn, profile); + return profile.schemaSwitchSql(schema, quote); + } + + private void appendTables( + List result, + DatabaseMetaData meta, + JdbcAgentProfile profile, + String catalog, + String schema, + MetadataListConstraints constraints + ) throws Exception { + String[] tableTypes = constrainedTableTypes(getDriverTableTypes(meta, profile), constraints); + if (tableTypes.length == 0) { + return; + } + // JDBC has no portable metadata limit/offset. Use table types for safe pushdown and filter/page locally. + try (ResultSet rs = meta.getTables(catalog, blankToNull(schema), "%", tableTypes)) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("TABLE_NAME"), + normalizeTableType(rs.getString("TABLE_TYPE")), + rs.getString("REMARKS") + )); + } + } + } + + private static String[] constrainedTableTypes(String[] tableTypes, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (!normalized.hasObjectTypes()) { + return tableTypes; + } + List result = new ArrayList<>(); + for (String tableType : tableTypes) { + if (normalized.tableTypeAllowed(tableType)) { + result.add(tableType); + } + } + return result.toArray(new String[0]); + } + + private void appendCompletionSchemas( + List result, + DatabaseMetaData meta, + JdbcAgentProfile profile, + CompletionAssistantRequest request, + int limit + ) throws Exception { + Set names = new LinkedHashSet<>(); + try { + appendSchemas(names, meta.getSchemas(null, null)); + } catch (Exception | AbstractMethodError first) { + try { + appendSchemas(names, meta.getSchemas()); + } catch (Exception | AbstractMethodError ignored) { + } + } + List sorted = new ArrayList<>(names); + Collections.sort(sorted); + for (String name : sorted) { + if (result.size() >= limit) { + return; + } + if (profile.getExcludedSchemas().contains(name.toUpperCase(Locale.ROOT)) || !completionNameMatches(name, request)) { + continue; + } + result.add(new CompletionAssistantCandidate( + name, + CompletionAssistantCandidateKind.SCHEMA, + request.getDatabase(), + name, + null, + null, + null, + null + )); + } + } + + private void appendCompletionTables( + List result, + DatabaseMetaData meta, + JdbcAgentProfile profile, + String catalog, + String schema, + CompletionAssistantRequest request, + List kinds, + int limit + ) throws Exception { + String[] tableTypes = getDriverTableTypes(meta, profile); + try (ResultSet rs = meta.getTables(catalog, blankToNull(schema), completionPattern(request), tableTypes)) { + while (rs.next() && result.size() < limit) { + String name = rs.getString("TABLE_NAME"); + String type = normalizeTableType(rs.getString("TABLE_TYPE")); + CompletionAssistantCandidateKind kind = completionTableKind(type); + if (!completionTableKindAllowed(kind, kinds) || !completionNameMatches(name, request)) { + continue; + } + result.add(new CompletionAssistantCandidate( + name, + kind, + request.getDatabase(), + schema, + null, + null, + rs.getString("REMARKS"), + null + )); + } + } + result.sort(Comparator.comparing(CompletionAssistantCandidate::getName)); + } + + private void appendCompletionColumns( + List result, + DatabaseMetaData meta, + String catalog, + String schema, + CompletionAssistantRequest request, + int limit + ) throws Exception { + String table = request.getParent_name(); + if (table == null || table.trim().isEmpty()) { + return; + } + try (ResultSet rs = meta.getColumns(catalog, blankToNull(schema), table, completionPattern(request))) { + while (rs.next() && result.size() < limit) { + String name = rs.getString("COLUMN_NAME"); + if (!completionNameMatches(name, request)) { + continue; + } + result.add(new CompletionAssistantCandidate( + name, + CompletionAssistantCandidateKind.COLUMN, + request.getDatabase(), + schema, + schema, + table, + rs.getString("REMARKS"), + rs.getString("TYPE_NAME") + )); + } + } + } + + private static List normalizedObjectKinds(CompletionAssistantRequest request) { + List kinds = request.getObject_kinds(); + if (kinds.isEmpty()) { + kinds = new ArrayList<>(); + kinds.add(CompletionAssistantObjectKind.TABLE); + kinds.add(CompletionAssistantObjectKind.VIEW); + } + return kinds; + } + + private static String completionSchema(CompletionAssistantRequest request) { + String parentSchema = request.getParent_schema(); + if (parentSchema != null && !parentSchema.trim().isEmpty()) { + return parentSchema; + } + return request.getSchema(); + } + + private static String completionPattern(CompletionAssistantRequest request) { + String mask = request.getMask(); + if (mask.trim().isEmpty()) { + return "%"; + } + String escaped = mask.replace("\\", "\\\\").replace("%", "\\%").replace("_", "\\_"); + if (request.getMatch_mode() == CompletionAssistantMatchMode.CONTAINS) { + return "%" + escaped + "%"; + } + return escaped + "%"; + } + + private static boolean completionNameMatches(String name, CompletionAssistantRequest request) { + if (name == null) { + return false; + } + String mask = request.getMask(); + if (mask.trim().isEmpty()) { + return true; + } + String candidate = request.getCase_sensitive() ? name : name.toLowerCase(Locale.ROOT); + String expected = request.getCase_sensitive() ? mask : mask.toLowerCase(Locale.ROOT); + if (request.getMatch_mode() == CompletionAssistantMatchMode.CONTAINS) { + return candidate.contains(expected); + } + return candidate.startsWith(expected); + } + + private static int boundedLimit(Integer requested) { + if (requested == null) { + return 100; + } + return Math.max(1, Math.min(1000, requested)); + } + + private static boolean containsKind(List kinds, CompletionAssistantObjectKind kind) { + return kinds.contains(kind); + } + + private static boolean containsTableLike(List kinds) { + return kinds.contains(CompletionAssistantObjectKind.TABLE) || kinds.contains(CompletionAssistantObjectKind.VIEW); + } + + private static CompletionAssistantCandidateKind completionTableKind(String type) { + if ("VIEW".equalsIgnoreCase(type)) { + return CompletionAssistantCandidateKind.VIEW; + } + return CompletionAssistantCandidateKind.TABLE; + } + + private static boolean completionTableKindAllowed( + CompletionAssistantCandidateKind kind, + List requestedKinds + ) { + if (kind == CompletionAssistantCandidateKind.VIEW) { + return requestedKinds.contains(CompletionAssistantObjectKind.VIEW); + } + return requestedKinds.contains(CompletionAssistantObjectKind.TABLE); + } + + private Set primaryKeys(DatabaseMetaData meta, String catalog, String schema, String table) { + Set keys = new LinkedHashSet<>(); + try (ResultSet rs = meta.getPrimaryKeys(catalog, blankToNull(schema), table)) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + if (name != null) { + keys.add(name); + } + } + } catch (Exception ignored) { + } + return keys; + } + + private static boolean hasConfiguredDatabase(String configuredDatabase) { + return configuredDatabase != null && !configuredDatabase.trim().isEmpty(); + } + + private static void markPrimaryKeys(List columns, Set primaryKeys) { + if (primaryKeys.isEmpty()) { + return; + } + for (ColumnInfo column : columns) { + if (primaryKeys.contains(column.getName())) { + column.setIs_primary_key(true); + } + } + } + + private static void appendSchemas(Set names, ResultSet rs) throws Exception { + try (ResultSet closeable = rs) { + while (closeable.next()) { + addNonBlank(names, closeable.getString("TABLE_SCHEM")); + } + } + } + + private void appendColumns( + List result, + DatabaseMetaData meta, + String catalog, + String schema, + String table, + Set primaryKeys + ) throws Exception { + try (ResultSet rs = meta.getColumns(catalog, blankToNull(schema), table, "%")) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + name, + rs.getString("TYPE_NAME"), + rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls, + rs.getString("COLUMN_DEF"), + primaryKeys.contains(name), + null, + rs.getString("REMARKS"), + intOrNull(rs, "COLUMN_SIZE"), + intOrNull(rs, "DECIMAL_DIGITS"), + characterLength(rs) + )); + } + } + } + + private static String normalizeTableType(String type) { + if (type == null || type.trim().isEmpty()) { + return "TABLE"; + } + String normalized = type.toUpperCase(Locale.ROOT); + if ("BASE TABLE".equals(normalized) || "COLUMN TABLE".equals(normalized) || "ROW TABLE".equals(normalized)) { + return "TABLE"; + } + return type; + } + + private static void appendRoutines( + List result, + DatabaseMetaData meta, + String catalog, + String schemaPattern, + String schema + ) { + Set procedureNames = new LinkedHashSet<>(); + try (ResultSet rs = meta.getProcedures(catalog, schemaPattern, "%")) { + while (rs.next()) { + String name = rs.getString("PROCEDURE_NAME"); + if (name != null && !name.trim().isEmpty()) { + procedureNames.add(name); + result.add(new ObjectInfo(name, "PROCEDURE", schema, rs.getString("REMARKS"))); + } + } + } catch (Exception | AbstractMethodError ignored) { + // Some JDBC drivers don't implement routine metadata. + } + try (ResultSet rs = meta.getFunctions(catalog, schemaPattern, "%")) { + while (rs.next()) { + String name = rs.getString("FUNCTION_NAME"); + if (name != null && !name.trim().isEmpty() && !procedureNames.contains(name)) { + result.add(new ObjectInfo(name, "FUNCTION", schema, rs.getString("REMARKS"))); + } + } + } catch (Exception | AbstractMethodError ignored) { + // Some JDBC drivers don't implement function metadata separately. + } + } + + private static boolean containsRoutine(List objects) { + for (ObjectInfo object : objects) { + if ("PROCEDURE".equalsIgnoreCase(object.getObject_type()) + || "FUNCTION".equalsIgnoreCase(object.getObject_type())) { + return true; + } + } + return false; + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static Integer characterLength(ResultSet rs) throws Exception { + String typeName = rs.getString("TYPE_NAME"); + if (typeName == null) { + return null; + } + String normalized = typeName.toLowerCase(Locale.ROOT); + if (!normalized.contains("char") && !normalized.contains("text")) { + return null; + } + return intOrNull(rs, "COLUMN_SIZE"); + } + + private static String blankToNull(String value) { + return value == null || value.trim().isEmpty() ? null : value; + } + + private static void addNonBlank(Set values, String value) { + if (value != null && !value.trim().isEmpty()) { + values.add(value); + } + } + + private static T unchecked(ThrowingSupplier supplier) { + try { + return supplier.get(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static final class IndexColumn { + private final int ordinal; + private final String name; + + private IndexColumn(int ordinal, String name) { + this.ordinal = ordinal; + this.name = name; + } + + private int getOrdinal() { + return ordinal; + } + + private String getName() { + return name; + } + } + + private interface ThrowingSupplier { + T get() throws Exception; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/TableInfo.java b/agents/common/src/main/java/com/dbx/agent/TableInfo.java new file mode 100644 index 0000000..0b38595 --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/TableInfo.java @@ -0,0 +1,98 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class TableInfo { + private String name; + private String table_type; + private String comment; + private String parent_schema; + private String parent_name; + + public TableInfo() { + this("", "", null); + } + + public TableInfo(String name, String table_type) { + this(name, table_type, null); + } + + public TableInfo(String name, String table_type, String comment) { + this(name, table_type, comment, null, null); + } + + public TableInfo(String name, String table_type, String comment, String parent_schema, String parent_name) { + this.name = name; + this.table_type = table_type; + this.comment = comment; + this.parent_schema = parent_schema; + this.parent_name = parent_name; + } + + public String getName() { + return name; + } + + public String getTable_type() { + return table_type; + } + + public String getComment() { + return comment; + } + + public String getParent_schema() { + return parent_schema; + } + + public String getParent_name() { + return parent_name; + } + + public void setName(String name) { + this.name = name; + } + + public void setTable_type(String table_type) { + this.table_type = table_type; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public void setParent_schema(String parent_schema) { + this.parent_schema = parent_schema; + } + + public void setParent_name(String parent_name) { + this.parent_name = parent_name; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof TableInfo)) return false; + TableInfo that = (TableInfo) other; + return Objects.equals(name, that.name) + && Objects.equals(table_type, that.table_type) + && Objects.equals(comment, that.comment) + && Objects.equals(parent_schema, that.parent_schema) + && Objects.equals(parent_name, that.parent_name); + } + + @Override + public int hashCode() { + return Objects.hash(name, table_type, comment, parent_schema, parent_name); + } + + @Override + public String toString() { + return "TableInfo(name=" + name + + ", table_type=" + table_type + + ", comment=" + comment + + ", parent_schema=" + parent_schema + + ", parent_name=" + parent_name + + ")"; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/TransactionExecutor.java b/agents/common/src/main/java/com/dbx/agent/TransactionExecutor.java new file mode 100644 index 0000000..2bd12ed --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/TransactionExecutor.java @@ -0,0 +1,112 @@ +package com.dbx.agent; + +import java.sql.Connection; +import java.sql.Statement; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +public final class TransactionExecutor { + private TransactionExecutor() { + } + + public static QueryResult executeUpdateStatements( + Connection conn, + List statements, + String schema, + Function setSchemaSql + ) { + return executeStatements(conn, statements, schema, setSchemaSql, new StatementRunner() { + @Override + public long run(Statement stmt, String sql) throws Exception { + return stmt.executeUpdate(sql); + } + }); + } + + public static QueryResult executeStatements( + Connection conn, + List statements, + String schema, + Function setSchemaSql, + StatementRunner runner + ) { + return unchecked(() -> { + long start = System.currentTimeMillis(); + if (!supportsTransactions(conn)) { + long totalAffected = executeAll(conn, statements, schema, setSchemaSql, runner); + return result(totalAffected, start); + } + + boolean savedAutoCommit = conn.getAutoCommit(); + conn.setAutoCommit(false); + try { + long totalAffected = executeAll(conn, statements, schema, setSchemaSql, runner); + conn.commit(); + return result(totalAffected, start); + } catch (Exception e) { + conn.rollback(); + throw e; + } finally { + conn.setAutoCommit(savedAutoCommit); + } + }); + } + + private static long executeAll( + Connection conn, + List statements, + String schema, + Function setSchemaSql, + StatementRunner runner + ) throws Exception { + applySchema(conn, schema, setSchemaSql); + long totalAffected = 0; + for (String statement : statements) { + try (Statement stmt = conn.createStatement()) { + totalAffected += runner.run(stmt, JdbcExecutor.trimSql(statement)); + } + } + return totalAffected; + } + + private static void applySchema(Connection conn, String schema, Function setSchemaSql) throws Exception { + JdbcSchemaSwitcher.apply(conn, schema, setSchemaSql); + } + + private static boolean supportsTransactions(Connection conn) { + try { + return conn.getMetaData().supportsTransactions(); + } catch (Exception ignored) { + return true; + } + } + + private static QueryResult result(long totalAffected, long start) { + return new QueryResult( + Collections.emptyList(), + Collections.emptyList(), + totalAffected, + System.currentTimeMillis() - start, + false + ); + } + + private static T unchecked(ThrowingSupplier supplier) { + try { + return supplier.get(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public interface StatementRunner { + long run(Statement stmt, String sql) throws Exception; + } + + private interface ThrowingSupplier { + T get() throws Exception; + } +} diff --git a/agents/common/src/main/java/com/dbx/agent/TriggerInfo.java b/agents/common/src/main/java/com/dbx/agent/TriggerInfo.java new file mode 100644 index 0000000..490b55a --- /dev/null +++ b/agents/common/src/main/java/com/dbx/agent/TriggerInfo.java @@ -0,0 +1,63 @@ +package com.dbx.agent; + +import java.util.Objects; + +public final class TriggerInfo { + private String name; + private String event; + private String timing; + + public TriggerInfo() { + this("", "", ""); + } + + public TriggerInfo(String name, String event, String timing) { + this.name = name; + this.event = event; + this.timing = timing; + } + + public String getName() { + return name; + } + + public String getEvent() { + return event; + } + + public String getTiming() { + return timing; + } + + public void setName(String name) { + this.name = name; + } + + public void setEvent(String event) { + this.event = event; + } + + public void setTiming(String timing) { + this.timing = timing; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (!(other instanceof TriggerInfo)) return false; + TriggerInfo that = (TriggerInfo) other; + return Objects.equals(name, that.name) + && Objects.equals(event, that.event) + && Objects.equals(timing, that.timing); + } + + @Override + public int hashCode() { + return Objects.hash(name, event, timing); + } + + @Override + public String toString() { + return "TriggerInfo(name=" + name + ", event=" + event + ", timing=" + timing + ")"; + } +} diff --git a/agents/common/src/main/resources/agent-protocol-v1.json b/agents/common/src/main/resources/agent-protocol-v1.json new file mode 100644 index 0000000..c108483 --- /dev/null +++ b/agents/common/src/main/resources/agent-protocol-v1.json @@ -0,0 +1,88 @@ +{ + "protocolVersion": 1, + "handshakeMethod": "handshake", + "handshakeResponseFields": [ + "protocolVersion", + "agentProtocolVersion", + "capabilities" + ], + "allCapabilities": [ + "connect", + "test_connection", + "metadata", + "query", + "paged_query", + "transaction", + "ddl", + "kv" + ], + "capabilities": [ + "connect", + "test_connection", + "metadata", + "query", + "paged_query", + "transaction", + "ddl" + ], + "defaultSqlCapabilities": [ + "connect", + "test_connection", + "metadata", + "query", + "paged_query", + "transaction", + "ddl" + ], + "commonMethods": [ + "handshake", + "connect", + "test_connection", + "validate_connection", + "list_databases", + "list_schemas", + "list_tables", + "list_objects", + "list_data_types", + "completion_assistant_search_v1", + "get_object_source", + "get_table_ddl", + "get_columns", + "list_indexes", + "list_foreign_keys", + "list_triggers", + "execute_query", + "execute_query_page", + "fetch_query_page", + "close_query_session", + "start_table_read", + "fetch_table_read_page", + "close_table_read_session", + "get_explain_info", + "execute_batch", + "execute_transaction", + "disconnect", + "shutdown" + ], + "mongoLegacyMethods": [ + "list_databases", + "list_collections", + "find_documents", + "find_documents_extended_json", + "server_version", + "create_index", + "drop_indexes", + "drop_collection", + "insert_document", + "update_document", + "update_documents", + "delete_document", + "delete_documents" + ], + "kvMethods": [ + "kv_list_prefix", + "kv_get", + "kv_put", + "kv_delete" + ] +} diff --git a/agents/common/src/test/java/com/dbx/agent/AbstractJdbcAgentTest.java b/agents/common/src/test/java/com/dbx/agent/AbstractJdbcAgentTest.java new file mode 100644 index 0000000..2043c63 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/AbstractJdbcAgentTest.java @@ -0,0 +1,481 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class AbstractJdbcAgentTest { + @Test + void ownsConnectionLifecycleAndConnectedState() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + + assertThrows(IllegalStateException.class, () -> agent.executeQuery("SELECT 1", null, new ExecuteQueryOptions())); + + agent.connect(new ConnectParams("localhost", 0, "demo", "user", "secret", "", "", false)); + + assertNotNull(agent.getConnection()); + assertEquals("demo", agent.database()); + assertEquals(1, tracking.openCount); + assertEquals(1, agent.afterConnectCount); + + agent.disconnect(); + + assertNull(agent.getConnection()); + assertEquals(1, tracking.closeCount); + } + + @Test + void testsConnectionsThroughSharedLifecycle() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + + assertTrue(agent.testConnection(new ConnectParams())); + + assertEquals(1, tracking.openCount); + assertEquals(1, tracking.isValidCount); + assertEquals(1, tracking.closeCount); + } + + @Test + void delegatesQueryExecutionWithSchemaAndValueReader() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + QueryResult result = agent.executeQuery("SELECT VALUE", "APP", new ExecuteQueryOptions(25, 7)); + + assertEquals(Collections.singletonList("VALUE"), result.getColumns()); + assertEquals(Collections.singletonList(Collections.singletonList("row-value")), result.getRows()); + assertFalse(result.getTruncated()); + assertEquals(Arrays.asList("execute:USE APP", "setMaxRows:26", "setFetchSize:7", "execute:SELECT VALUE"), tracking.calls); + } + + @Test + void delegatesQueryTimeoutToStatement() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + agent.executeQuery("SELECT VALUE", null, new ExecuteQueryOptions(25, 7, 12)); + + assertEquals(Arrays.asList("setMaxRows:26", "setQueryTimeout:12", "setFetchSize:7", "execute:SELECT VALUE"), tracking.calls); + } + + @Test + void delegatesPagedQueryTimeoutToStatement() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + agent.executeQueryPage("SELECT VALUE", null, new QueryPageOptions(10, 7, 25, 12)); + + assertEquals(Arrays.asList("setQueryTimeout:12", "setFetchSize:7", "execute:SELECT VALUE"), tracking.calls); + } + + @Test + void preservesPlSqlBlockTerminatorDuringQueryExecution() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + agent.executeQuery("BEGIN\n NULL;\nEND;\n/", null, new ExecuteQueryOptions()); + + assertEquals(Arrays.asList("setMaxRows:10001", "execute:BEGIN\n NULL;\nEND;"), tracking.calls); + } + + @Test + void executesTransactionControlSqlThroughStatements() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + // Dump files can contain explicit transaction SQL while the JDBC connection is in auto-commit mode. + agent.executeQuery("BEGIN;", null, new ExecuteQueryOptions()); + agent.executeQuery("BEGIN TRANSACTION;", null, new ExecuteQueryOptions()); + agent.executeQuery("COMMIT;", null, new ExecuteQueryOptions()); + agent.executeQuery("ROLLBACK;", null, new ExecuteQueryOptions()); + + assertEquals( + Arrays.asList( + "setMaxRows:10001", + "execute:BEGIN", + "setMaxRows:10001", + "execute:BEGIN TRANSACTION", + "setMaxRows:10001", + "execute:COMMIT", + "setMaxRows:10001", + "execute:ROLLBACK" + ), + tracking.calls + ); + } + + @Test + void executesPagedTransactionControlSqlThroughStatements() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + agent.executeQueryPage("COMMIT;", null, new QueryPageOptions()); + + assertEquals(Collections.singletonList("execute:COMMIT"), tracking.calls); + } + + @Test + void delegatesTransactionsThroughSharedFoundation() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + QueryResult result = agent.executeTransaction(Arrays.asList("UPDATE A;", "UPDATE B"), "APP"); + + assertEquals(2L, result.getAffected_rows()); + assertEquals( + Arrays.asList( + "setAutoCommit:false", + "execute:USE APP", + "executeUpdate:UPDATE A", + "executeUpdate:UPDATE B", + "commit", + "setAutoCommit:true" + ), + tracking.calls + ); + } + + @Test + void preservesPlSqlBlockTerminatorDuringTransactionExecution() { + TrackingConnection tracking = new TrackingConnection(); + TestAgent agent = new TestAgent(tracking); + agent.connect(new ConnectParams()); + + agent.executeTransaction(Collections.singletonList("DECLARE\n v NUMBER;\nBEGIN\n NULL;\nEND;"), null); + + assertEquals( + Arrays.asList( + "setAutoCommit:false", + "executeUpdate:DECLARE\n v NUMBER;\nBEGIN\n NULL;\nEND;", + "commit", + "setAutoCommit:true" + ), + tracking.calls + ); + } + + @Test + void inheritedDdlFallbackToleratesMissingOptionalMetadata() { + TestAgent agent = new TestAgent(new TrackingConnection()) { + @Override + public List getColumns(String schema, String table) { + return Collections.singletonList(new ColumnInfo("ID", "INTEGER", false, null, true)); + } + + @Override + public List listIndexes(String schema, String table) { + throw new RuntimeException("indexes unavailable"); + } + + @Override + public List listForeignKeys(String schema, String table) { + throw new RuntimeException("foreign keys unavailable"); + } + }; + + assertEquals( + "CREATE TABLE \"APP\".\"ORDERS\" (\n" + + " \"ID\" INTEGER NOT NULL,\n" + + " PRIMARY KEY (\"ID\")\n" + + ");\n", + agent.getTableDdl("APP", "ORDERS") + ); + } + + private static class TestAgent extends AbstractJdbcAgent { + private final TrackingConnection tracking; + private int afterConnectCount; + + private TestAgent(TrackingConnection tracking) { + this.tracking = tracking; + } + + @Override + protected String driverClass() { + return TestAgent.class.getName(); + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return "jdbc:test"; + } + + @Override + protected Connection openConnection(ConnectParams params) { + tracking.openCount += 1; + return tracking.connection(); + } + + @Override + protected void afterConnect(ConnectParams params, Connection connection) { + afterConnectCount += 1; + } + + @Override + public List listDatabases() { + return Collections.emptyList(); + } + + @Override + public List listSchemas() { + return Collections.emptyList(); + } + + @Override + public List listTables(String schema) { + return Collections.emptyList(); + } + + @Override + public List getColumns(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + schema; + } + + private String database() { + return getConfiguredDatabase(); + } + } + + private static final class TrackingConnection { + private final List calls = new ArrayList(); + private int openCount; + private int closeCount; + private int isValidCount; + private boolean autoCommit = true; + + private Connection connection() { + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("createStatement".equals(name)) { + return statement(); + } + if ("getMetaData".equals(name)) { + return databaseMetaData(); + } + if ("isValid".equals(name)) { + isValidCount += 1; + return true; + } + if ("close".equals(name)) { + closeCount += 1; + return null; + } + if ("getAutoCommit".equals(name)) { + return autoCommit; + } + if ("setSchema".equals(name)) { + calls.add("setSchema:" + args[0]); + return null; + } + if ("setCatalog".equals(name)) { + calls.add("setCatalog:" + args[0]); + return null; + } + if ("setAutoCommit".equals(name)) { + autoCommit = (Boolean) args[0]; + calls.add("setAutoCommit:" + args[0]); + return null; + } + if ("commit".equals(name)) { + calls.add("commit"); + return null; + } + if ("rollback".equals(name)) { + calls.add("rollback"); + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private DatabaseMetaData databaseMetaData() { + return proxy(DatabaseMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("supportsTransactions".equals(method.getName())) { + return true; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private Statement statement() { + return proxy(Statement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("execute".equals(name)) { + calls.add("execute:" + args[0]); + return true; + } + if ("getResultSet".equals(name)) { + return resultSet(); + } + if ("getUpdateCount".equals(name)) { + return 1; + } + if ("executeUpdate".equals(name)) { + calls.add("executeUpdate:" + args[0]); + return 1; + } + if ("setMaxRows".equals(name)) { + calls.add("setMaxRows:" + args[0]); + return null; + } + if ("setFetchSize".equals(name)) { + calls.add("setFetchSize:" + args[0]); + return null; + } + if ("setQueryTimeout".equals(name)) { + calls.add("setQueryTimeout:" + args[0]); + return null; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private ResultSet resultSet() { + final int[] index = {-1}; + return proxy(ResultSet.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] == 0; + } + if ("getMetaData".equals(name)) { + return resultSetMetaData(); + } + if ("getString".equals(name)) { + return "row-value"; + } + if ("wasNull".equals(name)) { + return false; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private ResultSetMetaData resultSetMetaData() { + return proxy(ResultSetMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("getColumnCount".equals(name)) { + return 1; + } + if ("getColumnLabel".equals(name)) { + return "VALUE"; + } + if ("getColumnType".equals(name)) { + return Types.VARCHAR; + } + return defaultValue(method.getReturnType()); + } + }); + } + } + + private static T proxy(Class type, final MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/BatchExecutorTest.java b/agents/common/src/test/java/com/dbx/agent/BatchExecutorTest.java new file mode 100644 index 0000000..4500e34 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/BatchExecutorTest.java @@ -0,0 +1,100 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class BatchExecutorTest { + @Test + void executeBatchStatementsUsesJdbcBatch() { + List batchedSql = new ArrayList<>(); + AtomicInteger executeLargeBatchCalls = new AtomicInteger(); + AtomicInteger executeUpdateCalls = new AtomicInteger(); + + Statement statement = statementProxy(batchedSql, executeLargeBatchCalls, executeUpdateCalls); + Connection connection = connectionProxy(statement); + + QueryResult result = BatchExecutor.executeBatchStatements( + connection, + Arrays.asList(" INSERT INTO items VALUES (1); ", "UPDATE items SET name = 'Ada' WHERE id = 1;"), + null, + schema -> null + ); + + assertEquals(Arrays.asList("INSERT INTO items VALUES (1)", "UPDATE items SET name = 'Ada' WHERE id = 1"), batchedSql); + assertEquals(1, executeLargeBatchCalls.get()); + assertEquals(0, executeUpdateCalls.get()); + assertEquals(2L, result.getAffected_rows()); + } + + private static Statement statementProxy( + List batchedSql, + AtomicInteger executeLargeBatchCalls, + AtomicInteger executeUpdateCalls + ) { + InvocationHandler handler = (Object unused, Method method, Object[] args) -> { + switch (method.getName()) { + case "addBatch": + batchedSql.add((String) args[0]); + return null; + case "executeLargeBatch": + executeLargeBatchCalls.incrementAndGet(); + return new long[]{1L, Statement.SUCCESS_NO_INFO}; + case "executeUpdate": + executeUpdateCalls.incrementAndGet(); + throw new AssertionError("executeBatchStatements must not execute statements one by one"); + default: + return defaultValue(method.getReturnType()); + } + }; + return (Statement) Proxy.newProxyInstance(Statement.class.getClassLoader(), new Class[]{Statement.class}, handler); + } + + private static Connection connectionProxy(Statement statement) { + InvocationHandler handler = (Object unused, Method method, Object[] args) -> { + if ("createStatement".equals(method.getName())) { + return statement; + } + return defaultValue(method.getReturnType()); + }; + return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class[]{Connection.class}, handler); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) { + return false; + } + if (type == Byte.TYPE) { + return (byte) 0; + } + if (type == Short.TYPE) { + return (short) 0; + } + if (type == Integer.TYPE) { + return 0; + } + if (type == Long.TYPE) { + return 0L; + } + if (type == Float.TYPE) { + return 0f; + } + if (type == Double.TYPE) { + return 0.0d; + } + if (type == Character.TYPE) { + return '\0'; + } + return null; + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/CommonJavaCompatibilityTest.java b/agents/common/src/test/java/com/dbx/agent/CommonJavaCompatibilityTest.java new file mode 100644 index 0000000..c2bc612 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/CommonJavaCompatibilityTest.java @@ -0,0 +1,764 @@ +package com.dbx.agent; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.junit.jupiter.api.Test; + +import java.sql.Connection; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class CommonJavaCompatibilityTest { + @Test + void definesSharedAgentProtocolContract() { + assertEquals("handshake", AgentProtocol.METHOD_HANDSHAKE); + assertEquals(1, AgentProtocol.PROTOCOL_VERSION); + assertTrue(AgentProtocol.CAPABILITIES.contains(AgentProtocol.CAPABILITY_CONNECT)); + assertTrue(AgentProtocol.CAPABILITIES.contains(AgentProtocol.CAPABILITY_QUERY)); + assertTrue(AgentProtocol.CAPABILITIES.contains(AgentProtocol.CAPABILITY_METADATA)); + } + + @Test + void agentProtocolMatchesContractResource() { + JsonObject contract = protocolContract(); + + assertEquals(AgentProtocol.PROTOCOL_VERSION, contract.get("protocolVersion").getAsInt()); + assertEquals(AgentProtocol.METHOD_HANDSHAKE, contract.get("handshakeMethod").getAsString()); + assertEquals( + Arrays.asList("protocolVersion", "agentProtocolVersion", "capabilities"), + strings(contract.getAsJsonArray("handshakeResponseFields")) + ); + assertEquals(AgentProtocol.ALL_CAPABILITIES, strings(contract.getAsJsonArray("allCapabilities"))); + assertEquals(AgentProtocol.CAPABILITIES, strings(contract.getAsJsonArray("capabilities"))); + assertEquals(AgentProtocol.CAPABILITIES, strings(contract.getAsJsonArray("defaultSqlCapabilities"))); + assertEquals(AgentProtocol.COMMON_METHODS, strings(contract.getAsJsonArray("commonMethods"))); + assertEquals(AgentProtocol.MONGO_LEGACY_METHODS, strings(contract.getAsJsonArray("mongoLegacyMethods"))); + assertEquals(AgentProtocol.KV_METHODS, strings(contract.getAsJsonArray("kvMethods"))); + } + + @Test + void jsonRpcServerExposesProtocolHandshake() { + JsonRpcServer server = new JsonRpcServer(new MinimalAgent()); + + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":7,\"method\":\"" + AgentProtocol.METHOD_HANDSHAKE + "\",\"params\":{\"appVersion\":\"0.5.13\",\"supportedProtocolVersions\":[1]}}" + ); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + JsonObject result = json.getAsJsonObject("result"); + assertEquals("2.0", json.get("jsonrpc").getAsString()); + assertEquals(7, json.get("id").getAsInt()); + assertEquals(1, result.get("protocolVersion").getAsInt()); + assertEquals(1, result.get("agentProtocolVersion").getAsInt()); + assertTrue(containsCapability(result.getAsJsonArray("capabilities"), "connect")); + assertTrue(containsCapability(result.getAsJsonArray("capabilities"), "query")); + assertTrue(containsCapability(result.getAsJsonArray("capabilities"), "metadata")); + } + + @Test + void jsonRpcServerSerializesArbitraryPrecisionNumbersAsStrings() { + JsonRpcServer server = new JsonRpcServer(new PreciseNumberAgent()); + + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":8,\"method\":\"" + AgentProtocol.METHOD_EXECUTE_QUERY + "\",\"params\":{\"sql\":\"select n from t\"}}" + ); + + JsonArray row = JsonParser.parseString(response) + .getAsJsonObject() + .getAsJsonObject("result") + .getAsJsonArray("rows") + .get(0) + .getAsJsonArray(); + assertEquals("12345678901234567890.1234", row.get(0).getAsString()); + assertTrue(row.get(0).getAsJsonPrimitive().isString()); + assertEquals("12345678901234567890", row.get(1).getAsString()); + assertTrue(row.get(1).getAsJsonPrimitive().isString()); + assertEquals(42, row.get(2).getAsInt()); + assertTrue(row.get(2).getAsJsonPrimitive().isNumber()); + } + + @Test + void jsonRpcServerReconnectsWhenStoredJdbcConnectionIsStale() { + ReconnectingAgent agent = new ReconnectingAgent(); + JsonRpcServer server = new JsonRpcServer(agent); + + server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"connect\",\"params\":{\"host\":\"db.example.com\",\"port\":1521,\"database\":\"ORCL\",\"username\":\"u\",\"password\":\"p\"}}" + ); + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"list_databases\",\"params\":{}}" + ); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertTrue(json.has("result")); + assertEquals(2, agent.connectCount); + assertEquals(1, agent.disconnectCount); + assertEquals(1, agent.firstConnectionValidChecks); + } + + @Test + void jsonRpcServerValidatesCurrentJdbcConnection() { + ReconnectingAgent agent = new ReconnectingAgent(); + JsonRpcServer server = new JsonRpcServer(agent); + + server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"connect\",\"params\":{\"host\":\"db.example.com\",\"port\":1521,\"database\":\"ORCL\",\"username\":\"u\",\"password\":\"p\"}}" + ); + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"" + AgentProtocol.METHOD_VALIDATE_CONNECTION + "\",\"params\":{}}" + ); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertTrue(json.has("error")); + assertEquals(1, agent.connectCount); + assertEquals(1, agent.firstConnectionValidChecks); + } + + @Test + void jsonRpcServerSwitchesCatalogBeforeMetadataCalls() { + CatalogSwitchAgent agent = new CatalogSwitchAgent(); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"" + AgentProtocol.METHOD_LIST_TABLES + "\",\"params\":{\"database\":\"sales\",\"schema\":\"app\"}}" + ); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertTrue(json.has("result")); + assertEquals("sales", agent.catalogs.get(0)); + assertEquals("app", agent.lastSchema); + } + + @Test + void jsonRpcServerAppliesConstrainedTableMetadataRequests() { + MetadataConstraintAgent agent = new MetadataConstraintAgent(); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":4,\"method\":\"" + AgentProtocol.METHOD_LIST_TABLES + "\",\"params\":{\"schema\":\"app\",\"filter\":\"us\",\"limit\":1,\"offset\":1,\"object_types\":[\"TABLE\"]}}" + ); + + JsonArray result = JsonParser.parseString(response).getAsJsonObject().getAsJsonArray("result"); + assertEquals(1, result.size()); + assertEquals("user_settings", result.get(0).getAsJsonObject().get("name").getAsString()); + assertEquals("app", agent.lastSchema); + } + + @Test + void jsonRpcServerAppliesConstrainedObjectMetadataRequests() { + MetadataConstraintAgent agent = new MetadataConstraintAgent(); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":5,\"method\":\"" + AgentProtocol.METHOD_LIST_OBJECTS + "\",\"params\":{\"schema\":\"app\",\"filter\":\"fn\",\"limit\":1,\"offset\":1,\"object_types\":[\"FUNCTION\"]}}" + ); + + JsonArray result = JsonParser.parseString(response).getAsJsonObject().getAsJsonArray("result"); + assertEquals(1, result.size()); + assertEquals("fetch_name", result.get(0).getAsJsonObject().get("name").getAsString()); + assertEquals("FUNCTION", result.get(0).getAsJsonObject().get("object_type").getAsString()); + } + + @Test + void jsonRpcServerDispatchesTableReadSessionMethods() { + TableReadDispatchAgent agent = new TableReadDispatchAgent(); + JsonRpcServer server = new JsonRpcServer(agent); + + String startResponse = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":11,\"method\":\"" + AgentProtocol.METHOD_START_TABLE_READ + "\",\"params\":{\"sql\":\"select * from orders\",\"schema\":\"public\",\"pageSize\":2,\"fetchSize\":8,\"maxRows\":20,\"timeoutSecs\":3}}" + ); + JsonObject startJson = JsonParser.parseString(startResponse).getAsJsonObject(); + + assertTrue(startJson.has("result")); + assertEquals("select * from orders", agent.lastSql); + assertEquals("public", agent.lastSchema); + assertEquals(new QueryPageOptions(2, 8, 20, 3), agent.lastOptions); + assertEquals("table-session", startJson.getAsJsonObject("result").get("session_id").getAsString()); + + String fetchResponse = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":12,\"method\":\"" + AgentProtocol.METHOD_FETCH_TABLE_READ_PAGE + "\",\"params\":{\"sessionId\":\"table-session\",\"pageSize\":4}}" + ); + JsonObject fetchJson = JsonParser.parseString(fetchResponse).getAsJsonObject(); + + assertTrue(fetchJson.has("result")); + assertEquals("table-session", agent.fetchedSessionId); + assertEquals(4, agent.fetchedPageSize); + assertFalse(fetchJson.getAsJsonObject("result").get("has_more").getAsBoolean()); + + String closeResponse = server.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":13,\"method\":\"" + AgentProtocol.METHOD_CLOSE_TABLE_READ_SESSION + "\",\"params\":{\"sessionId\":\"table-session\"}}" + ); + JsonObject closeJson = JsonParser.parseString(closeResponse).getAsJsonObject(); + + assertTrue(closeJson.get("result").getAsBoolean()); + assertEquals("table-session", agent.closedSessionId); + } + + + @Test + void exposesJavaFriendlyDefaultsAndModels() { + ConnectParams params = new ConnectParams("localhost", 5432, "demo", "user", "secret", "ssl=false", "", false); + assertEquals("localhost", params.getHost()); + assertEquals("ssl=false", params.getUrl_params()); + + TableInfo table = new TableInfo("orders", "TABLE"); + assertEquals("TABLE", table.getTable_type()); + + QueryResult result = new QueryResult( + Collections.singletonList("id"), + Collections.singletonList(Collections.singletonList(1)), + 2L, + 3L + ); + assertEquals(2L, result.getAffected_rows()); + assertEquals(3L, result.getExecution_time_ms()); + assertFalse(result.getTruncated()); + + QueryPageResult page = new QueryPageResult( + Collections.singletonList("id"), + Collections.emptyList(), + 0L, + 1L, + false, + "session-1", + true + ); + assertEquals("session-1", page.getSession_id()); + assertEquals(true, page.getHas_more()); + + assertEquals(JdbcExecutor.DEFAULT_MAX_ROWS, new ExecuteQueryOptions().getMaxRows()); + assertEquals(100, new QueryPageOptions().getPageSize()); + assertNotNull(JdbcExecutor.INSTANCE); + } + + @Test + void exposesDatabaseAgentDefaultMethodsToJavaImplementors() { + DatabaseAgent agent = new MinimalAgent(); + + assertEquals(1, agent.listObjects("public").size()); + assertThrows(UnsupportedOperationException.class, () -> + agent.getObjectSource("public", "orders", "TABLE") + ); + assertEquals("SET SCHEMA \"public\"", agent.setSchemaSQL("public")); + assertThrows(IllegalStateException.class, () -> + agent.executeQueryPage("select 1", "public") + ); + assertThrows(IllegalStateException.class, () -> + agent.startTableRead("select 1", "public", new QueryPageOptions()) + ); + assertEquals(0L, agent.executeQuery("select 1", "public").getAffected_rows()); + + String ddl = DatabaseAgent.buildTableDdl( + "public", + "orders", + Collections.singletonList(new ColumnInfo("id", "integer", false, null, true)), + Collections.singletonList(new IndexInfo("orders_name_idx", Collections.singletonList("name"), false, false)), + Collections.singletonList(new ForeignKeyInfo("orders_customer_fk", "customer_id", "customers", "id")) + ); + assertEquals( + "CREATE TABLE \"public\".\"orders\" (\n" + + " \"id\" integer NOT NULL,\n" + + " PRIMARY KEY (\"id\"),\n" + + " CONSTRAINT \"orders_customer_fk\" FOREIGN KEY (\"customer_id\") REFERENCES \"customers\"(\"id\")\n" + + ");\n\n" + + "CREATE INDEX \"orders_name_idx\" ON \"public\".\"orders\" (\"name\");", + ddl + ); + } + + @Test + void databaseAgentDefaultConstraintsFilterLegacyMetadataOverrides() { + DatabaseAgent agent = new LegacyObjectTypeAgent(); + + List tables = agent.listTables( + "public", + new MetadataListConstraints("us", 1, 1, Collections.singletonList("TABLE")) + ); + assertEquals(1, tables.size()); + assertEquals("user_settings", tables.get(0).getName()); + + List objects = agent.listObjects( + "public", + new MetadataListConstraints("us", 1, 0, Collections.singletonList("VIEW")) + ); + assertEquals(1, objects.size()); + assertEquals("usage_view", objects.get(0).getName()); + } + + @Test + void metadataConstraintsTreatTdengineStableAsTable() { + MetadataListConstraints constraints = + new MetadataListConstraints(null, null, null, Collections.singletonList("TABLE")); + TableInfo stable = new TableInfo("meters", "STABLE", null, null, null); + + List tables = constraints.filterTables(Collections.singletonList(stable)); + + assertEquals(Collections.singletonList(stable), tables); + } + + @Test + void metadataConstraintsMatchTableAndObjectComments() { + MetadataListConstraints tableConstraints = + new MetadataListConstraints("account", null, null, Collections.singletonList("TABLE")); + List tables = tableConstraints.filterTables(Arrays.asList( + new TableInfo("orders", "TABLE", "sales archive"), + new TableInfo("profile", "TABLE", "customer account data"), + new TableInfo("account_view", "VIEW", "ignored by type") + )); + assertEquals(1, tables.size()); + assertEquals("profile", tables.get(0).getName()); + + MetadataListConstraints objectConstraints = + new MetadataListConstraints("revenue", null, null, Collections.singletonList("VIEW")); + List objects = objectConstraints.filterObjects(Arrays.asList( + new ObjectInfo("order_view", "VIEW", "public", "monthly revenue summary"), + new ObjectInfo("sync_user", "PROCEDURE", "public", "sync revenue data"), + new ObjectInfo("audit_log", "TABLE", "public", "audit records") + )); + assertEquals(1, objects.size()); + assertEquals("order_view", objects.get(0).getName()); + } + + @Test + void executesTransactionsOneByOneWhenJdbcDriverDoesNotSupportTransactions() { + List calls = new ArrayList<>(); + DatabaseAgent agent = new TransactionAgent(nonTransactionalConnection(calls)); + + QueryResult result = agent.executeTransaction(Arrays.asList("UPDATE A SET ID = 1", "UPDATE B SET ID = 2"), "APP"); + + assertEquals(2L, result.getAffected_rows()); + assertEquals( + Arrays.asList("supportsTransactions", "execute:SET SCHEMA \"APP\"", "executeUpdate:UPDATE A SET ID = 1", "executeUpdate:UPDATE B SET ID = 2"), + calls + ); + } + + @Test + void buildsTableDdlWithoutSchemaQualifierWhenSchemaIsBlank() { + String ddl = DatabaseAgent.buildTableDdl( + "", + "orders", + Collections.singletonList(new ColumnInfo("id", "integer", false, null, true)), + Collections.emptyList(), + Collections.emptyList() + ); + + assertEquals( + "CREATE TABLE \"orders\" (\n" + + " \"id\" integer NOT NULL,\n" + + " PRIMARY KEY (\"id\")\n" + + ");\n", + ddl + ); + } + + @Test + void buildsTableDdlWithColumnComments() { + String ddl = DdlBuilder.buildTableDdl( + "public", + "orders", + Collections.singletonList(new ColumnInfo( + "display_name", + "varchar", + true, + null, + false, + null, + "User's display name", + null, + null, + 64 + )), + Collections.emptyList(), + Collections.emptyList(), + false, + true + ); + + assertEquals( + "CREATE TABLE \"public\".\"orders\" (\n" + + " \"display_name\" varchar(64)\n" + + ");\n\n" + + "COMMENT ON COLUMN \"public\".\"orders\".\"display_name\" IS 'User''s display name';", + ddl + ); + } + + private static class MinimalAgent implements DatabaseAgent { + @Override + public void connect(ConnectParams params) { + } + + @Override + public boolean testConnection(ConnectParams params) { + return true; + } + + @Override + public List listDatabases() { + return Collections.emptyList(); + } + + @Override + public List listSchemas() { + return Collections.singletonList("public"); + } + + @Override + public List listTables(String schema) { + return Collections.singletonList(new TableInfo("orders", "TABLE")); + } + + @Override + public List getColumns(String schema, String table) { + return Arrays.asList( + new ColumnInfo("id", "integer", false, null, true), + new ColumnInfo("name", "character varying", true, null, false, null, null, null, null, 255) + ); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return new QueryResult(Collections.emptyList(), Collections.emptyList(), 0L, 0L); + } + + @Override + public void disconnect() { + } + + @Override + public Connection getConnection() { + return null; + } + } + + private static final class TransactionAgent extends MinimalAgent { + private final Connection connection; + + private TransactionAgent(Connection connection) { + this.connection = connection; + } + + @Override + public Connection getConnection() { + return connection; + } + } + + private static final class LegacyObjectTypeAgent extends MinimalAgent { + @Override + public List listTables(String schema) { + return Arrays.asList( + new TableInfo("orders", "TABLE"), + new TableInfo("usage_view", "VIEW"), + new TableInfo("users", "TABLE"), + new TableInfo("user_settings", "TABLE") + ); + } + + @Override + public List listTables(String schema, List objectTypes) { + List result = listTables(schema); + if (objectTypes == null || objectTypes.isEmpty()) { + return result; + } + List filtered = new ArrayList<>(); + for (TableInfo table : result) { + if (objectTypes.contains(table.getTable_type())) { + filtered.add(table); + } + } + return filtered; + } + } + + private static final class PreciseNumberAgent extends MinimalAgent { + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return new QueryResult( + Arrays.asList("decimal_value", "integer_value", "safe_int"), + Collections.singletonList(Arrays.asList( + new BigDecimal("12345678901234567890.1234"), + new BigInteger("12345678901234567890"), + 42 + )), + 0L, + 0L + ); + } + } + + private static final class ReconnectingAgent extends MinimalAgent { + private int connectCount; + private int disconnectCount; + private int firstConnectionValidChecks; + private Connection connection; + + @Override + public void connect(ConnectParams params) { + connectCount += 1; + final int connectionNumber = connectCount; + connection = proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("isClosed".equals(name)) { + return false; + } + if ("isValid".equals(name)) { + if (connectionNumber == 1) { + firstConnectionValidChecks += 1; + return false; + } + return true; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + @Override + public void disconnect() { + disconnectCount += 1; + } + + @Override + public Connection getConnection() { + return connection; + } + } + + private static final class CatalogSwitchAgent extends MinimalAgent { + private final List catalogs = new ArrayList<>(); + private String lastSchema = ""; + + @Override + public Connection getConnection() { + return proxy(Connection.class, (method, args) -> { + if ("setCatalog".equals(method.getName())) { + catalogs.add(String.valueOf(args[0])); + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + @Override + public List listTables(String schema) { + lastSchema = schema; + return super.listTables(schema); + } + } + + private static final class MetadataConstraintAgent extends MinimalAgent { + private String lastSchema = ""; + + @Override + public Connection getConnection() { + return proxy(Connection.class, (method, args) -> { + if ("isClosed".equals(method.getName())) { + return false; + } + if ("isValid".equals(method.getName())) { + return true; + } + return defaultValue(method.getReturnType()); + }); + } + + @Override + public List listTables(String schema) { + lastSchema = schema; + return Arrays.asList( + new TableInfo("orders", "TABLE"), + new TableInfo("users", "TABLE"), + new TableInfo("usage_view", "VIEW"), + new TableInfo("user_settings", "TABLE") + ); + } + + @Override + public List listObjects(String schema) { + return Arrays.asList( + new ObjectInfo("orders", "TABLE", schema, null), + new ObjectInfo("find_user", "FUNCTION", schema, null), + new ObjectInfo("fetch_name", "FUNCTION", schema, null), + new ObjectInfo("cleanup_user", "PROCEDURE", schema, null) + ); + } + } + + private static final class TableReadDispatchAgent extends MinimalAgent { + private String lastSql; + private String lastSchema; + private QueryPageOptions lastOptions; + private String fetchedSessionId; + private int fetchedPageSize; + private String closedSessionId; + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + lastSql = sql; + lastSchema = schema; + lastOptions = options; + return new QueryPageResult( + Collections.singletonList("id"), + Collections.singletonList(Collections.singletonList(1)), + 0L, + 5L, + false, + "table-session", + true + ); + } + + @Override + public QueryPageResult fetchTableReadPage(String sessionId, int pageSize) { + fetchedSessionId = sessionId; + fetchedPageSize = pageSize; + return new QueryPageResult( + Collections.singletonList("id"), + Collections.singletonList(Collections.singletonList(2)), + 0L, + 0L, + false, + null, + false + ); + } + + @Override + public boolean closeTableReadSession(String sessionId) { + closedSessionId = sessionId; + return "table-session".equals(sessionId); + } + } + + private static Connection nonTransactionalConnection(List calls) { + return proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("getMetaData".equals(name)) { + return proxy(java.sql.DatabaseMetaData.class, (metaMethod, metaArgs) -> { + if ("supportsTransactions".equals(metaMethod.getName())) { + calls.add("supportsTransactions"); + return false; + } + return defaultValue(metaMethod.getReturnType()); + }); + } + if ("createStatement".equals(name)) { + return proxy(java.sql.Statement.class, (stmtMethod, stmtArgs) -> { + if ("execute".equals(stmtMethod.getName())) { + calls.add("execute:" + stmtArgs[0]); + return false; + } + if ("executeUpdate".equals(stmtMethod.getName())) { + calls.add("executeUpdate:" + stmtArgs[0]); + return 1; + } + return defaultValue(stmtMethod.getReturnType()); + }); + } + if ("setSchema".equals(name)) { + calls.add("setSchema:" + args[0]); + return null; + } + if ("setCatalog".equals(name)) { + calls.add("setCatalog:" + args[0]); + return null; + } + if ("setAutoCommit".equals(name) || "commit".equals(name) || "rollback".equals(name)) { + calls.add(name); + return null; + } + if ("getAutoCommit".equals(name)) { + return true; + } + return defaultValue(method.getReturnType()); + }); + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args == null ? new Object[0] : args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + return null; + } + + private static boolean containsCapability(JsonArray capabilities, String expected) { + for (int i = 0; i < capabilities.size(); i++) { + if (expected.equals(capabilities.get(i).getAsString())) { + return true; + } + } + return false; + } + + private static JsonObject protocolContract() { + InputStream stream = CommonJavaCompatibilityTest.class.getResourceAsStream("/agent-protocol-v1.json"); + if (stream == null) { + throw new AssertionError("agent-protocol-v1.json resource missing"); + } + return JsonParser.parseReader(new InputStreamReader(stream, StandardCharsets.UTF_8)).getAsJsonObject(); + } + + private static List strings(JsonArray array) { + List result = new ArrayList<>(); + for (int i = 0; i < array.size(); i++) { + result.add(array.get(i).getAsString()); + } + return result; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/ConfiguredJdbcAgentTest.java b/agents/common/src/test/java/com/dbx/agent/ConfiguredJdbcAgentTest.java new file mode 100644 index 0000000..7a24343 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/ConfiguredJdbcAgentTest.java @@ -0,0 +1,91 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class ConfiguredJdbcAgentTest { + @Test + void buildsJdbcUrlFromProfileTemplateAndUrlParams() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "com.example.Driver", + "jdbc:example://{host}:{port}/{database}" + ); + + String url = profile.buildUrl( + new ConnectParams( + "127.0.0.1", + 1234, + "demo", + "", + "", + "ssl=false", + "", + false + ) + ); + + assertEquals("jdbc:example://127.0.0.1:1234/demo?ssl=false", url); + } + + @Test + void usesExplicitConnectionStringBeforeTemplate() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "com.example.Driver", + "jdbc:example://{host}:{port}/{database}" + ); + + String url = profile.buildUrl( + new ConnectParams( + "127.0.0.1", + 1234, + "demo", + "", + "", + "", + "jdbc:example://server:4321/prod", + false + ) + ); + + assertEquals("jdbc:example://server:4321/prod", url); + } + + @Test + void usesDefaultPortWhenParamsOmitPort() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "com.example.Driver", + "jdbc:example://{host}:{port}/{database}", + 9999 + ); + + String url = profile.buildUrl( + new ConnectParams( + "127.0.0.1", + 0, + "demo", + "", + "", + "", + "", + false + ) + ); + + assertEquals("jdbc:example://127.0.0.1:9999/demo", url); + } + + @Test + void canDisableSchemaSwitchingForDriversThatDoNotSupportContextChanges() { + ConfiguredJdbcAgent agent = new ConfiguredJdbcAgent( + new JdbcAgentProfile( + "com.example.Driver", + "jdbc:example://{host}:{port}/{database}", + 0, + true + ) + ) {}; + + assertEquals("", agent.setSchemaSQL("APP")); + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/EwkbWktDecoderTest.java b/agents/common/src/test/java/com/dbx/agent/EwkbWktDecoderTest.java new file mode 100644 index 0000000..3be5431 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/EwkbWktDecoderTest.java @@ -0,0 +1,163 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class EwkbWktDecoderTest { + + private static byte[] hex(String s) { + s = s.replace(" ", ""); + if (s.startsWith("0x") || s.startsWith("0X")) s = s.substring(2); + byte[] out = new byte[s.length() / 2]; + for (int i = 0; i < out.length; i++) { + int hi = Character.digit(s.charAt(i * 2), 16); + int lo = Character.digit(s.charAt(i * 2 + 1), 16); + out[i] = (byte) ((hi << 4) | lo); + } + return out; + } + + // ────────────────────────────────────────────────────────────────────── + // Cross-checked against the Rust ewkb_to_wkt tests in + // crates/dbx-core/src/db/postgres.rs (same hex inputs, same expected WKT). + // ────────────────────────────────────────────────────────────────────── + + @Test + void decodesPointWithSridFromRustFixture() { + byte[] raw = hex("0101000020E6100000C520B07268195D404E62105839F44340"); + assertEquals("POINT(116.397 39.908)", EwkbWktDecoder.decode(raw)); + } + + @Test + void decodesMultiPolygonFromRustFixture() { + byte[] raw = hex( + "0106000020E610000002000000010300000001000000050000000000000000005D40000000000000444000000000" + + "00405D4000000000000044400000000000405D4000000000008044400000000000005D40000000000080444000" + + "00000000005D400000000000004440010300000001000000050000000000000000805D40000000000080434000" + + "00000000C05D4000000000008043400000000000C05D4000000000000044400000000000805D40000000000000" + + "44400000000000805D400000000000804340" + ); + assertEquals( + "MULTIPOLYGON(((116 40,117 40,117 41,116 41,116 40)),((118 39,119 39,119 40,118 40,118 39)))", + EwkbWktDecoder.decode(raw) + ); + } + + @Test + void decodesGeometryCollectionFromRustFixture() { + byte[] raw = hex( + "0107000020E61000000200000001010000000000000000005D40000000000000444001020000000200000000000000" + + "00405D4000000000008044400000000000805D400000000000004540" + ); + assertEquals( + "GEOMETRYCOLLECTION(POINT(116 40),LINESTRING(117 41,118 42))", + EwkbWktDecoder.decode(raw) + ); + } + + @Test + void decodesHexStringWithoutPrefix() { + String hex = "0101000020E6100000C520B07268195D404E62105839F44340"; + assertEquals("POINT(116.397 39.908)", EwkbWktDecoder.decode(hex)); + } + + @Test + void decodesHexStringWith0xPrefix() { + String hex = "0x0101000020E6100000C520B07268195D404E62105839F44340"; + assertEquals("POINT(116.397 39.908)", EwkbWktDecoder.decode(hex)); + } + + @Test + void preservesAlreadyWktTextFromStAsText() { + String wkt = "POINT(116.397 39.908)"; + assertEquals(wkt, EwkbWktDecoder.decode(wkt)); + } + + @Test + void preservesAlreadyEwktTextWithSrid() { + String ewkt = "SRID=4326;POINT(116.397 39.908)"; + assertEquals(ewkt, EwkbWktDecoder.decode(ewkt)); + } + + @Test + void truncatedBytesFallBackToHex() { + // First few bytes of a valid point but truncated mid-coordinate. + byte[] raw = hex("0101000020E6100000C520B072"); + Object decoded = EwkbWktDecoder.decode(raw); + assertTrue(decoded instanceof String); + String s = (String) decoded; + assertTrue(s.startsWith("0x"), "expected hex fallback, got: " + s); + assertEquals("0x0101000020e6100000c520b072", s); + } + + @Test + void unparseableHexStringPreservedWithHexPrefix() { + // Looks like hex (even, leading 01), but bytes are not valid EWKB. + String mostly = "0123456789ABCDEF"; + Object decoded = EwkbWktDecoder.decode(mostly); + assertTrue(decoded instanceof String); + // Shape A: parseEwkb returns null, so we re-emit the input ensuring 0x prefix. + assertTrue(((String) decoded).toLowerCase().startsWith("0x"), decoded.toString()); + } + + @Test + void nullInputReturnsNull() { + assertNull(EwkbWktDecoder.decode(null)); + } + + @Test + void formatsWholeNumberDoublesWithoutTrailingDot() { + // Ensure POINT(116 40) is "116 40", not "116.0 40.0" — matches Rust f64 Display. + byte[] raw = hex("0101000020E61000000000000000005D400000000000004440"); + assertEquals("POINT(116 40)", EwkbWktDecoder.decode(raw)); + } + + @Test + void emptyPointBecomesPointEmpty() { + // A 2D point with both coordinates = NaN encodes as "POINT EMPTY" in the decoder. + // EWKB: little-endian Point with SRID=0 omitted; type=1, then two NaN doubles. + byte[] raw = hex("0101000000" + nanLe() + nanLe()); + assertEquals("POINT EMPTY", EwkbWktDecoder.decode(raw)); + } + + private static String nanLe() { + // IEEE 754 quiet NaN, little-endian — same value Rust's f64::NAN encodes to. + long bits = Double.doubleToRawLongBits(Double.NaN); + StringBuilder sb = new StringBuilder(16); + for (int i = 0; i < 8; i++) { + int b = (int) ((bits >>> (i * 8)) & 0xFF); + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } + + @Test + void pgGeometryReflectiveDecodeReturnsValueText() { + // Synthetic stand-in for org.postgis.PGgeometry — same shape: getValue() returns EWKT. + Object pgGeom = new FakePGgeometry("SRID=4326;POINT(116.397 39.908)"); + assertEquals("SRID=4326;POINT(116.397 39.908)", EwkbWktDecoder.decode(pgGeom)); + } + + @SuppressWarnings("unused") + public static final class FakePGgeometry { + private final String value; + + public FakePGgeometry(String value) { + this.value = value; + } + + // Class name won't match the reflective list so this falls through to toString(); + // we keep it here purely to assert the toString() fallback also works (no NPE). + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/JdbcAgentProfileExtendedTest.java b/agents/common/src/test/java/com/dbx/agent/JdbcAgentProfileExtendedTest.java new file mode 100644 index 0000000..e8848f2 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/JdbcAgentProfileExtendedTest.java @@ -0,0 +1,109 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class JdbcAgentProfileExtendedTest { + @Test + void appendsQueryParamsToJdbcUrlTemplates() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:example://{host}:{port}/{database}", + 1234 + ); + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(0); + params.setDatabase("analytics"); + params.setUrl_params("ssl=true"); + + assertEquals("jdbc:example://db.example.com:1234/analytics?ssl=true", profile.buildUrl(params)); + } + + @Test + void appendsSemicolonParamsToSemicolonJdbcUrlTemplates() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:exa:{host}:{port};schema={database}", + 8563 + ); + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(0); + params.setDatabase("analytics"); + params.setUrl_params("encryption=1"); + + assertEquals("jdbc:exa:db.example.com:8563;schema=analytics;encryption=1", profile.buildUrl(params)); + } + + @Test + void appendsCommaParamsToTeradataJdbcUrlTemplates() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:teradata://{host}/DBS_PORT={port},DATABASE={database}", + 1025 + ); + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(0); + params.setDatabase("analytics"); + params.setUrl_params("LOGMECH=LDAP"); + + assertEquals("jdbc:teradata://db.example.com/DBS_PORT=1025,DATABASE=analytics,LOGMECH=LDAP", profile.buildUrl(params)); + } + + @Test + void appendsColonPropertiesToDb2JdbcUrlTemplates() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:db2://{host}:{port}/{database}", + 50000 + ); + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(0); + params.setDatabase("analytics"); + params.setUrl_params("sslConnection=true"); + + assertEquals("jdbc:db2://db.example.com:50000/analytics:sslConnection=true;", profile.buildUrl(params)); + } + + @Test + void preservesExplicitConnectionStringForVendorSpecificUrls() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:example://{host}:{port}/{database}", + 1234 + ); + ConnectParams params = new ConnectParams(); + params.setConnection_string("jdbc:example:special://host/path;token=secret"); + + assertEquals("jdbc:example:special://host/path;token=secret", profile.buildUrl(params)); + } + + @Test + void exposesDialectProfileOptions() { + JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:example://{host}:{port}/{database}", + 1234, + false, + java.util.Collections.singleton("SYS"), + java.util.Arrays.asList("TABLE", "VIEW"), + "`", + "USE", + false, + true, + true, + true + ); + + assertEquals("USE `analytics``prod`", profile.schemaSwitchSql("analytics`prod")); + assertEquals("`orders`", profile.quoteIdentifier("orders")); + assertEquals(false, profile.getCatalogFallbackEnabled()); + assertEquals(true, profile.getNativeTableDdlSupported()); + assertEquals(true, profile.getObjectSourceSupported()); + assertEquals(true, profile.getTriggersSupported()); + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/JdbcExecutorTest.java b/agents/common/src/test/java/com/dbx/agent/JdbcExecutorTest.java new file mode 100644 index 0000000..6d54dfc --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/JdbcExecutorTest.java @@ -0,0 +1,265 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import javax.sql.rowset.serial.SerialBlob; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class JdbcExecutorTest { + @Test + void stringResultValueFormatsBlobWithoutUsingStringConversion() throws Exception { + ResultSet rs = resultSet( + new byte[]{0x01, 0x2A, (byte) 0xFF}, + () -> { + throw new AssertionError("BLOB columns should not be read with getString"); + } + ); + + assertEquals("0x012aff", JdbcExecutor.stringResultValue(rs, 1, Types.BLOB)); + } + + @Test + void defaultResultValueReadsClobColumnsAsText() throws Exception { + ResultSet rs = resultSet(null, () -> "hello clob"); + + assertEquals("hello clob", JdbcExecutor.INSTANCE.defaultResultValue(rs, 1, Types.CLOB)); + } + + @Test + void defaultResultValueNormalizesBlobObjectsFromFallbackTypes() throws Exception { + ResultSet rs = resultSet(new SerialBlob(new byte[]{0x0A, 0x0B}), null, false); + + assertEquals("0x0a0b", JdbcExecutor.INSTANCE.defaultResultValue(rs, 1, Types.OTHER)); + } + + @Test + void readResultSetCachesColumnTypeMetadataAcrossRows() { + CountingResultSetFixture fixture = countingResultSet(new Object[][]{ + {1, "Ada"}, + {2, "Grace"} + }); + + QueryResult result = JdbcExecutor.INSTANCE.readResultSet( + fixture.resultSet(), + 12L, + 10, + JdbcExecutor.INSTANCE::defaultResultValue + ); + + assertEquals(Arrays.asList("id", "name"), result.getColumns()); + assertEquals(Arrays.asList("INTEGER", "VARCHAR"), result.getColumn_types()); + assertEquals(Arrays.asList(Arrays.asList(1, "Ada"), Arrays.asList(2, "Grace")), result.getRows()); + assertEquals(1, fixture.getMetaDataCalls()); + assertEquals(2, fixture.getColumnTypeCalls()); + } + + @Test + void schemaSwitcherPrefersDriverSpecificSql() throws Exception { + List calls = new ArrayList<>(); + + JdbcSchemaSwitcher.apply(schemaConnection(calls, false), "APP", schema -> "USE " + schema); + + assertEquals(Arrays.asList("execute:USE APP"), calls); + } + + @Test + void schemaSwitcherFallsBackToSetSchemaWhenSqlFails() throws Exception { + List calls = new ArrayList<>(); + + JdbcSchemaSwitcher.apply(schemaConnection(calls, true), "APP", schema -> "USE " + schema); + + assertEquals(Arrays.asList("execute:USE APP", "setSchema:APP"), calls); + } + + private static ResultSet resultSet(byte[] bytes, StringSupplier stringSupplier) { + return resultSet(bytes, stringSupplier, false); + } + + private static Connection schemaConnection(List calls, boolean failSchemaSql) { + InvocationHandler handler = (Object unused, Method method, Object[] args) -> { + switch (method.getName()) { + case "createStatement": + return schemaStatement(calls, failSchemaSql); + case "setSchema": + calls.add("setSchema:" + args[0]); + return null; + default: + return defaultValue(method.getReturnType()); + } + }; + return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class[]{Connection.class}, handler); + } + + private static Statement schemaStatement(List calls, boolean failSchemaSql) { + InvocationHandler handler = (Object unused, Method method, Object[] args) -> { + switch (method.getName()) { + case "execute": + calls.add("execute:" + args[0]); + if (failSchemaSql) { + throw new SQLException("unsupported schema SQL"); + } + return false; + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }; + return (Statement) Proxy.newProxyInstance(Statement.class.getClassLoader(), new Class[]{Statement.class}, handler); + } + + private static CountingResultSetFixture countingResultSet(Object[][] rows) { + String[] labels = {"id", "name"}; + int[] sqlTypes = {Types.INTEGER, Types.VARCHAR}; + String[] typeNames = {"INTEGER", "VARCHAR"}; + AtomicInteger cursor = new AtomicInteger(-1); + AtomicInteger getMetaDataCalls = new AtomicInteger(); + AtomicInteger getColumnTypeCalls = new AtomicInteger(); + + InvocationHandler metaHandler = (Object unused, Method method, Object[] args) -> { + switch (method.getName()) { + case "getColumnCount": + return labels.length; + case "getColumnLabel": + return labels[(Integer) args[0] - 1]; + case "getColumnType": + getColumnTypeCalls.incrementAndGet(); + return sqlTypes[(Integer) args[0] - 1]; + case "getColumnTypeName": + return typeNames[(Integer) args[0] - 1]; + default: + return defaultValue(method.getReturnType()); + } + }; + ResultSetMetaData metadata = (ResultSetMetaData) Proxy.newProxyInstance( + ResultSetMetaData.class.getClassLoader(), + new Class[]{ResultSetMetaData.class}, + metaHandler + ); + + InvocationHandler resultSetHandler = (Object unused, Method method, Object[] args) -> { + switch (method.getName()) { + case "getMetaData": + getMetaDataCalls.incrementAndGet(); + return metadata; + case "next": + return cursor.incrementAndGet() < rows.length; + case "getInt": + return ((Number) currentCell(rows, cursor.get(), (Integer) args[0])).intValue(); + case "getString": + Object value = currentCell(rows, cursor.get(), (Integer) args[0]); + return value == null ? null : value.toString(); + case "wasNull": + return false; + default: + return defaultValue(method.getReturnType()); + } + }; + ResultSet resultSet = (ResultSet) Proxy.newProxyInstance( + ResultSet.class.getClassLoader(), + new Class[]{ResultSet.class}, + resultSetHandler + ); + return new CountingResultSetFixture(resultSet, getMetaDataCalls, getColumnTypeCalls); + } + + private static Object currentCell(Object[][] rows, int rowIndex, int columnIndex) { + return rows[rowIndex][columnIndex - 1]; + } + + private static ResultSet resultSet(Object objectValue, StringSupplier stringSupplier, boolean wasNull) { + InvocationHandler handler = (Object unused, Method method, Object[] args) -> { + switch (method.getName()) { + case "getObject": + return objectValue; + case "getBytes": + return objectValue instanceof byte[] ? objectValue : null; + case "getString": + return stringSupplier == null ? null : stringSupplier.get(); + case "wasNull": + return wasNull; + default: + return defaultValue(method.getReturnType()); + } + }; + return (ResultSet) Proxy.newProxyInstance( + ResultSet.class.getClassLoader(), + new Class[]{ResultSet.class}, + handler + ); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) { + return false; + } + if (type == Byte.TYPE) { + return (byte) 0; + } + if (type == Short.TYPE) { + return (short) 0; + } + if (type == Integer.TYPE) { + return 0; + } + if (type == Long.TYPE) { + return 0L; + } + if (type == Float.TYPE) { + return 0f; + } + if (type == Double.TYPE) { + return 0.0d; + } + if (type == Character.TYPE) { + return '\0'; + } + return null; + } + + private interface StringSupplier { + String get() throws Exception; + } + + private static final class CountingResultSetFixture { + private final ResultSet resultSet; + private final AtomicInteger getMetaDataCalls; + private final AtomicInteger getColumnTypeCalls; + + private CountingResultSetFixture( + ResultSet resultSet, + AtomicInteger getMetaDataCalls, + AtomicInteger getColumnTypeCalls + ) { + this.resultSet = resultSet; + this.getMetaDataCalls = getMetaDataCalls; + this.getColumnTypeCalls = getColumnTypeCalls; + } + + private ResultSet resultSet() { + return resultSet; + } + + private int getMetaDataCalls() { + return getMetaDataCalls.get(); + } + + private int getColumnTypeCalls() { + return getColumnTypeCalls.get(); + } + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/MetadataConstraintCoverageTest.java b/agents/common/src/test/java/com/dbx/agent/MetadataConstraintCoverageTest.java new file mode 100644 index 0000000..be84980 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/MetadataConstraintCoverageTest.java @@ -0,0 +1,114 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class MetadataConstraintCoverageTest { + private static final Pattern JAVA_METADATA_OVERRIDE = Pattern.compile( + "public\\s+List\\s*<\\s*(?:TableInfo|ObjectInfo)\\s*>\\s+list(?:Tables|Objects)\\s*\\(\\s*String\\s+schema" + ); + private static final Set VALID_STRATEGIES = new HashSet<>(Arrays.asList( + "native-pushdown", + "shared-fallback", + "intentional-fallback" + )); + + @Test + void everyCustomMetadataDriverIsListedInCoverageMatrix() throws Exception { + Path agentsRoot = agentsRoot(); + Map coverage = readCoverageMatrix(agentsRoot.resolve("metadata-constraint-coverage.tsv")); + Set discovered = discoverCustomMetadataDrivers(agentsRoot.resolve("drivers")); + + assertEquals(discovered, coverage.keySet()); + } + + @Test + void coverageMatrixUsesKnownStrategiesAndReasons() throws Exception { + Path agentsRoot = agentsRoot(); + Path matrix = agentsRoot.resolve("metadata-constraint-coverage.tsv"); + for (String line : Files.readAllLines(matrix, StandardCharsets.UTF_8)) { + if (line.startsWith("driver\t") || line.trim().isEmpty()) { + continue; + } + String[] parts = line.split("\t", -1); + assertEquals(4, parts.length, line); + assertTrue(VALID_STRATEGIES.contains(parts[1]), line); + assertFalse(parts[3].trim().isEmpty(), line); + } + } + + private static Set discoverCustomMetadataDrivers(Path driversRoot) throws IOException { + Set result = new HashSet<>(); + try (Stream files = Files.walk(driversRoot)) { + files.filter(Files::isRegularFile).forEach(file -> { + String fileName = file.getFileName().toString(); + if (fileName.endsWith(".java") && hasJavaMetadataOverride(file)) { + result.add(driversRoot.relativize(file).getName(0).toString()); + } else if ("main.go".equals(fileName) && hasGoMetadataDispatcher(file)) { + result.add(driversRoot.relativize(file).getName(0).toString()); + } + }); + } + return result; + } + + private static boolean hasJavaMetadataOverride(Path file) { + try { + return JAVA_METADATA_OVERRIDE.matcher(readUtf8(file)).find(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static boolean hasGoMetadataDispatcher(Path file) { + try { + String source = readUtf8(file); + return source.contains("\"list_tables\"") || source.contains("\"list_objects\""); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private static Map readCoverageMatrix(Path matrix) throws IOException { + Map result = new HashMap<>(); + for (String line : Files.readAllLines(matrix, StandardCharsets.UTF_8)) { + if (line.startsWith("driver\t") || line.trim().isEmpty()) { + continue; + } + String[] parts = line.split("\t", -1); + result.put(parts[0], parts[1]); + } + return result; + } + + private static String readUtf8(Path file) throws IOException { + return new String(Files.readAllBytes(file), StandardCharsets.UTF_8); + } + + private static Path agentsRoot() { + Path current = Paths.get("").toAbsolutePath(); + while (current != null) { + if (Files.isDirectory(current.resolve("drivers")) && Files.isDirectory(current.resolve("common"))) { + return current; + } + current = current.getParent(); + } + throw new IllegalStateException("Unable to locate agents root"); + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/PostgresLikeAgentTest.java b/agents/common/src/test/java/com/dbx/agent/PostgresLikeAgentTest.java new file mode 100644 index 0000000..f3d4279 --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/PostgresLikeAgentTest.java @@ -0,0 +1,524 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Types; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PostgresLikeAgentTest { + @Test + void metadataQueriesUsePgCatalogInsteadOfInformationSchema() { + TestPostgresLikeAgent agent = new TestPostgresLikeAgent(); + agent.connect(new ConnectParams()); + + agent.listSchemas(); + agent.listTables("app"); + agent.listObjects("app"); + agent.getColumns("app", "orders"); + agent.listCheckConstraintsForTest("app", "orders"); + agent.listForeignKeys("app", "orders"); + agent.listTriggers("app", "orders"); + + String sql = String.join("\n", MetadataSqlFake.statements); + + assertFalse(sql.contains("FROM information_schema"), sql); + assertFalse(sql.contains("JOIN information_schema"), sql); + assertTrue(sql.contains("pg_catalog.pg_namespace"), sql); + assertTrue(sql.contains("pg_catalog.pg_class"), sql); + assertTrue(sql.contains("pg_catalog.pg_proc"), sql); + assertTrue(sql.contains("pg_catalog.pg_attribute"), sql); + assertTrue(sql.contains("pg_catalog.pg_constraint"), sql); + assertTrue(sql.contains("pg_catalog.pg_get_constraintdef"), sql); + assertTrue(sql.contains("pg_catalog.pg_trigger"), sql); + assertFalse(sql.contains(" AS key "), sql); + assertFalse(sql.contains(" key."), sql); + } + + @Test + void mapsPgCatalogBooleanNullableValues() { + TestPostgresLikeAgent agent = new TestPostgresLikeAgent(preparedConnection( + resultSet( + new String[]{"column_name"}, + new Object[][]{{"id"}} + ), + resultSet( + new String[]{ + "column_name", + "data_type", + "is_nullable", + "column_default", + "column_comment", + "numeric_precision", + "numeric_scale", + "character_maximum_length" + }, + new Object[][]{ + {"id", "integer", false, null, null, null, null, null}, + {"name", "character varying(255)", true, null, "display name", null, null, 255} + } + ) + )); + agent.connect(new ConnectParams()); + + List columns = agent.getColumns("public", "base_airspace"); + + assertEquals(2, columns.size()); + assertTrue(columns.get(0).getIs_primary_key()); + assertFalse(columns.get(0).getIs_nullable()); + assertEquals("name", columns.get(1).getName()); + assertTrue(columns.get(1).getIs_nullable()); + assertEquals(Integer.valueOf(255), columns.get(1).getCharacter_maximum_length()); + } + + @Test + void tableDdlIncludesNamedCheckConstraints() { + ConstraintDdlAgent agent = new ConstraintDdlAgent(); + + String ddl = agent.getTableDdl("public", "orders"); + + assertTrue( + ddl.contains("CONSTRAINT \"chk_balance_status\" CHECK (status = ANY (ARRAY['PLAN'::text, 'EXECUTION'::text]))"), + ddl + ); + } + + @Test + void tableDdlFallsBackWhenCheckConstraintCatalogIsUnavailable() { + ConstraintDdlAgent agent = new ConstraintDdlAgent(true); + + String ddl = agent.getTableDdl("public", "orders"); + + assertTrue(ddl.startsWith("CREATE TABLE \"public\".\"orders\""), ddl); + assertFalse(ddl.contains("CHECK"), ddl); + } + + @Test + void postgisGeometryTypeNameDetection() { + assertTrue(PostgresLikeAgent.isPostgisGeometryTypeName("geometry")); + assertTrue(PostgresLikeAgent.isPostgisGeometryTypeName("GEOMETRY")); + assertTrue(PostgresLikeAgent.isPostgisGeometryTypeName(" Geography ")); + assertTrue(PostgresLikeAgent.isPostgisGeometryTypeName("public.geometry")); + assertTrue(PostgresLikeAgent.isPostgisGeometryTypeName("geometry(Point,4326)")); + assertFalse(PostgresLikeAgent.isPostgisGeometryTypeName("")); + assertFalse(PostgresLikeAgent.isPostgisGeometryTypeName(null)); + assertFalse(PostgresLikeAgent.isPostgisGeometryTypeName("text")); + assertFalse(PostgresLikeAgent.isPostgisGeometryTypeName("vector")); + } + + @Test + void executeQueryDecodesGeometryColumnsToWktAndReportsColumnTypes() { + TestPostgresLikeAgent agent = new TestPostgresLikeAgent(); + agent.connect(new ConnectParams()); + + QueryResult result = JdbcExecutor.INSTANCE.readResultSet( + GeometryResultSet.create(), + 5L, + JdbcExecutor.DEFAULT_MAX_ROWS, + agent.geometryAwareResolverForTest() + ); + + assertEquals(2, result.getColumns().size()); + assertEquals("id", result.getColumns().get(0)); + assertEquals("geom", result.getColumns().get(1)); + + // column_types is reported via JDBC getColumnTypeName + assertEquals(2, result.getColumn_types().size()); + assertEquals("int4", result.getColumn_types().get(0)); + assertEquals("geometry", result.getColumn_types().get(1)); + + // The geometry cell is decoded to WKT (matches Rust ewkb_to_wkt fixture). + assertEquals(1, result.getRows().size()); + assertEquals(1, result.getRows().get(0).get(0)); + assertEquals("POINT(116.397 39.908)", result.getRows().get(0).get(1)); + } + + private static final class TestPostgresLikeAgent extends PostgresLikeAgent { + private final Connection connection; + + private TestPostgresLikeAgent() { + this(null); + } + + private TestPostgresLikeAgent(Connection connection) { + super(new PostgresLikeAgentProfile( + PostgresLikeAgentTest.class.getName(), + "jdbc:test://{host}:{port}/{database}" + )); + this.connection = connection; + } + + @Override + protected Connection openConnection(ConnectParams params) { + if (connection != null) { + return connection; + } + return MetadataSqlFake.connection(); + } + + JdbcExecutor.ColumnAwareResultValueReader geometryAwareResolverForTest() { + return (rs, index, sqlType, columnTypeName) -> { + if (PostgresLikeAgent.isPostgisGeometryTypeName(columnTypeName)) { + Object raw = rs.getObject(index); + if (rs.wasNull() || raw == null) { + return null; + } + return EwkbWktDecoder.decode(raw); + } + if (sqlType == Types.INTEGER) { + return rs.getInt(index); + } + return rs.getObject(index); + }; + } + + List listCheckConstraintsForTest(String schema, String table) { + return listCheckConstraints(schema, table); + } + } + + private static final class ConstraintDdlAgent extends PostgresLikeAgent { + private final boolean failCheckConstraintLookup; + + private ConstraintDdlAgent() { + this(false); + } + + private ConstraintDdlAgent(boolean failCheckConstraintLookup) { + super(new PostgresLikeAgentProfile( + PostgresLikeAgentTest.class.getName(), + "jdbc:test://{host}:{port}/{database}" + )); + this.failCheckConstraintLookup = failCheckConstraintLookup; + } + + @Override + public List getColumns(String schema, String table) { + return java.util.Arrays.asList( + new ColumnInfo("id", "bigint", false, null, true), + new ColumnInfo("status", "character varying", false, "'PLAN'::character varying", false) + ); + } + + @Override + public List listIndexes(String schema, String table) { + return java.util.Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return java.util.Collections.emptyList(); + } + + @Override + protected List listCheckConstraints(String schema, String table) { + if (failCheckConstraintLookup) { + throw new RuntimeException("pg_get_constraintdef is unavailable"); + } + return java.util.Collections.singletonList(new CheckConstraintInfo( + "chk_balance_status", + "CHECK (status = ANY (ARRAY['PLAN'::text, 'EXECUTION'::text]))" + )); + } + } + + private static Connection preparedConnection(ResultSet... resultSets) { + int[] resultSetIndex = {0}; + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("prepareStatement".equals(name)) { + return proxy(PreparedStatement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("executeQuery".equals(name)) { + int current = Math.min(resultSetIndex[0], resultSets.length - 1); + resultSetIndex[0] += 1; + return resultSets[current]; + } + if ("setString".equals(name) || "close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + if ("isClosed".equals(name)) { + return false; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet resultSet(String[] columns, Object[][] rows) { + int[] index = {-1}; + boolean[] wasNull = {false}; + return proxy(ResultSet.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] < rows.length; + } + if ("getString".equals(name)) { + Object value = columnValue(columns, rows[index[0]], args[0]); + wasNull[0] = value == null; + return value == null ? null : String.valueOf(value); + } + if ("getBoolean".equals(name)) { + Object value = columnValue(columns, rows[index[0]], args[0]); + wasNull[0] = value == null; + if (value instanceof Boolean) { + return value; + } + if (value instanceof Number) { + return ((Number) value).intValue() != 0; + } + String text = String.valueOf(value); + return "1".equals(text) + || "t".equalsIgnoreCase(text) + || "true".equalsIgnoreCase(text) + || "yes".equalsIgnoreCase(text); + } + if ("getInt".equals(name)) { + Object value = columnValue(columns, rows[index[0]], args[0]); + wasNull[0] = value == null; + if (value instanceof Number) { + return ((Number) value).intValue(); + } + return value == null ? 0 : Integer.parseInt(String.valueOf(value)); + } + if ("getObject".equals(name)) { + Object value = columnValue(columns, rows[index[0]], args[0]); + wasNull[0] = value == null; + return value; + } + if ("wasNull".equals(name)) { + return wasNull[0]; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static Object columnValue(String[] columns, Object[] row, Object key) { + if (key instanceof Number) { + return row[((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return row[i]; + } + } + return null; + } + + private static T proxy(Class type, final MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private static final class GeometryResultSet { + static ResultSet create() { + ResultSetMetaData meta = (ResultSetMetaData) Proxy.newProxyInstance( + GeometryResultSet.class.getClassLoader(), + new Class[]{ResultSetMetaData.class}, + (proxy, method, args) -> { + switch (method.getName()) { + case "getColumnCount": + return 2; + case "getColumnLabel": + case "getColumnName": + return ((Integer) args[0]) == 1 ? "id" : "geom"; + case "getColumnType": + return ((Integer) args[0]) == 1 ? Types.INTEGER : Types.OTHER; + case "getColumnTypeName": + return ((Integer) args[0]) == 1 ? "int4" : "geometry"; + default: + return null; + } + } + ); + + // POINT(116.397 39.908) with SRID=4326, little-endian. + String hex = "0101000020E6100000C520B07268195D404E62105839F44340"; + byte[] geomBytes = parseHex(hex); + + int[] cursor = new int[]{0}; // 0 = before first row + return (ResultSet) Proxy.newProxyInstance( + GeometryResultSet.class.getClassLoader(), + new Class[]{ResultSet.class}, + (proxy, method, args) -> { + String name = method.getName(); + switch (name) { + case "getMetaData": + return meta; + case "next": + cursor[0] += 1; + return cursor[0] == 1; + case "getInt": + return cursor[0] == 1 ? 1 : 0; + case "getObject": + return ((Integer) args[0]) == 2 ? geomBytes : 1; + case "wasNull": + return false; + case "close": + return null; + default: + return defaultPrimitive(method.getReturnType()); + } + } + ); + } + + private static byte[] parseHex(String s) { + byte[] out = new byte[s.length() / 2]; + for (int i = 0; i < out.length; i++) { + int hi = Character.digit(s.charAt(i * 2), 16); + int lo = Character.digit(s.charAt(i * 2 + 1), 16); + out[i] = (byte) ((hi << 4) | lo); + } + return out; + } + + private static Object defaultPrimitive(Class t) { + if (Boolean.TYPE.equals(t)) return false; + if (Integer.TYPE.equals(t)) return 0; + if (Long.TYPE.equals(t)) return 0L; + if (Double.TYPE.equals(t)) return 0.0; + return null; + } + } + + private static final class MetadataSqlFake { + private static final List statements = new ArrayList(); + + private static Connection connection() { + statements.clear(); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("prepareStatement".equals(name)) { + statements.add((String) args[0]); + return preparedStatement(); + } + if ("isClosed".equals(name)) { + return false; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static PreparedStatement preparedStatement() { + final ResultSet resultSet = emptyResultSet(); + return proxy(PreparedStatement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("executeQuery".equals(name)) { + return resultSet; + } + if ("setString".equals(name)) { + statements.add("param:" + args[0] + "=" + args[1]); + return null; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet emptyResultSet() { + final ResultSetMetaData metadata = proxy(ResultSetMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("getColumnCount".equals(method.getName())) { + return 0; + } + return defaultValue(method.getReturnType()); + } + }); + return proxy(ResultSet.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + return false; + } + if ("getMetaData".equals(name)) { + return metadata; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/common/src/test/java/com/dbx/agent/StandardJdbcMetadataTest.java b/agents/common/src/test/java/com/dbx/agent/StandardJdbcMetadataTest.java new file mode 100644 index 0000000..1ae5e8d --- /dev/null +++ b/agents/common/src/test/java/com/dbx/agent/StandardJdbcMetadataTest.java @@ -0,0 +1,776 @@ +package com.dbx.agent; + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class StandardJdbcMetadataTest { + private final JdbcAgentProfile profile = new JdbcAgentProfile( + "example.Driver", + "jdbc:example://{host}:{port}/{database}", + 0, + false, + Collections.singleton("SYS"), + Arrays.asList("TABLE", "VIEW", "BASE TABLE") + ); + + @Test + void listsSchemasWithFilteringAndStableOrdering() { + Connection conn = connection( + rows(row("TABLE_SCHEM", "APP"), row("TABLE_SCHEM", "SYS"), row("TABLE_SCHEM", "PUBLIC")), + rows(), + rows(), + rows(), + rows(), + rows() + ); + + assertEquals(Arrays.asList("APP", "PUBLIC"), StandardJdbcMetadata.INSTANCE.listSchemas(conn, profile)); + } + + @Test + void listsSchemasWhenConnectionGetSchemaIsUnsupported() { + Connection conn = connection( + rows(row("TABLE_SCHEM", "APP"), row("TABLE_SCHEM", "PUBLIC")), + rows(), + rows(), + rows(), + rows(), + rows(), + true + ); + + assertEquals(Arrays.asList("APP", "PUBLIC"), StandardJdbcMetadata.INSTANCE.listSchemas(conn, profile)); + } + + @Test + void listsSchemasWhenConnectionGetSchemaThrowsAbstractMethodError() { + Connection conn = connection( + rows(row("TABLE_SCHEM", "APP"), row("TABLE_SCHEM", "PUBLIC")), + rows(), + rows(), + rows(), + rows(), + rows(), + UnsupportedSchemaCall.ABSTRACT_METHOD_ERROR + ); + + assertEquals(Arrays.asList("APP", "PUBLIC"), StandardJdbcMetadata.INSTANCE.listSchemas(conn, profile)); + } + + @Test + void listsSchemasWithEmptyResultWhenDriverSchemaMetadataIsUnsupported() { + Connection conn = connection( + rows(), + rows(), + rows(), + rows(), + rows(), + rows(), + UnsupportedSchemaCall.METADATA_AND_CONNECTION_ABSTRACT_METHOD_ERROR + ); + + assertEquals(Collections.emptyList(), StandardJdbcMetadata.INSTANCE.listSchemas(conn, profile)); + } + + @Test + void listsTablesWithNormalizedTypesAndStableOrdering() { + Connection conn = connection( + rows(), + rows(row("TABLE_NAME", "ZETA", "TABLE_TYPE", "BASE TABLE", "REMARKS", "last"), + row("TABLE_NAME", "ALPHA", "TABLE_TYPE", "VIEW", "REMARKS", "first")), + rows(), + rows(), + rows(), + rows() + ); + + List tables = StandardJdbcMetadata.INSTANCE.listTables(conn, profile, "", "APP"); + + assertEquals("ALPHA", tables.get(0).getName()); + assertEquals("VIEW", tables.get(0).getTable_type()); + assertEquals("ZETA", tables.get(1).getName()); + assertEquals("TABLE", tables.get(1).getTable_type()); + } + + @Test + void listsProceduresAndFunctionsFromJdbcRoutineMetadata() { + Connection conn = routineConnection( + rows( + row("PROCEDURE_NAME", "PROCESS_ORDER", "REMARKS", "processes an order"), + row("PROCEDURE_NAME", "SHARED_ROUTINE", "REMARKS", null) + ), + rows( + row("FUNCTION_NAME", "CALCULATE_TOTAL", "REMARKS", "calculates a total"), + row("FUNCTION_NAME", "SHARED_ROUTINE", "REMARKS", null) + ) + ); + MetadataListConstraints constraints = + new MetadataListConstraints(null, null, null, Collections.singletonList("PROCEDURE")); + + List objects = StandardJdbcMetadata.INSTANCE.listObjects(conn, profile, "", "APP", constraints); + + assertEquals(2, objects.size()); + assertEquals("PROCESS_ORDER", objects.get(0).getName()); + assertEquals("PROCEDURE", objects.get(0).getObject_type()); + assertEquals("SHARED_ROUTINE", objects.get(1).getName()); + assertEquals("PROCEDURE", objects.get(1).getObject_type()); + } + + @Test + void listsDataTypesFromJdbcTypeInfo() { + Connection conn = connection( + rows(), + rows(), + rows(), + rows(), + rows(), + rows(), + UnsupportedSchemaCall.NONE, + null, + null, + null, + null, + rows(row("TYPE_NAME", "INTEGER"), row("TYPE_NAME", "VARCHAR"), row("TYPE_NAME", "integer")) + ); + + assertEquals(Arrays.asList("INTEGER", "VARCHAR"), StandardJdbcMetadata.INSTANCE.listDataTypes(conn)); + } + + @Test + void listTablesUsesDriverTableTypesWithinProfileAllowList() { + AtomicReference capturedTypes = new AtomicReference<>(); + Connection conn = connection( + rows(), + rows(row("TABLE_NAME", "ORDERS", "TABLE_TYPE", "TABLE", "REMARKS", null)), + rows(), + rows(), + rows(), + rows(), + rows( + row("TABLE_TYPE", "TABLE"), + row("TABLE_TYPE", "LOCAL TEMPORARY"), + row("TABLE_TYPE", "BASE TABLE") + ), + capturedTypes + ); + + StandardJdbcMetadata.INSTANCE.listTables(conn, profile, "", "APP"); + + assertEquals(Arrays.asList("TABLE", "BASE TABLE"), Arrays.asList(capturedTypes.get())); + } + + @Test + void listTablesAllowsHanaColumnAndRowTables() { + JdbcAgentProfile hanaProfile = new JdbcAgentProfile( + "com.sap.db.jdbc.Driver", + "jdbc:sap://{host}:{port}/?databaseName={database}", + 30015, + false, + Collections.emptySet(), + Arrays.asList("COLUMN TABLE", "ROW TABLE", "TABLE", "VIEW") + ); + AtomicReference capturedTypes = new AtomicReference<>(); + Connection conn = connection( + rows(), + rows( + row("TABLE_NAME", "ORDERS", "TABLE_TYPE", "COLUMN TABLE", "REMARKS", null), + row("TABLE_NAME", "AUDIT_LOG", "TABLE_TYPE", "ROW TABLE", "REMARKS", null), + row("TABLE_NAME", "ACTIVE_ORDERS", "TABLE_TYPE", "VIEW", "REMARKS", null) + ), + rows(), + rows(), + rows(), + rows(), + rows( + row("TABLE_TYPE", "COLUMN TABLE"), + row("TABLE_TYPE", "ROW TABLE"), + row("TABLE_TYPE", "VIEW") + ), + capturedTypes + ); + + List tables = StandardJdbcMetadata.INSTANCE.listTables(conn, hanaProfile, "", "APP"); + + assertEquals(Arrays.asList("COLUMN TABLE", "ROW TABLE", "VIEW"), Arrays.asList(capturedTypes.get())); + assertEquals(Arrays.asList("ACTIVE_ORDERS", "AUDIT_LOG", "ORDERS"), Arrays.asList( + tables.get(0).getName(), + tables.get(1).getName(), + tables.get(2).getName() + )); + assertEquals("VIEW", tables.get(0).getTable_type()); + assertEquals("TABLE", tables.get(1).getTable_type()); + assertEquals("TABLE", tables.get(2).getTable_type()); + } + + @Test + void mapsColumnsWithPrimaryKeysAndLengths() { + Connection conn = connection( + rows(), + rows(), + rows(row("COLUMN_NAME", "ID")), + rows(row( + "COLUMN_NAME", "ID", + "TYPE_NAME", "INTEGER", + "NULLABLE", DatabaseMetaData.columnNoNulls, + "COLUMN_DEF", null, + "REMARKS", "identifier", + "COLUMN_SIZE", 10, + "DECIMAL_DIGITS", 0 + ), row( + "COLUMN_NAME", "NAME", + "TYPE_NAME", "VARCHAR", + "NULLABLE", DatabaseMetaData.columnNullable, + "COLUMN_DEF", null, + "REMARKS", null, + "COLUMN_SIZE", 64, + "DECIMAL_DIGITS", 0 + )), + rows(), + rows() + ); + + List columns = StandardJdbcMetadata.INSTANCE.getColumns(conn, profile, "", "APP", "ORDERS"); + + assertEquals("ID", columns.get(0).getName()); + assertTrue(columns.get(0).getIs_primary_key()); + assertFalse(columns.get(0).getIs_nullable()); + assertEquals("NAME", columns.get(1).getName()); + assertEquals(Integer.valueOf(64), columns.get(1).getCharacter_maximum_length()); + } + + @Test + void marksPrimaryKeysFromConfiguredCatalogWhenColumnsAlreadyLoaded() { + Connection conn = catalogPrimaryKeyFallbackConnection( + "TENANTDB", + rows(), + rows(row("COLUMN_NAME", "ID")), + orderColumns() + ); + + List columns = StandardJdbcMetadata.INSTANCE.getColumns(conn, profile, "TENANTDB", "APP", "ORDERS"); + + assertEquals("ID", columns.get(0).getName()); + assertTrue(columns.get(0).getIs_primary_key()); + assertFalse(columns.get(0).getIs_nullable()); + assertEquals("NAME", columns.get(1).getName()); + assertFalse(columns.get(1).getIs_primary_key()); + assertEquals(Integer.valueOf(64), columns.get(1).getCharacter_maximum_length()); + } + + @Test + void doesNotMarkPrimaryKeysFromConfiguredCatalogWhenFallbackUnavailable() { + JdbcAgentProfile fallbackDisabledProfile = new JdbcAgentProfile( + "example.Driver", + "jdbc:example://{host}:{port}/{database}", + 0, + false, + Collections.emptySet(), + Collections.singletonList("TABLE"), + "\"", + "SET SCHEMA", + false, + false, + false, + false + ); + Connection disabledConn = catalogPrimaryKeyFallbackConnection( + "TENANTDB", + rows(), + rows(row("COLUMN_NAME", "ID")), + orderColumns() + ); + + List disabledColumns = StandardJdbcMetadata.INSTANCE.getColumns(disabledConn, fallbackDisabledProfile, "TENANTDB", "APP", "ORDERS"); + + assertFalse(disabledColumns.get(0).getIs_primary_key()); + + Connection emptyCatalogConn = catalogPrimaryKeyFallbackConnection( + "TENANTDB", + rows(), + rows(row("COLUMN_NAME", "ID")), + orderColumns() + ); + + List emptyCatalogColumns = StandardJdbcMetadata.INSTANCE.getColumns(emptyCatalogConn, profile, " ", "APP", "ORDERS"); + + assertFalse(emptyCatalogColumns.get(0).getIs_primary_key()); + } + + @Test + void groupsIndexColumnsInOrdinalOrder() { + Connection conn = connection( + rows(), + rows(), + rows(), + rows(), + rows(row("INDEX_NAME", "IDX_ORDERS", "COLUMN_NAME", "B", "ORDINAL_POSITION", (short) 2, "NON_UNIQUE", true), + row("INDEX_NAME", "IDX_ORDERS", "COLUMN_NAME", "A", "ORDINAL_POSITION", (short) 1, "NON_UNIQUE", true)), + rows() + ); + + List indexes = StandardJdbcMetadata.INSTANCE.listIndexes(conn, "APP", "ORDERS"); + + assertEquals(1, indexes.size()); + assertEquals(Arrays.asList("A", "B"), indexes.get(0).getColumns()); + assertFalse(indexes.get(0).getIs_unique()); + } + + @Test + void mapsForeignKeysAndEmptyTriggers() { + Connection conn = connection( + rows(), + rows(), + rows(), + rows(), + rows(), + rows(row("FK_NAME", null, "FKCOLUMN_NAME", "CUSTOMER_ID", "PKTABLE_NAME", "CUSTOMERS", "PKCOLUMN_NAME", "ID")) + ); + + List foreignKeys = StandardJdbcMetadata.INSTANCE.listForeignKeys(conn, "APP", "ORDERS"); + + assertEquals("", foreignKeys.get(0).getName()); + assertEquals("CUSTOMER_ID", foreignKeys.get(0).getColumn()); + assertEquals(Collections.emptyList(), StandardJdbcMetadata.INSTANCE.listTriggers("APP", "ORDERS")); + } + + @Test + void completionAssistantSearchesTablesAndColumnsWithServerSideMasks() { + AtomicReference capturedTableArgs = new AtomicReference<>(); + AtomicReference capturedColumnArgs = new AtomicReference<>(); + Connection conn = connection( + rows(), + rows( + row("TABLE_NAME", "ACCOUNTS", "TABLE_TYPE", "TABLE", "REMARKS", "account table"), + row("TABLE_NAME", "ACCOUNT_VIEW", "TABLE_TYPE", "VIEW", "REMARKS", null) + ), + rows(), + rows(row("COLUMN_NAME", "DISPLAY_NAME", "TYPE_NAME", "VARCHAR", "NULLABLE", DatabaseMetaData.columnNullable, "COLUMN_DEF", null, "REMARKS", "display")), + rows(), + rows(), + UnsupportedSchemaCall.NONE, + rows(row("TABLE_TYPE", "TABLE"), row("TABLE_TYPE", "VIEW")), + null, + capturedTableArgs, + capturedColumnArgs + ); + + CompletionAssistantRequest tablesRequest = request("sales", "APP", "ACC", Arrays.asList(CompletionAssistantObjectKind.TABLE, CompletionAssistantObjectKind.VIEW), null); + CompletionAssistantResponse tables = StandardJdbcMetadata.INSTANCE.completionAssistantSearch(conn, profile, "sales", tablesRequest); + + assertEquals(2, tables.getCandidates().size()); + assertEquals(CompletionAssistantCandidateKind.TABLE, tables.getCandidates().get(0).getKind()); + assertEquals("ACC%", capturedTableArgs.get()[2]); + + CompletionAssistantRequest columnsRequest = request("sales", "APP", "DISPLAY", Collections.singletonList(CompletionAssistantObjectKind.COLUMN), "ACCOUNTS"); + CompletionAssistantResponse columns = StandardJdbcMetadata.INSTANCE.completionAssistantSearch(conn, profile, "sales", columnsRequest); + + assertEquals(1, columns.getCandidates().size()); + assertEquals("DISPLAY_NAME", columns.getCandidates().get(0).getName()); + assertEquals("VARCHAR", columns.getCandidates().get(0).getData_type()); + assertEquals("ACCOUNTS", capturedColumnArgs.get()[2]); + assertEquals("DISPLAY%", capturedColumnArgs.get()[3]); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys + ) { + return connection(schemas, tables, primaryKeys, columns, indexes, foreignKeys, false); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys, + boolean unsupportedGetSchema + ) { + return connection( + schemas, + tables, + primaryKeys, + columns, + indexes, + foreignKeys, + unsupportedGetSchema ? UnsupportedSchemaCall.RUNTIME_EXCEPTION : UnsupportedSchemaCall.NONE, + null, + null + ); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys, + UnsupportedSchemaCall unsupportedSchemaCall + ) { + return connection(schemas, tables, primaryKeys, columns, indexes, foreignKeys, unsupportedSchemaCall, null, null); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys, + ResultSet tableTypes, + AtomicReference capturedTableTypes + ) { + return connection(schemas, tables, primaryKeys, columns, indexes, foreignKeys, UnsupportedSchemaCall.NONE, tableTypes, capturedTableTypes); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys, + UnsupportedSchemaCall unsupportedSchemaCall, + ResultSet tableTypes, + AtomicReference capturedTableTypes + ) { + return connection(schemas, tables, primaryKeys, columns, indexes, foreignKeys, unsupportedSchemaCall, tableTypes, capturedTableTypes, null, null); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys, + UnsupportedSchemaCall unsupportedSchemaCall, + ResultSet tableTypes, + AtomicReference capturedTableTypes, + AtomicReference capturedTableArgs, + AtomicReference capturedColumnArgs + ) { + return connection( + schemas, + tables, + primaryKeys, + columns, + indexes, + foreignKeys, + unsupportedSchemaCall, + tableTypes, + capturedTableTypes, + capturedTableArgs, + capturedColumnArgs, + null + ); + } + + private static Connection connection( + ResultSet schemas, + ResultSet tables, + ResultSet primaryKeys, + ResultSet columns, + ResultSet indexes, + ResultSet foreignKeys, + UnsupportedSchemaCall unsupportedSchemaCall, + ResultSet tableTypes, + AtomicReference capturedTableTypes, + AtomicReference capturedTableArgs, + AtomicReference capturedColumnArgs, + ResultSet dataTypes + ) { + DatabaseMetaData meta = proxy(DatabaseMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("getSchemas".equals(name)) { + if (unsupportedSchemaCall == UnsupportedSchemaCall.METADATA_AND_CONNECTION_ABSTRACT_METHOD_ERROR) { + throw new AbstractMethodError("Unimplemented method: getSchemas()"); + } + return schemas; + } + if ("getTables".equals(name)) { + if (capturedTableArgs != null) { + capturedTableArgs.set(args); + } + if (capturedTableTypes != null && args != null && args.length > 3) { + capturedTableTypes.set((String[]) args[3]); + } + return tables; + } + if ("getTableTypes".equals(name) && tableTypes != null) { + return tableTypes; + } + if ("getTypeInfo".equals(name) && dataTypes != null) { + return dataTypes; + } + if ("getPrimaryKeys".equals(name)) { + return primaryKeys; + } + if ("getColumns".equals(name)) { + if (capturedColumnArgs != null) { + capturedColumnArgs.set(args); + } + return columns; + } + if ("getIndexInfo".equals(name)) { + return indexes; + } + if ("getImportedKeys".equals(name)) { + return foreignKeys; + } + if ("getCatalogs".equals(name)) { + return rows(); + } + return defaultValue(method.getReturnType()); + } + }); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("getMetaData".equals(method.getName())) { + return meta; + } + if ("getSchema".equals(method.getName())) { + if (unsupportedSchemaCall == UnsupportedSchemaCall.RUNTIME_EXCEPTION) { + throw new RuntimeException("Unimplemented method: getSchema()"); + } + if (unsupportedSchemaCall == UnsupportedSchemaCall.ABSTRACT_METHOD_ERROR + || unsupportedSchemaCall == UnsupportedSchemaCall.METADATA_AND_CONNECTION_ABSTRACT_METHOD_ERROR) { + throw new AbstractMethodError("Unimplemented method: getSchema()"); + } + return null; + } + if ("getCatalog".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static Connection catalogPrimaryKeyFallbackConnection( + String fallbackCatalog, + ResultSet defaultPrimaryKeys, + ResultSet fallbackPrimaryKeys, + ResultSet columns + ) { + DatabaseMetaData meta = proxy(DatabaseMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("getPrimaryKeys".equals(name)) { + return fallbackCatalog.equals(args[0]) ? fallbackPrimaryKeys : defaultPrimaryKeys; + } + if ("getColumns".equals(name)) { + return columns; + } + if ("getCatalogs".equals(name)) { + return rows(); + } + return defaultValue(method.getReturnType()); + } + }); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("getMetaData".equals(method.getName())) { + return meta; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static Connection routineConnection(ResultSet procedures, ResultSet functions) { + DatabaseMetaData meta = proxy(DatabaseMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("getTables".equals(name) || "getTableTypes".equals(name)) { + return rows(); + } + if ("getProcedures".equals(name)) { + return procedures; + } + if ("getFunctions".equals(name)) { + return functions; + } + return defaultValue(method.getReturnType()); + } + }); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("getMetaData".equals(method.getName())) { + return meta; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet orderColumns() { + return rows(row( + "COLUMN_NAME", "ID", + "TYPE_NAME", "INTEGER", + "NULLABLE", DatabaseMetaData.columnNoNulls, + "COLUMN_DEF", null, + "REMARKS", "identifier", + "COLUMN_SIZE", 10, + "DECIMAL_DIGITS", 0 + ), row( + "COLUMN_NAME", "NAME", + "TYPE_NAME", "VARCHAR", + "NULLABLE", DatabaseMetaData.columnNullable, + "COLUMN_DEF", null, + "REMARKS", null, + "COLUMN_SIZE", 64, + "DECIMAL_DIGITS", 0 + )); + } + + private static ResultSet rows(Map... rows) { + return proxy(ResultSet.class, new MethodHandler() { + private int index = -1; + + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + index += 1; + return index < rows.length; + } + if ("close".equals(name)) { + return null; + } + Object value = rows[index].get(args[0]); + if ("getString".equals(name)) { + return value == null ? null : String.valueOf(value); + } + if ("getObject".equals(name)) { + return value; + } + if ("getInt".equals(name)) { + return value instanceof Number ? ((Number) value).intValue() : 0; + } + if ("getShort".equals(name)) { + return value instanceof Number ? ((Number) value).shortValue() : 0; + } + if ("getBoolean".equals(name)) { + return value instanceof Boolean && (Boolean) value; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static Map row(Object... values) { + Map row = new LinkedHashMap<>(); + for (int i = 0; i < values.length; i += 2) { + row.put(String.valueOf(values[i]), values[i + 1]); + } + return row; + } + + private static CompletionAssistantRequest request( + String database, + String schema, + String mask, + List kinds, + String parentName + ) { + CompletionAssistantRequest request = new CompletionAssistantRequest(); + setField(request, "database", database); + setField(request, "schema", schema); + setField(request, "mask", mask); + setField(request, "object_kinds", kinds); + setField(request, "parent_schema", schema); + setField(request, "parent_name", parentName); + setField(request, "max_results", 10); + setField(request, "match_mode", CompletionAssistantMatchMode.PREFIX); + return request; + } + + private static void setField(Object target, String name, Object value) { + try { + java.lang.reflect.Field field = target.getClass().getDeclaredField(name); + field.setAccessible(true); + field.set(target, value); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static T proxy(Class type, final MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } + + private enum UnsupportedSchemaCall { + NONE, + RUNTIME_EXCEPTION, + ABSTRACT_METHOD_ERROR, + METADATA_AND_CONNECTION_ABSTRACT_METHOD_ERROR + } +} diff --git a/agents/docs/agent-authoring.md b/agents/docs/agent-authoring.md new file mode 100644 index 0000000..5aecf95 --- /dev/null +++ b/agents/docs/agent-authoring.md @@ -0,0 +1,318 @@ +# Agent Authoring Guide + +This guide defines the expected shape of a DBX agent. Treat it as the checklist for adding or reviewing an agent. + +## Agent Contract + +Every agent is a standalone JVM process that: + +- Implements `com.dbx.agent.DatabaseAgent`. +- Prefer extending `com.dbx.agent.ConfiguredJdbcAgent` for standard JDBC agents. +- Extend `com.dbx.agent.AbstractJdbcAgent` when the database needs custom metadata SQL but can still share lifecycle and execution behavior. +- Starts with `new JsonRpcServer(new ()).run()` in its `main` method. +- Talks to DBX over stdin/stdout JSON-RPC 2.0. +- Uses JDBC for database access unless the module is explicitly designed around a non-JDBC protocol. +- Produces one shadow JAR named `dbx-agent-.jar`. + +The public behavior should be consistent across agents even when each database has different SQL dialects. + +## Required Methods + +Each agent must implement these capabilities: + +- `connect(params)`: handled by the shared JDBC foundation for JDBC agents. +- `testConnection(params)`: handled by the shared JDBC foundation for JDBC agents. +- `listDatabases()`: return visible catalogs/databases when the database supports them; otherwise return one sensible default database. +- `listSchemas()`: return schemas in stable order. +- `listTables(schema)`: return table-like objects for the selected schema, with normalized `type` values where possible. +- `getColumns(schema, table)`: return column metadata, nullability, defaults, key flags, numeric precision/scale, character length, and comments when available. +- `listIndexes(schema, table)`: return one `IndexInfo` per index, preserving column order. +- `listForeignKeys(schema, table)`: return outbound foreign keys when available. +- `listTriggers(schema, table)`: return triggers when available; return an empty list if the database has no trigger metadata. +- `executeQuery(sql, schema, options)`: inherited from the shared JDBC foundation unless the agent has a documented custom execution behavior. +- `disconnect()`: inherited from the shared JDBC foundation. +- `getConnection()`: inherited from the shared JDBC foundation. + +Throw `IllegalStateException("Not connected")` when a method requires a connection and none exists. + +## SQL Execution Rules + +Do not classify statements by SQL prefix inside individual agents. + +For most JDBC agents, inherit this from `AbstractJdbcAgent` or `ConfiguredJdbcAgent`. Do not copy the execution method into the agent class. If a custom value reader is required, override `resultValue(...)`: + +```java +@Override +protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> rs.getString(index)); +} +``` + +For simple standard JDBC metadata agents, start with a profile: + +```java +public final class ExampleAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile EXAMPLE_PROFILE = new JdbcAgentProfile( + "com.example.Driver", + "jdbc:example://{host}:{port}/{database}", + 1234 + ); + + public ExampleAgent() { + super(EXAMPLE_PROFILE); + } +} +``` + +`JdbcExecutor` owns these behaviors: + +- Trims a trailing semicolon before execution. +- Handles `BEGIN`, `COMMIT`, and `ROLLBACK`. +- Runs schema switching SQL before the user statement. +- Executes statements with `Statement.execute(...)`. +- Reads `ResultSet` output for any statement type, not only `SELECT`. +- Returns update counts for update statements. +- Caps result rows at `options.maxRows`, defaulting to `JdbcExecutor.DEFAULT_MAX_ROWS`. +- Applies `options.fetchSize` to the JDBC statement when provided. +- Marks `truncated = true` only when more rows exist beyond the cap. + +An agent must not reintroduce local copies of: + +- `QUERY_PREFIXES` +- `MAX_ROWS` +- `executeUpdate(trimmedSql)` in `executeQuery` +- result truncation based on `rows.size >= MAX_ROWS` +- `Class.forName(...)` / `DriverManager.getConnection(...)` lifecycle boilerplate outside shared foundation extension points +- local `disconnect()` copies for JDBC agents +- local `JdbcExecutor.INSTANCE.execute(...)` copies for standard query execution + +## Schema And Identifier Rules + +Override `setSchemaSQL(schema)` for the database dialect, or configure the profile dialect options when standard quoting is enough. + +Use `JdbcIdentifiers` helpers when quoting identifiers: + +```java +@Override +public String setSchemaSQL(String schema) { + return "SET SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); +} +``` + +If the database does not support a schema switching statement, return an empty string: + +```java +@Override +public String setSchemaSQL(String schema) { + return ""; +} +``` + +Never concatenate unquoted user-provided schema names into schema-switching SQL unless the target database requires unquoted identifiers and the value has already been validated. + +For metadata queries, prefer prepared statements for `schema`, `table`, and other user-controlled values. + +## Shared JDBC Foundation + +Use the smallest shared base that matches the database: + +- `ConfiguredJdbcAgent`: standard JDBC lifecycle, execution, and standard `DatabaseMetaData`-based metadata. +- `PostgresLikeAgent`: PostgreSQL-family metadata with shared lifecycle and execution. +- `AbstractJdbcAgent`: custom metadata SQL with shared lifecycle, execution, paging, transactions, result conversion, and DDL fallback. + +If a database cannot yet use the shared foundation, add it to the validation allowlist with a specific reason and tests covering the custom behavior. Remove the allowlist entry when the module migrates. + +## Driver Packaging + +Each module chooses one of two driver modes. + +### Bundled Driver + +Use this when the driver is redistributable from Maven Central or another permitted repository: + +```groovy +dependencies { + implementation 'com.example:example-jdbc:1.2.3' +} +``` + +The root Gradle convention supplies `project(':common')`, `project(':test-support')`, JUnit, Java toolchains, the Shadow plugin, and the `dbx-agent-` archive name for included agent modules. + +No manifest flag is needed. + +### External Driver + +Use this when the driver cannot be redistributed or must be supplied by the user: + +```groovy +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'Example DB', + 'Agent-External-Driver': 'true', + 'Main-Class': 'com.dbx.agent.example.ExampleAgent' + ) + } +} +``` + +The release workflow reads `Agent-External-Driver: true` and emits `external_driver_required: true` in `agent-registry.json`. + +## Module Registration + +When adding an agent named `exampledb`: + +- Create the module under `drivers/exampledb`. +- Add `exampledb` to `driverModules` in `settings.gradle`. +- Add `"exampledb": "0.1.0"` to `versions.json`. +- Set `Agent-Label` to the user-facing database name. +- Set `Main-Class` to the Java agent class, usually `com.dbx.agent.exampledb.ExampledbAgent`. +- Add the database to the README support table. + +The root `build.gradle` convention derives the archive name from the module name, so `exampledb` builds `dbx-agent-exampledb.jar` without per-module archive configuration. + +`versions.json` must contain only modules included in `settings.gradle`, excluding infrastructure modules such as `common` and `test-support`. + +## Runtime Selection + +Default to: + +```groovy +def java8Projects = ['common', 'test-support'] as Set + +subprojects { + java { + toolchain { + languageVersion = JavaLanguageVersion.of(java8Projects.contains(name) ? 8 : 21) + } + } +} +``` + +Most agents use JRE 21. If an agent needs a special runtime, update the root Gradle convention, the release workflow JRE detection logic, and document the reason in the module. + +## Tests + +Every JDBC agent should have at least one execution-path regression test. + +For agents that can run with an embedded or in-memory database, prefer both shared behavior contracts: + +```java +import java.util.List; + +class H2ExecutionBehaviorTest extends JdbcExecutionBehaviorTest { + @Override + protected DatabaseAgent createConnectedAgent(String databaseName) { + return H2AgentFixtures.createConnectedAgent(databaseName); + } + + @Override + protected String resultSetSql() { + return "CALL 42"; + } + + @Override + protected List expectedResultSetColumns() { + return List.of("42"); + } + + @Override + protected List> expectedResultSetRows() { + return List.of(List.of(42)); + } + + @Override + protected String rowsSql(int rowCount) { + return "SELECT X FROM SYSTEM_RANGE(1, " + rowCount + ")"; + } +} + +class H2MetadataBehaviorTest extends JdbcMetadataBehaviorTest { + @Override + protected DatabaseAgent createConnectedAgent(String databaseName) { + return H2AgentFixtures.createConnectedAgent(databaseName); + } + + @Override + protected List metadataFixtureSql() { + return List.of( + "CREATE TABLE BETA_TABLE (ID INT PRIMARY KEY)", + "CREATE TABLE ALPHA_TABLE (ID INT PRIMARY KEY)", + "CREATE TABLE COLUMN_ORDER_SAMPLE (ID INT PRIMARY KEY, NAME VARCHAR(64), CREATED_AT TIMESTAMP)" + ); + } + + @Override + protected String metadataSchema() { + return "PUBLIC"; + } + + @Override + protected List expectedTablesInOrder() { + return List.of("ALPHA_TABLE", "BETA_TABLE", "COLUMN_ORDER_SAMPLE"); + } + + @Override + protected String metadataColumnsTable() { + return "COLUMN_ORDER_SAMPLE"; + } + + @Override + protected List expectedColumnsInOrder() { + return List.of("ID", "NAME", "CREATED_AT"); + } +} + +final class H2AgentFixtures { + private H2AgentFixtures() { + } + + static DatabaseAgent createConnectedAgent(String databaseName) { + H2Agent agent = new H2Agent(); + agent.connect(new ConnectParams("mem:" + databaseName + ";DB_CLOSE_DELAY=-1")); + return agent; + } +} +``` + +`JdbcExecutionBehaviorTest` verifies non-`SELECT` result set execution, max-row truncation boundaries, and transaction control statements. `JdbcMetadataBehaviorTest` verifies stable metadata ordering. Agents with limited local test infrastructure can adopt the execution contract first and add the metadata contract later. + +For agents that need unavailable commercial or external drivers, use the fake execution contract: + +```java +class ExampleAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new ExampleAgent(); + } + + @Override + protected String resultSetSql() { + return "SHOW TABLES"; + } +} +``` + +`JdbcFakeExecutionBehaviorTest` injects a fake JDBC connection and verifies that `executeQuery` uses `Statement.execute`, reads the returned `ResultSet`, and does not fall back to `executeQuery` or `executeUpdate`. Use `testImplementation project(':test-support')` for this contract. + +## Review Checklist + +Before opening a PR or release: + +- `executeQuery` delegates to `JdbcExecutor.execute`. +- No local SQL-prefix classifier exists. +- No local result row cap exists unless there is a database-specific reason documented in code. +- Metadata methods use prepared statements for user-controlled schema/table inputs. +- `setSchemaSQL` quotes identifiers or returns an empty string. +- `disconnect` closes and clears the connection. +- `testConnection` closes its temporary connection. +- Root `build.gradle` conventions cover Java plugin, toolchain, JUnit, common/test-support dependencies, Shadow plugin, and archive name. +- Module `build.gradle` has correct driver dependencies, `Agent-Label`, `Main-Class`, and external driver flag. +- `settings.gradle`, `versions.json`, and README are updated together. +- At least one execution-path regression test exists. +- `python3 scripts/validate_agents.py` passes. +- `./gradlew test shadowJar --continue` passes. diff --git a/agents/docs/examples/jdbc-agent-template/README.md b/agents/docs/examples/jdbc-agent-template/README.md new file mode 100644 index 0000000..18c8152 --- /dev/null +++ b/agents/docs/examples/jdbc-agent-template/README.md @@ -0,0 +1,20 @@ +# JDBC Agent Template + +Copy this directory when adding a new JDBC-based DBX agent. + +Recommended flow: + +1. Rename `template` paths, package names, class names, and artifact names to the new agent name. +2. Replace the driver class and JDBC URL builder. +3. Implement metadata SQL using the target database system catalogs or `DatabaseMetaData`. +4. Keep `executeQuery` delegated to `JdbcExecutor`. +5. Place the module under `drivers/`, then add it to `settings.gradle`, `versions.json`, and the root README support table. +6. Run `./gradlew ::test ::shadowJar`. + +To verify this template before copying it, run: + +```bash +./gradlew -p docs/examples/jdbc-agent-template clean test shadowJar +``` + +See `docs/agent-authoring.md` for the full checklist. diff --git a/agents/docs/examples/jdbc-agent-template/build.gradle b/agents/docs/examples/jdbc-agent-template/build.gradle new file mode 100644 index 0000000..45bec3a --- /dev/null +++ b/agents/docs/examples/jdbc-agent-template/build.gradle @@ -0,0 +1,64 @@ +plugins { + id 'java' + id 'com.gradleup.shadow' +} + +configure([project(':common'), project(':test-support')]) { + if (name == 'test-support') { + apply plugin: 'java-library' + } else { + apply plugin: 'java' + } + + java { + toolchain { + languageVersion = JavaLanguageVersion.of(8) + } + } + + dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4' + } + + tasks.withType(Test).configureEach { + useJUnitPlatform() + } +} + +dependencies { + implementation project(':common') + + // Bundled driver example: + // implementation 'com.example:example-jdbc:1.2.3' + + // External driver example: + // implementation fileTree(dir: 'libs', include: ['*.jar']) + + testImplementation 'org.junit.jupiter:junit-jupiter:5.11.4' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher:1.11.4' + testImplementation project(':test-support') +} + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +tasks.named('shadowJar') { + archiveBaseName = 'dbx-agent-template' + archiveClassifier = '' + manifest { + attributes( + 'Agent-Label': 'Template DB', + // Add this only when users must provide the JDBC driver jar: + // 'Agent-External-Driver': 'true', + 'Main-Class': 'com.dbx.agent.template.TemplateAgent' + ) + } +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/agents/docs/examples/jdbc-agent-template/settings.gradle b/agents/docs/examples/jdbc-agent-template/settings.gradle new file mode 100644 index 0000000..0a2ac70 --- /dev/null +++ b/agents/docs/examples/jdbc-agent-template/settings.gradle @@ -0,0 +1,21 @@ +pluginManagement { + repositories { + gradlePluginPortal() + mavenCentral() + } + plugins { + id 'com.gradleup.shadow' version '9.0.0-beta12' + } +} + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + mavenCentral() + } +} + +rootProject.name = 'jdbc-agent-template' +include 'common', 'test-support' +project(':common').projectDir = file('../../../common') +project(':test-support').projectDir = file('../../../test-support') diff --git a/agents/docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java b/agents/docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java new file mode 100644 index 0000000..bca4d45 --- /dev/null +++ b/agents/docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java @@ -0,0 +1,27 @@ +package com.dbx.agent.template; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; + +public final class TemplateAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile TEMPLATE_PROFILE = new JdbcAgentProfile( + "com.example.jdbc.TemplateDriver", + "jdbc:template://{host}:{port}/{database}", + 1234 + ); + + public TemplateAgent() { + super(TEMPLATE_PROFILE); + } + + @Override + public String setSchemaSQL(String schema) { + return "SET SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + public static void main(String[] args) { + new JsonRpcServer(new TemplateAgent()).run(); + } +} diff --git a/agents/docs/examples/jdbc-agent-template/src/test/java/com/dbx/agent/template/TemplateAgentTest.java b/agents/docs/examples/jdbc-agent-template/src/test/java/com/dbx/agent/template/TemplateAgentTest.java new file mode 100644 index 0000000..d074e67 --- /dev/null +++ b/agents/docs/examples/jdbc-agent-template/src/test/java/com/dbx/agent/template/TemplateAgentTest.java @@ -0,0 +1,23 @@ +package com.dbx.agent.template; + +import com.dbx.agent.test.TestSupport; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.test.JdbcAgentFake; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TemplateAgentTest { + @Test + void executeQueryUsesStatementExecute() { + TemplateAgent agent = new TemplateAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + agent.executeQuery("SHOW TABLES", null, new ExecuteQueryOptions()); + + Assertions.assertEquals( + List.of("setMaxRows:10001", "execute"), + JdbcAgentFake.calls + ); + } +} diff --git a/agents/docs/release-checklist.md b/agents/docs/release-checklist.md new file mode 100644 index 0000000..f84b33a --- /dev/null +++ b/agents/docs/release-checklist.md @@ -0,0 +1,193 @@ +# Release Checklist + +Use this checklist before pushing release tags or publishing DBX agent jars. + +## 1. Confirm Scope + +- Review the recent commits: + +```bash +git log --oneline -10 +``` + +- Confirm the working tree is clean before tagging: + +```bash +git status --short +``` + +- Check that each intended agent change touches the right module directory, `common`, `test-support`, docs, or workflows. +- Avoid mixing unrelated driver updates, behavior changes, and release-only edits in the same commit. + +## 2. Local Verification + +On this workspace, use the local JDKs under `/private/tmp`: + +```bash +env JAVA_HOME=/private/tmp/dbx-jdk/jdk-21.0.11+10/Contents/Home \ + ./gradlew \ + -Dorg.gradle.java.installations.paths=/private/tmp/dbx-jdk/jdk-21.0.11+10/Contents/Home,/private/tmp/dbx-jdk8/jdk8/Contents/Home \ + test shadowJar --continue +``` + +Also run the lightweight validation gates: + +```bash +python3 -m unittest discover -s scripts -p '*_test.py' +python3 scripts/validate_agents.py +python3 scripts/validate_agent_jars.py +git diff --check +``` + +Expected result: + +- Python script tests pass. +- `Agent validation passed`. +- `Agent jar validation passed` after `shadowJar` has produced jars. +- `git diff --check` prints nothing. +- Gradle finishes with `BUILD SUCCESSFUL`. + +## 3. Agent Contract Checks + +For changed agent modules: + +- `executeQuery` delegates to `JdbcExecutor.execute`. +- No module-local SQL prefix classifier is present. +- No module-local result row cap is present. +- `Statement.execute(...)` is used for arbitrary user SQL. +- Metadata methods return stable ordering for schemas, tables, columns, indexes, foreign keys, and triggers. +- User-controlled schema and table names are passed through prepared statements or quoted with `JdbcIdentifiers`. +- `connect` stores one connection, `disconnect` closes and clears it, and `testConnection` closes its temporary connection. +- A behavior test exists: + - Use `JdbcExecutionBehaviorTest` and `JdbcMetadataBehaviorTest` for agents with a local/embedded test database. + - Use `JdbcFakeExecutionBehaviorTest` for agents that require unavailable external drivers. + - Use targeted `JdbcMetadataSqlFake` tests for metadata SQL that must interpolate quoted identifiers. + +## 4. Registry And Module Checks + +Run: + +```bash +python3 scripts/validate_agents.py +``` + +This checks: + +- `versions.json` keys match included agent modules in `settings.gradle`. +- Root Gradle conventions define agent archive names. +- Agent manifests define `Agent-Label`. +- Agent manifests define `Main-Class`. +- Agent `Main-Class` source exists and the built jar contains the matching `.class`. +- Forbidden legacy execution patterns are absent. +- Disallowed JVM source/build DSL residue is absent outside Gradle output directories. + +When adding or removing an agent, update these files together: + +- `settings.gradle` +- `versions.json` +- `README.md` +- Agent module `build.gradle` for driver dependencies and manifest attributes +- Root `build.gradle` only when the module needs non-standard shared build behavior + +## 5. Driver Packaging + +For bundled drivers: + +- Verify the dependency is redistributable. +- Prefer Maven dependencies over checked-in jars. + +For external drivers: + +- Use `implementation fileTree(dir: 'libs', include: ['*.jar'])`. +- Set the manifest attribute: + +```groovy +attributes( + 'Agent-External-Driver': 'true' +) +``` + +- Confirm release registry generation emits `external_driver_required: true`. + +Current external-driver agents include BigQuery and SunDB. + +## 6. JRE Selection + +Java agents are built for the default JRE key `21`, backed by JDK 21 in the release workflow. Native agents do not require a JRE. + +If another agent needs a different runtime, update the release workflow JRE detection logic. +- Document why in the module or release notes. +- Verify DBX can download the matching runtime artifact. + +## 7. CI Expectations + +The CI workflow runs on `main` and pull requests: + +```bash +python3 -m unittest discover -s scripts -p '*_test.py' +python3 scripts/validate_agents.py +./gradlew test shadowJar --continue +python3 scripts/validate_agent_jars.py +``` + +Do not tag a release while CI is failing on `main`. + +## 8. Release Tag Flow + +Release workflow runs on tags matching `agents-v*`. + +Before tagging: + +```bash +git status --short +git log --oneline -5 +git tag --list 'agents-v*' --sort=-creatordate | head +``` + +Choose a new tag that does not already exist locally or on GitHub. For example: + +```bash +RELEASE_TAG=agents-v0.3.0 +git tag --list "$RELEASE_TAG" +git ls-remote --tags origin "$RELEASE_TAG" +``` + +Both commands should print nothing before you create the tag. + +Create and push the tag: + +```bash +git tag "$RELEASE_TAG" +git push origin main +git push origin "$RELEASE_TAG" +``` + +The release workflow will: + +- Bump changed module versions in `versions.json`. +- Build all agent shadow jars. +- Build/download JRE artifacts. +- Generate `agent-registry.json`. +- Create a GitHub release with jars, JRE archives, and registry. + +## 9. Post-Release Verification + +After the GitHub release finishes: + +- Download or inspect `agent-registry.json`. +- Confirm every expected agent appears under `drivers`. +- Confirm labels preserve spaces, for example `Google BigQuery`. +- Confirm Java agents use JRE key `21`. +- Confirm `external_driver_required` is correct. +- Confirm every jar URL, sha256, and size is present. +- Spot-check at least one agent jar manifest: + +```bash +unzip -p dbx-agent-h2.jar META-INF/MANIFEST.MF +``` + +## 10. Known Follow-Ups + +- Gradle currently reports deprecated features that will be incompatible with Gradle 10. Use `--warning-mode all` in a separate cleanup task. +- Commercial or external-driver agents still need manual smoke tests with real driver jars and databases. +- Add real containerized smoke tests only one database family at a time. diff --git a/agents/drivers/access/build.gradle b/agents/drivers/access/build.gradle new file mode 100644 index 0000000..946b6f9 --- /dev/null +++ b/agents/drivers/access/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation 'io.github.spannm:ucanaccess:5.1.5' + implementation 'io.github.spannm:jackcess-encrypt:5.1.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Microsoft Access', 'Main-Class': 'com.dbx.agent.access.AccessAgent') + } +} diff --git a/agents/drivers/access/src/main/java/com/dbx/agent/access/AccessAgent.java b/agents/drivers/access/src/main/java/com/dbx/agent/access/AccessAgent.java new file mode 100644 index 0000000..90311ca --- /dev/null +++ b/agents/drivers/access/src/main/java/com/dbx/agent/access/AccessAgent.java @@ -0,0 +1,372 @@ +package com.dbx.agent.access; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.nio.file.Files; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class AccessAgent extends BaseDatabaseAgent { + private static final String ENCRYPTED_ACCESS_OPENER = EncryptedAccessOpener.class.getName(); + private Connection connection; + private String databaseFile = ""; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); + String file = databasePath(params); + String url = jdbcUrl(params, true); + connection = DriverManager.getConnection(url, params.getUsername(), params.getPassword()); + databaseFile = file; + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); + String file = databasePath(params); + if (file.isBlank() || !Files.exists(Path.of(file))) { + return false; + } + try (Connection conn = DriverManager.getConnection(jdbcUrl(params, false), params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + } + + @Override + public List listDatabases() { + String name = "default"; + if (!databaseFile.isBlank()) { + Path fileName = Path.of(databaseFile).getFileName(); + if (fileName != null && !fileName.toString().isBlank()) { + name = fileName.toString(); + } + } + return Collections.singletonList(new DatabaseInfo(name)); + } + + @Override + public List listSchemas() { + return Collections.emptyList(); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + DatabaseMetaData meta = requireConnected().getMetaData(); + List result = new ArrayList<>(); + try (ResultSet rs = meta.getTables(null, null, "%", new String[]{"TABLE", "VIEW"})) { + while (rs.next()) { + String name = rs.getString("TABLE_NAME"); + if (name == null || startsWithIgnoreCase(name, "MSys")) { + continue; + } + result.add(new TableInfo(name, normalizeTableType(rs.getString("TABLE_TYPE")), null)); + } + } + result.sort(Comparator.comparing(table -> table.getName().toLowerCase(Locale.ROOT))); + return result; + }); + } + + @Override + public List listObjects(String schema) { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), null, table.getComment())); + } + return result; + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + DatabaseMetaData meta = requireConnected().getMetaData(); + Set primaryKeys = primaryKeyColumns(meta, table); + List result = new ArrayList<>(); + try (ResultSet rs = meta.getColumns(null, null, table, "%")) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + name, + typeName(rs), + rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls, + rs.getString("COLUMN_DEF"), + primaryKeys.contains(name), + null, + rs.getString("REMARKS"), + intObject(rs, "COLUMN_SIZE"), + intObject(rs, "DECIMAL_DIGITS"), + intObject(rs, "COLUMN_SIZE") + )); + } + } + result.sort(Comparator.comparingInt(column -> columnOrder(meta, table, column.getName()))); + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + DatabaseMetaData meta = requireConnected().getMetaData(); + Set primaryKeys = primaryKeyColumns(meta, table); + Map> columnsByIndex = new LinkedHashMap<>(); + Map uniqueByIndex = new LinkedHashMap<>(); + Map primaryByIndex = new LinkedHashMap<>(); + Map typeByIndex = new LinkedHashMap<>(); + + try (ResultSet rs = meta.getIndexInfo(null, null, table, false, false)) { + while (rs.next()) { + if (rs.getShort("TYPE") == DatabaseMetaData.tableIndexStatistic) { + continue; + } + String indexName = rs.getString("INDEX_NAME"); + String columnName = rs.getString("COLUMN_NAME"); + if (indexName == null || columnName == null) { + continue; + } + short ordinal = rs.getShort("ORDINAL_POSITION"); + + columnsByIndex.computeIfAbsent(indexName, ignored -> new ArrayList<>()).add(new OrdinalColumn(ordinal, columnName)); + uniqueByIndex.put(indexName, !rs.getBoolean("NON_UNIQUE")); + primaryByIndex.put(indexName, primaryKeys.contains(columnName) || indexName.equalsIgnoreCase("PrimaryKey")); + typeByIndex.put(indexName, indexTypeName(rs.getShort("TYPE"))); + } + } + + List result = new ArrayList<>(); + for (Map.Entry> entry : columnsByIndex.entrySet()) { + String name = entry.getKey(); + List pairs = entry.getValue(); + pairs.sort(Comparator.comparingInt(pair -> pair.ordinal)); + List columns = new ArrayList<>(); + for (OrdinalColumn pair : pairs) { + columns.add(pair.column); + } + result.add(new IndexInfo( + name, + columns, + uniqueByIndex.getOrDefault(name, false), + primaryByIndex.getOrDefault(name, false), + null, + typeByIndex.get(name), + null, + null + )); + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + DatabaseMetaData meta = requireConnected().getMetaData(); + List result = new ArrayList<>(); + try (ResultSet rs = meta.getImportedKeys(null, null, table)) { + while (rs.next()) { + String name = rs.getString("FK_NAME"); + result.add(new ForeignKeyInfo( + name == null ? "" : name, + rs.getString("FKCOLUMN_NAME"), + rs.getString("PKTABLE_NAME"), + rs.getString("PKCOLUMN_NAME") + )); + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + JdbcExecutor.INSTANCE::defaultResultValue + ); + } + + @Override + public String setSchemaSQL(String schema) { + return ""; + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private Set primaryKeyColumns(DatabaseMetaData meta, String table) throws Exception { + Set result = new LinkedHashSet<>(); + try (ResultSet rs = meta.getPrimaryKeys(null, null, table)) { + while (rs.next()) { + result.add(rs.getString("COLUMN_NAME")); + } + } + return result; + } + + private int columnOrder(DatabaseMetaData meta, String table, String column) { + return unchecked(() -> { + try (ResultSet rs = meta.getColumns(null, null, table, column)) { + return rs.next() ? rs.getInt("ORDINAL_POSITION") : Integer.MAX_VALUE; + } + }); + } + + private static String databasePath(ConnectParams params) { + if (startsWithIgnoreCase(params.getConnection_string(), "jdbc:ucanaccess:")) { + return stripJdbcPrefix(params.getConnection_string()); + } + if (startsWithIgnoreCase(params.getDatabase(), "jdbc:ucanaccess:")) { + return stripJdbcPrefix(params.getDatabase()); + } + if (!params.getHost().isBlank()) { + return params.getHost(); + } + return params.getDatabase(); + } + + static String jdbcUrl(ConnectParams params, boolean createIfMissing) { + String rawUrl; + if (startsWithIgnoreCase(params.getConnection_string(), "jdbc:ucanaccess:")) { + rawUrl = params.getConnection_string(); + } else if (startsWithIgnoreCase(params.getDatabase(), "jdbc:ucanaccess:")) { + rawUrl = params.getDatabase(); + } else { + rawUrl = "jdbc:ucanaccess://" + databasePath(params); + } + rawUrl = appendUCanAccessParams(rawUrl, params.getUrl_params()); + + // The codec opener is safe for regular files and enables encrypted Access files when a password is supplied. + if (!containsIgnoreCase(rawUrl, "jackcessOpener=")) { + rawUrl += (rawUrl.endsWith(";") ? "" : ";") + "jackcessOpener=" + ENCRYPTED_ACCESS_OPENER; + } + + if (!createIfMissing || Files.exists(Path.of(databasePath(params)))) { + return rawUrl; + } + if (containsIgnoreCase(rawUrl, "newDatabaseVersion=")) { + return rawUrl; + } + return rawUrl + ";newDatabaseVersion=V2010"; + } + + private static String appendUCanAccessParams(String url, String urlParams) { + String params = trimUCanAccessParams(urlParams); + if (params.isEmpty()) { + return url; + } + return url + (url.endsWith(";") ? "" : ";") + params; + } + + private static String trimUCanAccessParams(String urlParams) { + String value = urlParams == null ? "" : urlParams.trim(); + while (value.startsWith("?") || value.startsWith("&") || value.startsWith(";")) { + value = value.substring(1); + } + return value; + } + + private static String normalizeTableType(String value) { + if (value != null && value.toUpperCase(Locale.ROOT).equals("BASE TABLE")) { + return "TABLE"; + } + return value == null ? "TABLE" : value; + } + + private static String indexTypeName(short value) { + if (value == DatabaseMetaData.tableIndexClustered) { + return "CLUSTERED"; + } + if (value == DatabaseMetaData.tableIndexHashed) { + return "HASHED"; + } + if (value == DatabaseMetaData.tableIndexOther) { + return "OTHER"; + } + return ""; + } + + private static String typeName(ResultSet rs) throws Exception { + String value = rs.getString("TYPE_NAME"); + return value == null ? Integer.toString(rs.getInt("DATA_TYPE")) : value; + } + + private static Integer intObject(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number number ? number.intValue() : null; + } + + private static String stripJdbcPrefix(String value) { + return substringBefore(value.replaceFirst("(?i)^jdbc:ucanaccess://", ""), ';'); + } + + private static String substringBefore(String value, char delimiter) { + int index = value.indexOf(delimiter); + return index >= 0 ? value.substring(0, index) : value; + } + + private static boolean startsWithIgnoreCase(String value, String prefix) { + return value.regionMatches(true, 0, prefix, 0, prefix.length()); + } + + private static boolean containsIgnoreCase(String value, String needle) { + return value.toLowerCase(Locale.ROOT).contains(needle.toLowerCase(Locale.ROOT)); + } + + private record OrdinalColumn(short ordinal, String column) { + } + + public static void main(String[] args) { + new JsonRpcServer(new AccessAgent()).run(); + } +} diff --git a/agents/drivers/access/src/main/java/com/dbx/agent/access/EncryptedAccessOpener.java b/agents/drivers/access/src/main/java/com/dbx/agent/access/EncryptedAccessOpener.java new file mode 100644 index 0000000..b298f45 --- /dev/null +++ b/agents/drivers/access/src/main/java/com/dbx/agent/access/EncryptedAccessOpener.java @@ -0,0 +1,20 @@ +package com.dbx.agent.access; + +import io.github.spannm.jackcess.Database; +import io.github.spannm.jackcess.DatabaseBuilder; +import io.github.spannm.jackcess.encrypt.CryptCodecProvider; +import java.io.File; +import java.io.IOException; +import net.ucanaccess.jdbc.IJackcessOpenerInterface; + +public final class EncryptedAccessOpener implements IJackcessOpenerInterface { + @Override + public Database open(File file, String password) throws IOException { + DatabaseBuilder builder = new DatabaseBuilder(file); + // UCanAccess flushes changes at transaction boundaries, so Jackcess auto-sync is unnecessary overhead. + builder.withAutoSync(false); + builder.withCodecProvider(new CryptCodecProvider(password)); + builder.withReadOnly(false); + return builder.open(); + } +} diff --git a/agents/drivers/access/src/test/java/com/dbx/agent/access/AccessAgentTest.java b/agents/drivers/access/src/test/java/com/dbx/agent/access/AccessAgentTest.java new file mode 100644 index 0000000..1ef554a --- /dev/null +++ b/agents/drivers/access/src/test/java/com/dbx/agent/access/AccessAgentTest.java @@ -0,0 +1,155 @@ +package com.dbx.agent.access; + +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.test.JdbcConnectedAgentTest; +import java.nio.file.Path; +import java.nio.file.Files; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class AccessAgentTest extends JdbcConnectedAgentTest { + @TempDir + Path tempDir; + + @Override + protected DatabaseAgent createConnectedAgent(String databaseName) { + Path file = tempDir.resolve(databaseName + ".accdb"); + AccessAgent agent = new AccessAgent(); + agent.connect(new ConnectParams("", 0, file.toString(), "", "", "", "", false)); + return agent; + } + + @Test + void connectsToAnAccessFileAndReturnsTableMetadata() { + withAgent("metadata", agent -> { + agent.executeQuery( + "CREATE TABLE People (ID COUNTER PRIMARY KEY, Name TEXT(64), Active YESNO)", + null, + new ExecuteQueryOptions() + ); + agent.executeQuery("INSERT INTO People (Name, Active) VALUES ('Ada', TRUE)", null, new ExecuteQueryOptions()); + + var tables = agent.listTables(""); + var columns = agent.getColumns("", "People"); + var result = agent.executeQuery("SELECT Name, Active FROM People", null, new ExecuteQueryOptions()); + + Assertions.assertTrue(tables.stream().anyMatch(table -> table.getName().equals("People"))); + Assertions.assertEquals(List.of("ID", "Name", "Active"), columns.stream().map(column -> column.getName()).toList()); + Assertions.assertTrue(columns.stream() + .filter(column -> column.getName().equals("ID")) + .findFirst() + .orElseThrow() + .getIs_primary_key()); + Assertions.assertEquals(List.of("Name", "Active"), result.getColumns()); + Assertions.assertEquals("Ada", result.getRows().get(0).get(0)); + Assertions.assertEquals(true, result.getRows().get(0).get(1)); + }); + } + + @Test + void returnsEmptySchemaListForAccessFiles() { + withAgent("schemas", agent -> { + Assertions.assertEquals(List.of(), agent.listSchemas()); + Assertions.assertFalse(agent.testConnection( + new ConnectParams("", 0, tempDir.resolve("missing.accdb").toString(), "", "", "", "", false) + )); + }); + } + + @Test + void appendsUcanaccessUrlParams() { + Path file = tempDir.resolve("params.accdb"); + ConnectParams params = new ConnectParams("", 0, file.toString(), "", "", "memory=false;ignoreCase=true", "", false); + + Assertions.assertEquals( + "jdbc:ucanaccess://" + file + ";memory=false;ignoreCase=true;jackcessOpener=com.dbx.agent.access.EncryptedAccessOpener;newDatabaseVersion=V2010", + AccessAgent.jdbcUrl(params, true) + ); + } + + @Test + void trimsUcanaccessUrlParamSeparators() { + Path file = tempDir.resolve("params-existing.accdb"); + ConnectParams params = new ConnectParams("", 0, "jdbc:ucanaccess://" + file + ";", "", "", ";memory=false", "", false); + + Assertions.assertEquals( + "jdbc:ucanaccess://" + file + ";memory=false;jackcessOpener=com.dbx.agent.access.EncryptedAccessOpener;newDatabaseVersion=V2010", + AccessAgent.jdbcUrl(params, true) + ); + } + + @Test + void preservesCustomJackcessOpener() { + Path file = tempDir.resolve("custom-opener.accdb"); + ConnectParams params = new ConnectParams( + "", 0, file.toString(), "", "", "jackcessOpener=example.CustomOpener", "", false + ); + + Assertions.assertEquals( + "jdbc:ucanaccess://" + file + ";jackcessOpener=example.CustomOpener;newDatabaseVersion=V2010", + AccessAgent.jdbcUrl(params, true) + ); + } + + @Test + void connectsToEncryptedAccessFile() throws Exception { + Path source = Path.of(getClass().getResource("/db2007-enc.accdb").toURI()); + Path file = tempDir.resolve("encrypted.accdb"); + Files.copy(source, file); + AccessAgent agent = new AccessAgent(); + + try { + agent.connect(new ConnectParams("", 0, file.toString(), "", "Test123", "", "", false)); + Assertions.assertFalse(agent.listTables("").isEmpty()); + } finally { + agent.disconnect(); + } + } + + @Test + void rejectsIncorrectEncryptedAccessPassword() throws Exception { + Path source = Path.of(getClass().getResource("/db2007-enc.accdb").toURI()); + Path file = tempDir.resolve("encrypted-wrong-password.accdb"); + Files.copy(source, file); + AccessAgent agent = new AccessAgent(); + + RuntimeException error = Assertions.assertThrows(RuntimeException.class, () -> + agent.connect(new ConnectParams("", 0, file.toString(), "", "wrong", "", "", false)) + ); + Assertions.assertTrue(error.getMessage().contains("Incorrect password provided")); + } + + @Test + void supportsLimitOffsetSqlAndCursorResultPages() { + withAgent("pages", agent -> { + agent.executeQuery("CREATE TABLE Items (ID COUNTER PRIMARY KEY, Value INTEGER)", null, new ExecuteQueryOptions()); + for (int i = 1; i <= 5; i++) { + agent.executeQuery("INSERT INTO Items (Value) VALUES (" + i + ")", null, new ExecuteQueryOptions()); + } + + var limited = agent.executeQuery( + "SELECT [Value] FROM [Items] ORDER BY [ID] LIMIT 2 OFFSET 1", + null, + new ExecuteQueryOptions() + ); + var firstPage = agent.executeQueryPage( + "SELECT Value FROM Items ORDER BY ID", + null, + new QueryPageOptions(2, null, 5) + ); + String sessionId = firstPage.getSession_id(); + Assertions.assertNotNull(sessionId); + var secondPage = agent.fetchQueryPage(sessionId, 2); + + Assertions.assertEquals(List.of(2, 3), limited.getRows().stream().map(row -> row.get(0)).toList()); + Assertions.assertEquals(List.of(1, 2), firstPage.getRows().stream().map(row -> row.get(0)).toList()); + Assertions.assertEquals(true, firstPage.getHas_more()); + Assertions.assertEquals(List.of(3, 4), secondPage.getRows().stream().map(row -> row.get(0)).toList()); + }); + } +} diff --git a/agents/drivers/access/src/test/resources/db2007-enc.accdb b/agents/drivers/access/src/test/resources/db2007-enc.accdb new file mode 100644 index 0000000000000000000000000000000000000000..3707e94e95e7d1238f7dfa0636bfc17374295fd8 GIT binary patch literal 430080 zcmeF2V~{ApvY^MdZQHhO+qP|=v2EL)IfFB{ZQItK`|jI)Z#VYOMr_1J?7P)}x~eO) zGr!EPh(ZGZ0sttx7}}W_I++j%3X2km2mt{9ZELXuHZp)5P(7AJt7r_1vr_j{91R<% zFEn)WmfDwEwCj@rfuH_Wp#y3h{wLT>Kjn2ck|fl87@u5Z{(8pr>IZy8tiS^e=IV^r zXi)_W0Dy�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

>iwJMY|%F7z5OXJR0V&A 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≠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 z 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 literal 0 HcmV?d00001 diff --git a/agents/drivers/bigquery/build.gradle b/agents/drivers/bigquery/build.gradle new file mode 100644 index 0000000..ae0da1b --- /dev/null +++ b/agents/drivers/bigquery/build.gradle @@ -0,0 +1,13 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'Google BigQuery', + 'Agent-External-Driver': 'true', + 'Main-Class': 'com.dbx.agent.bigquery.BigQueryAgent' + ) + } +} diff --git a/agents/drivers/bigquery/src/main/java/com/dbx/agent/bigquery/BigQueryAgent.java b/agents/drivers/bigquery/src/main/java/com/dbx/agent/bigquery/BigQueryAgent.java new file mode 100644 index 0000000..71d64bf --- /dev/null +++ b/agents/drivers/bigquery/src/main/java/com/dbx/agent/bigquery/BigQueryAgent.java @@ -0,0 +1,234 @@ +package com.dbx.agent.bigquery; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + +public final class BigQueryAgent extends AbstractJdbcAgent { + + @Override + protected String driverClass() { + return "com.simba.googlebigquery.jdbc.Driver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY schema_name")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String quotedSchema = JdbcIdentifiers.INSTANCE.backtick(schema); + String sql = "SELECT table_name, table_type FROM " + quotedSchema + ".INFORMATION_SCHEMA.TABLES ORDER BY table_name"; + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("table_name"), + normalizeTableType(rs.getString("table_type")), + null + )); + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + if (hasLikeWildcard(normalized.getFilter())) { + return normalized.filterTables(listTables(schema)); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + String quotedSchema = JdbcIdentifiers.INSTANCE.backtick(schema); + StringBuilder sql = new StringBuilder("SELECT table_name, table_type FROM ") + .append(quotedSchema) + .append(".INFORMATION_SCHEMA.TABLES WHERE 1 = 1"); + appendBigQueryTableTypePredicate(sql, args, constraints); + if (constraints.hasFilter()) { + sql.append(" AND UPPER(table_name) LIKE ?"); + args.add(constraints.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + sql.append(" ORDER BY table_name"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("table_name"), + normalizeTableType(rs.getString("table_type")), + null + )); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String quotedSchema = JdbcIdentifiers.INSTANCE.backtick(schema); + String sql = "SELECT column_name, data_type, is_nullable " + + "FROM " + quotedSchema + ".INFORMATION_SCHEMA.COLUMNS " + + "WHERE table_name = ? " + + "ORDER BY ordinal_position"; + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ColumnInfo( + rs.getString("column_name"), + rs.getString("data_type"), + "YES".equals(rs.getString("is_nullable")), + null, + false, + null, + null, + null, + null, + null + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + return ""; + } + + static String buildUrl(ConnectParams params) { + String url = "jdbc:bigquery://" + params.getHost() + ":" + params.getPort() + ";ProjectId=" + params.getDatabase(); + String extraParams = trimSemicolons(params.getUrl_params()); + return extraParams.isBlank() ? url : url + ";" + extraParams; + } + + private static String trimSemicolons(String value) { + if (value == null) { + return ""; + } + return value.trim().replaceAll("^;+", "").replaceAll(";+\\s*$", ""); + } + + private static String normalizeTableType(String type) { + if ("BASE TABLE".equals(type)) { + return "TABLE"; + } + if ("MATERIALIZED VIEW".equals(type)) { + return "MATERIALIZED_VIEW"; + } + return type; + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static void appendBigQueryTableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (constraints.tableTypeAllowed("MATERIALIZED_VIEW")) { + types.add("MATERIALIZED VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND table_type IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static boolean hasLikeWildcard(String value) { + return value != null && (value.contains("%") || value.contains("_") || value.contains("\\")); + } + + public static void main(String[] args) { + new JsonRpcServer(new BigQueryAgent()).run(); + } +} diff --git a/agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentMetadataTest.java b/agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentMetadataTest.java new file mode 100644 index 0000000..5a6e80d --- /dev/null +++ b/agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentMetadataTest.java @@ -0,0 +1,65 @@ +package com.dbx.agent.bigquery; + +import com.dbx.agent.test.TestSupport; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.JdbcAgentFake; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import java.sql.Connection; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class BigQueryAgentMetadataTest { + @Test + void quotesSchemaIdentifiersInMetadataSql() { + BigQueryAgent agent = new BigQueryAgent(); + Connection fake = JdbcMetadataSqlFake.connection(); + TestSupport.setPrivateConnection(agent, fake); + + agent.listTables("bad`schema"); + agent.getColumns("bad`schema", "sample"); + + Assertions.assertTrue( + JdbcMetadataSqlFake.statements.stream() + .anyMatch(statement -> statement.contains("FROM `bad``schema`.INFORMATION_SCHEMA.TABLES")) + ); + Assertions.assertTrue( + JdbcMetadataSqlFake.statements.stream() + .anyMatch(statement -> statement.contains("FROM `bad``schema`.INFORMATION_SCHEMA.COLUMNS")) + ); + } + + @Test + void buildUrlAppendsAuthenticationUrlParams() { + ConnectParams params = new ConnectParams( + "https://www.googleapis.com/bigquery/v2", + 443, + "demo-project", + "", + "", + "OAuthType=0;OAuthServiceAcctEmail=svc@demo.iam.gserviceaccount.com;OAuthPvtKeyPath=C:\\keys\\demo.json", + "", + false + ); + + Assertions.assertEquals( + "jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=demo-project;OAuthType=0;OAuthServiceAcctEmail=svc@demo.iam.gserviceaccount.com;OAuthPvtKeyPath=C:\\keys\\demo.json", + BigQueryAgent.buildUrl(params) + ); + } + + @Test + void constrainedTableMetadataPushesFilterTypesAndPaging() { + BigQueryAgent agent = new BigQueryAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("demo`dataset", new MetadataListConstraints("ord", 25, 50, List.of("TABLE", "VIEW"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM `demo``dataset`.INFORMATION_SCHEMA.TABLES"), sql); + Assertions.assertTrue(sql.contains("table_type IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("UPPER(table_name) LIKE ?"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 25 OFFSET 50"), sql); + } +} diff --git a/agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentTest.java b/agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentTest.java new file mode 100644 index 0000000..147d1f6 --- /dev/null +++ b/agents/drivers/bigquery/src/test/java/com/dbx/agent/bigquery/BigQueryAgentTest.java @@ -0,0 +1,16 @@ +package com.dbx.agent.bigquery; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; + +class BigQueryAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new BigQueryAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL dataset.proc()"; + } +} diff --git a/agents/drivers/cassandra/build.gradle b/agents/drivers/cassandra/build.gradle new file mode 100644 index 0000000..38a8d6f --- /dev/null +++ b/agents/drivers/cassandra/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.ing.data:cassandra-jdbc-wrapper:4.12.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Apache Cassandra', 'Main-Class': 'com.dbx.agent.cassandra.CassandraAgent') + } +} diff --git a/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java b/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java new file mode 100644 index 0000000..6ef9f34 --- /dev/null +++ b/agents/drivers/cassandra/src/main/java/com/dbx/agent/cassandra/CassandraAgent.java @@ -0,0 +1,194 @@ +package com.dbx.agent.cassandra; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class CassandraAgent extends AbstractJdbcAgent { + private static final Pattern TARGET_PATTERN = Pattern.compile("target[\"']?\\s*[:=]\\s*[\"']?([\\w]+)"); + + @Override + protected String driverClass() { + return "com.ing.data.cassandra.jdbc.CassandraDriver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT keyspace_name FROM system_schema.keyspaces"; + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + result.sort(Comparator.comparing(DatabaseInfo::getName)); + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT table_name FROM system_schema.tables WHERE keyspace_name = ?"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1), "TABLE", null)); + } + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + return result; + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT column_name, type, kind FROM system_schema.columns WHERE keyspace_name = ? AND table_name = ?"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String kind = coalesce(rs.getString("kind")); + boolean isPrimaryKey = "partition_key".equals(kind) || "clustering".equals(kind); + result.add(new ColumnInfo( + rs.getString("column_name"), + coalesce(rs.getString("type"), "unknown"), + !isPrimaryKey, + null, + isPrimaryKey, + kind.trim().isEmpty() ? null : kind, + null, + null, + null, + null + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT index_name, options FROM system_schema.indexes WHERE keyspace_name = ? AND table_name = ?"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String indexName = coalesce(rs.getString("index_name")); + String options = coalesce(rs.getString("options")); + result.add(new IndexInfo( + indexName, + targetColumns(options), + false, + false, + null, + null, + null, + null + )); + } + } + } + result.sort(Comparator.comparing(IndexInfo::getName)); + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + static String buildUrl(ConnectParams params) { + String baseUrl = "jdbc:cassandra://" + params.getHost() + ":" + params.getPort(); + String keyspace = coalesce(params.getDatabase()).trim(); + // Cassandra rejects an empty keyspace path; omit it so DBX can connect first and list keyspaces. + String url = keyspace.isEmpty() ? baseUrl : baseUrl + "/" + keyspace; + // Multi-DC clusters require localdatacenter= + String extraParams = coalesce(params.getUrl_params()).trim(); + while (extraParams.startsWith("?") || extraParams.startsWith("&")) { + extraParams = extraParams.substring(1); + } + return extraParams.isEmpty() ? url : url + "?" + extraParams; + } + + private static List targetColumns(String options) { + Matcher matcher = TARGET_PATTERN.matcher(options); + if (!matcher.find()) { + return Collections.emptyList(); + } + return Collections.singletonList(matcher.group(1)); + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + private static String coalesce(String value, String fallback) { + return value == null ? fallback : value; + } + + public static void main(String[] args) { + new JsonRpcServer(new CassandraAgent()).run(); + } +} diff --git a/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java b/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java new file mode 100644 index 0000000..4eb9e6b --- /dev/null +++ b/agents/drivers/cassandra/src/test/java/com/dbx/agent/cassandra/CassandraAgentTest.java @@ -0,0 +1,52 @@ +package com.dbx.agent.cassandra; + +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CassandraAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new CassandraAgent(); + } + + @Override + protected String resultSetSql() { + return "LIST ROLES"; + } + + @Test + void buildsServerUrlWhenKeyspaceIsEmpty() { + ConnectParams params = new ConnectParams("127.0.0.1", 9042, "", "cassandra", "cassandra", "", "", false); + + assertEquals("jdbc:cassandra://127.0.0.1:9042", CassandraAgent.buildUrl(params)); + } + + @Test + void buildsKeyspaceUrlWhenKeyspaceIsSet() { + ConnectParams params = new ConnectParams("127.0.0.1", 9042, "app_keyspace", "cassandra", "cassandra", "", "", false); + + assertEquals("jdbc:cassandra://127.0.0.1:9042/app_keyspace", CassandraAgent.buildUrl(params)); + } + + @Test + void appendsUrlParamsForMultiDcLocalDatacenter() { + ConnectParams params = new ConnectParams( + "127.0.0.1", 9042, "app_keyspace", "cassandra", "cassandra", "localdatacenter=dc1", "", false + ); + + assertEquals("jdbc:cassandra://127.0.0.1:9042/app_keyspace?localdatacenter=dc1", CassandraAgent.buildUrl(params)); + } + + @Test + void stripsLeadingQuestionMarkFromUrlParams() { + ConnectParams params = new ConnectParams( + "127.0.0.1", 9042, "", "cassandra", "cassandra", "?localdatacenter=dc1", "", false + ); + + assertEquals("jdbc:cassandra://127.0.0.1:9042?localdatacenter=dc1", CassandraAgent.buildUrl(params)); + } +} diff --git a/agents/drivers/dameng/build.gradle b/agents/drivers/dameng/build.gradle new file mode 100644 index 0000000..6a80eb9 --- /dev/null +++ b/agents/drivers/dameng/build.gradle @@ -0,0 +1,13 @@ +dependencies { + // Local override: place a newer DmJdbcDriver*.jar in libs/ for versions + // not yet published to Maven Central (the fileTree takes priority over Maven). + implementation fileTree(dir: 'libs', include: ['*.jar']) + // DmJdbcDriver8 supports JDK 8+ (compatible with JRE 21 used by DAMENG agent). + implementation 'com.dameng:DmJdbcDriver8:8.1.5.45' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': '达梦 DM8', 'Main-Class': 'com.dbx.agent.dameng.DamengAgent') + } +} diff --git a/agents/drivers/dameng/libs/.gitkeep b/agents/drivers/dameng/libs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/agents/drivers/dameng/src/main/java/com/dbx/agent/dameng/DamengAgent.java b/agents/drivers/dameng/src/main/java/com/dbx/agent/dameng/DamengAgent.java new file mode 100644 index 0000000..103b206 --- /dev/null +++ b/agents/drivers/dameng/src/main/java/com/dbx/agent/dameng/DamengAgent.java @@ -0,0 +1,1327 @@ +package com.dbx.agent.dameng; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.io.PrintStream; +import java.io.Reader; +import java.sql.Blob; +import java.sql.Clob; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLXML; +import java.sql.Statement; +import java.sql.Types; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class DamengAgent extends BaseDatabaseAgent { + private static final String AGENT_VERSION = "9999.06.04.1-fix-default"; + private static final Set SYSTEM_USERS = Set.of( + "SYS", "SYSAUDITOR", "SYSSSO", "CTISYS", + "SYS_DBA", "_SYS_STATISTICS", "SYS_PHM" + ); + + private Connection connection; + private String connectedUsername; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + withSuppressedStdout(() -> { + Class.forName("dm.jdbc.driver.DmDriver"); + connection = DriverManager.getConnection(buildUrl(params), params.getUsername(), params.getPassword()); + connectedUsername = params.getUsername(); + }); + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + return withSuppressedStdout(() -> { + Class.forName("dm.jdbc.driver.DmDriver"); + try (Connection conn = DriverManager.getConnection(buildUrl(params), params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + }); + } + + /** + * The DM JDBC driver writes a banner to {@code System.out} during + * {@code Class.forName} / driver initialization. This corrupts the + * JSON-RPC stdout protocol. Temporarily redirect {@code System.out} + * to {@code System.err} so driver output lands on stderr instead. + */ + private static T withSuppressedStdout(ThrowingSupplier action) throws Exception { + PrintStream originalOut = System.out; + try { + System.setOut(System.err); + return action.get(); + } finally { + System.setOut(originalOut); + } + } + + private static void withSuppressedStdout(ThrowingRunnable action) throws Exception { + PrintStream originalOut = System.out; + try { + System.setOut(System.err); + action.run(); + } finally { + System.setOut(originalOut); + } + } + + @Override + public List listDatabases() { + return unchecked(() -> listVisibleUsers().stream().map(DatabaseInfo::new).toList()); + } + + @Override + public List listSchemas() { + return unchecked(this::listVisibleSchemas); + } + + private List listVisibleUsers() throws Exception { + List result = new ArrayList<>(); + String placeholders = String.join(",", SYSTEM_USERS.stream().map(user -> "?").toList()); + String sql = "SELECT USERNAME FROM ALL_USERS WHERE USERNAME NOT IN (" + placeholders + ") ORDER BY USERNAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + int index = 1; + for (String user : SYSTEM_USERS) { + stmt.setString(index++, user); + } + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(rs.getString(1)); + } + } + } + return result; + } + + private List listVisibleSchemas() throws Exception { + List result = new ArrayList<>(); + String placeholders = String.join(",", SYSTEM_USERS.stream().map(user -> "?").toList()); + String sql = "SELECT NAME FROM SYS.SYSOBJECTS WHERE TYPE$ = 'SCH' AND NAME NOT IN (" + placeholders + ") ORDER BY NAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + int index = 1; + for (String user : SYSTEM_USERS) { + stmt.setString(index++, user); + } + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(rs.getString(1)); + } + } + } + return result; + } + + @Override + public List listTables(String schema) { + // Keep this call on the legacy object-type overload; the common agent + // also exposes a constraints overload for paged metadata listing. + return listTables(schema, (List) null); + } + + @Override + public List listTables(String schema, List objectTypes) { + return unchecked(() -> { + Map tablesByName = new LinkedHashMap<>(); + if (objectTypesInclude(objectTypes, "TABLE")) { + loadTableOrView(schema, "TABLE", tablesByName); + } + if (objectTypesInclude(objectTypes, "VIEW")) { + loadTableOrView(schema, "VIEW", tablesByName); + } + if (objectTypesInclude(objectTypes, "MATERIALIZED_VIEW")) { + loadMaterializedViews(schema, tablesByName); + } + List result = new ArrayList<>(tablesByName.values()); + result.sort(Comparator.comparing(TableInfo::getName)); + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + return queryConstrainedTables(schema, normalized); + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + if (!constraints.includesTableLikeTypes()) { + return List.of(); + } + try { + return unchecked(() -> { + MetadataQuery query = buildConstrainedTablesQuery(schema, constraints); + List result = new ArrayList<>(); + try (PreparedStatement stmt = requireConnected().prepareStatement(query.sql())) { + bind(stmt, query.args()); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString("TABLE_NAME"), normalizeObjectType(rs.getString("TABLE_TYPE")), rs.getString("COMMENTS"))); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } catch (RuntimeException e) { + // Restricted Dameng catalog views vary by version; fall back to the + // legacy metadata path so browsing still works when pushdown fails. + return constraints.filterTables(listTables(schema)); + } + } + + static MetadataQuery buildConstrainedTablesQuery(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder(""" + SELECT o.OBJECT_NAME AS TABLE_NAME, + CASE WHEN o.OBJECT_TYPE = 'MATERIALIZED VIEW' THEN 'MATERIALIZED_VIEW' ELSE o.OBJECT_TYPE END AS TABLE_TYPE, + c.COMMENTS + FROM ALL_OBJECTS o + LEFT JOIN ALL_TAB_COMMENTS c ON c.OWNER = o.OWNER AND c.TABLE_NAME = o.OBJECT_NAME + WHERE o.OWNER = ? + """.stripIndent().trim()); + args.add(schema); + appendDamengObjectTypePredicate(sql, args, normalized, true); + sql.append(" AND (o.OBJECT_TYPE <> 'TABLE' OR o.OBJECT_NAME NOT LIKE 'MTAB$_%')"); + appendNameFilter(sql, args, "o.OBJECT_NAME", normalized); + sql.append(" ORDER BY o.OBJECT_NAME"); + appendLimitOffset(sql, args, normalized); + return new MetadataQuery(sql.toString(), args); + } + + private void loadTableOrView(String schema, String tableType, Map tablesByName) { + if (!loadTableOrViewFromAllObjects(schema, tableType, tablesByName)) { + loadTableOrViewFromComments(schema, tableType, tablesByName); + } + if ("VIEW".equals(tableType)) { + removeMaterializedViewsFromRegularViews(schema, tablesByName); + } + } + + private boolean loadTableOrViewFromAllObjects(String schema, String tableType, Map tablesByName) { + String sql = (""" + SELECT o.OBJECT_NAME AS TABLE_NAME, c.COMMENTS + FROM ALL_OBJECTS o + LEFT JOIN ALL_TAB_COMMENTS c ON c.OWNER = o.OWNER AND c.TABLE_NAME = o.OBJECT_NAME + WHERE o.OWNER = ? AND o.OBJECT_TYPE = '%s' AND ( (o.OBJECT_TYPE = 'TABLE' AND o.OBJECT_NAME NOT LIKE 'MTAB$_%%') OR o.OBJECT_TYPE = 'VIEW') + ORDER BY o.OBJECT_NAME + """).formatted(tableType).stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + addTableInfo(tablesByName, rs.getString(1), tableType, rs.getString(2)); + } + } + return true; + } catch (Exception ignored) { + return false; + } + } + + private void loadTableOrViewFromComments(String schema, String tableType, Map tablesByName) { + String tableNameFilter = "TABLE".equals(tableType) ? " AND TABLE_NAME NOT LIKE 'MTAB$_%'" : ""; + String sql = (""" + SELECT TABLE_NAME, COMMENTS + FROM ALL_TAB_COMMENTS + WHERE OWNER = ? AND TABLE_TYPE = '%s'%s + ORDER BY TABLE_NAME + """).formatted(tableType, tableNameFilter).stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + addTableInfo(tablesByName, rs.getString(1), tableType, rs.getString(2)); + } + } + } catch (Exception ignored) { + // Keep metadata browsing usable even when optional catalog views are restricted. + } + } + + private void loadMaterializedViews(String schema, Map tablesByName) { + loadMaterializedViewsFromAllObjects(schema, tablesByName); + } + + private void loadMaterializedViewsFromAllObjects(String schema, Map tablesByName) { + String sql = """ + SELECT m.MVIEW_NAME AS TABLE_NAME, c.COMMENTS + FROM USER_MVIEWS m LEFT JOIN ALL_OBJECTS o ON m.SCHID = o.OBJECT_ID + LEFT JOIN ALL_TAB_COMMENTS c ON c.OWNER = o.OWNER AND c.TABLE_NAME = m.MVIEW_NAME + WHERE o.OWNER = ? + ORDER BY TABLE_NAME + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + addTableInfo(tablesByName, rs.getString(1), "MATERIALIZED_VIEW", rs.getString(2)); + } + } + } catch (Exception ignored) { + // Older or restricted Dameng catalogs may not expose this object type. + } + } + + private void loadMaterializedViewsFromUserMviews(String schema, Map tablesByName) { + if (!schemaMatchesConnectedUser(schema)) { + return; + } + loadUserMviews("SELECT MVIEW_NAME FROM USER_MVIEWS", tablesByName); + } + + private boolean loadUserMviews(String sql, Map tablesByName) { + try (PreparedStatement stmt = requireConnected().prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + addTableInfo(tablesByName, rs.getString(1), "MATERIALIZED_VIEW", null); + } + return true; + } catch (Exception ignored) { + return false; + } + } + + private void removeMaterializedViewsFromRegularViews(String schema, Map tablesByName) { + /*if (!schemaMatchesConnectedUser(schema)) { + return; + }*/ + for (String name : listUserMviewNames()) { + tablesByName.remove(name); + } + } + + private Set listUserMviewNames() { + Set names = new java.util.HashSet<>(); + String sql = "SELECT MVIEW_NAME FROM USER_MVIEWS"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String key = metadataNameKey(rs.getString(1)); + if (!key.isEmpty()) { + names.add(key); + } + } + } catch (Exception ignored) { + // Some Dameng versions or users do not expose USER_MVIEWS. + } + return names; + } + + private boolean schemaMatchesConnectedUser(String schema) { + return connectedUsername != null + && schema != null + && !connectedUsername.isBlank() + && schema.equalsIgnoreCase(connectedUsername); + } + + private static void addTableInfo(Map tablesByName, String name, String tableType, String comment) { + String key = metadataNameKey(name); + if (!key.isEmpty()) { + tablesByName.put(key, new TableInfo(name, tableType, comment)); + } + } + + private static boolean objectTypesInclude(List objectTypes, String expectedType) { + if (objectTypes == null || objectTypes.isEmpty()) { + return true; + } + for (String objectType : objectTypes) { + if (expectedType.equals(normalizeObjectType(objectType))) { + return true; + } + } + return false; + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjectTypes(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() + || constraints.objectTypeAllowed("PROCEDURE") + || constraints.objectTypeAllowed("FUNCTION"); + } + + private static void appendDamengObjectTypePredicate( + StringBuilder sql, + List args, + MetadataListConstraints constraints, + boolean tableOnly + ) { + List objectTypes = tableOnly ? damengTableObjectTypes(constraints) : damengObjectTypes(constraints); + if (objectTypes.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND o.OBJECT_TYPE IN (").append(placeholders(objectTypes.size())).append(")"); + args.addAll(objectTypes); + } + + private static List damengTableObjectTypes(MetadataListConstraints constraints) { + List result = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + result.add("TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + result.add("VIEW"); + } + if (constraints.tableTypeAllowed("MATERIALIZED_VIEW")) { + result.add("MATERIALIZED VIEW"); + } + return result; + } + + private static List damengObjectTypes(MetadataListConstraints constraints) { + List result = damengTableObjectTypes(constraints); + if (constraints.objectTypeAllowed("PROCEDURE")) { + result.add("PROCEDURE"); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + result.add("FUNCTION"); + } + return result; + } + + private static void appendNameFilter(StringBuilder sql, List args, String column, MetadataListConstraints constraints) { + if (!constraints.hasFilter()) { + return; + } + sql.append(" AND UPPER(").append(column).append(") LIKE ? ESCAPE '\\\\'"); + args.add(constraints.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + + private static void appendLimitOffset(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasLimit()) { + return; + } + sql.append(" LIMIT ?"); + args.add(constraints.getLimit()); + if (constraints.hasOffset()) { + sql.append(" OFFSET ?"); + args.add(constraints.getOffset()); + } + } + + private static String placeholders(int count) { + return String.join(", ", java.util.Collections.nCopies(count, "?")); + } + + private static void bind(PreparedStatement stmt, List args) throws Exception { + for (int index = 0; index < args.size(); index += 1) { + Object arg = args.get(index); + if (arg instanceof Integer) { + stmt.setInt(index + 1, (Integer) arg); + } else if (arg == null) { + stmt.setObject(index + 1, null); + } else { + stmt.setString(index + 1, String.valueOf(arg)); + } + } + } + + static final class MetadataQuery { + private final String sql; + private final List args; + + MetadataQuery(String sql, List args) { + this.sql = sql; + this.args = args; + } + + String sql() { + return sql; + } + + List args() { + return args; + } + } + + private static String normalizeObjectType(String value) { + String upper = value == null ? "" : value.trim().toUpperCase(Locale.ROOT).replace(' ', '_').replace('-', '_'); + if (upper.contains("MATERIALIZED") && upper.contains("VIEW")) { + return "MATERIALIZED_VIEW"; + } + if (upper.contains("VIEW")) { + return "VIEW"; + } + if (upper.contains("TABLE")) { + return "TABLE"; + } + return upper; + } + + private static String metadataNameKey(String value) { + return value == null ? "" : value.trim().toUpperCase(Locale.ROOT); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + String sql = """ + SELECT OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS + WHERE OWNER = ? AND OBJECT_TYPE IN ('PROCEDURE', 'FUNCTION') + ORDER BY CASE OBJECT_TYPE WHEN 'PROCEDURE' THEN 0 ELSE 1 END, OBJECT_NAME + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + return queryConstrainedObjects(schema, normalized); + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + if (!includesSupportedObjectTypes(constraints)) { + return List.of(); + } + try { + return unchecked(() -> { + MetadataQuery query = buildConstrainedObjectsQuery(schema, constraints); + List result = new ArrayList<>(); + try (PreparedStatement stmt = requireConnected().prepareStatement(query.sql())) { + bind(stmt, query.args()); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo( + rs.getString("OBJECT_NAME"), + normalizeObjectType(rs.getString("OBJECT_TYPE")), + schema, + rs.getString("COMMENTS") + )); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } catch (RuntimeException e) { + // Keep restricted/older Dameng catalogs usable even if SQL pushdown + // is unavailable for a specific connection. + return constraints.filterObjects(listObjects(schema)); + } + } + + static MetadataQuery buildConstrainedObjectsQuery(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder(""" + SELECT o.OBJECT_NAME, + CASE WHEN o.OBJECT_TYPE = 'MATERIALIZED VIEW' THEN 'MATERIALIZED_VIEW' ELSE o.OBJECT_TYPE END AS OBJECT_TYPE, + c.COMMENTS + FROM ALL_OBJECTS o + LEFT JOIN ALL_TAB_COMMENTS c ON c.OWNER = o.OWNER AND c.TABLE_NAME = o.OBJECT_NAME + WHERE o.OWNER = ? + """.stripIndent().trim()); + args.add(schema); + appendDamengObjectTypePredicate(sql, args, normalized, false); + sql.append(" AND (o.OBJECT_TYPE <> 'TABLE' OR o.OBJECT_NAME NOT LIKE 'MTAB$_%')"); + appendNameFilter(sql, args, "o.OBJECT_NAME", normalized); + sql.append(" ORDER BY CASE o.OBJECT_TYPE") + .append(" WHEN 'TABLE' THEN 0") + .append(" WHEN 'VIEW' THEN 1") + .append(" WHEN 'MATERIALIZED VIEW' THEN 2") + .append(" WHEN 'PROCEDURE' THEN 3") + .append(" WHEN 'FUNCTION' THEN 4") + .append(" ELSE 9 END, o.OBJECT_NAME"); + appendLimitOffset(sql, args, normalized); + return new MetadataQuery(sql.toString(), args); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String dbmsType = switch (objectType.toUpperCase(Locale.ROOT)) { + case "VIEW" -> "VIEW"; + case "MATERIALIZED_VIEW", "MATERIALIZED VIEW" -> "MATERIALIZED_VIEW"; + case "PROCEDURE" -> "PROCEDURE"; + case "FUNCTION" -> "FUNCTION"; + default -> throw new IllegalArgumentException("Unsupported object type: " + objectType); + }; + String source; + String sql = "SELECT DBMS_METADATA.GET_DDL(?, ?, ?) FROM DUAL"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, dbmsType); + stmt.setString(2, name); + stmt.setString(3, schema); + try (ResultSet rs = stmt.executeQuery()) { + source = rs.next() ? coalesce(readTextColumn(rs, 1)) : ""; + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public String getTableDdl(String schema, String table) { + return unchecked(() -> { + String sql = "SELECT DBMS_METADATA.GET_DDL(?, ?, ?) FROM DUAL"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, "TABLE"); + stmt.setString(2, table); + stmt.setString(3, schema); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + String ddl = appendTableAndColumnComments(coalesce(readTextColumn(rs, 1)), schema, table); + return appendIndependentIndexDdl(ddl, schema, table); + } + } + } + throw new IllegalArgumentException("Table not found: " + schema + "." + table); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Set pkColumns = new java.util.HashSet<>(); + String pkSql = """ + SELECT cols.COLUMN_NAME FROM ALL_CONS_COLUMNS cols + JOIN ALL_CONSTRAINTS cons ON cols.CONSTRAINT_NAME = cons.CONSTRAINT_NAME AND cols.OWNER = cons.OWNER + WHERE cons.CONSTRAINT_TYPE = 'P' AND cons.OWNER = ? AND cons.TABLE_NAME = ? + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(pkSql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + pkColumns.add(rs.getString(1)); + } + } + } + + Set identityColumns = identityColumns(schema, table); + List result = new ArrayList<>(); + // DATA_DEFAULT is a LONG column — it must be selected first and read first + // in JDBC, otherwise the data is truncated. + String colSql = """ + SELECT c.DATA_DEFAULT, + c.COLUMN_NAME, + c.DATA_TYPE, + c.NULLABLE, + c.DATA_PRECISION, + c.DATA_SCALE, + c.DATA_LENGTH, + c.CHAR_LENGTH, + cc.COMMENTS + FROM ALL_TAB_COLUMNS c + LEFT JOIN ALL_COL_COMMENTS cc + ON cc.OWNER = c.OWNER + AND cc.TABLE_NAME = c.TABLE_NAME + AND cc.COLUMN_NAME = c.COLUMN_NAME + WHERE c.OWNER = ? AND c.TABLE_NAME = ? + ORDER BY c.COLUMN_ID + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(colSql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + // DATA_DEFAULT is a LONG — must be read first, before all other columns. + String dataDefault = readLongColumn(rs, "DATA_DEFAULT"); + String name = rs.getString("COLUMN_NAME"); + String baseType = rs.getString("DATA_TYPE"); + Integer numPrec = intObject(rs, "DATA_PRECISION"); + Integer numScale = intObject(rs, "DATA_SCALE"); + Integer dataLen = intObject(rs, "DATA_LENGTH"); + Integer charLen = intObject(rs, "CHAR_LENGTH"); + String dataType = formatDataType(baseType, numPrec, numScale, dataLen, charLen); + + result.add(new ColumnInfo( + name, + dataType, + "Y".equals(rs.getString("NULLABLE")), + dataDefault, + pkColumns.contains(name), + identityColumns.contains(name) ? "identity" : null, + rs.getString("COMMENTS"), + numPrec, + numScale, + charLen + )); + } + } + } + fillMissingColumnComments(schema, table, result); + return result; + }); + } + + private Set identityColumns(String schema, String table) { + Set result = new java.util.HashSet<>(); + String sql = """ + SELECT c.NAME + FROM SYS.SYSCOLUMNS c + JOIN SYS.SYSOBJECTS t ON c.ID = t.ID + JOIN SYS.SYSOBJECTS s ON t.SCHID = s.ID + WHERE s.NAME = ? AND t.NAME = ? AND (c.INFO2 & 0x01) = 0x01 + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String column = rs.getString(1); + if (notBlank(column)) { + result.add(column); + } + } + } + } catch (Exception ignored) { + // Some Dameng versions or users do not expose SYS.SYSCOLUMNS. + } + return result; + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = """ + SELECT i.INDEX_NAME, + LISTAGG(ic.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY ic.COLUMN_POSITION) AS COLUMNS, + i.UNIQUENESS, + CASE WHEN c.CONSTRAINT_TYPE = 'P' THEN 1 ELSE 0 END AS IS_PK, + i.INDEX_TYPE + FROM ALL_INDEXES i + JOIN ALL_IND_COLUMNS ic ON i.INDEX_NAME = ic.INDEX_NAME AND i.OWNER = ic.INDEX_OWNER AND i.TABLE_OWNER = ic.TABLE_OWNER + LEFT JOIN ALL_CONSTRAINTS c ON i.INDEX_NAME = c.INDEX_NAME AND i.TABLE_OWNER = c.OWNER + AND c.CONSTRAINT_TYPE = 'P' + WHERE i.TABLE_OWNER = ? AND i.TABLE_NAME = ? + GROUP BY i.INDEX_NAME, i.UNIQUENESS, c.CONSTRAINT_TYPE, i.INDEX_TYPE + ORDER BY i.INDEX_NAME + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new IndexInfo( + rs.getString(1), + splitNonEmpty(coalesce(rs.getString(2)), ","), + "UNIQUE".equals(rs.getString(3)), + "1".equals(rs.getString(4)), + null, + rs.getString(5), + null, + null + )); + } + } + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = """ + SELECT c.CONSTRAINT_NAME, cc.COLUMN_NAME, rc.TABLE_NAME, rcc.COLUMN_NAME + FROM ALL_CONSTRAINTS c + JOIN ALL_CONS_COLUMNS cc ON c.CONSTRAINT_NAME = cc.CONSTRAINT_NAME AND c.OWNER = cc.OWNER + JOIN ALL_CONSTRAINTS rc ON c.R_CONSTRAINT_NAME = rc.CONSTRAINT_NAME AND c.R_OWNER = rc.OWNER + JOIN ALL_CONS_COLUMNS rcc ON rc.CONSTRAINT_NAME = rcc.CONSTRAINT_NAME AND rc.OWNER = rcc.OWNER + WHERE c.CONSTRAINT_TYPE = 'R' AND c.OWNER = ? AND c.TABLE_NAME = ? + ORDER BY c.CONSTRAINT_NAME + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString(1), + rs.getString(2), + rs.getString(3), + rs.getString(4) + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = """ + SELECT TRIGGER_NAME, TRIGGERING_EVENT, '' AS TRIGGER_TYPE + FROM ALL_TRIGGERS + WHERE OWNER = ? AND TABLE_NAME = ? + ORDER BY TRIGGER_NAME + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo(rs.getString(1), rs.getString(2), rs.getString(3))); + } + } + } + return result; + }); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::stringResultValue + ); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.executePage( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + this::stringResultValue + ); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.startTableRead( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + this::stringResultValue + ); + } + + @Override + public String setSchemaSQL(String schema) { + return "SET SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private Object stringResultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = switch (sqlType) { + case Types.BIGINT -> rs.getLong(index); + case Types.INTEGER, Types.SMALLINT, Types.TINYINT -> rs.getInt(index); + case Types.FLOAT, Types.REAL -> rs.getFloat(index); + case Types.DOUBLE -> rs.getDouble(index); + case Types.DECIMAL, Types.NUMERIC -> rs.getBigDecimal(index); + case Types.BOOLEAN, Types.BIT -> rs.getBoolean(index); + case Types.CHAR, Types.VARCHAR, Types.LONGVARCHAR, + Types.NCHAR, Types.NVARCHAR, Types.LONGNVARCHAR, + Types.CLOB, Types.NCLOB -> rs.getString(index); + case Types.BINARY, Types.VARBINARY, Types.LONGVARBINARY, + Types.BLOB -> bytesToHex(rs.getBytes(index)); + case Types.SQLXML -> sqlXmlToString(rs.getSQLXML(index)); + default -> normalizeResultValue(rs.getObject(index)); + }; + return rs.wasNull() ? null : value; + }); + } + + private static Object normalizeResultValue(Object value) { + if (value == null) return null; + if (value instanceof Clob) { + Clob clob = (Clob) value; + return unchecked(() -> clob.getSubString(1, Math.toIntExact(clob.length()))); + } + if (value instanceof Blob) { + Blob blob = (Blob) value; + return unchecked(() -> bytesToHex(blob.getBytes(1, Math.toIntExact(blob.length())))); + } + if (value instanceof SQLXML) { + SQLXML sqlxml = (SQLXML) value; + return unchecked(sqlxml::getString); + } + if (value instanceof byte[]) { + return bytesToHex((byte[]) value); + } + return value instanceof Number || value instanceof Boolean ? value : value.toString(); + } + + private static String sqlXmlToString(SQLXML value) { + return value == null ? null : unchecked(value::getString); + } + + private static String readTextColumn(ResultSet rs, int columnIndex) throws Exception { + try (Reader reader = rs.getCharacterStream(columnIndex)) { + String value = readAll(reader); + if (value != null) { + return value; + } + } catch (Exception ignored) { + } + try { + Clob clob = rs.getClob(columnIndex); + if (clob != null) { + return clob.getSubString(1, Math.toIntExact(clob.length())); + } + } catch (Exception ignored) { + } + return rs.getString(columnIndex); + } + + private static String bytesToHex(byte[] bytes) { + if (bytes == null) { + return null; + } + StringBuilder result = new StringBuilder(bytes.length * 2 + 2); + result.append("0x"); + for (byte b : bytes) { + result.append(Character.forDigit((b >> 4) & 0xF, 16)); + result.append(Character.forDigit(b & 0xF, 16)); + } + return result.toString(); + } + + private static String buildUrl(ConnectParams params) { + String database = params.getDatabase() == null ? "" : params.getDatabase().trim(); + String suffix = database.isEmpty() ? "" : "/" + database; + return "jdbc:dm://" + params.getHost() + ":" + params.getPort() + suffix; + } + + private static String formatDataType(String base, Integer numPrec, Integer numScale, Integer dataLen, Integer charLen) { + return switch (base.toUpperCase(Locale.ROOT)) { + case "VARCHAR2", "NVARCHAR2", "VARCHAR", "CHAR", "NCHAR" -> { + Integer length = charLen != null ? charLen : dataLen; + yield length != null ? base + "(" + length + ")" : base; + } + case "NUMBER", "NUMERIC", "DECIMAL" -> { + if (numPrec != null && numScale != null && numScale > 0) { + yield base + "(" + numPrec + "," + numScale + ")"; + } + yield numPrec != null && numPrec > 0 ? base + "(" + numPrec + ")" : base; + } + case "RAW" -> dataLen != null ? "RAW(" + dataLen + ")" : "RAW"; + default -> base; + }; + } + + private static Integer intObject(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value == null ? null : ((Number) value).intValue(); + } + + // DATA_DEFAULT is stored as a LONG column in Oracle/Dameng. JDBC requires LONG + // columns to be read before other columns. We also try getCharacterStream as a + // fallback because some drivers don't support getString on LONG columns. + private static String readLongColumn(ResultSet rs, String column) throws Exception { + try { + String value = rs.getString(column); + if (value != null) { + return value; + } + } catch (Exception ignored) { + } + try (Reader reader = rs.getCharacterStream(column)) { + return readAll(reader); + } + } + + private static String readAll(Reader reader) throws Exception { + if (reader == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + char[] buf = new char[4096]; + int n; + while ((n = reader.read(buf)) != -1) { + sb.append(buf, 0, n); + } + return sb.toString(); + } + + private static List splitNonEmpty(String value, String delimiter) { + List result = new ArrayList<>(); + Arrays.stream(value.split(delimiter)) + .filter(part -> !part.isEmpty()) + .forEach(result::add); + return result; + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + private void fillMissingColumnComments(String schema, String table, List columns) { + if (columns.stream().noneMatch(column -> !notBlank(column.getComment()))) { + return; + } + Map comments = new HashMap<>(); + queryColumnComments( + comments, + "SELECT COLUMN_NAME, COMMENTS FROM USER_COL_COMMENTS WHERE TABLE_NAME = ?", + table + ); + queryColumnComments( + comments, + "SELECT COLNAME, COMMENT$ FROM SYS.SYSCOLUMNCOMMENTS WHERE SCHNAME = ? AND TVNAME = ?", + schema, + table + ); + queryColumnComments( + comments, + "SELECT COLUMN_NAME, COMMENTS FROM ALL_COL_COMMENTS WHERE UPPER(OWNER) = UPPER(?) AND UPPER(TABLE_NAME) = UPPER(?)", + schema, + table + ); + for (ColumnInfo column : columns) { + if (notBlank(column.getComment())) { + continue; + } + String comment = comments.get(column.getName().toUpperCase(Locale.ROOT)); + if (notBlank(comment)) { + column.setComment(comment); + } + } + } + + private void queryColumnComments(Map comments, String sql, String... params) { + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + for (int i = 0; i < params.length; i++) { + stmt.setString(i + 1, params[i]); + } + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String column = rs.getString(1); + String comment = rs.getString(2); + if (notBlank(column) && notBlank(comment)) { + comments.putIfAbsent(column.toUpperCase(Locale.ROOT), comment); + } + } + } + } catch (Exception ignored) { + // Some Dameng versions or users do not expose every comment view. + } + } + + private String appendTableAndColumnComments(String ddl, String schema, String table) throws Exception { + StringBuilder result = new StringBuilder(ddl == null ? "" : ddl.trim()); + String tableRef = qualifiedName(schema, table); + String tableComment = tableComment(schema, table); + if (notBlank(tableComment) && !containsCommentOnTable(result.toString(), schema, table)) { + appendCommentStatement(result, "COMMENT ON TABLE " + tableRef + " IS '" + sqlStringBody(tableComment) + "';"); + } + for (ColumnInfo column : getColumns(schema, table)) { + if (!notBlank(column.getComment()) || containsCommentOnColumn(result.toString(), schema, table, column.getName())) { + continue; + } + appendCommentStatement(result, "COMMENT ON COLUMN " + tableRef + "." + JdbcIdentifiers.INSTANCE.doubleQuote(column.getName()) + " IS '" + sqlStringBody(column.getComment()) + "';"); + } + return result.toString(); + } + + private String appendIndependentIndexDdl(String ddl, String schema, String table) throws Exception { + StringBuilder result = new StringBuilder(ddl == null ? "" : ddl.trim()); + for (IndexInfo index : independentIndexes(schema, table)) { + String indexName = index.getName(); + if (isInternalIndexMetadata(index) || index.getColumns().isEmpty()) { + continue; + } + if (containsCreateIndex(result.toString(), schema, indexName)) { + continue; + } + appendDdlStatement(result, indexDdl(schema, table, index)); + } + return result.toString(); + } + + private List independentIndexes(String schema, String table) throws Exception { + List result = new ArrayList<>(); + // Primary-key and unique-constraint backing indexes are already represented in table DDL. + String sql = """ + SELECT i.INDEX_NAME, + LISTAGG(ic.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY ic.COLUMN_POSITION) AS COLUMNS, + i.UNIQUENESS, + i.INDEX_TYPE + FROM ALL_INDEXES i + JOIN ALL_IND_COLUMNS ic ON i.INDEX_NAME = ic.INDEX_NAME AND i.OWNER = ic.INDEX_OWNER AND i.TABLE_OWNER = ic.TABLE_OWNER + WHERE i.TABLE_OWNER = ? AND i.TABLE_NAME = ? + AND NOT EXISTS ( + SELECT 1 + FROM ALL_CONSTRAINTS c + WHERE c.OWNER = i.TABLE_OWNER + AND c.TABLE_NAME = i.TABLE_NAME + AND c.INDEX_NAME = i.INDEX_NAME + AND c.CONSTRAINT_TYPE IN ('P', 'U') + ) + GROUP BY i.INDEX_NAME, i.UNIQUENESS, i.INDEX_TYPE + ORDER BY i.INDEX_NAME + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String indexName = rs.getString(1); + if (notBlank(indexName)) { + result.add(new IndexInfo( + indexName, + splitNonEmpty(coalesce(rs.getString(2)), ","), + "UNIQUE".equals(rs.getString(3)), + false, + null, + rs.getString(4), + null, + null + )); + } + } + } + } + return result; + } + + private static String indexDdl(String schema, String table, IndexInfo index) { + StringBuilder ddl = new StringBuilder("CREATE "); + if (index.getIs_unique()) { + ddl.append("UNIQUE "); + } + ddl.append("INDEX ") + .append(qualifiedName(schema, index.getName())) + .append(" ON ") + .append(qualifiedName(schema, table)) + .append(" ("); + for (int i = 0; i < index.getColumns().size(); i++) { + if (i > 0) { + ddl.append(", "); + } + ddl.append(JdbcIdentifiers.INSTANCE.doubleQuote(index.getColumns().get(i))); + } + ddl.append(");"); + return ddl.toString(); + } + + private static boolean isInternalIndexMetadata(IndexInfo index) { + String indexType = coalesce(index.getIndex_type()).toUpperCase(Locale.ROOT); + return indexType.contains("INNER") || indexType.contains("INTERNAL"); + } + + private String tableComment(String schema, String table) throws Exception { + String sql = """ + SELECT COMMENTS + FROM ALL_TAB_COMMENTS + WHERE OWNER = ? AND TABLE_NAME = ? + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + return rs.next() ? rs.getString(1) : null; + } + } + } + + private static void appendCommentStatement(StringBuilder ddl, String statement) { + appendDdlStatement(ddl, statement); + } + + private static void appendDdlStatement(StringBuilder ddl, String statement) { + if (!ddl.isEmpty()) { + if (ddl.charAt(ddl.length() - 1) != '\n') { + ddl.append("\n"); + } + ddl.append("\n"); + } + ddl.append(statement); + } + + private static String ensureStatementTerminator(String statement) { + String trimmed = coalesce(statement).trim(); + if (trimmed.isEmpty() || trimmed.endsWith(";")) { + return trimmed; + } + return trimmed + ";"; + } + + private static boolean containsCommentOnTable(String ddl, String schema, String table) { + return normalizedDdl(ddl).contains("COMMENT ON TABLE " + normalizedQualifiedName(schema, table)); + } + + private static boolean containsCommentOnColumn(String ddl, String schema, String table, String column) { + return normalizedDdl(ddl).contains("COMMENT ON COLUMN " + normalizedQualifiedName(schema, table) + "." + normalizedIdentifier(column)); + } + + private static boolean containsCreateIndex(String ddl, String schema, String indexName) { + String normalized = normalizedDdl(ddl); + return normalized.contains(" INDEX " + normalizedQualifiedName(schema, indexName) + " ") + || normalized.contains(" INDEX " + normalizedIdentifier(indexName) + " "); + } + + private static String qualifiedName(String schema, String name) { + if (!notBlank(schema)) { + return JdbcIdentifiers.INSTANCE.doubleQuote(name); + } + return JdbcIdentifiers.INSTANCE.doubleQuote(schema) + "." + JdbcIdentifiers.INSTANCE.doubleQuote(name); + } + + private static String normalizedQualifiedName(String schema, String name) { + if (!notBlank(schema)) { + return normalizedIdentifier(name); + } + return normalizedIdentifier(schema) + "." + normalizedIdentifier(name); + } + + private static String normalizedIdentifier(String value) { + return JdbcIdentifiers.INSTANCE.doubleQuote(value).toUpperCase(Locale.ROOT); + } + + private static String normalizedDdl(String ddl) { + return coalesce(ddl).toUpperCase(Locale.ROOT).replaceAll("\\s+", " "); + } + + private static boolean notBlank(String value) { + return value != null && !value.trim().isEmpty(); + } + + private static String sqlStringBody(String value) { + return value.replace("'", "''"); + } + + @Override + public String getExplainInfo(String sql, String database, String schema, int timeoutSecs, String mode) { + return unchecked(() -> { + Connection conn = requireConnected(); + boolean autotrace = "autotrace".equalsIgnoreCase(mode); + String planText = null; + + if (autotrace) { + boolean monitorEnabled = false; + try (Statement s = conn.createStatement()) { + s.execute("SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC', 1)"); + monitorEnabled = true; + } catch (Exception ignored) {} + + try (Statement stmt = conn.createStatement()) { + if (timeoutSecs >= 0) { + try { stmt.setQueryTimeout(timeoutSecs); } catch (Exception ignored) {} + } + boolean hasResultSet = stmt.execute(sql); + if (hasResultSet) { + try (ResultSet rs = stmt.getResultSet()) { + while (rs.next()) { /* consume all rows */ } + } + } + try { + Class dmConnClass = Class.forName("dm.jdbc.driver.DmdbConnection"); + if (dmConnClass.isInstance(conn)) { + Method m = dmConnClass.getMethod("getExplainInfo", Statement.class); + planText = (String) m.invoke(dmConnClass.cast(conn), stmt); + } + } catch (Exception ignored) {} + } finally { + if (monitorEnabled) { + try (Statement s = conn.createStatement()) { + s.execute("SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC', 0)"); + } catch (Exception ignored) {} + } + } + } else { + try { + Class dmConnClass = Class.forName("dm.jdbc.driver.DmdbConnection"); + if (dmConnClass.isInstance(conn)) { + Method m = dmConnClass.getMethod("getExplainInfo", String.class); + planText = (String) m.invoke(dmConnClass.cast(conn), sql); + } + } catch (Exception ignored) {} + } + + if (planText == null || planText.trim().isEmpty()) { + try (Statement explainStmt = conn.createStatement(); + ResultSet rs = explainStmt.executeQuery("EXPLAIN " + sql)) { + StringBuilder sb = new StringBuilder(); + while (rs.next()) { + sb.append(rs.getString(1)).append("\n"); + } + planText = sb.toString().trim(); + } catch (Exception ignored) {} + } + return planText != null ? planText : ""; + }); + } + + public static void main(String[] args) { + new JsonRpcServer(new DamengAgent()).run(); + } +} diff --git a/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentMetadataTest.java b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentMetadataTest.java new file mode 100644 index 0000000..2358890 --- /dev/null +++ b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentMetadataTest.java @@ -0,0 +1,596 @@ +package com.dbx.agent.dameng; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.io.StringReader; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +class DamengAgentMetadataTest { + @Test + void usesColumnCommentsMetadataQuery() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.getColumns("APP", "USERS"); + + String columnsSql = JdbcMetadataSqlFake.statements.stream() + .filter(sql -> sql.contains("ALL_TAB_COLUMNS")) + .findFirst() + .orElseThrow(); + Assertions.assertTrue(columnsSql.contains("LEFT JOIN ALL_COL_COMMENTS"), columnsSql); + } + + @Test + void usesTableCommentsMetadataQuery() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("APP"); + + String tablesSql = JdbcMetadataSqlFake.statements.stream() + .filter(sql -> sql.contains("ALL_TAB_COMMENTS")) + .findFirst() + .orElseThrow(); + String allTablesSql = String.join("\n", JdbcMetadataSqlFake.statements); + Assertions.assertTrue(tablesSql.contains("COMMENTS"), tablesSql); + Assertions.assertTrue(allTablesSql.contains("ALL_OBJECTS"), allTablesSql); + Assertions.assertTrue(allTablesSql.contains("USER_MVIEWS"), allTablesSql); + Assertions.assertFalse(allTablesSql.contains("ALL_MVIEWS"), allTablesSql); + Assertions.assertFalse(tablesSql.contains("ALL_TABLES"), tablesSql); + Assertions.assertFalse(tablesSql.contains("ALL_VIEWS"), tablesSql); + } + + @Test + void mapsTableCommentFromMetadata() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection()); + + List tables = agent.listTables("APP"); + + Assertions.assertEquals(1, tables.size()); + Assertions.assertEquals("USERS", tables.get(0).getName()); + Assertions.assertEquals("用户示例表", tables.get(0).getComment()); + } + + @Test + void mapsTableCommentToObjectMetadata() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection()); + + List objects = agent.listObjects("APP"); + + Assertions.assertEquals(1, objects.size()); + Assertions.assertEquals("USERS", objects.get(0).getName()); + Assertions.assertEquals("用户示例表", objects.get(0).getComment()); + } + + @Test + void listSchemasIncludesSchemaObjectsWithoutChildren() { + DamengAgent agent = new DamengAgent(); + List sqls = new ArrayList<>(); + TestSupport.setPrivateConnection(agent, metadataConnection("id comment", null, false, List.of(), sqls, "")); + + List schemas = agent.listSchemas(); + + Assertions.assertEquals(List.of("APP", "EMPTY_SCHEMA"), schemas); + Assertions.assertTrue(sqls.stream().anyMatch(sql -> sql.contains("SYS.SYSOBJECTS") && sql.contains("TYPE$ = 'SCH'")), String.join("\n", sqls)); + Assertions.assertTrue(sqls.stream().noneMatch(sql -> sql.contains("ALL_USERS")), String.join("\n", sqls)); + Assertions.assertTrue(sqls.stream().noneMatch(sql -> sql.contains("ALL_OBJECTS")), String.join("\n", sqls)); + } + + @Test + void mapsMaterializedViewsFromMetadata() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection("id comment", null, true)); + + List tables = agent.listTables("APP"); + List objects = agent.listObjects("APP"); + + Assertions.assertTrue(tables.stream().anyMatch(table -> + "USER_SUMMARY_MV".equals(table.getName()) && "MATERIALIZED_VIEW".equals(table.getTable_type()) + )); + Assertions.assertFalse(tables.stream().anyMatch(table -> + "USER_SUMMARY_MV".equals(table.getName()) && "VIEW".equals(table.getTable_type()) + )); + Assertions.assertTrue(objects.stream().anyMatch(object -> + "USER_SUMMARY_MV".equals(object.getName()) && "MATERIALIZED_VIEW".equals(object.getObject_type()) + )); + } + + @Test + void filtersTableListingByRequestedObjectTypes() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection("id comment", null, true)); + setConnectedUsername(agent, "APP"); + + List views = agent.listTables("APP", List.of("VIEW")); + List materializedViews = agent.listTables("APP", List.of("MATERIALIZED_VIEW")); + + Assertions.assertTrue(views.stream().noneMatch(table -> "MATERIALIZED_VIEW".equals(table.getTable_type()))); + Assertions.assertTrue(views.stream().noneMatch(table -> "USER_SUMMARY_MV".equals(table.getName()))); + Assertions.assertEquals(List.of("USER_SUMMARY_MV"), materializedViews.stream().map(TableInfo::getName).toList()); + } + + @Test + void readsMaterializedViewSourceWithDbmsMetadataType() { + DamengAgent agent = new DamengAgent(); + List params = new ArrayList<>(); + TestSupport.setPrivateConnection( + agent, + objectSourceConnection(params, "CREATE MATERIALIZED VIEW \"APP\".\"USER_SUMMARY_MV\" AS SELECT 1 AS ID FROM DUAL") + ); + + ObjectSource source = agent.getObjectSource("APP", "USER_SUMMARY_MV", "MATERIALIZED_VIEW"); + + Assertions.assertEquals(List.of("MATERIALIZED_VIEW", "USER_SUMMARY_MV", "APP"), params); + Assertions.assertEquals("MATERIALIZED_VIEW", source.getObject_type()); + Assertions.assertTrue(source.getSource().contains("CREATE MATERIALIZED VIEW"), source.getSource()); + } + + @Test + void triggerMetadataDoesNotRequireOracleTriggerTypeColumn() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTriggers("APP", "USERS"); + + String triggersSql = JdbcMetadataSqlFake.statements.stream() + .filter(sql -> sql.contains("ALL_TRIGGERS")) + .findFirst() + .orElseThrow(); + Assertions.assertFalse(triggersSql.contains("TRIGGERING_EVENT, TRIGGER_TYPE"), triggersSql); + Assertions.assertTrue(triggersSql.contains("'' AS TRIGGER_TYPE"), triggersSql); + } + + @Test + void mapsColumnCommentFromMetadata() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection()); + + List columns = agent.getColumns("APP", "USERS"); + + Assertions.assertEquals(1, columns.size()); + Assertions.assertEquals("id comment", columns.get(0).getComment()); + } + + @Test + void mapsColumnCommentFromFallbackMetadataViews() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection(null, "fallback id comment")); + + List columns = agent.getColumns("APP", "USERS"); + + Assertions.assertEquals(1, columns.size()); + Assertions.assertEquals("fallback id comment", columns.get(0).getComment()); + } + + @Test + void mapsIdentityColumnExtraFromSysColumns() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection()); + + List columns = agent.getColumns("APP", "USERS"); + + Assertions.assertEquals(1, columns.size()); + Assertions.assertEquals("identity", columns.get(0).getExtra()); + } + + @Test + void appendsTableAndColumnCommentsToTableDdl() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection(agent, metadataConnection()); + + String ddl = agent.getTableDdl("APP", "USERS"); + + Assertions.assertTrue(ddl.contains("CREATE TABLE \"APP\".\"USERS\""), ddl); + Assertions.assertTrue(ddl.contains("COMMENT ON TABLE \"APP\".\"USERS\" IS '用户示例表';"), ddl); + Assertions.assertTrue(ddl.contains("COMMENT ON COLUMN \"APP\".\"USERS\".\"ID\" IS 'id comment';"), ddl); + } + + @Test + void readsFullTableDdlFromCharacterStreamWhenGetStringIsTruncated() { + DamengAgent agent = new DamengAgent(); + String fullDdl = "CREATE TABLE \"APP\".\"USERS\" (\n \"ID\" NUMBER,\n \"PAYLOAD\" VARCHAR2(2000)\n);\n-- " + + "x".repeat(5000) + + "\n-- DBX_FULL_DDL_END"; + TestSupport.setPrivateConnection(agent, metadataConnection( + "id comment", + null, + false, + List.of(), + null, + fullDdl + )); + + String ddl = agent.getTableDdl("APP", "USERS"); + + Assertions.assertTrue(ddl.contains("DBX_FULL_DDL_END"), ddl); + } + + @Test + void appendsIndependentIndexesToTableDdl() { + DamengAgent agent = new DamengAgent(); + List sqls = new ArrayList<>(); + TestSupport.setPrivateConnection(agent, metadataConnectionWithIndexes(sqls)); + + String ddl = agent.getTableDdl("APP", "USERS"); + + Assertions.assertTrue( + ddl.contains("CREATE INDEX \"APP\".\"IDX_USERS_NAME\" ON \"APP\".\"USERS\" (\"NAME\");"), + ddl + ); + Assertions.assertTrue( + ddl.contains("CREATE UNIQUE INDEX \"APP\".\"UX_USERS_EMAIL\" ON \"APP\".\"USERS\" (\"EMAIL\");"), + ddl + ); + Assertions.assertFalse(ddl.contains("PK_USERS"), ddl); + String indexSql = sqls.stream().filter(sql -> sql.contains("ALL_INDEXES")).findFirst().orElseThrow(); + Assertions.assertTrue(indexSql.contains("CONSTRAINT_TYPE IN ('P', 'U')"), indexSql); + long dbmsMetadataCalls = sqls.stream().filter(sql -> sql.contains("DBMS_METADATA.GET_DDL")).count(); + Assertions.assertEquals(1, dbmsMetadataCalls); + } + + @Test + void skipsDamengInternalIndexesWhenAppendingTableDdl() { + DamengAgent agent = new DamengAgent(); + List sqls = new ArrayList<>(); + TestSupport.setPrivateConnection(agent, metadataConnection( + "id comment", + null, + false, + List.of( + indexRow("IDX_USERS_NAME", "NAME", "NONUNIQUE", "NORMAL"), + indexRow("SYS_INTERNAL_DDL", "ID", "NONUNIQUE", "INNER CLUSTER INDEX") + ), + sqls + )); + + String ddl = agent.getTableDdl("APP", "USERS"); + + Assertions.assertTrue( + ddl.contains("CREATE INDEX \"APP\".\"IDX_USERS_NAME\" ON \"APP\".\"USERS\" (\"NAME\");"), + ddl + ); + Assertions.assertFalse(ddl.contains("SYS_INTERNAL_DDL"), ddl); + Assertions.assertFalse(ddl.contains("INNER CLUSTER INDEX"), ddl); + long dbmsMetadataCalls = sqls.stream().filter(sql -> sql.contains("DBMS_METADATA.GET_DDL")).count(); + Assertions.assertEquals(1, dbmsMetadataCalls); + } + + private static Connection metadataConnection() { + return metadataConnection("id comment", null); + } + + private static Connection metadataConnection(String allColumnComment, String fallbackColumnComment) { + return metadataConnection(allColumnComment, fallbackColumnComment, false); + } + + private static Connection metadataConnection(String allColumnComment, String fallbackColumnComment, boolean includeMaterializedView) { + return metadataConnection(allColumnComment, fallbackColumnComment, includeMaterializedView, List.of(), null); + } + + private static Connection metadataConnectionWithIndexes(List sqls) { + return metadataConnection( + "id comment", + null, + false, + List.of( + indexRow("IDX_USERS_NAME", "NAME", "NONUNIQUE", "NORMAL"), + indexRow("UX_USERS_EMAIL", "EMAIL", "UNIQUE", "NORMAL") + ), + sqls + ); + } + + private static Connection metadataConnection( + String allColumnComment, + String fallbackColumnComment, + boolean includeMaterializedView, + List> independentIndexes, + List sqls + ) { + return metadataConnection(allColumnComment, fallbackColumnComment, includeMaterializedView, independentIndexes, sqls, "CREATE TABLE \"APP\".\"USERS\" (\n \"ID\" NUMBER\n);"); + } + + private static Connection metadataConnection( + String allColumnComment, + String fallbackColumnComment, + boolean includeMaterializedView, + List> independentIndexes, + List sqls, + String dbmsMetadataDdl + ) { + return proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("prepareStatement".equals(name)) { + String sql = (String) args[0]; + if (sqls != null) { + sqls.add(sql); + } + if (sql.contains("DBMS_METADATA.GET_DDL")) { + return dbmsMetadataStatement(dbmsMetadataDdl); + } + if (sql.contains("SYS.SYSOBJECTS") && sql.contains("TYPE$ = 'SCH'")) { + return metadataStatement(List.of(List.of("APP"), List.of("EMPTY_SCHEMA"))); + } + if (sql.contains("ALL_CONS_COLUMNS")) { + return metadataStatement(List.of(List.of("ID"))); + } + if (sql.contains("SYS.SYSCOLUMNS")) { + return metadataStatement(List.of(List.of("ID"))); + } + if (sql.startsWith("SELECT COMMENTS")) { + return metadataStatement(List.of(List.of("用户示例表"))); + } + if (sql.contains("USER_COL_COMMENTS")) { + return metadataStatement(fallbackColumnComment == null ? List.of() : List.of(List.of("ID", fallbackColumnComment))); + } + if (sql.contains("SYSCOLUMNCOMMENTS")) { + return metadataStatement(List.of()); + } + if (sql.contains("ALL_OBJECTS") && sql.contains("OBJECT_TYPE = 'TABLE'")) { + return metadataStatement(List.of(List.of("USERS", "用户示例表"))); + } + if (sql.contains("ALL_OBJECTS") && sql.contains("OBJECT_TYPE = 'VIEW'")) { + return metadataStatement( + includeMaterializedView + ? List.of(Arrays.asList("USER_SUMMARY_MV", "mv comment")) + : List.of() + ); + } + if (sql.contains("USER_MVIEWS") && sql.contains("ALL_OBJECTS")) { + return metadataStatement( + includeMaterializedView ? List.of(Arrays.asList("USER_SUMMARY_MV", "mv comment")) : List.of() + ); + } + if (sql.contains("ALL_OBJECTS")) { + return metadataStatement(List.of()); + } + if (sql.contains("ALL_INDEXES")) { + return metadataStatement(independentIndexes); + } + if (sql.contains("ALL_TAB_COMMENTS")) { + List> rows = new ArrayList<>(); + rows.add(List.of("USERS", "TABLE", "用户示例表")); + if (includeMaterializedView) { + rows.add(Arrays.asList("USER_SUMMARY_MV", "VIEW", "mv comment")); + } + return metadataStatement(rows); + } + if (sql.contains("USER_MVIEWS")) { + return metadataStatement( + includeMaterializedView + ? List.of(List.of("USER_SUMMARY_MV")) + : List.of() + ); + } + if (sql.contains("ALL_COL_COMMENTS") && !sql.contains("ALL_TAB_COLUMNS")) { + return metadataStatement(List.of()); + } + if (sql.contains("ALL_TAB_COLUMNS")) { + return metadataStatement(List.of(Arrays.asList( + "ID", + "NUMBER", + "N", + Integer.valueOf(10), + Integer.valueOf(0), + Integer.valueOf(22), + Integer.valueOf(10), + allColumnComment + ))); + } + } + if ("close".equals(name)) { + return null; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static List indexRow(String name, String columns, String uniqueness, String indexType) { + return List.of(name, columns, uniqueness, indexType); + } + + private static PreparedStatement dbmsMetadataStatement(String ddl) { + List params = new ArrayList<>(); + return proxy(PreparedStatement.class, (method, args) -> { + String name = method.getName(); + if ("executeQuery".equals(name)) { + String objectType = params.isEmpty() ? "" : params.get(0); + if ("INDEX".equals(objectType)) { + throw new AssertionError("Dameng table DDL should generate index DDL from metadata"); + } + return metadataResultSet(List.of(List.of(new LongText(ddl, ddl.substring(0, Math.min(ddl.length(), 64)))))); + } + if ("setString".equals(name)) { + int index = ((Integer) args[0]) - 1; + while (params.size() <= index) { + params.add(""); + } + params.set(index, String.valueOf(args[1])); + return null; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static void setConnectedUsername(DamengAgent agent, String username) { + try { + Field field = DamengAgent.class.getDeclaredField("connectedUsername"); + field.setAccessible(true); + field.set(agent, username); + } catch (ReflectiveOperationException e) { + throw new IllegalStateException("Unable to set connected username", e); + } + } + + private static Connection objectSourceConnection(List params, String source) { + return proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("prepareStatement".equals(name)) { + return metadataStatement(List.of(List.of(source)), params); + } + if ("close".equals(name)) { + return null; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static PreparedStatement metadataStatement(List> rows) { + return metadataStatement(rows, null); + } + + private static PreparedStatement metadataStatement(List> rows, List params) { + return proxy(PreparedStatement.class, (method, args) -> { + String name = method.getName(); + if ("executeQuery".equals(name)) { + return metadataResultSet(rows); + } + if ("setString".equals(name)) { + if (params != null) { + params.add(String.valueOf(args[1])); + } + return null; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet metadataResultSet(List> rows) { + int[] index = {-1}; + return proxy(ResultSet.class, (method, args) -> { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] < rows.size(); + } + if ("getString".equals(name)) { + if (args[0] instanceof Integer columnIndex) { + Object value = rows.get(index[0]).get(columnIndex - 1); + if (value instanceof LongText longText) { + return longText.truncated; + } + return value == null ? null : value.toString(); + } + return switch (((String) args[0]).toUpperCase()) { + case "COLUMN_NAME" -> string(rows, index[0], 0); + case "DATA_TYPE" -> string(rows, index[0], 1); + case "NULLABLE" -> string(rows, index[0], 2); + case "DATA_DEFAULT" -> null; + case "COMMENTS", "COMMENT$" -> string(rows, index[0], rows.get(index[0]).size() - 1); + case "COLNAME" -> string(rows, index[0], 0); + default -> null; + }; + } + if ("getCharacterStream".equals(name) && args[0] instanceof Integer columnIndex) { + Object value = rows.get(index[0]).get(columnIndex - 1); + if (value instanceof LongText longText) { + return new StringReader(longText.full); + } + } + if ("getObject".equals(name)) { + return switch (((String) args[0]).toUpperCase()) { + case "DATA_PRECISION" -> rows.get(index[0]).get(3); + case "DATA_SCALE" -> rows.get(index[0]).get(4); + case "DATA_LENGTH" -> rows.get(index[0]).get(5); + case "CHAR_LENGTH" -> rows.get(index[0]).get(6); + default -> null; + }; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static String string(List> rows, int rowIndex, int columnIndex) { + Object value = rows.get(rowIndex).get(columnIndex); + if (value instanceof LongText longText) { + return longText.full; + } + return value == null ? null : value.toString(); + } + + private static final class LongText { + private final String full; + private final String truncated; + + private LongText(String full, String truncated) { + this.full = full; + this.truncated = truncated; + } + } + + @SuppressWarnings("unchecked") + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return handler.handle(method, args); + } + }; + return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentPagingTest.java b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentPagingTest.java new file mode 100644 index 0000000..bca5f6b --- /dev/null +++ b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentPagingTest.java @@ -0,0 +1,277 @@ +package com.dbx.agent.dameng; + +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.test.TestSupport; +import dm.jdbc.driver.DmdbTimestamp; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.sql.Types; +import javax.sql.rowset.serial.SerialBlob; +import javax.sql.rowset.serial.SerialClob; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class DamengAgentPagingTest { + @Test + void executeQueryPageStringifiesTimestampValuesBeforeJsonRpcSerialization() { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection( + agent, + singleValueConnection( + "CURRENT_TIMESTAMP", + Types.TIMESTAMP, + DmdbTimestamp.valueOf("2026-05-20 12:34:56.123456789"), + null, + null + ) + ); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = handleRequest(server, """ + { + "jsonrpc": "2.0", + "id": 1, + "method": "execute_query_page", + "params": { + "sql": "SELECT CURRENT_TIMESTAMP", + "schema": "SYS", + "pageSize": 100 + } + } + """); + + assertFalse(response.contains("\"error\""), response); + assertTrue(response.contains("2026-05-20 12:34:56.123456"), response); + } + + @Test + void executeQueryPageReadsClobValuesAsText() throws Exception { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection( + agent, + singleValueConnection( + "content", + Types.CLOB, + new SerialClob("真实文本".toCharArray()), + "真实文本", + null + ) + ); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = handleRequest(server, """ + { + "jsonrpc": "2.0", + "id": 1, + "method": "execute_query_page", + "params": { + "sql": "SELECT content FROM sample", + "schema": "SYS", + "pageSize": 100 + } + } + """); + + assertFalse(response.contains("\"error\""), response); + assertTrue(response.contains("真实文本"), response); + assertFalse(response.contains("SerialClob"), response); + } + + @Test + void executeQueryPageFormatsBlobValuesAsHexText() throws Exception { + DamengAgent agent = new DamengAgent(); + TestSupport.setPrivateConnection( + agent, + singleValueConnection( + "payload", + Types.BLOB, + new SerialBlob(new byte[]{0x01, 0x2A, (byte) 0xFF}), + null, + new byte[]{0x01, 0x2A, (byte) 0xFF} + ) + ); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = handleRequest(server, """ + { + "jsonrpc": "2.0", + "id": 1, + "method": "execute_query_page", + "params": { + "sql": "SELECT payload FROM sample", + "schema": "SYS", + "pageSize": 100 + } + } + """); + + assertFalse(response.contains("\"error\""), response); + assertTrue(response.contains("0x012aff"), response); + assertFalse(response.contains("SerialBlob"), response); + } + + private static Connection singleValueConnection( + String columnLabel, + int sqlType, + Object objectValue, + String stringValue, + byte[] bytesValue + ) { + Statement statement = singleValueStatement(columnLabel, sqlType, objectValue, stringValue, bytesValue); + return proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("createStatement".equals(name)) { + return statement; + } + if ("getAutoCommit".equals(name)) { + return true; + } + if ("setAutoCommit".equals(name) || "commit".equals(name) || "rollback".equals(name) || "close".equals(name)) { + return null; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Statement singleValueStatement( + String columnLabel, + int sqlType, + Object objectValue, + String stringValue, + byte[] bytesValue + ) { + ResultSet resultSet = singleValueResultSet(columnLabel, sqlType, objectValue, stringValue, bytesValue); + return proxy(Statement.class, (method, args) -> { + String name = method.getName(); + if ("execute".equals(name)) { + return true; + } + if ("getResultSet".equals(name)) { + return resultSet; + } + if ("getUpdateCount".equals(name)) { + return 0; + } + if ("setMaxRows".equals(name) || "setFetchSize".equals(name) || "close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet singleValueResultSet( + String columnLabel, + int sqlType, + Object objectValue, + String stringValue, + byte[] bytesValue + ) { + final int[] index = {-1}; + ResultSetMetaData metadata = singleValueMetadata(columnLabel, sqlType); + return proxy(ResultSet.class, (method, args) -> { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] == 0; + } + if ("getMetaData".equals(name)) { + return metadata; + } + if ("getObject".equals(name)) { + return objectValue; + } + if ("getString".equals(name)) { + return stringValue; + } + if ("getBytes".equals(name)) { + return bytesValue; + } + if ("wasNull".equals(name)) { + return false; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSetMetaData singleValueMetadata(String columnLabel, int sqlType) { + return proxy(ResultSetMetaData.class, (method, args) -> { + String name = method.getName(); + if ("getColumnCount".equals(name)) { + return 1; + } + if ("getColumnLabel".equals(name)) { + return columnLabel; + } + if ("getColumnType".equals(name)) { + return sqlType; + } + return defaultValue(method.getReturnType()); + }); + } + + private static String handleRequest(JsonRpcServer server, String request) { + try { + Method method = JsonRpcServer.class.getDeclaredMethod("handleRequest", String.class); + method.setAccessible(true); + return (String) method.invoke(server, request); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentTest.java b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentTest.java new file mode 100644 index 0000000..afa21b7 --- /dev/null +++ b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentTest.java @@ -0,0 +1,61 @@ +package com.dbx.agent.dameng; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class DamengAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new DamengAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL SP_SAMPLE()"; + } + + @Test + void constrainedTableQueryPushesFilterTypeAndPagingToDameng() { + DamengAgent.MetadataQuery query = DamengAgent.buildConstrainedTablesQuery( + "APP", + new MetadataListConstraints("ord", 50, 100, List.of("TABLE", "VIEW")) + ); + + assertTrue(query.sql().contains("FROM ALL_OBJECTS o")); + assertTrue(query.sql().contains("o.OBJECT_TYPE IN (?, ?)")); + assertTrue(query.sql().contains("UPPER(o.OBJECT_NAME) LIKE ? ESCAPE '\\\\'")); + assertTrue(query.sql().endsWith("LIMIT ? OFFSET ?")); + assertEquals(List.of("APP", "TABLE", "VIEW", "%O%R%D%", 50, 100), query.args()); + } + + @Test + void constrainedTableQueryMapsMaterializedViewTypeToDamengCatalogName() { + DamengAgent.MetadataQuery query = DamengAgent.buildConstrainedTablesQuery( + "APP", + new MetadataListConstraints(null, 20, null, List.of("MATERIALIZED_VIEW")) + ); + + assertTrue(query.sql().contains("MATERIALIZED_VIEW")); + assertEquals(List.of("APP", "MATERIALIZED VIEW", 20), query.args()); + } + + @Test + void constrainedObjectQueryPushesRoutineOnlySearchToDameng() { + DamengAgent.MetadataQuery query = DamengAgent.buildConstrainedObjectsQuery( + "APP", + new MetadataListConstraints("sync", 20, null, List.of("PROCEDURE", "FUNCTION")) + ); + + assertTrue(query.sql().contains("o.OBJECT_TYPE IN (?, ?)")); + assertTrue(query.sql().contains("WHEN 'PROCEDURE' THEN 3")); + assertTrue(query.sql().endsWith("LIMIT ?")); + assertEquals(List.of("APP", "PROCEDURE", "FUNCTION", "%S%Y%N%C%", 20), query.args()); + } +} diff --git a/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentUrlTest.java b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentUrlTest.java new file mode 100644 index 0000000..c1d72a8 --- /dev/null +++ b/agents/drivers/dameng/src/test/java/com/dbx/agent/dameng/DamengAgentUrlTest.java @@ -0,0 +1,29 @@ +package com.dbx.agent.dameng; + +import com.dbx.agent.ConnectParams; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Method; + +class DamengAgentUrlTest { + @Test + void omitsDatabasePathWhenDatabaseIsBlank() throws Exception { + String url = invokeBuildUrl(new ConnectParams("127.0.0.1", 5236, "", "SYSDBA", "pwd", "", "", false)); + + Assertions.assertEquals("jdbc:dm://127.0.0.1:5236", url); + } + + @Test + void appendsDatabasePathWhenDatabaseIsProvided() throws Exception { + String url = invokeBuildUrl(new ConnectParams("127.0.0.1", 5236, "MAIN", "SYSDBA", "pwd", "", "", false)); + + Assertions.assertEquals("jdbc:dm://127.0.0.1:5236/MAIN", url); + } + + private static String invokeBuildUrl(ConnectParams params) throws Exception { + Method method = DamengAgent.class.getDeclaredMethod("buildUrl", ConnectParams.class); + method.setAccessible(true); + return (String) method.invoke(null, params); + } +} diff --git a/agents/drivers/databend/build.gradle b/agents/drivers/databend/build.gradle new file mode 100644 index 0000000..a1db92d --- /dev/null +++ b/agents/drivers/databend/build.gradle @@ -0,0 +1,9 @@ +dependencies { + implementation 'com.databend:databend-jdbc:0.4.6' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Databend', 'Main-Class': 'com.dbx.agent.databend.DatabendAgent') + } +} diff --git a/agents/drivers/databend/src/main/java/com/dbx/agent/databend/DatabendAgent.java b/agents/drivers/databend/src/main/java/com/dbx/agent/databend/DatabendAgent.java new file mode 100644 index 0000000..48c00e4 --- /dev/null +++ b/agents/drivers/databend/src/main/java/com/dbx/agent/databend/DatabendAgent.java @@ -0,0 +1,299 @@ +package com.dbx.agent.databend; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.PreparedStatement; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +public final class DatabendAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile DATABEND_PROFILE = new JdbcAgentProfile( + "com.databend.jdbc.DatabendDriver", + "jdbc:databend://{host}:{port}/{database}", + 8000, + false, + Collections.singleton("INFORMATION_SCHEMA"), + Arrays.asList("TABLE", "VIEW", "BASE TABLE", "MATERIALIZED VIEW", "SYSTEM TABLE", "SYSTEM VIEW"), + "\"", + "USE", + true, + false, + false, + false + ); + + public DatabendAgent() { + super(DATABEND_PROFILE); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(super.listObjects(schema)); + try { + useSchema(schema); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW PROCEDURES")) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString("name"), "PROCEDURE", schema, rs.getString("comment"))); + } + } + } catch (Exception ignored) { + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + boolean includeTables = normalized.includesTableLikeTypes(); + boolean includeProcedures = includesProcedures(normalized); + if (includeProcedures && !includeTables) { + return listProcedures(schema, normalized); + } + if (includeTables && !includeProcedures) { + return super.listObjects(schema, normalized); + } + if (!includeTables && !includeProcedures) { + return List.of(); + } + return normalized.filterObjects(listObjects(schema)); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + if (!"PROCEDURE".equalsIgnoreCase(objectType)) { + return super.getObjectSource(schema, name, objectType); + } + return unchecked(() -> { + useSchema(schema); + ProcedureMetadata procedure = findProcedure(name); + if (procedure == null) { + throw new IllegalArgumentException("Procedure not found: " + name); + } + Map properties = describeProcedure(name, procedure.inputTypes); + String source = buildProcedureSource(name, procedure, properties); + return new ObjectSource(name, objectType, schema, source); + }); + } + + private void useSchema(String schema) throws SQLException { + if (schema == null || schema.trim().isEmpty()) { + return; + } + try (java.sql.Statement stmt = requireConnected().createStatement()) { + stmt.execute(DATABEND_PROFILE.schemaSwitchSql(schema.trim())); + } + } + + private List listProcedures(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + useSchema(schema); + List result = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT name, comment FROM system.procedures"); + List args = new ArrayList<>(); + if (constraints.hasFilter()) { + sql.append(" WHERE UPPER(name) LIKE ? ESCAPE '\\\\'"); + args.add(constraints.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + sql.append(" ORDER BY name"); + if (constraints.hasLimit()) { + sql.append(" LIMIT ?"); + args.add(constraints.getLimit()); + if (constraints.hasOffset()) { + sql.append(" OFFSET ?"); + args.add(constraints.getOffset()); + } + } + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString("name"), "PROCEDURE", schema, rs.getString("comment"))); + } + } + } + MetadataListConstraints guard = constraints.hasLimit() ? constraints.withoutPaging() : constraints; + return guard.filterObjects(result); + }); + } + + private static boolean includesProcedures(MetadataListConstraints constraints) { + return !constraints.hasObjectTypes() || constraints.objectTypeAllowed("PROCEDURE"); + } + + private static void bind(PreparedStatement stmt, List args) throws SQLException { + for (int index = 0; index < args.size(); index += 1) { + Object arg = args.get(index); + if (arg instanceof Integer) { + stmt.setInt(index + 1, (Integer) arg); + } else { + stmt.setString(index + 1, String.valueOf(arg)); + } + } + } + + private ProcedureMetadata findProcedure(String name) throws SQLException { + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + "SELECT arguments, comment FROM system.procedures WHERE name = ? ORDER BY procedure_id LIMIT 1" + )) { + stmt.setString(1, name); + try (ResultSet rs = stmt.executeQuery()) { + if (!rs.next()) { + return null; + } + return new ProcedureMetadata( + rs.getString("comment"), + inputTypesFromArguments(rs.getString("arguments")) + ); + } + } + } + + private Map describeProcedure(String name, List inputTypes) throws SQLException { + Map result = new LinkedHashMap<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("DESC PROCEDURE " + simpleProcedureName(name) + "(" + String.join(", ", inputTypes) + ")")) { + while (rs.next()) { + result.put(rs.getString("Property").toLowerCase(Locale.ROOT), rs.getString("Value")); + } + } + return result; + } + + private static String buildProcedureSource(String name, ProcedureMetadata procedure, Map properties) { + List names = signatureNames(properties.get("signature")); + List arguments = new ArrayList<>(); + for (int index = 0; index < procedure.inputTypes.size(); index += 1) { + String argumentName = index < names.size() && !names.get(index).isEmpty() ? names.get(index) : "arg" + (index + 1); + arguments.add(argumentName + " " + procedure.inputTypes.get(index)); + } + + String returns = trimOuterParens(properties.getOrDefault("returns", "")); + String language = properties.getOrDefault("language", "SQL"); + String body = properties.getOrDefault("body", "").trim(); + StringBuilder source = new StringBuilder(); + source.append("CREATE PROCEDURE ").append(simpleProcedureName(name)).append("(").append(String.join(", ", arguments)).append(")"); + if (!returns.isEmpty()) { + source.append("\nRETURNS ").append(returns); + } + source.append("\nLANGUAGE ").append(language); + if (procedure.comment != null && !procedure.comment.isEmpty()) { + source.append("\nCOMMENT = '").append(procedure.comment.replace("'", "''")).append("'"); + } + source.append("\nAS $$\n").append(body).append("\n$$;"); + return source.toString(); + } + + private static String simpleProcedureName(String name) { + if (name != null && name.matches("[A-Za-z_][A-Za-z0-9_]*")) { + return name; + } + throw new IllegalArgumentException("Databend procedure names with special characters are not supported: " + name); + } + + private static List inputTypesFromArguments(String arguments) { + if (arguments == null) { + return Collections.emptyList(); + } + int open = arguments.indexOf('('); + if (open < 0) { + return Collections.emptyList(); + } + int close = matchingParen(arguments, open); + if (close < 0) { + return Collections.emptyList(); + } + return splitTopLevel(arguments.substring(open + 1, close)); + } + + private static List signatureNames(String signature) { + if (signature == null) { + return Collections.emptyList(); + } + String trimmed = trimOuterParens(signature); + return splitTopLevel(trimmed); + } + + private static List splitTopLevel(String value) { + if (value == null || value.trim().isEmpty()) { + return Collections.emptyList(); + } + List result = new ArrayList<>(); + StringBuilder current = new StringBuilder(); + int depth = 0; + for (int index = 0; index < value.length(); index += 1) { + char ch = value.charAt(index); + if (ch == '(') { + depth += 1; + } else if (ch == ')') { + depth = Math.max(0, depth - 1); + } else if (ch == ',' && depth == 0) { + addTrimmed(result, current.toString()); + current.setLength(0); + continue; + } + current.append(ch); + } + addTrimmed(result, current.toString()); + return result; + } + + private static void addTrimmed(List result, String value) { + String trimmed = value.trim(); + if (!trimmed.isEmpty()) { + result.add(trimmed); + } + } + + private static int matchingParen(String value, int open) { + int depth = 0; + for (int index = open; index < value.length(); index += 1) { + char ch = value.charAt(index); + if (ch == '(') { + depth += 1; + } else if (ch == ')') { + depth -= 1; + if (depth == 0) { + return index; + } + } + } + return -1; + } + + private static String trimOuterParens(String value) { + String trimmed = value == null ? "" : value.trim(); + if (trimmed.startsWith("(") && trimmed.endsWith(")") && matchingParen(trimmed, 0) == trimmed.length() - 1) { + return trimmed.substring(1, trimmed.length() - 1).trim(); + } + return trimmed; + } + + private static final class ProcedureMetadata { + private final String comment; + private final List inputTypes; + + ProcedureMetadata(String comment, List inputTypes) { + this.comment = comment; + this.inputTypes = inputTypes; + } + } + + public static void main(String[] args) { + new JsonRpcServer(new DatabendAgent()).run(); + } +} diff --git a/agents/drivers/databend/src/test/java/com/dbx/agent/databend/DatabendAgentTest.java b/agents/drivers/databend/src/test/java/com/dbx/agent/databend/DatabendAgentTest.java new file mode 100644 index 0000000..d875129 --- /dev/null +++ b/agents/drivers/databend/src/test/java/com/dbx/agent/databend/DatabendAgentTest.java @@ -0,0 +1,196 @@ +package com.dbx.agent.databend; + +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +class DatabendAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new DatabendAgent(); + } + + @Override + protected String resultSetSql() { + return "SELECT 1"; + } + + @Test + void buildsDefaultJdbcUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(0); + params.setDatabase("default"); + + Assertions.assertEquals( + "jdbc:databend://db.example.com:8000/default", + DatabendAgent.DATABEND_PROFILE.buildUrl(params) + ); + } + + @Test + void appendsQueryParametersToJdbcUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(20080); + params.setDatabase("default"); + params.setUrl_params("sslmode=disable"); + + Assertions.assertEquals( + "jdbc:databend://db.example.com:20080/default?sslmode=disable", + DatabendAgent.DATABEND_PROFILE.buildUrl(params) + ); + } + + @Test + void usesDoubleQuotedDatabaseAsExecutionContext() { + Assertions.assertEquals( + "USE \"analytics\"\"prod\"", + DatabendAgent.DATABEND_PROFILE.schemaSwitchSql("analytics\"prod") + ); + } + + @Test + void constrainedListObjectsKeepsDatabendProcedures() { + List sql = new ArrayList<>(); + DatabendAgent agent = new DatabendAgent(); + TestSupport.setPrivateConnection(agent, databendMetadataConnection(sql, resultSet( + new String[]{"name", "comment"}, + new Object[][]{ + {"refresh_orders", "proc comment"}, + {"format_order", null} + } + ))); + + List objects = agent.listObjects( + "default", + new MetadataListConstraints("format", 1, null, List.of("PROCEDURE")) + ); + + Assertions.assertEquals(1, objects.size()); + Assertions.assertEquals("format_order", objects.get(0).getName()); + Assertions.assertEquals("PROCEDURE", objects.get(0).getObject_type()); + Assertions.assertTrue(sql.stream().anyMatch(value -> value.contains("FROM system.procedures")), sql.toString()); + Assertions.assertTrue(sql.stream().anyMatch(value -> value.contains("UPPER(name) LIKE ?")), sql.toString()); + Assertions.assertTrue(sql.stream().anyMatch(value -> value.contains("LIMIT ?")), sql.toString()); + } + + private static Connection databendMetadataConnection(List sql, ResultSet procedures) { + DatabaseMetaData metadata = proxy(DatabaseMetaData.class, (method, args) -> { + if ("getTableTypes".equals(method.getName()) || "getTables".equals(method.getName())) { + return emptyResultSet(); + } + return defaultValue(method.getReturnType()); + }); + Statement statement = proxy(Statement.class, (method, args) -> { + if ("execute".equals(method.getName()) || "close".equals(method.getName())) { + return "execute".equals(method.getName()) ? false : null; + } + if ("executeQuery".equals(method.getName())) { + return procedures; + } + return defaultValue(method.getReturnType()); + }); + PreparedStatement preparedStatement = proxy(PreparedStatement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + return procedures; + } + if ("setString".equals(method.getName()) || "setInt".equals(method.getName()) || "close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("getMetaData".equals(method.getName())) { + return metadata; + } + if ("createStatement".equals(method.getName())) { + return statement; + } + if ("prepareStatement".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return preparedStatement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet emptyResultSet() { + return resultSet(new String[]{"VALUE"}, new Object[][]{}); + } + + private static ResultSet resultSet(String[] columns, Object[][] rows) { + int[] index = {-1}; + return proxy(ResultSet.class, (method, args) -> { + switch (method.getName()) { + case "next": + index[0] += 1; + return index[0] < rows.length; + case "getString": + Object value = columnValue(columns, rows[index[0]], args[0]); + return value == null ? null : String.valueOf(value); + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static Object columnValue(String[] columns, Object[] row, Object key) { + if (key instanceof Number) { + return row[((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return row[i]; + } + } + return null; + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return handler.handle(method, args == null ? new Object[0] : args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) return false; + if (type == Byte.TYPE) return (byte) 0; + if (type == Short.TYPE) return (short) 0; + if (type == Integer.TYPE) return 0; + if (type == Long.TYPE) return 0L; + if (type == Float.TYPE) return 0f; + if (type == Double.TYPE) return 0d; + if (type == Character.TYPE) return (char) 0; + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/databricks/build.gradle b/agents/drivers/databricks/build.gradle new file mode 100644 index 0000000..f6675d8 --- /dev/null +++ b/agents/drivers/databricks/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.databricks:databricks-jdbc:3.3.3' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Databricks SQL', 'Main-Class': 'com.dbx.agent.databricks.DatabricksAgent') + } +} diff --git a/agents/drivers/databricks/src/main/java/com/dbx/agent/databricks/DatabricksAgent.java b/agents/drivers/databricks/src/main/java/com/dbx/agent/databricks/DatabricksAgent.java new file mode 100644 index 0000000..5b5ef6b --- /dev/null +++ b/agents/drivers/databricks/src/main/java/com/dbx/agent/databricks/DatabricksAgent.java @@ -0,0 +1,41 @@ +package com.dbx.agent.databricks; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +public final class DatabricksAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile DATABRICKS_PROFILE = new DatabricksProfile(); + + public DatabricksAgent() { + super(DATABRICKS_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new DatabricksAgent()).run(); + } + + private static final class DatabricksProfile extends JdbcAgentProfile { + private DatabricksProfile() { + super("com.databricks.client.jdbc.Driver", "jdbc:databricks://{host}:{port}/{database}", 443, true); + } + + @Override + public String buildUrl(ConnectParams params) { + if (!params.getConnection_string().trim().isEmpty()) { + return params.getConnection_string(); + } + int port = params.getPort() > 0 ? params.getPort() : getDefaultPort(); + String base = getUrlTemplate() + .replace("{host}", params.getHost()) + .replace("{port}", Integer.toString(port)) + .replace("{database}", params.getDatabase()); + String urlParams = params.getUrl_params() == null ? "" : params.getUrl_params().trim(); + while (urlParams.startsWith(";") || urlParams.startsWith("?") || urlParams.startsWith("&")) { + urlParams = urlParams.substring(1); + } + return urlParams.isEmpty() ? base : base + ";" + urlParams; + } + } +} diff --git a/agents/drivers/databricks/src/test/java/com/dbx/agent/databricks/DatabricksAgentTest.java b/agents/drivers/databricks/src/test/java/com/dbx/agent/databricks/DatabricksAgentTest.java new file mode 100644 index 0000000..80f5bcb --- /dev/null +++ b/agents/drivers/databricks/src/test/java/com/dbx/agent/databricks/DatabricksAgentTest.java @@ -0,0 +1,22 @@ +package com.dbx.agent.databricks; + +import com.dbx.agent.ConnectParams; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class DatabricksAgentTest { + @Test + void buildsHttpPathUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("adb-123.azuredatabricks.net"); + params.setPort(443); + params.setDatabase("default"); + params.setUrl_params("httpPath=/sql/1.0/warehouses/abc;AuthMech=3"); + + assertEquals( + "jdbc:databricks://adb-123.azuredatabricks.net:443/default;httpPath=/sql/1.0/warehouses/abc;AuthMech=3", + DatabricksAgent.DATABRICKS_PROFILE.buildUrl(params) + ); + } +} diff --git a/agents/drivers/db2/build.gradle b/agents/drivers/db2/build.gradle new file mode 100644 index 0000000..d9af1aa --- /dev/null +++ b/agents/drivers/db2/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.ibm.db2:jcc:11.5.9.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'IBM DB2', 'Main-Class': 'com.dbx.agent.db2.Db2Agent') + } +} diff --git a/agents/drivers/db2/src/main/java/com/dbx/agent/db2/Db2Agent.java b/agents/drivers/db2/src/main/java/com/dbx/agent/db2/Db2Agent.java new file mode 100644 index 0000000..047b11c --- /dev/null +++ b/agents/drivers/db2/src/main/java/com/dbx/agent/db2/Db2Agent.java @@ -0,0 +1,515 @@ +package com.dbx.agent.db2; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +public final class Db2Agent extends BaseDatabaseAgent { + private static final Set NUMERIC_PRECISION_TYPES = Set.of( + "DECIMAL", "NUMERIC", "INTEGER", "SMALLINT", "BIGINT", "REAL", "DOUBLE", "FLOAT" + ); + private static final Set NUMERIC_SCALE_TYPES = Set.of("DECIMAL", "NUMERIC"); + private static final Set CHARACTER_LENGTH_TYPES = Set.of("VARCHAR", "CHAR", "CLOB", "GRAPHIC", "VARGRAPHIC"); + + private Connection connection; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public String setSchemaSQL(String schema) { + return "SET SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + Class.forName("com.ibm.db2.jcc.DB2Driver"); + connection = DriverManager.getConnection(buildUrl(params), params.getUsername(), params.getPassword()); + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + Class.forName("com.ibm.db2.jcc.DB2Driver"); + try (Connection conn = DriverManager.getConnection(buildUrl(params), params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT CURRENT_SERVER FROM SYSIBM.SYSDUMMY1"; + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1).trim())); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT SCHEMANAME FROM SYSCAT.SCHEMATA ORDER BY SCHEMANAME"; + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + result.add(rs.getString(1).trim()); + } + } + return result; + }); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT TABNAME, TYPE FROM SYSCAT.TABLES WHERE TABSCHEMA = ? AND TYPE IN ('T','V') ORDER BY TABNAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String db2Type = rs.getString(2).trim(); + String type = switch (db2Type) { + case "T" -> "TABLE"; + case "V" -> "VIEW"; + default -> db2Type; + }; + result.add(new TableInfo(rs.getString(1).trim(), type, null)); + } + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT TABNAME, TYPE FROM SYSCAT.TABLES WHERE TABSCHEMA = ?"); + args.add(schema); + appendDb2TableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "TABNAME", constraints); + sql.append(" ORDER BY TABNAME"); + MetadataSqlSupport.appendLiteralOffsetFetch(sql, constraints); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1).trim(), db2TableType(rs.getString(2)), null)); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + + String sql = "SELECT PROCNAME, 'PROCEDURE' FROM SYSCAT.PROCEDURES WHERE PROCSCHEMA = ? ORDER BY PROCNAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1).trim(), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return queryConstrainedObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + StringBuilder tableSql = new StringBuilder( + "SELECT TABNAME AS OBJECT_NAME, CASE TYPE WHEN 'T' THEN 'TABLE' WHEN 'V' THEN 'VIEW' ELSE TYPE END AS OBJECT_TYPE FROM SYSCAT.TABLES WHERE TABSCHEMA = ?" + ); + args.add(schema); + appendDb2TableTypePredicate(tableSql, args, constraints); + MetadataSqlSupport.appendNameFilter(tableSql, args, "TABNAME", constraints); + branches.add(tableSql.toString()); + } + if (constraints.objectTypeAllowed("PROCEDURE")) { + StringBuilder procedureSql = new StringBuilder( + "SELECT PROCNAME AS OBJECT_NAME, 'PROCEDURE' AS OBJECT_TYPE FROM SYSCAT.PROCEDURES WHERE PROCSCHEMA = ?" + ); + args.add(schema); + MetadataSqlSupport.appendNameFilter(procedureSql, args, "PROCNAME", constraints); + branches.add(procedureSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT OBJECT_NAME, OBJECT_TYPE FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY CASE OBJECT_TYPE WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 WHEN 'PROCEDURE' THEN 2 ELSE 9 END, OBJECT_NAME"); + MetadataSqlSupport.appendLiteralOffsetFetch(sql, constraints); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1).trim(), rs.getString(2), schema, null)); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String sql = "SELECT TEXT FROM SYSCAT.ROUTINES WHERE ROUTINESCHEMA = ? AND ROUTINENAME = ?"; + String source; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, name); + try (ResultSet rs = stmt.executeQuery()) { + source = rs.next() ? coalesce(rs.getString(1)) : ""; + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Set pkColumns = new java.util.HashSet<>(); + String pkSql = """ + SELECT kc.COLNAME FROM SYSCAT.KEYCOLUSE kc + JOIN SYSCAT.TABCONST tc ON kc.CONSTNAME = tc.CONSTNAME AND kc.TABSCHEMA = tc.TABSCHEMA AND kc.TABNAME = tc.TABNAME + WHERE tc.TYPE = 'P' AND tc.TABSCHEMA = ? AND tc.TABNAME = ? + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(pkSql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + pkColumns.add(rs.getString(1).trim()); + } + } + } + + List result = new ArrayList<>(); + String colSql = """ + SELECT COLNAME, TYPENAME, NULLS, DEFAULT, LENGTH, SCALE + FROM SYSCAT.COLUMNS + WHERE TABSCHEMA = ? AND TABNAME = ? + ORDER BY COLNO + """.stripIndent().trim(); + try (PreparedStatement stmt = requireConnected().prepareStatement(colSql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String name = rs.getString("COLNAME").trim(); + String typeName = rs.getString("TYPENAME").trim(); + Integer length = intObject(rs, "LENGTH"); + Integer scale = intObject(rs, "SCALE"); + String dataType = formatDataType(typeName, length, scale); + + result.add(new ColumnInfo( + name, + dataType, + "Y".equals(rs.getString("NULLS").trim()), + trimNullable(rs.getString("DEFAULT")), + pkColumns.contains(name), + null, + null, + NUMERIC_PRECISION_TYPES.contains(typeName) ? length : null, + NUMERIC_SCALE_TYPES.contains(typeName) ? scale : null, + CHARACTER_LENGTH_TYPES.contains(typeName) ? length : null + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT INDNAME, COLNAMES, UNIQUERULE FROM SYSCAT.INDEXES WHERE TABSCHEMA = ? AND TABNAME = ? ORDER BY INDNAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String colNames = trimToEmpty(rs.getString(2)); + List columns = splitColumns(colNames, "[+-]"); + String uniqueRule = trimToEmpty(rs.getString(3)); + result.add(new IndexInfo( + rs.getString(1).trim(), + columns, + "U".equals(uniqueRule) || "P".equals(uniqueRule), + "P".equals(uniqueRule), + null, + null, + null, + null + )); + } + } + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT CONSTNAME, FK_COLNAMES, REFTABNAME, PK_COLNAMES FROM SYSCAT.REFERENCES WHERE TABSCHEMA = ? AND TABNAME = ? ORDER BY CONSTNAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + List fkColList = splitColumns(trimToEmpty(rs.getString(2)), "\\s+"); + List pkColList = splitColumns(trimToEmpty(rs.getString(4)), "\\s+"); + String refTable = rs.getString(3).trim(); + String constName = rs.getString(1).trim(); + for (int i = 0; i < fkColList.size(); i++) { + result.add(new ForeignKeyInfo( + constName, + fkColList.get(i), + refTable, + i < pkColList.size() ? pkColList.get(i) : "" + )); + } + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT TRIGNAME, TRIGEVENT, TRIGTIME FROM SYSCAT.TRIGGERS WHERE TABSCHEMA = ? AND TABNAME = ? ORDER BY TRIGNAME"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo( + rs.getString(1).trim(), + rs.getString(2).trim(), + rs.getString(3).trim() + )); + } + } + } + return result; + }); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::stringResultValue + ); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private Object stringResultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + static String buildUrl(ConnectParams params) { + if (!params.getConnection_string().trim().isEmpty()) { + return params.getConnection_string(); + } + String url = "jdbc:db2://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + String extraParams = trimDb2UrlParams(params.getUrl_params()); + if (extraParams.isEmpty()) { + return url; + } + return url + ":" + extraParams + (extraParams.endsWith(";") ? "" : ";"); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() || constraints.objectTypeAllowed("PROCEDURE"); + } + + private static void appendDb2TableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("T"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("V"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static String db2TableType(String value) { + String db2Type = value == null ? "" : value.trim(); + return switch (db2Type) { + case "T" -> "TABLE"; + case "V" -> "VIEW"; + default -> db2Type; + }; + } + + private static String trimDb2UrlParams(String urlParams) { + String value = urlParams == null ? "" : urlParams.trim(); + while (value.startsWith("?") || value.startsWith("&") || value.startsWith(":") || value.startsWith(";")) { + value = value.substring(1); + } + return value; + } + + private static String formatDataType(String typeName, Integer length, Integer scale) { + return switch (typeName.toUpperCase(Locale.ROOT)) { + case "VARCHAR", "CHAR", "CLOB", "GRAPHIC", "VARGRAPHIC" -> length != null ? typeName + "(" + length + ")" : typeName; + case "DECIMAL", "NUMERIC" -> { + if (length != null && scale != null && scale > 0) { + yield typeName + "(" + length + "," + scale + ")"; + } + yield length != null ? typeName + "(" + length + ")" : typeName; + } + default -> typeName; + }; + } + + private static Integer intObject(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value == null ? null : ((Number) value).intValue(); + } + + private static List splitColumns(String value, String regex) { + List result = new ArrayList<>(); + for (String part : value.split(regex)) { + if (!part.isBlank()) { + result.add(part); + } + } + return result; + } + + private static String trimNullable(String value) { + return value == null ? null : value.trim(); + } + + private static String trimToEmpty(String value) { + return value == null ? "" : value.trim(); + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + public static void main(String[] args) { + new JsonRpcServer(new Db2Agent()).run(); + } +} diff --git a/agents/drivers/db2/src/test/java/com/dbx/agent/db2/Db2AgentTest.java b/agents/drivers/db2/src/test/java/com/dbx/agent/db2/Db2AgentTest.java new file mode 100644 index 0000000..1eeb38d --- /dev/null +++ b/agents/drivers/db2/src/test/java/com/dbx/agent/db2/Db2AgentTest.java @@ -0,0 +1,195 @@ +package com.dbx.agent.db2; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class Db2AgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new Db2Agent(); + } + + @Override + protected String resultSetSql() { + return "CALL ADMIN_CMD('list applications')"; + } + + @Test + void buildsJdbcUrlWithDb2PropertySuffix() { + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(50000); + params.setDatabase("SAMPLE"); + params.setUrl_params("sslConnection=true"); + + assertEquals("jdbc:db2://db.example.com:50000/SAMPLE:sslConnection=true;", Db2Agent.buildUrl(params)); + } + + @Test + void listsAllCatalogSchemasWithoutOwnerTypeFiltering() { + Db2Agent agent = new Db2Agent(); + AtomicReference executedSql = new AtomicReference<>(); + TestSupport.setPrivateConnection(agent, connection( + executedSql, + rows(row("SCHEMANAME", "APP"), row("SCHEMANAME", "SZ"), row("SCHEMANAME", "TOOLS")) + )); + + List schemas = agent.listSchemas(); + + assertEquals(Arrays.asList("APP", "SZ", "TOOLS"), schemas); + assertEquals("SELECT SCHEMANAME FROM SYSCAT.SCHEMATA ORDER BY SCHEMANAME", executedSql.get()); + assertFalse(executedSql.get().contains("OWNERTYPE")); + } + + @Test + void constrainedTableMetadataUsesDb2CatalogPushdown() { + Db2Agent agent = new Db2Agent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("APP", new MetadataListConstraints("ord", 25, 50, List.of("TABLE"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + assertTrue(sql.contains("FROM SYSCAT.TABLES")); + assertTrue(sql.contains("TYPE IN (?)")); + assertTrue(sql.contains("UPPER(TABNAME) LIKE ? ESCAPE '\\\\'")); + assertTrue(sql.endsWith("OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY")); + assertEquals(Arrays.asList("param:1=APP", "param:2=T", "param:3=%O%R%D%"), JdbcMetadataSqlFake.statements.subList(1, 4)); + } + + @Test + void constrainedObjectMetadataUsesDb2CatalogPushdown() { + Db2Agent agent = new Db2Agent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listObjects("APP", new MetadataListConstraints("sync", 10, null, List.of("PROCEDURE"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + assertTrue(sql.contains("FROM SYSCAT.PROCEDURES")); + assertTrue(sql.contains("ORDER BY CASE OBJECT_TYPE")); + assertTrue(sql.endsWith("FETCH FIRST 10 ROWS ONLY")); + assertEquals(Arrays.asList("param:1=APP", "param:2=%S%Y%N%C%"), JdbcMetadataSqlFake.statements.subList(1, 3)); + } + + private static Connection connection(AtomicReference executedSql, ResultSet resultSet) { + Statement statement = proxy(Statement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("executeQuery".equals(method.getName())) { + executedSql.set(String.valueOf(args[0])); + return resultSet; + } + if ("close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("createStatement".equals(method.getName())) { + return statement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet rows(Map... rows) { + return proxy(ResultSet.class, new MethodHandler() { + private int index = -1; + + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + index += 1; + return index < rows.length; + } + if ("getString".equals(name)) { + Object key = args[0] instanceof Number ? rows[index].keySet().iterator().next() : args[0]; + Object value = rows[index].get(key); + return value == null ? null : String.valueOf(value); + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static Map row(Object... values) { + Map row = new LinkedHashMap<>(); + for (int i = 0; i < values.length; i += 2) { + row.put(String.valueOf(values[i]), values[i + 1]); + } + return row; + } + + private static T proxy(Class type, final MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/drivers/etcd/build.gradle b/agents/drivers/etcd/build.gradle new file mode 100644 index 0000000..d37a950 --- /dev/null +++ b/agents/drivers/etcd/build.gradle @@ -0,0 +1,11 @@ +dependencies { + implementation 'com.google.code.gson:gson:2.12.1' + implementation 'io.etcd:jetcd-core:0.8.6' +} + +tasks.named('shadowJar') { + mergeServiceFiles() + manifest { + attributes('Agent-Label': 'etcd', 'Main-Class': 'com.dbx.agent.etcd.EtcdAgent') + } +} diff --git a/agents/drivers/etcd/src/main/java/com/dbx/agent/etcd/EtcdAgent.java b/agents/drivers/etcd/src/main/java/com/dbx/agent/etcd/EtcdAgent.java new file mode 100644 index 0000000..c29286f --- /dev/null +++ b/agents/drivers/etcd/src/main/java/com/dbx/agent/etcd/EtcdAgent.java @@ -0,0 +1,420 @@ +package com.dbx.agent.etcd; + +import com.dbx.agent.AgentProtocol; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import io.grpc.netty.GrpcSslContexts; +import io.etcd.jetcd.ByteSequence; +import io.etcd.jetcd.Client; +import io.etcd.jetcd.ClientBuilder; +import io.etcd.jetcd.KV; +import io.etcd.jetcd.KeyValue; +import io.etcd.jetcd.kv.DeleteResponse; +import io.etcd.jetcd.kv.GetResponse; +import io.etcd.jetcd.kv.PutResponse; +import io.etcd.jetcd.options.GetOption; +import io.etcd.jetcd.options.PutOption; +import io.netty.handler.ssl.SslContext; +import io.netty.handler.ssl.SslContextBuilder; +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.nio.ByteBuffer; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CodingErrorAction; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +public final class EtcdAgent { + private static final Gson GSON = new Gson(); + private static final int DEFAULT_LIMIT = 100; + private static final int RPC_TIMEOUT_SECONDS = 30; + private static final List CAPABILITIES = Collections.unmodifiableList(Arrays.asList( + AgentProtocol.CAPABILITY_CONNECT, + AgentProtocol.CAPABILITY_TEST_CONNECTION, + AgentProtocol.CAPABILITY_KV + )); + private static Client client; + private static KV kv; + + private EtcdAgent() { + } + + private static Object handshakeResult() { + return new HandshakeResult(AgentProtocol.PROTOCOL_VERSION, AgentProtocol.PROTOCOL_VERSION, CAPABILITIES); + } + + private static Object connect(JsonObject params) throws Exception { + JsonObject connection = connectionObject(params); + Client nextClient = buildClient(connection); + nextClient.getKVClient().get(byteSequence("\0")).get(RPC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + closeClient(); + client = nextClient; + kv = client.getKVClient(); + return Collections.singletonMap("ok", true); + } + + static Client buildClient(JsonObject connection) throws Exception { + List endpoints = endpoints(connection); + ClientBuilder builder = Client.builder().endpoints(endpoints.toArray(String[]::new)); + String username = stringOrEmpty(connection, "username"); + String password = stringOrEmpty(connection, "password"); + if (!username.isBlank()) { + builder.user(byteSequence(username)); + builder.password(byteSequence(password)); + } + if (boolOrDefault(connection, "ssl", false)) { + builder.sslContext(sslContext(connection)); + } + return builder.build(); + } + + static List endpoints(JsonObject connection) { + String configured = firstNonBlank( + stringOrNull(connection, "etcd_endpoints"), + stringOrNull(connection, "endpoints"), + stringOrNull(connection, "connection_string") + ); + List result = new ArrayList<>(); + if (configured != null) { + for (String endpoint : configured.split("[,\\n]")) { + String normalized = normalizeEndpoint(endpoint.trim(), boolOrDefault(connection, "ssl", false)); + if (!normalized.isBlank()) { + result.add(normalized); + } + } + } + if (result.isEmpty()) { + String host = stringOrDefault(connection, "host", "127.0.0.1"); + int port = intOrDefault(connection, "port", 2379); + result.add(normalizeEndpoint(host + ":" + port, boolOrDefault(connection, "ssl", false))); + } + return result; + } + + private static String normalizeEndpoint(String endpoint, boolean tls) { + if (endpoint.isBlank()) { + return ""; + } + if (endpoint.startsWith("http://") || endpoint.startsWith("https://")) { + return endpoint; + } + return (tls ? "https://" : "http://") + endpoint; + } + + private static SslContext sslContext(JsonObject connection) throws Exception { + SslContextBuilder builder = GrpcSslContexts.forClient(); + String ca = stringOrEmpty(connection, "ca_cert_path"); + if (!ca.isBlank()) { + builder.trustManager(new File(ca)); + } + String cert = firstNonBlank(stringOrNull(connection, "client_cert_path"), stringOrNull(connection, "cert_path")); + String key = firstNonBlank(stringOrNull(connection, "client_key_path"), stringOrNull(connection, "key_path")); + if ((cert == null) != (key == null)) { + throw new IllegalArgumentException("Client certificate and key must be provided together"); + } + if (cert != null) { + builder.keyManager(new File(cert), new File(key)); + } + return builder.build(); + } + + private static Object listPrefix(JsonObject params) throws Exception { + KV active = requireKv(); + String prefix = stringOrDefault(params, "prefix", ""); + int limit = intOrDefault(params, "limit", DEFAULT_LIMIT); + String continuation = stringOrNull(params, "continuation"); + ByteSequence start = continuation == null || continuation.isBlank() + ? prefixStart(prefix) + : ByteSequence.from(Base64.getDecoder().decode(continuation)); + GetOption option = GetOption.newBuilder() + .withRange(prefixEnd(byteSequence(prefix))) + .withLimit(Math.max(1, limit)) + .withSortField(GetOption.SortTarget.KEY) + .withSortOrder(GetOption.SortOrder.ASCEND) + .build(); + GetResponse response = active.get(start, option).get(RPC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + + List> keys = new ArrayList<>(); + List kvs = response.getKvs(); + for (KeyValue item : kvs) { + Map row = metadata(item); + row.put("key", displayBytes(item.getKey().getBytes())); + keys.add(row); + } + + Map result = new LinkedHashMap<>(); + result.put("keys", keys); + result.put("continuation", response.isMore() && !kvs.isEmpty() ? nextContinuation(kvs.get(kvs.size() - 1)) : null); + result.put("revision", response.getHeader().getRevision()); + return result; + } + + private static Object get(JsonObject params) throws Exception { + KV active = requireKv(); + String key = params.get("key").getAsString(); + GetResponse response = active.get(byteSequence(key)).get(RPC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + Map result = new LinkedHashMap<>(); + if (response.getKvs().isEmpty()) { + result.put("found", false); + result.put("key", null); + result.put("value", null); + result.put("metadata", null); + return result; + } + KeyValue item = response.getKvs().get(0); + result.put("found", true); + result.put("key", displayBytes(item.getKey().getBytes())); + result.put("value", valueObject(item.getValue().getBytes())); + result.put("metadata", metadata(item)); + return result; + } + + private static Object put(JsonObject params) throws Exception { + KV active = requireKv(); + String key = params.get("key").getAsString(); + byte[] value = parseValue(params.getAsJsonObject("value")); + JsonElement leaseElement = params.get("lease"); + PutResponse response; + if (leaseElement != null && !leaseElement.isJsonNull()) { + PutOption option = PutOption.newBuilder().withLeaseId(leaseElement.getAsLong()).build(); + response = active.put(byteSequence(key), ByteSequence.from(value), option).get(RPC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } else { + response = active.put(byteSequence(key), ByteSequence.from(value)).get(RPC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } + return Collections.singletonMap("revision", response.getHeader().getRevision()); + } + + private static Object delete(JsonObject params) throws Exception { + KV active = requireKv(); + DeleteResponse response = + active.delete(byteSequence(params.get("key").getAsString())).get(RPC_TIMEOUT_SECONDS, TimeUnit.SECONDS); + Map result = new LinkedHashMap<>(); + result.put("deleted", response.getDeleted()); + result.put("revision", response.getHeader().getRevision()); + return result; + } + + private static Object dispatch(String method, JsonObject params) throws Exception { + return switch (method) { + case AgentProtocol.METHOD_HANDSHAKE -> handshakeResult(); + case AgentProtocol.METHOD_CONNECT, AgentProtocol.METHOD_TEST_CONNECTION -> connect(params); + case AgentProtocol.KV_METHOD_LIST_PREFIX -> listPrefix(params); + case AgentProtocol.KV_METHOD_GET -> get(params); + case AgentProtocol.KV_METHOD_PUT -> put(params); + case AgentProtocol.KV_METHOD_DELETE -> delete(params); + case AgentProtocol.METHOD_DISCONNECT -> { + closeClient(); + yield Collections.singletonMap("ok", true); + } + case AgentProtocol.METHOD_SHUTDOWN -> { + closeClient(); + System.exit(0); + yield Collections.singletonMap("ok", true); + } + default -> throw new IllegalArgumentException("Unknown method: " + method); + }; + } + + static String handleRequest(String line) { + JsonObject req = JsonParser.parseString(line).getAsJsonObject(); + JsonElement id = req.get("id"); + String method = req.get("method").getAsString(); + JsonObject params = req.has("params") && req.get("params").isJsonObject() + ? req.getAsJsonObject("params") + : new JsonObject(); + + JsonObject response = new JsonObject(); + response.addProperty("jsonrpc", "2.0"); + response.add("id", id); + + try { + Object result = dispatch(method, params); + response.add("result", GSON.toJsonTree(result)); + } catch (Exception e) { + JsonObject error = new JsonObject(); + error.addProperty("code", -1); + error.addProperty("message", e.getMessage() == null ? "Unknown error" : e.getMessage()); + response.add("error", error); + } + + return GSON.toJson(response); + } + + private static JsonObject connectionObject(JsonObject params) { + JsonElement connection = params.get("connection"); + return connection != null && connection.isJsonObject() ? connection.getAsJsonObject() : params; + } + + private static KV requireKv() { + if (kv == null) { + throw new IllegalStateException("Not connected"); + } + return kv; + } + + private static void closeClient() { + if (kv != null) { + kv.close(); + kv = null; + } + if (client != null) { + client.close(); + client = null; + } + } + + private static ByteSequence byteSequence(String value) { + return ByteSequence.from(value, java.nio.charset.StandardCharsets.UTF_8); + } + + private static ByteSequence prefixEnd(ByteSequence prefix) { + byte[] bytes = prefix.getBytes(); + if (bytes.length == 0) { + return ByteSequence.from(new byte[] {0}); + } + byte[] end = Arrays.copyOf(bytes, bytes.length); + for (int i = end.length - 1; i >= 0; i--) { + if ((end[i] & 0xff) < 0xff) { + end[i]++; + return ByteSequence.from(Arrays.copyOf(end, i + 1)); + } + } + return ByteSequence.from(new byte[] {0}); + } + + private static ByteSequence prefixStart(String prefix) { + if (prefix.isEmpty()) { + return ByteSequence.from(new byte[] {0}); + } + return byteSequence(prefix); + } + + private static String nextContinuation(KeyValue item) { + byte[] key = item.getKey().getBytes(); + byte[] next = Arrays.copyOf(key, key.length + 1); + next[next.length - 1] = 0; + return Base64.getEncoder().encodeToString(next); + } + + private static Map metadata(KeyValue item) { + Map metadata = new LinkedHashMap<>(); + metadata.put("createRevision", item.getCreateRevision()); + metadata.put("modRevision", item.getModRevision()); + metadata.put("version", item.getVersion()); + metadata.put("lease", item.getLease()); + metadata.put("valueSize", item.getValue().size()); + return metadata; + } + + private static Map valueObject(byte[] bytes) { + Map value = new LinkedHashMap<>(); + String utf8 = strictUtf8(bytes); + if (utf8 != null) { + value.put("encoding", "utf8"); + value.put("data", utf8); + } else { + value.put("encoding", "base64"); + value.put("data", Base64.getEncoder().encodeToString(bytes)); + } + return value; + } + + private static byte[] parseValue(JsonObject value) { + String encoding = stringOrDefault(value, "encoding", "utf8"); + String data = stringOrDefault(value, "data", ""); + if ("base64".equals(encoding)) { + return Base64.getDecoder().decode(data); + } + if (!"utf8".equals(encoding)) { + throw new IllegalArgumentException("Unsupported value encoding: " + encoding); + } + return data.getBytes(java.nio.charset.StandardCharsets.UTF_8); + } + + private static String displayBytes(byte[] bytes) { + String utf8 = strictUtf8(bytes); + return utf8 == null ? Base64.getEncoder().encodeToString(bytes) : utf8; + } + + private static String strictUtf8(byte[] bytes) { + CharsetDecoder decoder = java.nio.charset.StandardCharsets.UTF_8.newDecoder() + .onMalformedInput(CodingErrorAction.REPORT) + .onUnmappableCharacter(CodingErrorAction.REPORT); + try { + return decoder.decode(ByteBuffer.wrap(bytes)).toString(); + } catch (CharacterCodingException e) { + return null; + } + } + + private static String stringOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? null : element.getAsString(); + } + + private static String stringOrEmpty(JsonObject object, String key) { + return stringOrDefault(object, key, ""); + } + + private static String stringOrDefault(JsonObject object, String key, String fallback) { + String value = stringOrNull(object, key); + return value == null ? fallback : value; + } + + private static int intOrDefault(JsonObject object, String key, int fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsInt(); + } + + private static boolean boolOrDefault(JsonObject object, String key, boolean fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsBoolean(); + } + + private static String firstNonBlank(String... values) { + for (String value : values) { + if (value != null && !value.isBlank()) { + return value; + } + } + return null; + } + + public static void main(String[] args) throws Exception { + System.out.println("{\"ready\":true}"); + System.out.flush(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + + System.out.println(handleRequest(line)); + System.out.flush(); + } + } + + private static final class HandshakeResult { + private final int protocolVersion; + private final int agentProtocolVersion; + private final List capabilities; + + private HandshakeResult(int protocolVersion, int agentProtocolVersion, List capabilities) { + this.protocolVersion = protocolVersion; + this.agentProtocolVersion = agentProtocolVersion; + this.capabilities = capabilities; + } + } +} diff --git a/agents/drivers/etcd/src/test/java/com/dbx/agent/etcd/EtcdAgentTest.java b/agents/drivers/etcd/src/test/java/com/dbx/agent/etcd/EtcdAgentTest.java new file mode 100644 index 0000000..65c205d --- /dev/null +++ b/agents/drivers/etcd/src/test/java/com/dbx/agent/etcd/EtcdAgentTest.java @@ -0,0 +1,55 @@ +package com.dbx.agent.etcd; + +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +final class EtcdAgentTest { + @Test + void handshakeAdvertisesKvCapability() { + String response = EtcdAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"handshake\",\"params\":{}}" + ); + + JsonObject result = JsonParser.parseString(response).getAsJsonObject().getAsJsonObject("result"); + + Assertions.assertEquals(1, result.get("protocolVersion").getAsInt()); + Assertions.assertTrue(result.getAsJsonArray("capabilities").contains(JsonParser.parseString("\"kv\""))); + Assertions.assertTrue(result.getAsJsonArray("capabilities").contains(JsonParser.parseString("\"connect\""))); + } + + @Test + void endpointsUseConfiguredListAndScheme() { + JsonObject connection = JsonParser.parseString( + "{\"endpoints\":\"etcd-1:2379,https://etcd-2:2379\",\"ssl\":true}" + ).getAsJsonObject(); + + Assertions.assertEquals( + List.of("https://etcd-1:2379", "https://etcd-2:2379"), + EtcdAgent.endpoints(connection) + ); + } + + @Test + void endpointsFallbackToHostPort() { + JsonObject connection = JsonParser.parseString( + "{\"host\":\"127.0.0.1\",\"port\":2379}" + ).getAsJsonObject(); + + Assertions.assertEquals(List.of("http://127.0.0.1:2379"), EtcdAgent.endpoints(connection)); + } + + @Test + void kvMethodDispatchReturnsJsonRpcErrorWhenDisconnected() { + String response = EtcdAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"kv_get\",\"params\":{\"key\":\"/app/name\"}}" + ); + + JsonObject error = JsonParser.parseString(response).getAsJsonObject().getAsJsonObject("error"); + + Assertions.assertEquals(-1, error.get("code").getAsInt()); + Assertions.assertEquals("Not connected", error.get("message").getAsString()); + } +} diff --git a/agents/drivers/exasol/build.gradle b/agents/drivers/exasol/build.gradle new file mode 100644 index 0000000..71dda62 --- /dev/null +++ b/agents/drivers/exasol/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.exasol:exasol-jdbc:26.2.7' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Exasol', 'Main-Class': 'com.dbx.agent.exasol.ExasolAgent') + } +} diff --git a/agents/drivers/exasol/src/main/java/com/dbx/agent/exasol/ExasolAgent.java b/agents/drivers/exasol/src/main/java/com/dbx/agent/exasol/ExasolAgent.java new file mode 100644 index 0000000..8dd7bdd --- /dev/null +++ b/agents/drivers/exasol/src/main/java/com/dbx/agent/exasol/ExasolAgent.java @@ -0,0 +1,22 @@ +package com.dbx.agent.exasol; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +public final class ExasolAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile EXASOL_PROFILE = new JdbcAgentProfile( + "com.exasol.jdbc.EXADriver", + "jdbc:exa:{host}:{port};schema={database}", + 8563, + true + ); + + public ExasolAgent() { + super(EXASOL_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new ExasolAgent()).run(); + } +} diff --git a/agents/drivers/firebird/build.gradle b/agents/drivers/firebird/build.gradle new file mode 100644 index 0000000..701aad5 --- /dev/null +++ b/agents/drivers/firebird/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'org.firebirdsql.jdbc:jaybird:6.0.5' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Firebird', 'Main-Class': 'com.dbx.agent.firebird.FirebirdAgent') + } +} diff --git a/agents/drivers/firebird/src/main/java/com/dbx/agent/firebird/FirebirdAgent.java b/agents/drivers/firebird/src/main/java/com/dbx/agent/firebird/FirebirdAgent.java new file mode 100644 index 0000000..ed57d29 --- /dev/null +++ b/agents/drivers/firebird/src/main/java/com/dbx/agent/firebird/FirebirdAgent.java @@ -0,0 +1,22 @@ +package com.dbx.agent.firebird; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +public final class FirebirdAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile FIREBIRD_PROFILE = new JdbcAgentProfile( + "org.firebirdsql.jdbc.FBDriver", + "jdbc:firebirdsql://{host}:{port}/{database}", + 3050, + true + ); + + public FirebirdAgent() { + super(FIREBIRD_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new FirebirdAgent()).run(); + } +} diff --git a/agents/drivers/gbase8a/build.gradle b/agents/drivers/gbase8a/build.gradle new file mode 100644 index 0000000..a066170 --- /dev/null +++ b/agents/drivers/gbase8a/build.gradle @@ -0,0 +1,12 @@ +dependencies { + implementation files('libs/gbase-connector-java-9.5.0.10-build1-bin.jar') +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'GBase 8a', + 'Main-Class': 'com.dbx.agent.gbase8a.Gbase8aAgent' + ) + } +} diff --git a/agents/drivers/gbase8a/src/main/java/com/dbx/agent/gbase8a/Gbase8aAgent.java b/agents/drivers/gbase8a/src/main/java/com/dbx/agent/gbase8a/Gbase8aAgent.java new file mode 100644 index 0000000..92ba7cc --- /dev/null +++ b/agents/drivers/gbase8a/src/main/java/com/dbx/agent/gbase8a/Gbase8aAgent.java @@ -0,0 +1,345 @@ +package com.dbx.agent.gbase8a; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import com.dbx.agent.StandardJdbcMetadata; +import com.dbx.agent.TableInfo; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; + +public final class Gbase8aAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile GBASE8A_PROFILE = new JdbcAgentProfile( + "com.gbase.jdbc.Driver", + "jdbc:gbase://{host}:{port}/{database}?useSSL=false", + 5258, + false, + java.util.Collections.emptySet(), + java.util.Arrays.asList("TABLE", "VIEW", "BASE TABLE"), + "`", + "USE", + true, + false, + true, + false + ); + + public Gbase8aAgent() { + super(GBASE8A_PROFILE); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return super.executeQuery(sql, schema, withoutFetchSize(options)); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + return super.executeQueryPage(sql, schema, withoutFetchSize(options)); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return super.startTableRead(sql, schema, withoutFetchSize(options)); + } + + @Override + public List listTables(String schema) { + return queryTables(schema, MetadataListConstraints.NONE); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + return queryTables(schema, MetadataListConstraints.orNone(constraints)); + } + + private List queryTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + if (!constraints.includesTableLikeTypes()) { + return List.of(); + } + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE "); + if (hasSchema(schema)) { + sql.append("TABLE_SCHEMA = ?"); + args.add(schema); + } else { + sql.append("TABLE_SCHEMA NOT IN ('information_schema', 'performance_schema', 'gclusterdb', 'gctmpdb')"); + } + appendGbase8aTableTypePredicate(sql, args, constraints); + appendNameFilter(sql, args, "TABLE_NAME", constraints); + sql.append(hasSchema(schema) ? " ORDER BY TABLE_NAME" : " ORDER BY TABLE_SCHEMA, TABLE_NAME"); + appendLimitOffset(sql, args, constraints); + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String tableType = rs.getString("TABLE_TYPE"); + if ("BASE TABLE".equals(tableType)) { + tableType = "TABLE"; + } + result.add(new TableInfo(rs.getString("TABLE_NAME"), tableType, null)); + } + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + MetadataListConstraints guard = constraints.hasLimit() ? constraints.withoutPaging() : constraints; + return guard.filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return queryObjects(schema, MetadataListConstraints.NONE); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + return queryObjects(schema, MetadataListConstraints.orNone(constraints)); + } + + private List queryObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + boolean includeTables = constraints.includesTableLikeTypes(); + boolean includeRoutines = includesRoutineTypes(constraints); + if (!includeTables && !includeRoutines) { + return List.of(); + } + List result = new ArrayList<>(); + if (includeTables) { + MetadataListConstraints tableConstraints = includeRoutines + ? new MetadataListConstraints(constraints.getFilter(), null, null, tableLikeObjectTypes(constraints)) + : constraints; + result.addAll(StandardJdbcMetadata.INSTANCE.listObjects(queryTables(schema, tableConstraints), schema)); + } + if (includeRoutines) { + MetadataListConstraints routineConstraints = includeTables + ? new MetadataListConstraints(constraints.getFilter(), null, null, routineObjectTypes(constraints)) + : constraints; + appendRoutines(result, schema, routineConstraints); + } + boolean singlePagedSource = includeTables != includeRoutines && constraints.hasLimit(); + MetadataListConstraints guard = singlePagedSource ? constraints.withoutPaging() : constraints; + return guard.filterObjects(result); + }); + } + + private void appendRoutines(List result, String schema, MetadataListConstraints constraints) throws Exception { + StringBuilder sql = new StringBuilder(); + List args = new ArrayList<>(); + boolean hasSchema = hasSchema(schema); + if (hasSchema) { + sql.append("SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ?"); + args.add(schema); + } else { + sql.append("SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA NOT IN ('information_schema', 'performance_schema', 'gclusterdb', 'gctmpdb')"); + } + appendGbase8aRoutineTypePredicate(sql, args, constraints); + appendNameFilter(sql, args, "ROUTINE_NAME", constraints); + sql.append(hasSchema ? " ORDER BY ROUTINE_NAME" : " ORDER BY ROUTINE_SCHEMA, ROUTINE_NAME"); + appendLimitOffset(sql, args, constraints); + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String routineSchema = hasSchema ? schema : rs.getString("ROUTINE_SCHEMA"); + result.add(new ObjectInfo( + rs.getString("ROUTINE_NAME"), + normalizeRoutineType(rs.getString("ROUTINE_TYPE")), + routineSchema, + rs.getString("ROUTINE_COMMENT") + )); + } + } + } + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String normalizedType = objectType.toUpperCase(Locale.ROOT); + String sql = switch (normalizedType) { + case "VIEW" -> "SHOW CREATE VIEW "; + case "PROCEDURE" -> "SHOW CREATE PROCEDURE "; + case "FUNCTION" -> "SHOW CREATE FUNCTION "; + default -> throw new IllegalArgumentException("Unsupported object type: " + objectType); + }; + String qualifiedName = hasSchema(schema) + ? JdbcIdentifiers.INSTANCE.backtick(schema) + "." + JdbcIdentifiers.INSTANCE.backtick(name) + : JdbcIdentifiers.INSTANCE.backtick(name); + + String source = ""; + try (Statement stmt = requireConnection().createStatement(); + ResultSet rs = stmt.executeQuery(sql + qualifiedName)) { + if (rs.next()) { + // SHOW CREATE result layouts vary by GBase driver version, so locate the definition column by label. + ResultSetMetaData metadata = rs.getMetaData(); + for (int index = 1; index <= metadata.getColumnCount(); index++) { + String label = metadata.getColumnLabel(index); + if (label != null && label.toUpperCase(Locale.ROOT).startsWith("CREATE ")) { + String value = rs.getString(index); + source = value == null ? "" : value; + break; + } + } + } + } + return new ObjectSource(name, normalizedType, schema, source); + }); + } + + private static void appendGbase8aTableTypePredicate( + StringBuilder sql, + List args, + MetadataListConstraints constraints + ) { + if (!constraints.hasObjectTypes()) { + return; + } + List tableTypes = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + tableTypes.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + tableTypes.add("VIEW"); + } + if (tableTypes.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND TABLE_TYPE IN (").append(placeholders(tableTypes.size())).append(")"); + args.addAll(tableTypes); + } + + private static void appendGbase8aRoutineTypePredicate( + StringBuilder sql, + List args, + MetadataListConstraints constraints + ) { + if (!constraints.hasObjectTypes()) { + return; + } + List routineTypes = new ArrayList<>(); + if (constraints.objectTypeAllowed("PROCEDURE")) { + routineTypes.add("PROCEDURE"); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + routineTypes.add("FUNCTION"); + } + if (routineTypes.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND ROUTINE_TYPE IN (").append(placeholders(routineTypes.size())).append(")"); + args.addAll(routineTypes); + } + + private static void appendNameFilter(StringBuilder sql, List args, String column, MetadataListConstraints constraints) { + if (!constraints.hasFilter()) { + return; + } + sql.append(" AND UPPER(").append(column).append(") LIKE ? ESCAPE '\\\\'"); + args.add(constraints.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + + private static void appendLimitOffset(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasLimit()) { + return; + } + sql.append(" LIMIT ?"); + args.add(constraints.getLimit()); + if (constraints.hasOffset()) { + sql.append(" OFFSET ?"); + args.add(constraints.getOffset()); + } + } + + private static boolean hasSchema(String schema) { + return schema != null && !schema.trim().isEmpty(); + } + + private static boolean includesRoutineTypes(MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return true; + } + return constraints.objectTypeAllowed("PROCEDURE") || constraints.objectTypeAllowed("FUNCTION"); + } + + private static List tableLikeObjectTypes(MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return null; + } + List result = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + result.add("TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + result.add("VIEW"); + } + return result; + } + + private static List routineObjectTypes(MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return null; + } + List result = new ArrayList<>(); + if (constraints.objectTypeAllowed("PROCEDURE")) { + result.add("PROCEDURE"); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + result.add("FUNCTION"); + } + return result; + } + + private static String placeholders(int count) { + return String.join(", ", java.util.Collections.nCopies(count, "?")); + } + + private static void bind(PreparedStatement stmt, List args) throws Exception { + for (int index = 0; index < args.size(); index += 1) { + Object arg = args.get(index); + if (arg instanceof Integer) { + stmt.setInt(index + 1, (Integer) arg); + } else { + stmt.setString(index + 1, String.valueOf(arg)); + } + } + } + + private static String normalizeRoutineType(String routineType) { + if (routineType == null || routineType.trim().isEmpty()) { + return "PROCEDURE"; + } + return routineType.trim().toUpperCase(Locale.ROOT); + } + + private static ExecuteQueryOptions withoutFetchSize(ExecuteQueryOptions options) { + return new ExecuteQueryOptions(options.getMaxRows(), null, options.getTimeoutSecs()); + } + + private static QueryPageOptions withoutFetchSize(QueryPageOptions options) { + return new QueryPageOptions(options.getPageSize(), null, options.getMaxRows(), options.getTimeoutSecs()); + } + + public static void main(String[] args) { + new JsonRpcServer(new Gbase8aAgent()).run(); + } +} diff --git a/agents/drivers/gbase8a/src/test/java/com/dbx/agent/gbase8a/Gbase8aAgentTest.java b/agents/drivers/gbase8a/src/test/java/com/dbx/agent/gbase8a/Gbase8aAgentTest.java new file mode 100644 index 0000000..e17769d --- /dev/null +++ b/agents/drivers/gbase8a/src/test/java/com/dbx/agent/gbase8a/Gbase8aAgentTest.java @@ -0,0 +1,265 @@ +package com.dbx.agent.gbase8a; + +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +class Gbase8aAgentTest { + @Test + void listObjectsIncludesRoutinesFromInformationSchema() { + List sql = new ArrayList<>(); + Gbase8aAgent agent = new Gbase8aAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, + resultSet( + new String[]{"TABLE_NAME", "TABLE_TYPE"}, + new Object[][]{{"orders", "BASE TABLE"}} + ), + resultSet( + new String[]{"ROUTINE_NAME", "ROUTINE_TYPE", "ROUTINE_COMMENT"}, + new Object[][]{{"refresh_orders", "PROCEDURE", "proc comment"}, {"format_order", "FUNCTION", null}} + ) + )); + + List objects = agent.listObjects("app"); + + Assertions.assertEquals(3, objects.size()); + Assertions.assertEquals("orders", objects.get(0).getName()); + Assertions.assertEquals("TABLE", objects.get(0).getObject_type()); + Assertions.assertEquals("refresh_orders", objects.get(1).getName()); + Assertions.assertEquals("PROCEDURE", objects.get(1).getObject_type()); + Assertions.assertEquals("app", objects.get(1).getSchema()); + Assertions.assertEquals("proc comment", objects.get(1).getComment()); + Assertions.assertEquals("format_order", objects.get(2).getName()); + Assertions.assertEquals("FUNCTION", objects.get(2).getObject_type()); + Assertions.assertEquals("app", objects.get(2).getSchema()); + Assertions.assertTrue(sql.get(1).contains("FROM information_schema.ROUTINES"), sql.get(1)); + Assertions.assertTrue(sql.get(1).contains("ROUTINE_SCHEMA = ?"), sql.get(1)); + } + + @Test + void constrainedListTablesPushesFilterTypeAndLimit() { + List sql = new ArrayList<>(); + Gbase8aAgent agent = new Gbase8aAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, + resultSet( + new String[]{"TABLE_NAME", "TABLE_TYPE"}, + new Object[][]{{"user_order", "BASE TABLE"}} + ) + )); + + List tables = agent.listTables( + "app", + new MetadataListConstraints("user", 1, 1, List.of("TABLE")) + ); + + Assertions.assertEquals(1, tables.size()); + Assertions.assertEquals("user_order", tables.get(0).getName()); + Assertions.assertTrue(sql.get(0).contains("TABLE_TYPE IN (?)"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(TABLE_NAME) LIKE ?"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("LIMIT ?"), sql.get(0)); + } + + @Test + void constrainedListObjectsKeepsCustomRoutineMetadata() { + List sql = new ArrayList<>(); + Gbase8aAgent agent = new Gbase8aAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, + resultSet( + new String[]{"ROUTINE_NAME", "ROUTINE_TYPE", "ROUTINE_COMMENT"}, + new Object[][]{{"refresh_orders", "PROCEDURE", "proc comment"}, {"format_order", "FUNCTION", null}} + ) + )); + + List objects = agent.listObjects( + "app", + new MetadataListConstraints("format", 1, null, List.of("FUNCTION")) + ); + + Assertions.assertEquals(1, objects.size()); + Assertions.assertEquals("format_order", objects.get(0).getName()); + Assertions.assertEquals("FUNCTION", objects.get(0).getObject_type()); + Assertions.assertTrue(sql.get(0).contains("ROUTINE_TYPE IN (?)"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(ROUTINE_NAME) LIKE ?"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("LIMIT ?"), sql.get(0)); + } + + @Test + void getObjectSourceUsesShowCreateForRoutines() { + List sql = new ArrayList<>(); + Gbase8aAgent agent = new Gbase8aAgent(); + TestSupport.setPrivateConnection(agent, statementConnection(sql, resultSet( + new String[]{"Procedure", "sql_mode", "Create Procedure"}, + new Object[][]{{"refresh_orders", "", "CREATE PROCEDURE `refresh_orders`() SELECT 1"}} + ))); + + ObjectSource source = agent.getObjectSource("app", "refresh_orders", "procedure"); + + Assertions.assertEquals("PROCEDURE", source.getObject_type()); + Assertions.assertEquals("app", source.getSchema()); + Assertions.assertEquals("CREATE PROCEDURE `refresh_orders`() SELECT 1", source.getSource()); + Assertions.assertEquals("SHOW CREATE PROCEDURE `app`.`refresh_orders`", sql.get(0)); + } + + @Test + void getObjectSourceFindsDefinitionAcrossDriverResultLayouts() { + List sql = new ArrayList<>(); + Gbase8aAgent agent = new Gbase8aAgent(); + TestSupport.setPrivateConnection(agent, statementConnection(sql, resultSet( + new String[]{"Function", "Create Function", "character_set_client", "Database Collation"}, + new Object[][]{{"format_order", "CREATE FUNCTION `format_order`() RETURNS INT RETURN 1", "utf8", "utf8_bin"}} + ))); + + ObjectSource source = agent.getObjectSource("app`prod", "format`order", "FUNCTION"); + + Assertions.assertEquals("CREATE FUNCTION `format_order`() RETURNS INT RETURN 1", source.getSource()); + Assertions.assertEquals("SHOW CREATE FUNCTION `app``prod`.`format``order`", sql.get(0)); + } + + @Test + void getObjectSourceSupportsViewsAndRejectsOtherObjectTypes() { + List sql = new ArrayList<>(); + Gbase8aAgent agent = new Gbase8aAgent(); + TestSupport.setPrivateConnection(agent, statementConnection(sql, resultSet( + new String[]{"View", "Create View"}, + new Object[][]{{"active_orders", "CREATE VIEW `active_orders` AS SELECT 1"}} + ))); + + ObjectSource source = agent.getObjectSource("app", "active_orders", "VIEW"); + + Assertions.assertEquals("CREATE VIEW `active_orders` AS SELECT 1", source.getSource()); + Assertions.assertEquals("SHOW CREATE VIEW `app`.`active_orders`", sql.get(0)); + Assertions.assertThrows( + IllegalArgumentException.class, + () -> agent.getObjectSource("app", "orders", "TABLE") + ); + } + + private static Connection preparedConnection(List sql, ResultSet... resultSets) { + int[] resultSetIndex = {0}; + PreparedStatement statement = proxy(PreparedStatement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + int current = Math.min(resultSetIndex[0], resultSets.length - 1); + resultSetIndex[0] += 1; + return resultSets[current]; + } + if ("setString".equals(method.getName()) || "setInt".equals(method.getName()) || "close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("prepareStatement".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return statement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Connection statementConnection(List sql, ResultSet resultSet) { + Statement statement = proxy(Statement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return resultSet; + } + if ("close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("createStatement".equals(method.getName())) { + return statement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet resultSet(String[] columns, Object[][] rows) { + int[] index = {-1}; + ResultSetMetaData metadata = proxy(ResultSetMetaData.class, (method, args) -> { + if ("getColumnCount".equals(method.getName())) { + return columns.length; + } + if ("getColumnLabel".equals(method.getName())) { + return columns[((Number) args[0]).intValue() - 1]; + } + return defaultValue(method.getReturnType()); + }); + return proxy(ResultSet.class, (method, args) -> { + switch (method.getName()) { + case "next": + index[0] += 1; + return index[0] < rows.length; + case "getString": + Object value = columnValue(columns, rows[index[0]], args[0]); + return value == null ? null : String.valueOf(value); + case "getMetaData": + return metadata; + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static Object columnValue(String[] columns, Object[] row, Object key) { + if (key instanceof Number) { + return row[((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return row[i]; + } + } + return null; + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return handler.handle(method, args == null ? new Object[0] : args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) return false; + if (type == Byte.TYPE) return (byte) 0; + if (type == Short.TYPE) return (short) 0; + if (type == Integer.TYPE) return 0; + if (type == Long.TYPE) return 0L; + if (type == Float.TYPE) return 0f; + if (type == Double.TYPE) return 0d; + if (type == Character.TYPE) return (char) 0; + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/gbase8s/build.gradle b/agents/drivers/gbase8s/build.gradle new file mode 100644 index 0000000..bc2f0fd --- /dev/null +++ b/agents/drivers/gbase8s/build.gradle @@ -0,0 +1,12 @@ +dependencies { + implementation 'com.gbasedbt:jdbc:3.6.3.2' +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'GBase 8s', + 'Main-Class': 'com.dbx.agent.gbase8s.Gbase8sAgent' + ) + } +} diff --git a/agents/drivers/gbase8s/src/main/java/com/dbx/agent/gbase8s/Gbase8sAgent.java b/agents/drivers/gbase8s/src/main/java/com/dbx/agent/gbase8s/Gbase8sAgent.java new file mode 100644 index 0000000..52cdd7c --- /dev/null +++ b/agents/drivers/gbase8s/src/main/java/com/dbx/agent/gbase8s/Gbase8sAgent.java @@ -0,0 +1,859 @@ +package com.dbx.agent.gbase8s; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class Gbase8sAgent extends ConfiguredJdbcAgent { + private static final long METADATA_CACHE_TTL_MILLIS = 10_000L; + + public static final JdbcAgentProfile GBASE8S_PROFILE = new JdbcAgentProfile( + "com.gbasedbt.jdbc.Driver", + "jdbc:gbasedbt-sqli://{host}:{port}/{database}:GBASEDBTSERVER=gbase8s", + 9088, + true + ); + + private final Object metadataCacheLock = new Object(); + private long databaseCacheTimeMillis; + private List databaseCache = Collections.emptyList(); + private String schemaCacheCatalog = ""; + private long schemaCacheTimeMillis; + private List schemaCache = Collections.emptyList(); + private String tableCacheCatalog = ""; + private String tableCacheSchema = ""; + private long tableCacheTimeMillis; + private List tableCache = Collections.emptyList(); + + public Gbase8sAgent() { + super(GBASE8S_PROFILE); + } + + public static String buildUrl(ConnectParams params) { + if (!params.getConnection_string().trim().isEmpty()) { + return params.getConnection_string(); + } + String extraParams = trimEnd(trimStart(params.getUrl_params().trim(), ':', ';'), ';'); + String database = params.getDatabase().trim().isEmpty() ? "sysmaster" : params.getDatabase().trim(); + String serverParam = containsIgnoreCase(extraParams, "GBASEDBTSERVER=") + ? "" + : "GBASEDBTSERVER=" + getGbaseServer(params); + List jdbcParams = new ArrayList<>(); + if (!serverParam.isBlank()) { + jdbcParams.add(serverParam); + } + if (!extraParams.isBlank()) { + jdbcParams.add(extraParams); + } + return "jdbc:gbasedbt-sqli://" + params.getHost() + ":" + port(params) + "/" + database + ":" + + String.join(";", jdbcParams); + } + + private static String getGbaseServer(ConnectParams params) { + if (params.getGbase_server() != null && !params.getGbase_server().trim().isEmpty()) { + return params.getGbase_server().trim(); + } + return defaultGbaseServer(params.getHost()); + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + protected void afterConnect(ConnectParams params, Connection connection) { + super.afterConnect(params, connection); + clearMetadataCache(); + } + + @Override + public void disconnect() { + clearMetadataCache(); + super.disconnect(); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + QueryResult result = super.executeQuery(sql, schema, options); + if (mayChangeMetadata(sql)) { + clearMetadataCache(); + } + return result; + } + + @Override + public List listDatabases() { + List cached = cachedDatabases(); + if (cached != null) { + return cached; + } + List names = queryDatabaseNamesInCatalog("sysmaster", "SELECT name FROM sysdatabases ORDER BY name"); + if (names.isEmpty()) { + names = queryDatabaseNames("SELECT name FROM sysmaster:sysdatabases ORDER BY name"); + } + if (names.isEmpty()) { + names = queryDatabaseNames("SELECT name FROM sysdatabases ORDER BY name"); + } + if (names.isEmpty()) { + return super.listDatabases(); + } + List result = new ArrayList<>(); + for (String name : names) { + result.add(new DatabaseInfo(name)); + } + cacheDatabases(result); + return result; + } + + @Override + public List listSchemas() { + try { + String catalog = currentCatalog(); + List cached = cachedSchemas(catalog); + if (cached != null) { + return cached; + } + Set schemas = new LinkedHashSet<>(); + try (PreparedStatement stmt = requireConnection().prepareStatement( + "SELECT DISTINCT owner FROM systables WHERE tabid >= 100 AND tabtype IN ('T', 'V') ORDER BY owner" + ); ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String owner = trim(rs.getString("owner")); + if (!owner.isEmpty()) { + schemas.add(owner); + } + } + } + List result = new ArrayList<>(schemas); + Collections.sort(result); + cacheSchemas(catalog, result); + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public List listTables(String schema) { + try { + String catalog = currentCatalog(); + List cached = cachedTables(catalog, schema); + if (cached != null) { + return cached; + } + List result = new ArrayList<>(); + String owner = trim(schema); + String sql = """ + SELECT t.tabname, t.tabtype, c.comments + FROM systables t + LEFT JOIN syscomms c ON c.tabid = t.tabid + WHERE t.tabid >= 100 AND t.tabtype IN ('T', 'V') + """.stripIndent().trim(); + if (!owner.isEmpty()) { + sql += " AND t.owner = ?"; + } + sql += " ORDER BY tabname"; + try (PreparedStatement stmt = requireConnection().prepareStatement(sql)) { + if (!owner.isEmpty()) { + stmt.setString(1, owner); + } + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + trim(rs.getString("tabname")), + tableType(rs.getString("tabtype")), + emptyToNull(trim(rs.getString("comments"))) + )); + } + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + cacheTables(catalog, schema, result); + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + return queryConstrainedTables(schema, normalized); + } + + @Override + public List getColumns(String schema, String table) { + try { + Connection conn = requireConnection(); + String owner = trim(schema); + Set primaryKeyColumns = getPrimaryKeyColumnNumbers(conn, owner, table); + List args = new ArrayList<>(); + args.add(table); + StringBuilder sql = new StringBuilder(""" + SELECT c.colname, c.coltype, c.colno, c.collength, cc.comments + FROM syscolumns c + JOIN systables t ON t.tabid = c.tabid + LEFT JOIN syscolcomms cc ON cc.tabid = c.tabid AND cc.colno = c.colno + WHERE t.tabid >= 100 AND t.tabname = ? + """.stripIndent().trim()); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + sql.append(" ORDER BY c.colno"); + + List result = new ArrayList<>(); + try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String name = trim(rs.getString("colname")); + int coltype = rs.getInt("coltype"); + int baseType = baseColType(coltype); + int length = rs.getInt("collength"); + result.add(new ColumnInfo( + name, + mapColType(baseType), + (coltype & 256) == 0, + null, + primaryKeyColumns.contains(rs.getInt("colno")), + null, + emptyToNull(trim(rs.getString("comments"))), + numericPrecision(baseType, length), + numericScale(baseType, length), + characterMaximumLength(baseType, length) + )); + } + } + } + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public List listIndexes(String schema, String table) { + try { + String owner = trim(schema); + List args = new ArrayList<>(); + args.add(table); + StringBuilder sql = new StringBuilder(""" + SELECT i.idxname, i.idxtype, c.constrtype, + i.part1, i.part2, i.part3, i.part4, i.part5, i.part6, i.part7, i.part8, + i.part9, i.part10, i.part11, i.part12, i.part13, i.part14, i.part15, i.part16 + FROM sysindexes i + JOIN systables t ON t.tabid = i.tabid + LEFT JOIN sysconstraints c ON c.tabid = i.tabid AND c.idxname = i.idxname + WHERE t.tabid >= 100 AND t.tabname = ? + """.stripIndent().trim()); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + sql.append(" ORDER BY i.idxname"); + + Map columnNames = loadColumnNamesByNumber(owner, table); + List result = new ArrayList<>(); + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String name = trim(rs.getString("idxname")); + if (name.isEmpty()) { + continue; + } + List parts = readIndexParts(rs); + List columns = resolveIndexColumns(parts, columnNames); + String indexType = trim(rs.getString("idxtype")); + String constraintType = trim(rs.getString("constrtype")); + result.add(new IndexInfo( + name, + columns, + indexType.toUpperCase(Locale.ROOT).startsWith("U"), + "P".equalsIgnoreCase(constraintType), + null, + indexType, + null, + null + )); + } + } + } + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + String normalizedType = objectType == null ? "" : objectType.trim().toUpperCase(Locale.ROOT); + if (!"VIEW".equals(normalizedType)) { + throw new UnsupportedOperationException("Object source is not supported"); + } + return new ObjectSource(name, "VIEW", emptyToNull(trim(schema)), viewSource(schema, name), isEditableView(schema, name)); + } + + @Override + public String getTableDdl(String schema, String table) { + if ("VIEW".equals(tableType(schema, table))) { + return viewSource(schema, table); + } + return super.getTableDdl(schema, table); + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + if (!constraints.includesTableLikeTypes()) { + return List.of(); + } + try { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + String owner = trim(schema); + // GBase 8s follows Informix-style SKIP/FIRST pagination in the SELECT list. + StringBuilder sql = new StringBuilder("SELECT "); + if (constraints.hasOffset()) { + sql.append("SKIP ").append(constraints.getOffset()).append(' '); + } + if (constraints.hasLimit()) { + sql.append("FIRST ").append(constraints.getLimit()).append(' '); + } + sql.append("t.tabname, t.tabtype, c.comments FROM systables t LEFT JOIN syscomms c ON c.tabid = t.tabid WHERE t.tabid >= 100"); + appendGbase8sTableTypePredicate(sql, constraints); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + if (constraints.hasFilter()) { + sql.append(" AND UPPER(t.tabname) LIKE ? ESCAPE '\\\\'"); + args.add(constraints.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + sql.append(" ORDER BY t.tabname"); + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + trim(rs.getString("tabname")), + tableType(rs.getString("tabtype")), + emptyToNull(trim(rs.getString("comments"))) + )); + } + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + return constraints.withoutPaging().filterTables(result); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static void main(String[] args) { + new JsonRpcServer(new Gbase8sAgent()).run(); + } + + private static int port(ConnectParams params) { + return params.getPort() > 0 ? params.getPort() : GBASE8S_PROFILE.getDefaultPort(); + } + + private static String defaultGbaseServer(String host) { + return isIpAddress(host) ? "gbase8s" : host; + } + + private static boolean isIpAddress(String host) { + return host.matches("\\d{1,3}(\\.\\d{1,3}){3}") || host.contains(":"); + } + + private static String trimStart(String value, char... chars) { + int start = 0; + while (start < value.length() && contains(chars, value.charAt(start))) { + start++; + } + return value.substring(start); + } + + private static String trimEnd(String value, char... chars) { + int end = value.length(); + while (end > 0 && contains(chars, value.charAt(end - 1))) { + end--; + } + return value.substring(0, end); + } + + private static boolean contains(char[] chars, char value) { + for (char ch : chars) { + if (ch == value) { + return true; + } + } + return false; + } + + private static boolean containsIgnoreCase(String value, String needle) { + return value.toLowerCase(Locale.ROOT).contains(needle.toLowerCase(Locale.ROOT)); + } + + private List queryDatabaseNames(String sql) { + try { + return queryDatabaseNames(requireConnection(), sql); + } catch (Exception ignored) { + return Collections.emptyList(); + } + } + + private List queryDatabaseNamesInCatalog(String catalog, String sql) { + try { + Connection connection = requireConnection(); + String previousCatalog = ""; + try { + previousCatalog = trim(connection.getCatalog()); + } catch (Exception ignored) { + } + connection.setCatalog(catalog); + try { + return queryDatabaseNames(connection, sql); + } finally { + if (!previousCatalog.isEmpty()) { + try { + connection.setCatalog(previousCatalog); + } catch (Exception ignored) { + } + } + } + } catch (Exception ignored) { + return Collections.emptyList(); + } + } + + private static List queryDatabaseNames(Connection connection, String sql) throws Exception { + Set names = new LinkedHashSet<>(); + try (PreparedStatement stmt = connection.prepareStatement(sql); ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String name = trim(rs.getString(1)); + if (!name.isEmpty()) { + names.add(name); + } + } + } + List result = new ArrayList<>(names); + Collections.sort(result); + return result; + } + + private static String tableType(String tabtype) { + return "V".equalsIgnoreCase(trim(tabtype)) ? "VIEW" : "TABLE"; + } + + private String tableType(String schema, String table) { + try { + String owner = trim(schema); + List args = new ArrayList<>(); + args.add(table); + StringBuilder sql = new StringBuilder("SELECT tabtype FROM systables WHERE tabid >= 100 AND tabname = ?"); + if (!owner.isEmpty()) { + sql.append(" AND owner = ?"); + args.add(owner); + } + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + return rs.next() ? tableType(rs.getString("tabtype")) : ""; + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private String viewSource(String schema, String name) { + try { + String owner = trim(schema); + List args = new ArrayList<>(); + args.add(name); + StringBuilder sql = new StringBuilder(""" + SELECT v.viewtext + FROM sysviews v + JOIN systables t ON t.tabid = v.tabid + WHERE t.tabname = ? + """.stripIndent().trim()); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + sql.append(" ORDER BY v.seqno"); + StringBuilder source = new StringBuilder(); + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String chunk = rs.getString("viewtext"); + source.append(chunk == null ? "" : chunk); + } + } + } + String result = stripTrailing(source.toString()); + if (result.isEmpty()) { + throw new IllegalArgumentException("View source not found: " + name); + } + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private boolean isEditableView(String schema, String name) { + try { + String owner = trim(schema); + List args = new ArrayList<>(); + args.add(name); + StringBuilder sql = new StringBuilder(""" + SELECT t.tabid, t.owner, + (SELECT v.tabid FROM systables v WHERE UPPER(TRIM(v.tabname)) = 'VERSION') AS system_boundary_tabid + FROM systables t + WHERE t.tabtype = 'V' AND t.tabname = ? + """.stripIndent().trim()); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + if (!rs.next()) { + return true; + } + int systemBoundaryTabid = rs.getInt("system_boundary_tabid"); + Integer boundary = rs.wasNull() ? null : systemBoundaryTabid; + return !isSystemCatalogView(rs.getInt("tabid"), rs.getString("owner"), boundary); + } + } + } catch (Exception ignored) { + return true; + } + } + + private static boolean isSystemCatalogView(int tabid, String owner, Integer systemBoundaryTabid) { + if (!"gbasedbt".equalsIgnoreCase(trim(owner))) { + return false; + } + // GBase 8s marks system catalog tables before/at VERSION; avoid a fixed tabid threshold + // so ordinary gbasedbt-owned user views are still editable. + if (systemBoundaryTabid != null && systemBoundaryTabid > 0) { + return tabid <= systemBoundaryTabid; + } + return tabid < 100; + } + + public static String mapColType(int coltype) { + return switch (baseColType(coltype)) { + case 0 -> "CHAR"; + case 1 -> "SMALLINT"; + case 2 -> "INTEGER"; + case 3 -> "FLOAT"; + case 4 -> "SMALLFLOAT"; + case 5 -> "DECIMAL"; + case 6 -> "SERIAL"; + case 7 -> "DATE"; + case 8 -> "MONEY"; + case 9 -> "NULL"; + case 10 -> "DATETIME"; + case 11 -> "BYTE"; + case 12 -> "TEXT"; + case 13 -> "VARCHAR"; + case 14 -> "INTERVAL"; + case 15 -> "NCHAR"; + case 16 -> "NVARCHAR"; + case 17 -> "INT8"; + case 18 -> "SERIAL8"; + case 19 -> "SET"; + case 20 -> "MULTISET"; + case 21 -> "LIST"; + case 22 -> "ROW"; + case 23 -> "COLLECTION"; + case 40 -> "LVARCHAR"; + case 41 -> "BOOLEAN"; + case 43, 52 -> "BIGINT"; + case 44, 53 -> "BIGSERIAL"; + default -> "UNKNOWN(" + baseColType(coltype) + ")"; + }; + } + + public static Set primaryKeyColumnNumbers(List parts) { + Set result = new HashSet<>(); + for (Integer part : parts) { + if (part == null) { + continue; + } + int value = Math.abs(part); + if (value > 0) { + result.add(value); + } + } + return result; + } + + static List resolveIndexColumns(List parts, Map columnNames) { + List result = new ArrayList<>(); + for (Integer part : parts) { + if (part == null || part == 0) { + continue; + } + // Informix-compatible catalogs encode descending index columns as negative column numbers. + String columnName = columnNames.get(Math.abs(part)); + if (columnName != null && !columnName.isEmpty()) { + result.add(columnName); + } + } + return result; + } + + private Map loadColumnNamesByNumber(String owner, String table) throws Exception { + List args = new ArrayList<>(); + args.add(table); + StringBuilder sql = new StringBuilder(""" + SELECT c.colno, c.colname + FROM syscolumns c + JOIN systables t ON t.tabid = c.tabid + WHERE t.tabid >= 100 AND t.tabname = ? + """.stripIndent().trim()); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + + Map result = new LinkedHashMap<>(); + try (PreparedStatement stmt = requireConnection().prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.put(rs.getInt("colno"), trim(rs.getString("colname"))); + } + } + } + return result; + } + + private static List readIndexParts(ResultSet rs) throws Exception { + List parts = new ArrayList<>(); + for (int index = 1; index <= 16; index += 1) { + int value = rs.getInt("part" + index); + parts.add(rs.wasNull() ? null : value); + } + return parts; + } + + private Set getPrimaryKeyColumnNumbers(Connection conn, String owner, String table) throws Exception { + List args = new ArrayList<>(); + args.add(table); + StringBuilder sql = new StringBuilder(""" + SELECT i.part1, i.part2, i.part3, i.part4, i.part5, i.part6, i.part7, i.part8, + i.part9, i.part10, i.part11, i.part12, i.part13, i.part14, i.part15, i.part16 + FROM sysconstraints c + JOIN sysindexes i ON i.idxname = c.idxname AND i.tabid = c.tabid + JOIN systables t ON t.tabid = c.tabid + WHERE t.tabname = ? AND c.constrtype = 'P' + """.stripIndent().trim()); + if (!owner.isEmpty()) { + sql.append(" AND t.owner = ?"); + args.add(owner); + } + + try (PreparedStatement stmt = conn.prepareStatement(sql.toString())) { + bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + if (!rs.next()) { + return Collections.emptySet(); + } + List parts = new ArrayList<>(); + for (int index = 1; index <= 16; index += 1) { + int value = rs.getInt(index); + parts.add(rs.wasNull() ? null : value); + } + return primaryKeyColumnNumbers(parts); + } + } + } + + private static int baseColType(int coltype) { + return coltype % 256; + } + + private static Integer numericPrecision(int baseType, int length) { + if (baseType == 5 || baseType == 8) { + return (length >> 8) & 0xff; + } + return null; + } + + private static Integer numericScale(int baseType, int length) { + if (baseType == 5 || baseType == 8) { + return length & 0xff; + } + return null; + } + + private static Integer characterMaximumLength(int baseType, int length) { + return switch (baseType) { + case 0, 13, 15, 16, 40 -> length; + default -> null; + }; + } + + private static void appendGbase8sTableTypePredicate(StringBuilder sql, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + sql.append(" AND tabtype IN ('T', 'V')"); + return; + } + List tabTypes = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + tabTypes.add("'T'"); + } + if (constraints.tableTypeAllowed("VIEW")) { + tabTypes.add("'V'"); + } + if (tabTypes.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND tabtype IN (").append(String.join(", ", tabTypes)).append(")"); + } + + private static void bind(PreparedStatement stmt, List args) throws Exception { + for (int index = 0; index < args.size(); index += 1) { + stmt.setString(index + 1, String.valueOf(args.get(index))); + } + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() + && !constraints.hasLimit() + && !constraints.hasOffset() + && !constraints.hasObjectTypes(); + } + + private static String trim(String value) { + return value == null ? "" : value.trim(); + } + + private static String emptyToNull(String value) { + return value.isEmpty() ? null : value; + } + + private static String stripTrailing(String value) { + return value == null ? "" : value.stripTrailing(); + } + + private String currentCatalog() { + try { + return trim(requireConnection().getCatalog()); + } catch (Exception ignored) { + return ""; + } + } + + private List cachedDatabases() { + synchronized (metadataCacheLock) { + if (cacheFresh(databaseCacheTimeMillis) && !databaseCache.isEmpty()) { + return new ArrayList<>(databaseCache); + } + } + return null; + } + + private void cacheDatabases(List databases) { + synchronized (metadataCacheLock) { + databaseCache = new ArrayList<>(databases); + databaseCacheTimeMillis = System.currentTimeMillis(); + } + } + + private List cachedSchemas(String catalog) { + synchronized (metadataCacheLock) { + if (cacheFresh(schemaCacheTimeMillis) && schemaCacheCatalog.equals(catalog)) { + return new ArrayList<>(schemaCache); + } + } + return null; + } + + private void cacheSchemas(String catalog, List schemas) { + synchronized (metadataCacheLock) { + schemaCacheCatalog = catalog; + schemaCache = new ArrayList<>(schemas); + schemaCacheTimeMillis = System.currentTimeMillis(); + } + } + + private List cachedTables(String catalog, String schema) { + String owner = trim(schema); + synchronized (metadataCacheLock) { + if (cacheFresh(tableCacheTimeMillis) && tableCacheCatalog.equals(catalog) && tableCacheSchema.equals(owner)) { + return new ArrayList<>(tableCache); + } + } + return null; + } + + private void cacheTables(String catalog, String schema, List tables) { + synchronized (metadataCacheLock) { + tableCacheCatalog = catalog; + tableCacheSchema = trim(schema); + tableCache = new ArrayList<>(tables); + tableCacheTimeMillis = System.currentTimeMillis(); + } + } + + private boolean cacheFresh(long timeMillis) { + return timeMillis > 0 && System.currentTimeMillis() - timeMillis <= METADATA_CACHE_TTL_MILLIS; + } + + private void clearMetadataCache() { + synchronized (metadataCacheLock) { + databaseCacheTimeMillis = 0; + databaseCache = Collections.emptyList(); + schemaCacheCatalog = ""; + schemaCacheTimeMillis = 0; + schemaCache = Collections.emptyList(); + tableCacheCatalog = ""; + tableCacheSchema = ""; + tableCacheTimeMillis = 0; + tableCache = Collections.emptyList(); + } + } + + private static boolean mayChangeMetadata(String sql) { + String normalized = trim(sql).toLowerCase(Locale.ROOT); + return normalized.startsWith("create ") + || normalized.startsWith("drop ") + || normalized.startsWith("alter ") + || normalized.startsWith("rename ") + || normalized.startsWith("truncate "); + } +} diff --git a/agents/drivers/gbase8s/src/test/java/com/dbx/agent/gbase8s/Gbase8sAgentTest.java b/agents/drivers/gbase8s/src/test/java/com/dbx/agent/gbase8s/Gbase8sAgentTest.java new file mode 100644 index 0000000..2b3e6d7 --- /dev/null +++ b/agents/drivers/gbase8s/src/test/java/com/dbx/agent/gbase8s/Gbase8sAgentTest.java @@ -0,0 +1,439 @@ +package com.dbx.agent.gbase8s; + +import com.dbx.agent.ConnectParams; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; + +class Gbase8sAgentTest { + @Test + void declaresGbase8sProfile() { + Gbase8sAgent agent = new Gbase8sAgent(); + + Assertions.assertEquals("com.gbasedbt.jdbc.Driver", agent.getProfile().getDriverClass()); + Assertions.assertEquals("jdbc:gbasedbt-sqli://{host}:{port}/{database}:GBASEDBTSERVER=gbase8s", agent.getProfile().getUrlTemplate()); + Assertions.assertEquals(9088, agent.getProfile().getDefaultPort()); + Assertions.assertTrue(agent.getProfile().getSkipExecutionContext()); + } + + @Test + void buildsGbase8sJdbcUrlWithExplicitServerAndLocaleParameters() { + String url = Gbase8sAgent.buildUrl( + new ConnectParams( + "172.26.128.159", + 20013, + "testdb", + "", + "", + "GBASEDBTSERVER=gbase01;CLIENT_LOCALE=zh_cn.utf8;DB_LOCALE=zh_cn.utf8", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:gbasedbt-sqli://172.26.128.159:20013/testdb:GBASEDBTSERVER=gbase01;CLIENT_LOCALE=zh_cn.utf8;DB_LOCALE=zh_cn.utf8", + url + ); + } + + @Test + void fallsBackToHostAsGbaseServerWhenNoExplicitServerIsConfigured() { + String url = Gbase8sAgent.buildUrl( + new ConnectParams( + "gbase-host", + 9088, + "sysmaster", + "", + "", + "", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:gbasedbt-sqli://gbase-host:9088/sysmaster:GBASEDBTSERVER=gbase-host", + url + ); + } + + @Test + void fallsBackToGbaseServerNameWhenHostIsAnIpAddress() { + String url = Gbase8sAgent.buildUrl( + new ConnectParams( + "172.26.128.159", + 0, + "sysmaster", + "", + "", + "", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:gbasedbt-sqli://172.26.128.159:9088/sysmaster:GBASEDBTSERVER=gbase8s", + url + ); + } + + @Test + void usesConnectionStringWhenConfigured() { + String url = Gbase8sAgent.buildUrl( + new ConnectParams( + "ignored", + 0, + "", + "", + "", + "", + "jdbc:gbasedbt-sqli://db.example.com:20013/app:GBASEDBTSERVER=gbase01", + false + ) + ); + + Assertions.assertEquals("jdbc:gbasedbt-sqli://db.example.com:20013/app:GBASEDBTSERVER=gbase01", url); + } + + @Test + void constrainedListTablesUsesGbase8sSystemTableQuery() { + List sql = new ArrayList<>(); + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"tabname", "tabtype"}, + new Object[][]{ + {"user_order", "T"} + } + ))); + + List tables = agent.listTables( + "app", + new MetadataListConstraints("user", 1, 1, List.of("TABLE")) + ); + + Assertions.assertEquals(1, tables.size()); + Assertions.assertEquals("user_order", tables.get(0).getName()); + Assertions.assertTrue(sql.get(0).contains("FROM systables"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("SELECT SKIP 1 FIRST 1"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(t.tabname) LIKE ?"), sql.get(0)); + } + + @Test + void listTablesLoadsGbase8sTableComments() { + List sql = new ArrayList<>(); + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"tabname", "tabtype", "comments"}, + new Object[][]{ + {"products", "T", "Product catalog"} + } + ))); + + List tables = agent.listTables("root"); + + Assertions.assertEquals("Product catalog", tables.get(0).getComment()); + Assertions.assertTrue(sql.get(0).contains("LEFT JOIN syscomms"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("t.owner = ?"), sql.get(0)); + } + + @Test + void extractsPrimaryKeyColumnNumbersFromGbase8sIndexParts() { + Assertions.assertEquals( + Set.of(1, 3, 5), + Gbase8sAgent.primaryKeyColumnNumbers(Arrays.asList(1, -3, 0, 5, null)) + ); + } + + @Test + void getColumnsUsesGbase8sSystemCatalog() { + List sql = new ArrayList<>(); + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection( + sql, + resultSet( + new String[]{"part1", "part2", "part3", "part4", "part5", "part6", "part7", "part8", "part9", "part10", "part11", "part12", "part13", "part14", "part15", "part16"}, + new Object[][]{ + {1, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null} + } + ), + resultSet( + new String[]{"colname", "coltype", "colno", "collength", "comments"}, + new Object[][]{ + {"product_id", 258, 1, 4, "Product identifier"}, + {"sku", 13, 2, 40, null}, + {"price", 5, 3, 3074, "Unit price"} + } + ) + )); + + List columns = agent.getColumns("root", "products"); + + Assertions.assertEquals(2, sql.size()); + Assertions.assertTrue(sql.get(0).contains("FROM sysconstraints"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("t.owner = ?"), sql.get(0)); + Assertions.assertTrue(sql.get(1).contains("FROM syscolumns"), sql.get(1)); + Assertions.assertTrue(sql.get(1).contains("t.owner = ?"), sql.get(1)); + Assertions.assertEquals(3, columns.size()); + Assertions.assertEquals("product_id", columns.get(0).getName()); + Assertions.assertEquals("INTEGER", columns.get(0).getData_type()); + Assertions.assertFalse(columns.get(0).getIs_nullable()); + Assertions.assertTrue(columns.get(0).getIs_primary_key()); + Assertions.assertEquals("VARCHAR", columns.get(1).getData_type()); + Assertions.assertEquals(40, columns.get(1).getCharacter_maximum_length()); + Assertions.assertEquals("DECIMAL", columns.get(2).getData_type()); + Assertions.assertEquals(12, columns.get(2).getNumeric_precision()); + Assertions.assertEquals(2, columns.get(2).getNumeric_scale()); + Assertions.assertEquals("Product identifier", columns.get(0).getComment()); + Assertions.assertEquals("Unit price", columns.get(2).getComment()); + Assertions.assertTrue(sql.get(1).contains("LEFT JOIN syscolcomms"), sql.get(1)); + } + + @Test + void listIndexesLoadsGbase8sSystemCatalogIndexes() { + List sql = new ArrayList<>(); + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection( + sql, + resultSet( + new String[]{"colno", "colname"}, + new Object[][]{ + {1, "product_id"}, + {2, "sku"}, + {3, "created_at"} + } + ), + resultSet( + new String[]{"idxname", "idxtype", "constrtype", "part1", "part2", "part3", "part4", "part5", "part6", "part7", "part8", "part9", "part10", "part11", "part12", "part13", "part14", "part15", "part16"}, + new Object[][]{ + {"products_pk", "U", "P", 1, 0, null, null, null, null, null, null, null, null, null, null, null, null, null, null}, + {"products_sku_created", "D", null, 2, -3, 0, null, null, null, null, null, null, null, null, null, null, null, null, null} + } + ) + )); + + List indexes = agent.listIndexes("root", "products"); + + Assertions.assertEquals(2, indexes.size()); + Assertions.assertEquals(List.of("product_id"), indexes.get(0).getColumns()); + Assertions.assertTrue(indexes.get(0).getIs_unique()); + Assertions.assertTrue(indexes.get(0).getIs_primary()); + Assertions.assertEquals(List.of("sku", "created_at"), indexes.get(1).getColumns()); + Assertions.assertFalse(indexes.get(1).getIs_unique()); + Assertions.assertFalse(indexes.get(1).getIs_primary()); + Assertions.assertTrue(sql.get(0).contains("FROM syscolumns"), sql.get(0)); + Assertions.assertTrue(sql.get(1).contains("FROM sysindexes"), sql.get(1)); + Assertions.assertTrue(sql.get(1).contains("LEFT JOIN sysconstraints"), sql.get(1)); + } + + @Test + void resolvesGbase8sIndexPartsInDeclaredOrder() { + Assertions.assertEquals( + List.of("sku", "created_at"), + Gbase8sAgent.resolveIndexColumns(List.of(2, -3, 0), Map.of(2, "sku", 3, "created_at")) + ); + } + + @Test + void getObjectSourceUsesGbase8sViewCatalog() { + List sql = new ArrayList<>(); + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection( + sql, + resultSet( + new String[]{"viewtext"}, + new Object[][]{ + {"create view \"gbasedbt\".demo_view as select "}, + {"* from products; "} + } + ), + resultSet( + new String[]{"tabid", "owner", "system_boundary_tabid"}, + new Object[][]{ + {1000, "gbasedbt", 614} + } + ) + )); + + ObjectSource source = agent.getObjectSource("gbasedbt", "demo_view", "VIEW"); + + Assertions.assertEquals("demo_view", source.getName()); + Assertions.assertEquals("VIEW", source.getObject_type()); + Assertions.assertEquals("gbasedbt", source.getSchema()); + Assertions.assertEquals("create view \"gbasedbt\".demo_view as select * from products;", source.getSource()); + Assertions.assertTrue(source.isEditable()); + Assertions.assertEquals(2, sql.size()); + Assertions.assertTrue(sql.get(0).contains("FROM sysviews"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("t.owner = ?"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("ORDER BY v.seqno"), sql.get(0)); + Assertions.assertTrue(sql.get(1).contains("system_boundary_tabid"), sql.get(1)); + } + + @Test + void getObjectSourceMarksGbase8sSystemViewsReadOnly() { + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection( + new ArrayList<>(), + resultSet( + new String[]{"viewtext"}, + new Object[][]{ + {"create view \"gbasedbt\".dba_db_links as select * from user_db_links;"} + } + ), + resultSet( + new String[]{"tabid", "owner", "system_boundary_tabid"}, + new Object[][]{ + {614, "gbasedbt", 614} + } + ) + )); + + ObjectSource source = agent.getObjectSource("gbasedbt", "dba_db_links", "VIEW"); + + Assertions.assertFalse(source.isEditable()); + } + + @Test + void getTableDdlReturnsViewSourceForGbase8sViews() { + List sql = new ArrayList<>(); + Gbase8sAgent agent = new Gbase8sAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection( + sql, + resultSet( + new String[]{"tabtype"}, + new Object[][]{ + {"V"} + } + ), + resultSet( + new String[]{"viewtext"}, + new Object[][]{ + {"create view demo_view as select 1 as id; "} + } + ) + )); + + String ddl = agent.getTableDdl("gbasedbt", "demo_view"); + + Assertions.assertEquals("create view demo_view as select 1 as id;", ddl); + Assertions.assertEquals(2, sql.size()); + Assertions.assertTrue(sql.get(0).contains("SELECT tabtype FROM systables"), sql.get(0)); + Assertions.assertTrue(sql.get(1).contains("FROM sysviews"), sql.get(1)); + } + + private static Connection preparedConnection(List sql, ResultSet... resultSets) { + int[] resultIndex = {0}; + PreparedStatement statement = proxy(PreparedStatement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + int index = Math.min(resultIndex[0], resultSets.length - 1); + resultIndex[0] += 1; + return resultSets[index]; + } + if ("setString".equals(method.getName()) || "close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("getCatalog".equals(method.getName())) { + return "appdb"; + } + if ("prepareStatement".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return statement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet resultSet(String[] columns, Object[][] rows) { + int[] index = {-1}; + Object[] lastValue = {null}; + return proxy(ResultSet.class, (method, args) -> { + switch (method.getName()) { + case "next": + index[0] += 1; + return index[0] < rows.length; + case "getString": + Object value = columnValue(columns, rows[index[0]], args[0]); + lastValue[0] = value; + return value == null ? null : String.valueOf(value); + case "getInt": + Object intValue = columnValue(columns, rows[index[0]], args[0]); + lastValue[0] = intValue; + if (intValue == null) { + return 0; + } + if (intValue instanceof Number) { + return ((Number) intValue).intValue(); + } + return Integer.parseInt(String.valueOf(intValue)); + case "wasNull": + return lastValue[0] == null; + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static Object columnValue(String[] columns, Object[] row, Object key) { + if (key instanceof Number) { + return row[((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return row[i]; + } + } + return null; + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return handler.handle(method, args == null ? new Object[0] : args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) return false; + if (type == Byte.TYPE) return (byte) 0; + if (type == Short.TYPE) return (short) 0; + if (type == Integer.TYPE) return 0; + if (type == Long.TYPE) return 0L; + if (type == Float.TYPE) return 0f; + if (type == Double.TYPE) return 0d; + if (type == Character.TYPE) return (char) 0; + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/goldendb/build.gradle b/agents/drivers/goldendb/build.gradle new file mode 100644 index 0000000..a200788 --- /dev/null +++ b/agents/drivers/goldendb/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.mysql:mysql-connector-j:9.2.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'GoldenDB', 'Main-Class': 'com.dbx.agent.goldendb.GoldendbAgent') + } +} diff --git a/agents/drivers/goldendb/libs/.gitkeep b/agents/drivers/goldendb/libs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/agents/drivers/goldendb/src/main/java/com/dbx/agent/goldendb/GoldendbAgent.java b/agents/drivers/goldendb/src/main/java/com/dbx/agent/goldendb/GoldendbAgent.java new file mode 100644 index 0000000..4f7596f --- /dev/null +++ b/agents/drivers/goldendb/src/main/java/com/dbx/agent/goldendb/GoldendbAgent.java @@ -0,0 +1,555 @@ +package com.dbx.agent.goldendb; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Types; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.HashSet; + +public final class GoldendbAgent extends BaseDatabaseAgent { + private Connection connection; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + Class.forName("com.mysql.cj.jdbc.Driver"); + connection = DriverManager.getConnection(buildUrl(params), params.getUsername(), params.getPassword()); + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + Class.forName("com.mysql.cj.jdbc.Driver"); + try (Connection conn = DriverManager.getConnection(buildUrl(params), params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + "SELECT TABLE_NAME, TABLE_TYPE, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? ORDER BY TABLE_NAME" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String tableType = rs.getString("TABLE_TYPE"); + if ("BASE TABLE".equals(tableType)) { + tableType = "TABLE"; + } + result.add(new TableInfo(rs.getString("TABLE_NAME"), tableType, emptyToNull(rs.getString("TABLE_COMMENT")))); + } + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT TABLE_NAME, TABLE_TYPE, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(schema); + appendInformationSchemaTableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "TABLE_NAME", constraints); + sql.append(" ORDER BY TABLE_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString("TABLE_NAME"), normalizeTableType(rs.getString("TABLE_TYPE")), emptyToNull(rs.getString("TABLE_COMMENT")))); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + "SELECT ROUTINE_NAME, ROUTINE_TYPE FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ? ORDER BY ROUTINE_NAME" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return queryConstrainedObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + StringBuilder tableSql = new StringBuilder("SELECT TABLE_NAME AS OBJECT_NAME, TABLE_TYPE AS OBJECT_TYPE, TABLE_COMMENT AS OBJECT_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(schema); + appendInformationSchemaTableTypePredicate(tableSql, args, constraints); + MetadataSqlSupport.appendNameFilter(tableSql, args, "TABLE_NAME", constraints); + branches.add(tableSql.toString()); + } + if (constraints.objectTypeAllowed("PROCEDURE") || constraints.objectTypeAllowed("FUNCTION")) { + StringBuilder routineSql = new StringBuilder("SELECT ROUTINE_NAME AS OBJECT_NAME, ROUTINE_TYPE AS OBJECT_TYPE, NULL AS OBJECT_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ?"); + args.add(schema); + appendRoutineTypePredicate(routineSql, args, constraints); + MetadataSqlSupport.appendNameFilter(routineSql, args, "ROUTINE_NAME", constraints); + branches.add(routineSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT OBJECT_NAME, OBJECT_TYPE, OBJECT_COMMENT FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY CASE OBJECT_TYPE WHEN 'BASE TABLE' THEN 0 WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 WHEN 'PROCEDURE' THEN 2 WHEN 'FUNCTION' THEN 3 ELSE 9 END, OBJECT_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString("OBJECT_NAME"), normalizeTableType(rs.getString("OBJECT_TYPE")), schema, emptyToNull(rs.getString("OBJECT_COMMENT")))); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String quotedName = JdbcIdentifiers.INSTANCE.backtick(name); + String sql = switch (objectType.toUpperCase(Locale.ROOT)) { + case "VIEW" -> "SHOW CREATE VIEW " + quotedName; + case "PROCEDURE" -> "SHOW CREATE PROCEDURE " + quotedName; + case "FUNCTION" -> "SHOW CREATE FUNCTION " + quotedName; + default -> throw new IllegalArgumentException("Unsupported object type: " + objectType); + }; + + String source = ""; + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + if (rs.next()) { + int sourceIndex = "VIEW".equals(objectType.toUpperCase(Locale.ROOT)) ? 2 : 3; + String value = rs.getString(sourceIndex); + source = value == null ? "" : value; + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Set primaryKeys = new HashSet<>(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + """ + SELECT COLUMN_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = ? + AND TABLE_NAME = ? + AND CONSTRAINT_NAME = 'PRIMARY' + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + primaryKeys.add(rs.getString("COLUMN_NAME")); + } + } + } + + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + """ + SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT, + NUMERIC_PRECISION, NUMERIC_SCALE, CHARACTER_MAXIMUM_LENGTH + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? + ORDER BY ORDINAL_POSITION + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String columnName = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + columnName, + rs.getString("COLUMN_TYPE"), + "YES".equals(rs.getString("IS_NULLABLE")), + rs.getString("COLUMN_DEFAULT"), + primaryKeys.contains(columnName), + rs.getString("EXTRA"), + emptyToNull(rs.getString("COLUMN_COMMENT")), + integerOrNull(rs, "NUMERIC_PRECISION"), + integerOrNull(rs, "NUMERIC_SCALE"), + numberToIntOrNull(rs, "CHARACTER_MAXIMUM_LENGTH") + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + Map> indexMap = new TreeMap<>(); + Map uniqueMap = new HashMap<>(); + Map typeMap = new HashMap<>(); + String quotedTable = JdbcIdentifiers.INSTANCE.backtick(table); + String quotedSchema = JdbcIdentifiers.INSTANCE.backtick(schema); + + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW INDEX FROM " + quotedTable + " FROM " + quotedSchema)) { + while (rs.next()) { + String indexName = rs.getString("Key_name"); + String columnName = rs.getString("Column_name"); + int seqInIndex = rs.getInt("Seq_in_index"); + int nonUnique = rs.getInt("Non_unique"); + String indexType = rs.getString("Index_type"); + + indexMap.computeIfAbsent(indexName, ignored -> new ArrayList<>()) + .add(new IndexColumn(seqInIndex, columnName)); + uniqueMap.put(indexName, nonUnique == 0); + typeMap.put(indexName, indexType); + } + } + + List result = new ArrayList<>(); + for (Map.Entry> entry : indexMap.entrySet()) { + List columns = entry.getValue(); + columns.sort((left, right) -> Integer.compare(left.ordinal, right.ordinal)); + List columnNames = new ArrayList<>(); + for (IndexColumn column : columns) { + columnNames.add(column.name); + } + + String indexName = entry.getKey(); + result.add(new IndexInfo( + indexName, + columnNames, + Boolean.TRUE.equals(uniqueMap.get(indexName)), + "PRIMARY".equals(indexName), + null, + typeMap.get(indexName), + null, + null + )); + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + """ + SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = ? + AND TABLE_NAME = ? + AND REFERENCED_TABLE_NAME IS NOT NULL + ORDER BY CONSTRAINT_NAME + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString("CONSTRAINT_NAME"), + rs.getString("COLUMN_NAME"), + rs.getString("REFERENCED_TABLE_NAME"), + rs.getString("REFERENCED_COLUMN_NAME") + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement( + """ + SELECT TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING + FROM information_schema.TRIGGERS + WHERE TRIGGER_SCHEMA = ? AND EVENT_OBJECT_TABLE = ? + ORDER BY TRIGGER_NAME + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo( + rs.getString("TRIGGER_NAME"), + rs.getString("EVENT_MANIPULATION"), + rs.getString("ACTION_TIMING") + )); + } + } + } + return result; + }); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::resultValue + ); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + JdbcIdentifiers.INSTANCE.backtick(schema); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value; + switch (sqlType) { + case Types.BIGINT: + value = rs.getLong(index); + break; + case Types.INTEGER: + case Types.SMALLINT: + case Types.TINYINT: + value = rs.getInt(index); + break; + case Types.FLOAT: + case Types.REAL: + value = rs.getFloat(index); + break; + case Types.DOUBLE: + value = rs.getDouble(index); + break; + case Types.DECIMAL: + case Types.NUMERIC: + value = rs.getBigDecimal(index); + break; + case Types.BOOLEAN: + case Types.BIT: + value = rs.getBoolean(index); + break; + default: + value = rs.getString(index); + break; + } + return rs.wasNull() ? null : value; + }); + } + + private static String buildUrl(ConnectParams params) { + return "jdbc:mysql://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase() + + "?useSSL=false&allowPublicKeyRetrieval=true"; + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() + || constraints.objectTypeAllowed("PROCEDURE") + || constraints.objectTypeAllowed("FUNCTION"); + } + + private static void appendInformationSchemaTableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND TABLE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static void appendRoutineTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.objectTypeAllowed("PROCEDURE")) { + types.add("PROCEDURE"); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + types.add("FUNCTION"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND ROUTINE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static String normalizeTableType(String tableType) { + return "BASE TABLE".equals(tableType) ? "TABLE" : tableType; + } + + private static String emptyToNull(String value) { + return value == null || value.isEmpty() ? null : value; + } + + private static Integer integerOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Integer ? (Integer) value : null; + } + + private static Integer numberToIntOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static final class IndexColumn { + private final int ordinal; + private final String name; + + private IndexColumn(int ordinal, String name) { + this.ordinal = ordinal; + this.name = name; + } + } + + public static void main(String[] args) { + new JsonRpcServer(new GoldendbAgent()).run(); + } +} diff --git a/agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentMetadataTest.java b/agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentMetadataTest.java new file mode 100644 index 0000000..6ec7a08 --- /dev/null +++ b/agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentMetadataTest.java @@ -0,0 +1,54 @@ +package com.dbx.agent.goldendb; + +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.TestSupport; +import com.dbx.agent.test.JdbcAgentFake; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import java.sql.Connection; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class GoldendbAgentMetadataTest { + @Test + void quotesSchemaAndTableIdentifiersInIndexMetadataSql() { + GoldendbAgent agent = new GoldendbAgent(); + Connection fake = JdbcMetadataSqlFake.connection(); + TestSupport.setPrivateConnection(agent, fake); + + agent.listIndexes("bad`schema", "bad`table"); + + Assertions.assertEquals( + List.of("SHOW INDEX FROM `bad``table` FROM `bad``schema`"), + JdbcMetadataSqlFake.statements + ); + } + + @Test + void constrainedTableMetadataPushesFilterTypesAndPaging() { + GoldendbAgent agent = new GoldendbAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("app", new MetadataListConstraints("ord", 25, 50, List.of("TABLE", "VIEW"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM information_schema.TABLES"), sql); + Assertions.assertTrue(sql.contains("TABLE_TYPE IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("UPPER(TABLE_NAME) LIKE ? ESCAPE '\\\\'"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 25 OFFSET 50"), sql); + } + + @Test + void constrainedObjectMetadataPushesRoutineTypesAndPaging() { + GoldendbAgent agent = new GoldendbAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listObjects("app", new MetadataListConstraints("sync", 10, null, List.of("PROCEDURE", "FUNCTION"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM information_schema.ROUTINES"), sql); + Assertions.assertTrue(sql.contains("ROUTINE_TYPE IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("ORDER BY CASE OBJECT_TYPE"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 10"), sql); + } +} diff --git a/agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentTest.java b/agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentTest.java new file mode 100644 index 0000000..c22fa1d --- /dev/null +++ b/agents/drivers/goldendb/src/test/java/com/dbx/agent/goldendb/GoldendbAgentTest.java @@ -0,0 +1,16 @@ +package com.dbx.agent.goldendb; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; + +class GoldendbAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new GoldendbAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } +} diff --git a/agents/drivers/h2-legacy/build.gradle b/agents/drivers/h2-legacy/build.gradle new file mode 100644 index 0000000..bed8682 --- /dev/null +++ b/agents/drivers/h2-legacy/build.gradle @@ -0,0 +1,13 @@ +sourceSets { + main.java.srcDirs = ['src/main/java', '../h2/src/main/java'] +} + +dependencies { + implementation 'com.h2database:h2:2.1.214' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'H2 2.1 Legacy', 'Main-Class': 'com.dbx.agent.h2legacy.H2LegacyAgent') + } +} diff --git a/agents/drivers/h2-legacy/src/main/java/com/dbx/agent/h2legacy/H2LegacyAgent.java b/agents/drivers/h2-legacy/src/main/java/com/dbx/agent/h2legacy/H2LegacyAgent.java new file mode 100644 index 0000000..18c65dd --- /dev/null +++ b/agents/drivers/h2-legacy/src/main/java/com/dbx/agent/h2legacy/H2LegacyAgent.java @@ -0,0 +1,10 @@ +package com.dbx.agent.h2legacy; + +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.h2.H2Agent; + +public final class H2LegacyAgent extends H2Agent { + public static void main(String[] args) { + new JsonRpcServer(new H2LegacyAgent()).run(); + } +} diff --git a/agents/drivers/h2/build.gradle b/agents/drivers/h2/build.gradle new file mode 100644 index 0000000..070380f --- /dev/null +++ b/agents/drivers/h2/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.h2database:h2:2.3.232' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'H2', 'Main-Class': 'com.dbx.agent.h2.H2Agent') + } +} diff --git a/agents/drivers/h2/src/main/java/com/dbx/agent/h2/H2Agent.java b/agents/drivers/h2/src/main/java/com/dbx/agent/h2/H2Agent.java new file mode 100644 index 0000000..19fd1a1 --- /dev/null +++ b/agents/drivers/h2/src/main/java/com/dbx/agent/h2/H2Agent.java @@ -0,0 +1,516 @@ +package com.dbx.agent.h2; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; + +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public class H2Agent extends AbstractJdbcAgent { + private String databaseName = ""; + + @Override + protected String driverClass() { + return "org.h2.Driver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + protected void afterConnect(ConnectParams params, Connection connection) { + databaseName = params.getDatabase(); + } + + @Override + public List listDatabases() { + return List.of(new DatabaseInfo(databaseName.isBlank() ? "default" : databaseName)); + } + + @Override + public List listSchemas() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME" + ); + ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(rs.getString(1)); + } + } + return result; + }); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT TABLE_NAME, TABLE_TYPE + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = ? + ORDER BY TABLE_NAME + """ + )) { + stmt.setString(1, effectiveSchema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String tableType = rs.getString("TABLE_TYPE"); + if ("BASE TABLE".equals(tableType)) { + tableType = "TABLE"; + } + result.add(new TableInfo(rs.getString("TABLE_NAME"), tableType, null)); + } + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(effectiveSchema); + appendH2TableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "TABLE_NAME", constraints); + sql.append(" ORDER BY TABLE_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (var stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString("TABLE_NAME"), normalizeTableType(rs.getString("TABLE_TYPE")), null)); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + + try (var stmt = requireConnected().prepareStatement( + "SELECT ROUTINE_NAME, ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = ? ORDER BY ROUTINE_NAME" + )) { + stmt.setString(1, effectiveSchema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return queryConstrainedObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + StringBuilder tableSql = new StringBuilder("SELECT TABLE_NAME AS OBJECT_NAME, TABLE_TYPE AS OBJECT_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(effectiveSchema); + appendH2TableTypePredicate(tableSql, args, constraints); + MetadataSqlSupport.appendNameFilter(tableSql, args, "TABLE_NAME", constraints); + branches.add(tableSql.toString()); + } + if (constraints.objectTypeAllowed("PROCEDURE") || constraints.objectTypeAllowed("FUNCTION")) { + StringBuilder routineSql = new StringBuilder("SELECT ROUTINE_NAME AS OBJECT_NAME, ROUTINE_TYPE AS OBJECT_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = ?"); + args.add(effectiveSchema); + appendRoutineTypePredicate(routineSql, args, constraints); + MetadataSqlSupport.appendNameFilter(routineSql, args, "ROUTINE_NAME", constraints); + branches.add(routineSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT OBJECT_NAME, OBJECT_TYPE FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY CASE OBJECT_TYPE WHEN 'BASE TABLE' THEN 0 WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 WHEN 'PROCEDURE' THEN 2 WHEN 'FUNCTION' THEN 3 ELSE 9 END, OBJECT_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (var stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), normalizeTableType(rs.getString(2)), schema, null)); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + String sql = switch (objectType.toUpperCase(Locale.ROOT)) { + case "VIEW" -> "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?"; + case "FUNCTION", "PROCEDURE" -> "SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = ? AND ROUTINE_NAME = ?"; + default -> throw new IllegalArgumentException("Unsupported object type: " + objectType); + }; + + String source = ""; + try (var stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, effectiveSchema); + stmt.setString(2, name); + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + String value = rs.getString(1); + source = value == null ? "" : value; + } + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + Set primaryKeys = new HashSet<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT ic.COLUMN_NAME + FROM INFORMATION_SCHEMA.INDEX_COLUMNS ic + JOIN INFORMATION_SCHEMA.INDEXES i + ON ic.INDEX_SCHEMA = i.INDEX_SCHEMA AND ic.INDEX_NAME = i.INDEX_NAME + WHERE ic.TABLE_SCHEMA = ? AND ic.TABLE_NAME = ? + AND i.INDEX_TYPE_NAME = 'PRIMARY KEY' + """ + )) { + stmt.setString(1, effectiveSchema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + primaryKeys.add(rs.getString("COLUMN_NAME")); + } + } + } + + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, + NUMERIC_PRECISION, NUMERIC_SCALE, CHARACTER_MAXIMUM_LENGTH + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? + ORDER BY ORDINAL_POSITION + """ + )) { + stmt.setString(1, effectiveSchema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String columnName = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + columnName, + rs.getString("DATA_TYPE"), + "YES".equals(rs.getString("IS_NULLABLE")), + rs.getString("COLUMN_DEFAULT"), + primaryKeys.contains(columnName), + null, + null, + intOrNull(rs, "NUMERIC_PRECISION"), + intOrNull(rs, "NUMERIC_SCALE"), + intOrNull(rs, "CHARACTER_MAXIMUM_LENGTH") + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + Map> indexMap = new LinkedHashMap<>(); + Map uniqueMap = new HashMap<>(); + Map primaryMap = new HashMap<>(); + Map typeMap = new HashMap<>(); + + try (var stmt = requireConnected().prepareStatement( + """ + SELECT i.INDEX_NAME, ic.COLUMN_NAME, ic.IS_UNIQUE, i.INDEX_TYPE_NAME + FROM INFORMATION_SCHEMA.INDEX_COLUMNS ic + JOIN INFORMATION_SCHEMA.INDEXES i + ON ic.INDEX_SCHEMA = i.INDEX_SCHEMA AND ic.INDEX_NAME = i.INDEX_NAME + WHERE ic.TABLE_SCHEMA = ? AND ic.TABLE_NAME = ? + ORDER BY i.INDEX_NAME, ic.ORDINAL_POSITION + """ + )) { + stmt.setString(1, effectiveSchema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + String columnName = rs.getString("COLUMN_NAME"); + String indexType = rs.getString("INDEX_TYPE_NAME"); + + indexMap.computeIfAbsent(indexName, ignored -> new ArrayList<>()).add(columnName); + uniqueMap.put(indexName, rs.getBoolean("IS_UNIQUE")); + primaryMap.put(indexName, "PRIMARY KEY".equals(indexType)); + typeMap.put(indexName, indexType == null ? "" : indexType); + } + } + } + + List result = new ArrayList<>(); + for (Map.Entry> entry : indexMap.entrySet()) { + String name = entry.getKey(); + result.add(new IndexInfo( + name, + entry.getValue(), + uniqueMap.getOrDefault(name, false), + primaryMap.getOrDefault(name, false), + null, + typeMap.get(name), + null, + null + )); + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT FK_NAME, FKCOLUMN_NAME, PKTABLE_NAME, PKCOLUMN_NAME + FROM INFORMATION_SCHEMA.CROSS_REFERENCES + WHERE FKTABLE_SCHEMA = ? AND FKTABLE_NAME = ? + ORDER BY FK_NAME + """ + )) { + stmt.setString(1, effectiveSchema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString("FK_NAME"), + rs.getString("FKCOLUMN_NAME"), + rs.getString("PKTABLE_NAME"), + rs.getString("PKCOLUMN_NAME") + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + String effectiveSchema = resolveSchema(schema); + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING + FROM INFORMATION_SCHEMA.TRIGGERS + WHERE TRIGGER_SCHEMA = ? AND EVENT_OBJECT_TABLE = ? + ORDER BY TRIGGER_NAME + """ + )) { + stmt.setString(1, effectiveSchema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo( + rs.getString("TRIGGER_NAME"), + rs.getString("EVENT_MANIPULATION"), + rs.getString("ACTION_TIMING") + )); + } + } + } + return result; + }); + } + + @Override + public String setSchemaSQL(String schema) { + return "SET SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> JdbcExecutor.INSTANCE.defaultResultValue(rs, index, sqlType)); + } + + @Override + protected JdbcExecutor.ColumnAwareResultValueReader resultValueReader() { + return (rs, index, sqlType, columnTypeName) -> { + if (isJsonType(columnTypeName)) { + byte[] bytes = rs.getBytes(index); + // H2 stores JSON as UTF-8 bytes and getString/default JDBC + // handling exposes a hex literal such as 0x5b5d. Decode only + // JSON columns so real binary data keeps the existing hex view. + return rs.wasNull() || bytes == null ? null : new String(bytes, StandardCharsets.UTF_8); + } + return resultValue(rs, index, sqlType); + }; + } + + static String buildUrl(ConnectParams params) { + String connectionString = params.getConnection_string(); + if (connectionString != null && !connectionString.trim().isEmpty()) { + return connectionString.trim(); + } + if (params.getHost().isBlank()) { + return "jdbc:h2:" + params.getDatabase(); + } + return "jdbc:h2:tcp://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() + || constraints.objectTypeAllowed("PROCEDURE") + || constraints.objectTypeAllowed("FUNCTION"); + } + + private static void appendH2TableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND TABLE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static void appendRoutineTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.objectTypeAllowed("PROCEDURE")) { + types.add("PROCEDURE"); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + types.add("FUNCTION"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND ROUTINE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static String normalizeTableType(String tableType) { + return "BASE TABLE".equals(tableType) ? "TABLE" : tableType; + } + + private static String resolveSchema(String schema) { + if ("PUBLIC".equalsIgnoreCase(schema) || "INFORMATION_SCHEMA".equalsIgnoreCase(schema)) { + return schema.toUpperCase(Locale.ROOT); + } + return "PUBLIC"; + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static boolean isJsonType(String columnTypeName) { + return columnTypeName != null && "JSON".equals(columnTypeName.trim().toUpperCase(Locale.ROOT)); + } + + public static void main(String[] args) { + new JsonRpcServer(new H2Agent()).run(); + } +} diff --git a/agents/drivers/h2/src/test/java/com/dbx/agent/h2/H2AgentTest.java b/agents/drivers/h2/src/test/java/com/dbx/agent/h2/H2AgentTest.java new file mode 100644 index 0000000..350b168 --- /dev/null +++ b/agents/drivers/h2/src/test/java/com/dbx/agent/h2/H2AgentTest.java @@ -0,0 +1,165 @@ +package com.dbx.agent.h2; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.JdbcExecutionBehaviorTest; +import com.dbx.agent.test.JdbcMetadataBehaviorTest; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class H2AgentMigrationTest { + @Test + void agentExtendsBaseDatabaseAgent() { + Assertions.assertTrue(BaseDatabaseAgent.class.isAssignableFrom(H2Agent.class)); + } + + @Test + void buildUrlUsesExplicitConnectionString() { + ConnectParams params = new ConnectParams( + "127.0.0.1", + 9092, + "test", + "sa", + "", + "", + "jdbc:h2:file:/tmp/dbx-h2-test;AUTO_SERVER=TRUE", + false + ); + + Assertions.assertEquals("jdbc:h2:file:/tmp/dbx-h2-test;AUTO_SERVER=TRUE", H2Agent.buildUrl(params)); + } + + @Test + void buildUrlKeepsTcpModeWhenNoConnectionString() { + ConnectParams params = new ConnectParams("127.0.0.1", 9092, "test", "sa", "", "", "", false); + + Assertions.assertEquals("jdbc:h2:tcp://127.0.0.1:9092/test", H2Agent.buildUrl(params)); + } +} + +class H2ExecutionBehaviorTest extends JdbcExecutionBehaviorTest { + @Override + protected DatabaseAgent createConnectedAgent(String databaseName) { + return H2AgentTestSupport.createH2Agent(databaseName); + } + + @Override + protected String resultSetSql() { + return "CALL 42"; + } + + @Override + protected List expectedResultSetColumns() { + return List.of("42"); + } + + @Override + protected List> expectedResultSetRows() { + return List.of(List.of(42)); + } + + @Override + protected String rowsSql(int rowCount) { + return "SELECT X FROM SYSTEM_RANGE(1, " + rowCount + ")"; + } + + @Test + void displaysJsonColumnsAsText() { + withAgent("dbx-agent-h2-json", agent -> { + agent.executeQuery( + "CREATE TABLE EVENTS (ID INT PRIMARY KEY, ACTION_PARAMS JSON, RAW_BYTES VARBINARY)", + null, + new ExecuteQueryOptions() + ); + agent.executeQuery( + "INSERT INTO EVENTS VALUES (1, JSON '[]', X'5B5D'), (2, JSON '[{\"type\":\"ACCESS_CONTROL\"}]', X'00FF')", + null, + new ExecuteQueryOptions() + ); + + QueryResult result = agent.executeQuery( + "SELECT ACTION_PARAMS, RAW_BYTES FROM EVENTS ORDER BY ID", + null, + new ExecuteQueryOptions() + ); + + Assertions.assertEquals( + List.of( + List.of("[]", "0x5b5d"), + List.of("[{\"type\":\"ACCESS_CONTROL\"}]", "0x00ff") + ), + result.getRows() + ); + }); + } +} + +class H2MetadataBehaviorTest extends JdbcMetadataBehaviorTest { + @Override + protected DatabaseAgent createConnectedAgent(String databaseName) { + return H2AgentTestSupport.createH2Agent(databaseName); + } + + @Override + protected List metadataFixtureSql() { + return List.of( + "CREATE TABLE BETA_TABLE (ID INT PRIMARY KEY)", + "CREATE TABLE ALPHA_TABLE (ID INT PRIMARY KEY)", + "CREATE TABLE COLUMN_ORDER_SAMPLE (ID INT PRIMARY KEY, NAME VARCHAR(64), CREATED_AT TIMESTAMP)" + ); + } + + @Override + protected String metadataSchema() { + return "PUBLIC"; + } + + @Override + protected List expectedTablesInOrder() { + return List.of("ALPHA_TABLE", "BETA_TABLE", "COLUMN_ORDER_SAMPLE"); + } + + @Override + protected String metadataColumnsTable() { + return "COLUMN_ORDER_SAMPLE"; + } + + @Override + protected List expectedColumnsInOrder() { + return List.of("ID", "NAME", "CREATED_AT"); + } + + @Test + void constrainedTableMetadataFiltersTypesAndPages() { + withAgent("dbx-agent-h2-constrained-metadata", agent -> { + for (String sql : metadataFixtureSql()) { + agent.executeQuery(sql, null, new ExecuteQueryOptions()); + } + + List tables = agent.listTables( + metadataSchema(), + new MetadataListConstraints("table", 1, 1, List.of("TABLE")) + ); + + Assertions.assertEquals(1, tables.size()); + Assertions.assertEquals("BETA_TABLE", tables.get(0).getName()); + }); + } +} + +final class H2AgentTestSupport { + private H2AgentTestSupport() { + } + + static DatabaseAgent createH2Agent(String databaseName) { + H2Agent agent = new H2Agent(); + agent.connect(new ConnectParams("", 0, "mem:" + databaseName + ";DB_CLOSE_DELAY=-1", "", "", "", "", false)); + return agent; + } +} diff --git a/agents/drivers/highgo/build.gradle b/agents/drivers/highgo/build.gradle new file mode 100644 index 0000000..1b944ab --- /dev/null +++ b/agents/drivers/highgo/build.gradle @@ -0,0 +1,16 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.highgo:HgdbJdbc:6.2.4' + // PostGIS JDBC is optional: EwkbWktDecoder reflectively probes for + // org.postgis.PGgeometry / net.postgis.jdbc.PGgeometry and falls back to + // its own EWKB parser when the class is absent. compileOnly keeps the + // shadowJar small while still letting users drop the jar into their + // user-driver path if they prefer the upstream parser. + compileOnly 'net.postgis:postgis-jdbc:2024.1.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': '瀚高 HighGo', 'Main-Class': 'com.dbx.agent.highgo.HighgoAgent') + } +} diff --git a/agents/drivers/highgo/src/main/java/com/dbx/agent/highgo/HighgoAgent.java b/agents/drivers/highgo/src/main/java/com/dbx/agent/highgo/HighgoAgent.java new file mode 100644 index 0000000..ee9e6b1 --- /dev/null +++ b/agents/drivers/highgo/src/main/java/com/dbx/agent/highgo/HighgoAgent.java @@ -0,0 +1,20 @@ +package com.dbx.agent.highgo; + +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.PostgresLikeAgent; +import com.dbx.agent.PostgresLikeAgentProfile; + +public final class HighgoAgent extends PostgresLikeAgent { + public static final PostgresLikeAgentProfile HIGHGO_PROFILE = new PostgresLikeAgentProfile( + "com.highgo.jdbc.Driver", + "jdbc:highgo://{host}:{port}/{database}" + ); + + public HighgoAgent() { + super(HIGHGO_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new HighgoAgent()).run(); + } +} diff --git a/agents/drivers/highgo/src/test/java/com/dbx/agent/highgo/HighgoAgentTest.java b/agents/drivers/highgo/src/test/java/com/dbx/agent/highgo/HighgoAgentTest.java new file mode 100644 index 0000000..2186312 --- /dev/null +++ b/agents/drivers/highgo/src/test/java/com/dbx/agent/highgo/HighgoAgentTest.java @@ -0,0 +1,46 @@ +package com.dbx.agent.highgo; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +class HighgoAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new HighgoAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } + + @Test + void declaresHighgoPostgresLikeProfile() { + HighgoAgent agent = new HighgoAgent(); + + Assertions.assertEquals("com.highgo.jdbc.Driver", agent.getProfile().getDriverClass()); + Assertions.assertEquals("jdbc:highgo://{host}:{port}/{database}", agent.getProfile().getUrlTemplate()); + } + + @Test + void readsViewSourceWithQuotedRegclassParameter() { + HighgoAgent agent = new HighgoAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.getObjectSource("bad\"schema", "view's name", "VIEW"); + + Assertions.assertEquals( + Arrays.asList( + "SELECT pg_get_viewdef(to_regclass(?), true)", + "param:1=\"bad\"\"schema\".\"view's name\"" + ), + JdbcMetadataSqlFake.statements + ); + } +} diff --git a/agents/drivers/hive/build.gradle b/agents/drivers/hive/build.gradle new file mode 100644 index 0000000..8787dd7 --- /dev/null +++ b/agents/drivers/hive/build.gradle @@ -0,0 +1,11 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'org.apache.hive:hive-jdbc:4.0.1:standalone' + implementation 'org.slf4j:slf4j-nop:1.7.30' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Apache Hive', 'Main-Class': 'com.dbx.agent.hive.HiveAgent') + } +} diff --git a/agents/drivers/hive/src/main/java/com/dbx/agent/hive/HiveAgent.java b/agents/drivers/hive/src/main/java/com/dbx/agent/hive/HiveAgent.java new file mode 100644 index 0000000..c4cef21 --- /dev/null +++ b/agents/drivers/hive/src/main/java/com/dbx/agent/hive/HiveAgent.java @@ -0,0 +1,274 @@ +package com.dbx.agent.hive; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; + +public final class HiveAgent extends AbstractJdbcAgent { + + @Override + protected String driverClass() { + return "org.apache.hive.jdbc.HiveDriver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + result.sort(Comparator.comparing(DatabaseInfo::getName)); + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + useSchema(schema); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW TABLES")) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1), "TABLE", null)); + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + return result; + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + try { + return getColumnsFromDescribe(schema, table); + } catch (Exception ignored) { + return getColumnsFromMetadata(requireConnected(), schema, table); + } + }); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + JdbcIdentifiers.INSTANCE.backtick(schema); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + // Hive JDBC fetches rows via Thrift FetchResults in batches controlled + // by fetchSize. A large fetchSize can fail with "Error retrieving next + // row" when the result contains large binary/struct columns. Use a + // small fetchSize (50) so each Thrift batch stays within limits. + return super.executeQuery(sql, schema, new ExecuteQueryOptions( + options.getMaxRows(), + 50, + options.getTimeoutSecs() + )); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + return super.executeQueryPage(sql, schema, withSmallFetchSize(options)); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return super.startTableRead(sql, schema, withSmallFetchSize(options)); + } + + private static QueryPageOptions withSmallFetchSize(QueryPageOptions options) { + return new QueryPageOptions( + options.getPageSize(), 50, options.getMaxRows(), options.getTimeoutSecs() + ); + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + private void useSchema(String schema) throws Exception { + try (java.sql.Statement stmt = requireConnected().createStatement()) { + stmt.execute(setSchemaSQL(schema)); + } + } + + private List getColumnsFromDescribe(String schema, String table) throws Exception { + List result = new ArrayList<>(); + useSchema(schema); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("DESCRIBE " + JdbcIdentifiers.INSTANCE.backtick(table))) { + while (rs.next()) { + String colName = trimToNull(rs.getString(1)); + if (colName == null || colName.startsWith("#")) { + continue; + } + result.add(new ColumnInfo( + colName, + trimToEmpty(rs.getString(2)), + true, + null, + false, + null, + optionalComment(rs), + null, + null, + null + )); + } + } + return result; + } + + private static List getColumnsFromMetadata(Connection conn, String schema, String table) throws Exception { + List result = new ArrayList<>(); + DatabaseMetaData meta = conn.getMetaData(); + try (ResultSet rs = meta.getColumns(null, trimToNull(schema), table, "%")) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + if (trimToNull(name) == null) { + continue; + } + result.add(new ColumnInfo( + name, + trimToEmpty(rs.getString("TYPE_NAME")), + rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls, + rs.getString("COLUMN_DEF"), + false, + null, + rs.getString("REMARKS"), + intOrNull(rs, "COLUMN_SIZE"), + intOrNull(rs, "DECIMAL_DIGITS"), + characterLength(rs) + )); + } + } + return result; + } + + static String buildUrl(ConnectParams params) { + String connectionString = trimToEmpty(params.getConnection_string()); + if (!connectionString.isEmpty()) { + return connectionString; + } + String url = "jdbc:hive2://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + return appendHiveUrlParams(url, params.getUrl_params()); + } + + private static String appendHiveUrlParams(String url, String urlParams) { + String params = trimHiveUrlParams(urlParams); + if (params.isEmpty()) { + return url; + } + // Hive JDBC authentication options use semicolon-separated URL properties. + return url + (url.endsWith(";") ? "" : ";") + params; + } + + private static String trimHiveUrlParams(String urlParams) { + String value = trimToEmpty(urlParams); + while (value.startsWith("?") || value.startsWith("&") || value.startsWith(";")) { + value = value.substring(1); + } + return value; + } + + private static String trimToNull(String value) { + if (value == null) { + return null; + } + String trimmed = value.trim(); + return trimmed.isEmpty() ? null : trimmed; + } + + private static String trimToEmpty(String value) { + return value == null ? "" : value.trim(); + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static Integer characterLength(ResultSet rs) throws Exception { + String typeName = rs.getString("TYPE_NAME"); + if (typeName == null) { + return null; + } + String normalized = typeName.toLowerCase(Locale.ROOT); + if (!normalized.contains("char") && !normalized.contains("text") && !normalized.contains("string")) { + return null; + } + return intOrNull(rs, "COLUMN_SIZE"); + } + + private static String optionalComment(ResultSet rs) { + return unchecked(() -> { + try { + String comment = trimToNull(rs.getString(3)); + return comment; + } catch (Exception e) { + return null; + } + }); + } + + public static void main(String[] args) { + new JsonRpcServer(new HiveAgent()).run(); + } +} diff --git a/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentExecutionTest.java b/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentExecutionTest.java new file mode 100644 index 0000000..3e7e2c5 --- /dev/null +++ b/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentExecutionTest.java @@ -0,0 +1,77 @@ +package com.dbx.agent.hive; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryResult; +import com.dbx.agent.test.JdbcAgentFake; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class HiveAgentExecutionTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new HiveAgent(); + } + + @Override + protected String resultSetSql() { + return "MSCK REPAIR TABLE sample"; + } + + // Override: HiveAgent.executeQuery forces fetchSize=50 to keep Thrift + // FetchResults batches small (prevents "Error retrieving next row" on + // tables with large binary/struct columns). + @Override + @Test + protected void executesNonSelectStatementsThatReturnResultSets() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + QueryResult result = agent.executeQuery(resultSetSql(), null, new ExecuteQueryOptions()); + + assertEquals(Collections.singletonList("VALUE"), result.getColumns()); + assertEquals(Collections.singletonList(Collections.singletonList("row-value")), result.getRows()); + assertEquals(Arrays.asList("setMaxRows:10001", "setFetchSize:50", "execute"), JdbcAgentFake.calls); + } + + @Override + @Test + protected void appliesExecutionRowAndFetchLimitsToJdbcStatements() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + QueryResult result = agent.executeQuery(resultSetSql(), null, new ExecuteQueryOptions(1, 25)); + + assertEquals(Collections.singletonList(Collections.singletonList("row-value")), result.getRows()); + assertEquals(Arrays.asList("setMaxRows:2", "setFetchSize:50", "execute"), JdbcAgentFake.calls); + } + + @Override + @Test + protected void pagedQueryExecutionPassesCallerFetchSizeToStatement() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + agent.executeQueryPage(resultSetSql(), null, new QueryPageOptions(100, 500, 1000)); + + assertEquals(Arrays.asList("setFetchSize:50", "execute"), JdbcAgentFake.calls); + } + + @Override + @Test + protected void tableReadPassesCallerFetchSizeToStatement() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + agent.startTableRead(resultSetSql(), null, new QueryPageOptions(100, 500, 1000)); + + assertEquals(Arrays.asList("setFetchSize:50", "execute"), JdbcAgentFake.calls); + } +} diff --git a/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentMetadataTest.java b/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentMetadataTest.java new file mode 100644 index 0000000..0ec4fa8 --- /dev/null +++ b/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentMetadataTest.java @@ -0,0 +1,186 @@ +package com.dbx.agent.hive; + +import com.dbx.agent.test.TestSupport; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.ColumnInfo; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.LinkedHashMap; +import java.util.Map; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class HiveAgentMetadataTest { + @Test + void quotesSchemaAndTableIdentifiersInMetadataSql() { + HiveAgent agent = new HiveAgent(); + Connection fake = JdbcMetadataSqlFake.connection(); + TestSupport.setPrivateConnection(agent, fake); + + agent.listTables("bad`schema"); + agent.getColumns("bad`schema", "bad`table"); + + Assertions.assertEquals( + List.of( + "USE `bad``schema`", + "SHOW TABLES", + "USE `bad``schema`", + "DESCRIBE `bad``table`" + ), + JdbcMetadataSqlFake.statements + ); + } + + @Test + void fallsBackToJdbcMetadataWhenDescribeCannotCreateResultSet() { + HiveAgent agent = new HiveAgent(); + Connection fake = describeFailingMetadataConnection(); + TestSupport.setPrivateConnection(agent, fake); + + List columns = agent.getColumns("default", "events"); + + Assertions.assertEquals(2, columns.size()); + Assertions.assertEquals("id", columns.get(0).getName()); + Assertions.assertEquals("bigint", columns.get(0).getData_type()); + Assertions.assertFalse(columns.get(0).getIs_nullable()); + Assertions.assertEquals("name", columns.get(1).getName()); + Assertions.assertEquals("string", columns.get(1).getData_type()); + Assertions.assertEquals(Integer.valueOf(255), columns.get(1).getCharacter_maximum_length()); + } + + private static Connection describeFailingMetadataConnection() { + DatabaseMetaData meta = proxy(DatabaseMetaData.class, (method, args) -> { + if ("getColumns".equals(method.getName())) { + return rows( + row( + "COLUMN_NAME", "id", + "TYPE_NAME", "bigint", + "NULLABLE", DatabaseMetaData.columnNoNulls, + "COLUMN_DEF", null, + "REMARKS", "identifier", + "COLUMN_SIZE", 19, + "DECIMAL_DIGITS", 0 + ), + row( + "COLUMN_NAME", "name", + "TYPE_NAME", "string", + "NULLABLE", DatabaseMetaData.columnNullable, + "COLUMN_DEF", null, + "REMARKS", null, + "COLUMN_SIZE", 255, + "DECIMAL_DIGITS", 0 + ) + ); + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("createStatement".equals(name)) { + return describeFailingStatement(); + } + if ("getMetaData".equals(name)) { + return meta; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Statement describeFailingStatement() { + return proxy(Statement.class, (method, args) -> { + String name = method.getName(); + if ("execute".equals(name)) { + return false; + } + if ("executeQuery".equals(name)) { + throw new SQLException("Could not create ResultSet: Required field 'type' is unset! Struct:TPrimitiveTypeEntry(type:null)"); + } + return defaultValue(method.getReturnType()); + }); + } + + @SafeVarargs + private static ResultSet rows(Map... rows) { + return proxy(ResultSet.class, new MethodHandler() { + private int index = -1; + + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + index += 1; + return index < rows.length; + } + if ("close".equals(name)) { + return null; + } + Object value = rows[index].get(args[0]); + if ("getString".equals(name)) { + return value == null ? null : String.valueOf(value); + } + if ("getObject".equals(name)) { + return value; + } + if ("getInt".equals(name)) { + return value instanceof Number ? ((Number) value).intValue() : 0; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static Map row(Object... values) { + Map row = new LinkedHashMap<>(); + for (int i = 0; i < values.length; i += 2) { + row.put(String.valueOf(values[i]), values[i + 1]); + } + return row; + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = (proxy, method, args) -> handler.handle(method, args); + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentTest.java b/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentTest.java new file mode 100644 index 0000000..f3496cd --- /dev/null +++ b/agents/drivers/hive/src/test/java/com/dbx/agent/hive/HiveAgentTest.java @@ -0,0 +1,42 @@ +package com.dbx.agent.hive; + +import com.dbx.agent.ConnectParams; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class HiveAgentTest { + @Test + void hiveJdbcStandaloneRuntimeClassesAreAvailable() throws ClassNotFoundException { + Class.forName("org.apache.hive.jdbc.HiveDriver"); + Class.forName("org.apache.hive.org.apache.thrift.protocol.TProtocol"); + } + + @Test + void buildUrlAppendsKerberosUrlParams() { + ConnectParams params = new ConnectParams(); + params.setHost("hive.example.com"); + params.setPort(10000); + params.setDatabase("default"); + params.setUrl_params(";principal=hive/hive.example.com@EXAMPLE.COM;auth=kerberos"); + + assertEquals( + "jdbc:hive2://hive.example.com:10000/default;principal=hive/hive.example.com@EXAMPLE.COM;auth=kerberos", + HiveAgent.buildUrl(params) + ); + } + + @Test + void buildUrlUsesCustomJdbcUrlAsIs() { + ConnectParams params = new ConnectParams(); + params.setConnection_string( + "jdbc:hive2://zk1.example.com,zk2.example.com/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/_HOST@EXAMPLE.COM" + ); + params.setUrl_params("principal=hive/ignored@EXAMPLE.COM"); + + assertEquals( + "jdbc:hive2://zk1.example.com,zk2.example.com/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/_HOST@EXAMPLE.COM", + HiveAgent.buildUrl(params) + ); + } +} diff --git a/agents/drivers/informix/build.gradle b/agents/drivers/informix/build.gradle new file mode 100644 index 0000000..1b38423 --- /dev/null +++ b/agents/drivers/informix/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.ibm.informix:jdbc:4.50.10' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'IBM Informix', 'Main-Class': 'com.dbx.agent.informix.InformixAgent') + } +} diff --git a/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java b/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java new file mode 100644 index 0000000..e8a5f5c --- /dev/null +++ b/agents/drivers/informix/src/main/java/com/dbx/agent/informix/InformixAgent.java @@ -0,0 +1,556 @@ +package com.dbx.agent.informix; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +public final class InformixAgent extends BaseDatabaseAgent { + private Connection connection; + + @Override + public Connection getConnection() { + return connection; + } + + public static String buildJdbcUrl(ConnectParams params) { + String rawUrlParams = params.getUrl_params(); + String extraParams = rawUrlParams == null ? "" : trimEnd(trimStart(rawUrlParams.trim(), ':', ';'), ';'); + String rawDatabase = params.getDatabase(); + String database = rawDatabase == null || rawDatabase.trim().isEmpty() + ? "sysmaster" : rawDatabase.trim(); + + // Determine INFORMIXSERVER: from dedicated field, url_params, or default + String informixServer = params.getInformix_server(); + informixServer = informixServer == null ? "" : informixServer.trim(); + if (informixServer.isEmpty()) { + informixServer = containsIgnoreCase(extraParams, "INFORMIXSERVER=") ? "" : defaultInformixServer(params.getHost()); + } + String serverParam = informixServer.isEmpty() ? "" : "INFORMIXSERVER=" + informixServer; + + // Add CLIENT_LOCALE and DB_LOCALE defaults if not already specified + if (!containsIgnoreCase(extraParams, "CLIENT_LOCALE=")) { + String localeParam = "CLIENT_LOCALE=en_US.utf8"; + extraParams = extraParams.isEmpty() ? localeParam : extraParams + ";" + localeParam; + } + if (!containsIgnoreCase(extraParams, "DB_LOCALE=")) { + String localeParam = "DB_LOCALE=en_US.utf8"; + extraParams = extraParams.isEmpty() ? localeParam : extraParams + ";" + localeParam; + } + + List jdbcParams = new ArrayList<>(); + if (!serverParam.isEmpty()) { + jdbcParams.add(serverParam); + } + if (!extraParams.isEmpty()) { + jdbcParams.add(extraParams); + } + return "jdbc:informix-sqli://" + params.getHost() + ":" + params.getPort() + "/" + database + ":" + + String.join(";", jdbcParams); + } + + private static String defaultInformixServer(String host) { + return isIpAddress(host) ? "informix" : host; + } + + private static boolean isIpAddress(String host) { + return host.matches("\\d{1,3}(\\.\\d{1,3}){3}") || host.contains(":"); + } + + /** + * Map Informix coltype integer codes to type names. + * See Informix documentation for coltype values. + */ + public static String mapColType(int coltype) { + int baseType = coltype % 256; + return switch (baseType) { + case 0 -> "CHAR"; + case 1 -> "SMALLINT"; + case 2 -> "INTEGER"; + case 3 -> "FLOAT"; + case 4 -> "SMALLFLOAT"; + case 5 -> "DECIMAL"; + case 6 -> "SERIAL"; + case 7 -> "DATE"; + case 8 -> "MONEY"; + case 9 -> "NULL"; + case 10 -> "DATETIME"; + case 11 -> "BYTE"; + case 12 -> "TEXT"; + case 13 -> "VARCHAR"; + case 14 -> "INTERVAL"; + case 15 -> "NCHAR"; + case 16 -> "NVARCHAR"; + case 17 -> "INT8"; + case 18 -> "SERIAL8"; + case 19 -> "SET"; + case 20 -> "MULTISET"; + case 21 -> "LIST"; + case 22 -> "ROW"; + case 23 -> "COLLECTION"; + case 40 -> "LVARCHAR"; + case 41 -> "BOOLEAN"; + case 43, 52 -> "BIGINT"; + case 44, 53 -> "BIGSERIAL"; + default -> "UNKNOWN(" + baseType + ")"; + }; + } + + public static Set primaryKeyColumnNumbers(List parts) { + Set result = new HashSet<>(); + for (Integer part : parts) { + if (part == null) { + continue; + } + int value = Math.abs(part); + if (value > 0) { + result.add(value); + } + } + return result; + } + + public static String databaseCatalogSql() { + return "SELECT name FROM sysmaster:sysdatabases ORDER BY name"; + } + + @Override + public void connect(ConnectParams params) { + String url = buildJdbcUrl(params); + uncheckedVoid(() -> { + Class.forName("com.informix.jdbc.IfxDriver"); + try { + connection = DriverManager.getConnection(url, params.getUsername(), params.getPassword()); + } catch (SQLException e) { + throw new SQLException( + "Informix connection failed.\nURL: " + url.replaceAll("//[^@]+@", "//***@") + "\nError: " + e.getMessage(), + e.getSQLState(), e.getErrorCode() + ); + } + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + String url = buildJdbcUrl(params); + return unchecked(() -> { + Class.forName("com.informix.jdbc.IfxDriver"); + try (Connection conn = DriverManager.getConnection(url, params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(databaseCatalogSql())) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1).trim())); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = """ + SELECT tabname, + CASE tabtype WHEN 'T' THEN 'TABLE' WHEN 'V' THEN 'VIEW' ELSE tabtype END + FROM systables + WHERE tabid >= 100 + ORDER BY tabname + """; + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql.stripIndent().trim())) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1).trim(), rs.getString(2).trim(), null)); + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT "); + MetadataSqlSupport.appendLiteralSkipFirst(sql, constraints); + sql.append("tabname, CASE tabtype WHEN 'T' THEN 'TABLE' WHEN 'V' THEN 'VIEW' ELSE tabtype END ") + .append("FROM systables WHERE tabid >= 100"); + appendInformixTableTypePredicate(sql, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "tabname", constraints); + sql.append(" ORDER BY tabname"); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1).trim(), rs.getString(2).trim(), null)); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery( + "SELECT procname FROM sysprocedures WHERE owner != 'informix' AND isproc = 'f' ORDER BY procname" + )) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1).trim(), "FUNCTION", schema, null)); + } + } + + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery( + "SELECT procname FROM sysprocedures WHERE owner != 'informix' AND isproc = 't' ORDER BY procname" + )) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1).trim(), "PROCEDURE", schema, null)); + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return queryConstrainedObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + StringBuilder tableSql = new StringBuilder("SELECT tabname AS object_name, CASE tabtype WHEN 'T' THEN 'TABLE' WHEN 'V' THEN 'VIEW' ELSE tabtype END AS object_type, 0 AS object_order FROM systables WHERE tabid >= 100"); + appendInformixTableTypePredicate(tableSql, constraints); + MetadataSqlSupport.appendNameFilter(tableSql, args, "tabname", constraints); + branches.add(tableSql.toString()); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + StringBuilder functionSql = new StringBuilder("SELECT procname AS object_name, 'FUNCTION' AS object_type, 1 AS object_order FROM sysprocedures WHERE owner != 'informix' AND isproc = 'f'"); + MetadataSqlSupport.appendNameFilter(functionSql, args, "procname", constraints); + branches.add(functionSql.toString()); + } + if (constraints.objectTypeAllowed("PROCEDURE")) { + StringBuilder procedureSql = new StringBuilder("SELECT procname AS object_name, 'PROCEDURE' AS object_type, 2 AS object_order FROM sysprocedures WHERE owner != 'informix' AND isproc = 't'"); + MetadataSqlSupport.appendNameFilter(procedureSql, args, "procname", constraints); + branches.add(procedureSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT "); + MetadataSqlSupport.appendLiteralSkipFirst(sql, constraints); + sql.append("object_name, object_type FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY object_order, object_name"); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1).trim(), rs.getString(2).trim(), schema, null)); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String sql = """ + SELECT b.data FROM sysprocbody b + JOIN sysprocedures p ON b.procid = p.procid + WHERE p.procname = ? AND b.datakey = 'T' + ORDER BY b.seqno + """; + StringBuilder sb = new StringBuilder(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.stripIndent().trim())) { + stmt.setString(1, name); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String value = rs.getString(1); + sb.append(value == null ? "" : value); + } + } + } + return new ObjectSource(name, objectType, schema, sb.toString()); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Connection conn = requireConnected(); + Set primaryKeyColumns = getPrimaryKeyColumnNumbers(conn, table); + List result = new ArrayList<>(); + String sql = """ + SELECT c.colname, c.coltype, c.colno + FROM syscolumns c + WHERE c.tabid = (SELECT tabid FROM systables WHERE tabname = ?) + ORDER BY c.colno + """; + try (java.sql.PreparedStatement stmt = conn.prepareStatement(sql.stripIndent().trim())) { + stmt.setString(1, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String colname = rs.getString(1).trim(); + int coltype = rs.getInt(2); + result.add(new ColumnInfo( + colname, + mapColType(coltype), + (coltype & 256) == 0, + null, + primaryKeyColumns.contains(rs.getInt(3)), + null, + null, + null, + null, + null + )); + } + } + } + return result; + }); + } + + private Set getPrimaryKeyColumnNumbers(Connection conn, String table) throws SQLException { + String sql = """ + SELECT i.part1, i.part2, i.part3, i.part4, i.part5, i.part6, i.part7, i.part8, + i.part9, i.part10, i.part11, i.part12, i.part13, i.part14, i.part15, i.part16 + FROM sysconstraints c + JOIN sysindexes i ON i.idxname = c.idxname AND i.tabid = c.tabid + JOIN systables t ON t.tabid = c.tabid + WHERE t.tabname = ? AND c.constrtype = 'P' + """; + + try (java.sql.PreparedStatement stmt = conn.prepareStatement(sql.stripIndent().trim())) { + stmt.setString(1, table); + try (ResultSet rs = stmt.executeQuery()) { + if (!rs.next()) { + return Collections.emptySet(); + } + List parts = new ArrayList<>(); + for (int index = 1; index <= 16; index++) { + int value = rs.getInt(index); + parts.add(rs.wasNull() ? null : value); + } + return primaryKeyColumnNumbers(parts); + } + } + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = """ + SELECT t.trigname, t.event, 'TRIGGER' + FROM systriggers t + JOIN systables s ON t.tabid = s.tabid + WHERE s.tabname = ? + """; + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.stripIndent().trim())) { + stmt.setString(1, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo(rs.getString(1).trim(), rs.getString(2).trim(), rs.getString(3).trim())); + } + } + } + return result; + }); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + String normalizedSql = switch (trimEnd(sql.trim(), ';').toUpperCase(Locale.ROOT)) { + case "BEGIN WORK" -> "BEGIN"; + case "COMMIT WORK" -> "COMMIT"; + case "ROLLBACK WORK" -> "ROLLBACK"; + default -> sql; + }; + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + normalizedSql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::stringResultValue + ); + } + + @Override + public String setSchemaSQL(String schema) { + return ""; + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private Object stringResultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() + || constraints.objectTypeAllowed("PROCEDURE") + || constraints.objectTypeAllowed("FUNCTION"); + } + + private static void appendInformixTableTypePredicate(StringBuilder sql, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("'T'"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("'V'"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND tabtype IN (").append(String.join(", ", types)).append(")"); + } + + private static String trimStart(String value, char... chars) { + int index = 0; + while (index < value.length() && contains(chars, value.charAt(index))) { + index++; + } + return value.substring(index); + } + + private static String trimEnd(String value, char... chars) { + int end = value.length(); + while (end > 0 && contains(chars, value.charAt(end - 1))) { + end--; + } + return value.substring(0, end); + } + + private static boolean contains(char[] chars, char value) { + for (char candidate : chars) { + if (candidate == value) { + return true; + } + } + return false; + } + + private static boolean containsIgnoreCase(String value, String needle) { + return value.toLowerCase(Locale.ROOT).contains(needle.toLowerCase(Locale.ROOT)); + } + + public static void main(String[] args) { + new JsonRpcServer(new InformixAgent()).run(); + } +} diff --git a/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentExecutionTest.java b/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentExecutionTest.java new file mode 100644 index 0000000..32364b5 --- /dev/null +++ b/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentExecutionTest.java @@ -0,0 +1,16 @@ +package com.dbx.agent.informix; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; + +class InformixAgentExecutionTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new InformixAgent(); + } + + @Override + protected String resultSetSql() { + return "EXECUTE PROCEDURE sample_proc()"; + } +} diff --git a/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java b/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java new file mode 100644 index 0000000..ea99fbb --- /dev/null +++ b/agents/drivers/informix/src/test/java/com/dbx/agent/informix/InformixAgentTest.java @@ -0,0 +1,161 @@ +package com.dbx.agent.informix; + +import com.dbx.agent.ConnectParams; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.test.TestSupport; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class InformixAgentTest { + @Test + void buildsJdbcUrlWithExplicitInformixServerAndLocaleParameters() { + String url = InformixAgent.buildJdbcUrl( + new ConnectParams( + "172.26.128.159", + 20013, + "testdb", + "", + "", + "INFORMIXSERVER=informix;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:informix-sqli://172.26.128.159:20013/testdb:INFORMIXSERVER=informix;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8", + url + ); + } + + @Test + void fallsBackToHostAsInformixServerWhenNoExplicitServerIsConfigured() { + String url = InformixAgent.buildJdbcUrl( + new ConnectParams( + "informix-host", + 9088, + "sysmaster", + "", + "", + "", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:informix-sqli://informix-host:9088/sysmaster:INFORMIXSERVER=informix-host;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8", + url + ); + } + + @Test + void fallsBackToInformixServerNameWhenHostIsAnIpAddress() { + String url = InformixAgent.buildJdbcUrl( + new ConnectParams( + "172.26.128.159", + 20013, + "sysmaster", + "", + "", + "", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:informix-sqli://172.26.128.159:20013/sysmaster:INFORMIXSERVER=informix;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8", + url + ); + } + + @Test + void usesInformixServerFromDedicatedFieldWhenProvided() { + ConnectParams params = new ConnectParams( + "172.26.128.159", + 20013, + "testdb", + "", + "", + "CLIENT_LOCALE=en_US.utf8", + "", + false + ); + params.setInformix_server("ol_informix1410"); + + String url = InformixAgent.buildJdbcUrl(params); + + Assertions.assertEquals( + "jdbc:informix-sqli://172.26.128.159:20013/testdb:INFORMIXSERVER=ol_informix1410;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8", + url + ); + } + + @Test + void usesSysmasterWhenDatabaseIsBlank() { + String url = InformixAgent.buildJdbcUrl( + new ConnectParams( + "informix-host", + 9088, + "", + "", + "", + "INFORMIXSERVER=informix", + "", + false + ) + ); + + Assertions.assertEquals( + "jdbc:informix-sqli://informix-host:9088/sysmaster:INFORMIXSERVER=informix;CLIENT_LOCALE=en_US.utf8;DB_LOCALE=en_US.utf8", + url + ); + } + + @Test + void extractsPrimaryKeyColumnNumbersFromInformixIndexParts() { + Assertions.assertEquals( + Set.of(1, 3, 5), + InformixAgent.primaryKeyColumnNumbers(Arrays.asList(1, -3, 0, 5, null)) + ); + } + + @Test + void listsDatabasesFromSysmasterCatalog() { + Assertions.assertEquals("SELECT name FROM sysmaster:sysdatabases ORDER BY name", InformixAgent.databaseCatalogSql()); + } + + @Test + void constrainedTableMetadataUsesInformixSkipFirstPushdown() { + InformixAgent agent = new InformixAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("stores", new MetadataListConstraints("ord", 25, 50, List.of("TABLE"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.startsWith("SELECT SKIP 50 FIRST 25 tabname"), sql); + Assertions.assertTrue(sql.contains("tabtype IN ('T')"), sql); + Assertions.assertTrue(sql.contains("UPPER(tabname) LIKE ? ESCAPE '\\\\'"), sql); + Assertions.assertTrue(sql.endsWith("ORDER BY tabname"), sql); + } + + @Test + void constrainedObjectMetadataUsesInformixUnionPushdown() { + InformixAgent agent = new InformixAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listObjects("stores", new MetadataListConstraints("sync", 10, null, List.of("PROCEDURE", "FUNCTION"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.startsWith("SELECT FIRST 10 object_name, object_type FROM ("), sql); + Assertions.assertTrue(sql.contains("FROM sysprocedures"), sql); + Assertions.assertTrue(sql.contains("isproc = 'f'"), sql); + Assertions.assertTrue(sql.contains("isproc = 't'"), sql); + Assertions.assertTrue(sql.endsWith("ORDER BY object_order, object_name"), sql); + } +} diff --git a/agents/drivers/iotdb/build.gradle b/agents/drivers/iotdb/build.gradle new file mode 100644 index 0000000..adaf4bf --- /dev/null +++ b/agents/drivers/iotdb/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation 'org.apache.iotdb:iotdb-jdbc:2.0.8' + implementation 'org.slf4j:slf4j-nop:2.0.16' +} + +tasks.named('jar') { + manifest { + attributes('Agent-Label': 'Apache IoTDB', 'Main-Class': 'com.dbx.agent.iotdb.IoTDBAgent') + } +} diff --git a/agents/drivers/iotdb/src/main/java/com/dbx/agent/iotdb/IoTDBAgent.java b/agents/drivers/iotdb/src/main/java/com/dbx/agent/iotdb/IoTDBAgent.java new file mode 100644 index 0000000..37bd326 --- /dev/null +++ b/agents/drivers/iotdb/src/main/java/com/dbx/agent/iotdb/IoTDBAgent.java @@ -0,0 +1,46 @@ +package com.dbx.agent.iotdb; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +public final class IoTDBAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile IOTDB_PROFILE = new JdbcAgentProfile( + "org.apache.iotdb.jdbc.IoTDBDriver", + "jdbc:iotdb://{host}:{port}/", + 6667, + true + ); + + public IoTDBAgent() { + super(IOTDB_PROFILE); + } + + // IoTDB 的 database 是 `root.xxx` 路径前缀;JDBC metadata 会把同一路径同时投影成 catalog/schema。 + // 这里使用 IoTDB 原生语句作为 database 列表来源,避免依赖驱动的关系型兼容层。 + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (Statement stmt = requireConnection().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + String name = rs.getString(1); + if (name != null && !name.trim().isEmpty()) { + result.add(new DatabaseInfo(name.trim())); + } + } + } + return result; + }); + } + + public static void main(String[] args) { + new JsonRpcServer(new IoTDBAgent()).run(); + } +} diff --git a/agents/drivers/iotdb/src/test/java/com/dbx/agent/iotdb/IoTDBAgentTest.java b/agents/drivers/iotdb/src/test/java/com/dbx/agent/iotdb/IoTDBAgentTest.java new file mode 100644 index 0000000..acfc62f --- /dev/null +++ b/agents/drivers/iotdb/src/test/java/com/dbx/agent/iotdb/IoTDBAgentTest.java @@ -0,0 +1,32 @@ +package com.dbx.agent.iotdb; + +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class IoTDBAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new IoTDBAgent(); + } + + @Override + protected String resultSetSql() { + return "SELECT * FROM sample_table"; + } + + @Test + void buildsOfficialJdbcUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("iotdb.example.com"); + params.setPort(6667); + params.setUrl_params("sql_dialect=table&useSSL=false"); + + Assertions.assertEquals( + "jdbc:iotdb://iotdb.example.com:6667/?sql_dialect=table&useSSL=false", + IoTDBAgent.IOTDB_PROFILE.buildUrl(params) + ); + } +} diff --git a/agents/drivers/iris/build.gradle b/agents/drivers/iris/build.gradle new file mode 100644 index 0000000..0bcd80d --- /dev/null +++ b/agents/drivers/iris/build.gradle @@ -0,0 +1,9 @@ +dependencies { + implementation 'com.intersystems:intersystems-jdbc:3.10.5' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'IRIS', 'Main-Class': 'com.dbx.agent.iris.IrisAgent') + } +} diff --git a/agents/drivers/iris/src/main/java/com/dbx/agent/iris/IrisAgent.java b/agents/drivers/iris/src/main/java/com/dbx/agent/iris/IrisAgent.java new file mode 100644 index 0000000..380ea62 --- /dev/null +++ b/agents/drivers/iris/src/main/java/com/dbx/agent/iris/IrisAgent.java @@ -0,0 +1,159 @@ +package com.dbx.agent.iris; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.StandardJdbcMetadata; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class IrisAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile IRIS_PROFILE = new JdbcAgentProfile( + "com.intersystems.jdbc.IRISDriver", + "jdbc:IRIS://{host}:{port}/{database}", + 1972, + true + ); + + public IrisAgent() { + super(IRIS_PROFILE); + } + + @Override + public List listSchemas() { + return dedupeCaseInsensitiveSchemas(StandardJdbcMetadata.INSTANCE.listSchemas(requireConnection(), IRIS_PROFILE)); + } + + @Override + public List getColumns(String schema, String table) { + return irisColumns(requireConnection(), schema, table); + } + + static List irisColumns(Connection conn, String schema, String table) { + return unchecked(() -> { + Set primaryKeys = irisPrimaryKeys(conn, schema, table); + List columns = new ArrayList<>(); + try (PreparedStatement stmt = conn.prepareStatement(columnSql(schema))) { + int index = 1; + if (!isBlank(schema)) { + stmt.setString(index++, schema.trim()); + } + stmt.setString(index, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + if (isBlank(name)) { + continue; + } + columns.add(new ColumnInfo( + name, + stringOrDefault(rs, "DATA_TYPE", "Unknown"), + !"NO".equalsIgnoreCase(stringOrNull(rs, "IS_NULLABLE")), + stringOrNull(rs, "COLUMN_DEFAULT"), + primaryKeys.contains(name.toUpperCase(Locale.ROOT)), + null, + null, + intOrNull(rs, "NUMERIC_PRECISION"), + intOrNull(rs, "NUMERIC_SCALE"), + intOrNull(rs, "CHARACTER_MAXIMUM_LENGTH") + )); + } + } + } + return columns; + }); + } + + static List dedupeCaseInsensitiveSchemas(List schemas) { + Map byNormalizedName = new LinkedHashMap<>(); + for (String schema : schemas) { + if (schema == null || schema.trim().isEmpty()) { + continue; + } + String name = schema.trim(); + byNormalizedName.putIfAbsent(name.toUpperCase(Locale.ROOT), name); + } + return new ArrayList<>(byNormalizedName.values()); + } + + private static Set irisPrimaryKeys(Connection conn, String schema, String table) { + Set keys = new LinkedHashSet<>(); + try (PreparedStatement stmt = conn.prepareStatement(primaryKeySql(schema))) { + int index = 1; + if (!isBlank(schema)) { + stmt.setString(index++, schema.trim()); + } + stmt.setString(index, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String column = rs.getString("COLUMN_NAME"); + if (!isBlank(column)) { + keys.add(column.toUpperCase(Locale.ROOT)); + } + } + } + } catch (Exception ignored) { + // Primary key metadata is optional for display; column listing must keep working. + } + return keys; + } + + private static String columnSql(String schema) { + StringBuilder sql = new StringBuilder( + "SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, " + + "NUMERIC_PRECISION, NUMERIC_SCALE, CHARACTER_MAXIMUM_LENGTH " + + "FROM INFORMATION_SCHEMA.COLUMNS WHERE " + ); + if (!isBlank(schema)) { + sql.append("UPPER(TABLE_SCHEMA) = UPPER(?) AND "); + } + sql.append("UPPER(TABLE_NAME) = UPPER(?) ORDER BY ORDINAL_POSITION"); + return sql.toString(); + } + + private static String primaryKeySql(String schema) { + StringBuilder sql = new StringBuilder( + "SELECT k.COLUMN_NAME " + + "FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE k " + + "WHERE k.CONSTRAINT_TYPE = 'PRIMARY KEY' AND " + ); + if (!isBlank(schema)) { + sql.append("UPPER(k.TABLE_SCHEMA) = UPPER(?) AND "); + } + sql.append("UPPER(k.TABLE_NAME) = UPPER(?) ORDER BY k.ORDINAL_POSITION"); + return sql.toString(); + } + + private static String stringOrDefault(ResultSet rs, String column, String fallback) throws Exception { + String value = stringOrNull(rs, column); + return isBlank(value) ? fallback : value; + } + + private static String stringOrNull(ResultSet rs, String column) throws Exception { + String value = rs.getString(column); + return rs.wasNull() ? null : value; + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static boolean isBlank(String value) { + return value == null || value.trim().isEmpty(); + } + + public static void main(String[] args) { + new JsonRpcServer(new IrisAgent()).run(); + } +} diff --git a/agents/drivers/iris/src/test/java/com/dbx/agent/iris/IrisAgentTest.java b/agents/drivers/iris/src/test/java/com/dbx/agent/iris/IrisAgentTest.java new file mode 100644 index 0000000..d2aa319 --- /dev/null +++ b/agents/drivers/iris/src/test/java/com/dbx/agent/iris/IrisAgentTest.java @@ -0,0 +1,154 @@ +package com.dbx.agent.iris; + +import com.dbx.agent.ColumnInfo; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class IrisAgentTest { + @Test + void skipsSchemaSwitchingBecauseIrisRejectsSetSchemaContext() { + IrisAgent agent = new IrisAgent(); + + assertEquals("", agent.setSchemaSQL("Ens")); + } + + @Test + void dedupesSchemasCaseInsensitively() { + assertEquals( + Arrays.asList("APP", "SQLUSER", "z_user"), + IrisAgent.dedupeCaseInsensitiveSchemas(Arrays.asList("APP", "SQLUSER", "SQLUser", "app", "z_user")) + ); + } + + @Test + void ignoresBlankSchemasWhenDeduping() { + assertEquals( + Collections.singletonList("SQLUSER"), + IrisAgent.dedupeCaseInsensitiveSchemas(Arrays.asList("", " ", null, "SQLUSER")) + ); + } + + @Test + void readsColumnsWithNativeInformationSchemaQueries() { + List sql = new ArrayList<>(); + Connection conn = fakeConnection(sql); + + List columns = IrisAgent.irisColumns(conn, "SQLUser", "People"); + + assertEquals(2, columns.size()); + assertEquals("ID", columns.get(0).getName()); + assertEquals("INTEGER", columns.get(0).getData_type()); + assertFalse(columns.get(0).getIs_nullable()); + assertTrue(columns.get(0).getIs_primary_key()); + assertEquals("NAME", columns.get(1).getName()); + assertEquals(Integer.valueOf(64), columns.get(1).getCharacter_maximum_length()); + assertFalse(sql.get(0).contains("LIMIT")); + assertTrue(sql.get(0).contains("INFORMATION_SCHEMA.KEY_COLUMN_USAGE")); + assertTrue(sql.get(1).contains("INFORMATION_SCHEMA.COLUMNS")); + } + + private static Connection fakeConnection(List sqlLog) { + return proxy(Connection.class, (method, args) -> { + if ("prepareStatement".equals(method.getName())) { + String sql = (String) args[0]; + sqlLog.add(sql); + return fakeStatement(sql); + } + if ("getMetaData".equals(method.getName())) { + throw new AssertionError("IRIS columns must not use JDBC DatabaseMetaData.getColumns()"); + } + return defaultValue(method.getReturnType()); + }); + } + + private static PreparedStatement fakeStatement(String sql) { + return proxy(PreparedStatement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + if (sql.contains("KEY_COLUMN_USAGE")) { + return fakeResultSet(List.of(Map.of("COLUMN_NAME", "ID"))); + } + return fakeResultSet(List.of( + Map.of( + "COLUMN_NAME", "ID", + "DATA_TYPE", "INTEGER", + "IS_NULLABLE", "NO", + "NUMERIC_PRECISION", 10 + ), + Map.of( + "COLUMN_NAME", "NAME", + "DATA_TYPE", "VARCHAR", + "IS_NULLABLE", "YES", + "CHARACTER_MAXIMUM_LENGTH", 64 + ) + )); + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet fakeResultSet(List> rows) { + final int[] index = {-1}; + final boolean[] wasNull = {false}; + return proxy(ResultSet.class, (method, args) -> { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] < rows.size(); + } + if ("getString".equals(name)) { + Object value = rows.get(index[0]).get((String) args[0]); + wasNull[0] = value == null; + return value == null ? null : String.valueOf(value); + } + if ("getObject".equals(name)) { + Object value = rows.get(index[0]).get((String) args[0]); + wasNull[0] = value == null; + return value; + } + if ("wasNull".equals(name)) { + return wasNull[0]; + } + return defaultValue(method.getReturnType()); + }); + } + + @SuppressWarnings("unchecked") + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return handler.handle(method, args == null ? new Object[0] : args); + } + }; + return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/kafka/build.gradle b/agents/drivers/kafka/build.gradle new file mode 100644 index 0000000..63f5e38 --- /dev/null +++ b/agents/drivers/kafka/build.gradle @@ -0,0 +1,12 @@ +dependencies { + implementation 'com.google.code.gson:gson:2.12.1' + implementation 'org.apache.kafka:kafka-clients:3.9.0' + runtimeOnly 'org.slf4j:slf4j-simple:1.7.36' +} + +tasks.named('shadowJar') { + mergeServiceFiles() + manifest { + attributes('Agent-Label': 'Apache Kafka', 'Main-Class': 'com.dbx.agent.kafka.KafkaAgent') + } +} diff --git a/agents/drivers/kafka/src/main/java/com/dbx/agent/kafka/KafkaAgent.java b/agents/drivers/kafka/src/main/java/com/dbx/agent/kafka/KafkaAgent.java new file mode 100644 index 0000000..ed732e0 --- /dev/null +++ b/agents/drivers/kafka/src/main/java/com/dbx/agent/kafka/KafkaAgent.java @@ -0,0 +1,1262 @@ +package com.dbx.agent.kafka; + +import com.google.gson.*; +import org.apache.kafka.clients.admin.*; +import org.apache.kafka.clients.consumer.*; +import org.apache.kafka.clients.producer.*; +import org.apache.kafka.common.*; +import org.apache.kafka.common.acl.*; +import org.apache.kafka.common.config.ConfigResource; +import org.apache.kafka.common.errors.*; +import org.apache.kafka.common.header.internals.RecordHeader; +import org.apache.kafka.common.resource.PatternType; +import org.apache.kafka.common.resource.ResourcePattern; +import org.apache.kafka.common.resource.ResourcePatternFilter; +import org.apache.kafka.common.resource.ResourceType; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * Kafka admin agent for DBX. Communicates with the Rust bridge via JSON-RPC + * over stdin/stdout. Uses kafka-clients AdminClient for admin operations and + * KafkaProducer for message production. + */ +public final class KafkaAgent { + + private static final Gson GSON = new GsonBuilder().serializeNulls().create(); + private static final int DEFAULT_REQUEST_TIMEOUT_MS = 30_000; + private static final int DEFAULT_SESSION_TIMEOUT_MS = 30_000; + private static final Set KERBEROS_SYSTEM_PROPERTY_KEYS = Set.of( + "java.security.krb5.conf", + "sun.security.krb5.debug", + "javax.security.auth.useSubjectCredsOnly" + ); + private static final Map BASELINE_KERBEROS_SYSTEM_PROPERTIES = + snapshotKerberosSystemProperties(); + + private static final List CAPABILITIES = Collections.unmodifiableList(Arrays.asList( + "mq_connect", "mq_test_connection", "mq_topics", "mq_consumer_groups", + "mq_messages", "mq_acl", "mq_config", "mq_monitoring" + )); + + private static AdminClient adminClient; + private static KafkaProducer producer; + private static volatile boolean shutdownRequested; + + private KafkaAgent() {} + + // ----------------------------------------------------------------------- + // Entry point + // ----------------------------------------------------------------------- + + public static void main(String[] args) throws Exception { + System.setProperty("org.slf4j.simpleLogger.logFile", "System.err"); + System.out.println("{\"ready\":true}"); + System.out.flush(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String line = reader.readLine(); + if (line == null) break; + String response = handleRequest(line); + System.out.println(response); + System.out.flush(); + if (shutdownRequested) { + System.exit(0); + } + } + } + + // ----------------------------------------------------------------------- + // JSON-RPC dispatch + // ----------------------------------------------------------------------- + + static String handleRequest(String line) { + JsonObject req = JsonParser.parseString(line).getAsJsonObject(); + JsonElement id = req.get("id"); + String method = req.get("method").getAsString(); + JsonObject params = req.has("params") && req.get("params").isJsonObject() + ? req.getAsJsonObject("params") : new JsonObject(); + + JsonObject response = new JsonObject(); + response.addProperty("jsonrpc", "2.0"); + response.add("id", id); + + try { + Object result = dispatch(method, params); + response.add("result", GSON.toJsonTree(result)); + } catch (Exception e) { + JsonObject error = new JsonObject(); + error.addProperty("code", -1); + error.addProperty("message", normalizeErrorMessage(e)); + response.add("error", error); + } + return GSON.toJson(response); + } + + private static Object dispatch(String method, JsonObject params) throws Exception { + return switch (method) { + case "handshake" -> handshakeResult(); + case "connect" -> connect(params); + case "test_connection" -> testConnection(params); + case "disconnect" -> { closeClients(); yield Collections.singletonMap("ok", true); } + case "shutdown" -> { closeClients(); shutdownRequested = true; yield Collections.singletonMap("ok", true); } + // Topic management + case "mq_list_topics" -> listTopics(params); + case "mq_create_topic" -> createTopic(params); + case "mq_delete_topic" -> deleteTopic(params); + case "mq_update_partitions" -> updatePartitions(params); + case "mq_get_topic_stats" -> getTopicStats(params); + case "mq_get_topic_config" -> getTopicConfig(params); + case "mq_alter_topic_config" -> alterTopicConfig(params); + // Consumer groups + case "mq_list_consumer_groups" -> listConsumerGroups(params); + case "mq_describe_consumer_group" -> describeConsumerGroup(params); + case "mq_delete_consumer_group" -> deleteConsumerGroup(params); + case "mq_reset_consumer_group_offsets" -> resetConsumerGroupOffsets(params); + case "mq_list_producers" -> listProducers(params); + // Messages + case "mq_peek_messages" -> peekMessages(params); + case "mq_send_message" -> sendMessage(params); + // ACLs + case "mq_list_acls" -> listAcls(params); + case "mq_create_acls" -> createAcls(params); + case "mq_delete_acls" -> deleteAcls(params); + // Cluster / monitoring + case "mq_describe_cluster" -> describeCluster(params); + case "mq_get_consumer_lag" -> getConsumerLag(params); + default -> throw new IllegalArgumentException("Unknown method: " + method); + }; + } + + // ----------------------------------------------------------------------- + // Lifecycle + // ----------------------------------------------------------------------- + + private static Object handshakeResult() { + return new HandshakeResult(1, 1, CAPABILITIES); + } + + private static Object connect(JsonObject params) throws Exception { + JsonObject conn = connectionObject(params); + Map previousKerberosSystemProperties = applyKerberosSystemProperties(conn); + AdminClient nextAdmin = null; + KafkaProducer nextProducer = null; + try { + nextAdmin = buildAdminClient(conn); + // Verify connectivity + nextAdmin.describeCluster().clusterId().get( + intOrDefault(conn, "request_timeout_ms", DEFAULT_REQUEST_TIMEOUT_MS), TimeUnit.MILLISECONDS); + nextProducer = buildProducer(conn); + closeClients(); + applyKerberosSystemProperties(conn); + adminClient = nextAdmin; + producer = nextProducer; + return Collections.singletonMap("ok", true); + } catch (Exception e) { + if (nextAdmin != null) { + nextAdmin.close(Duration.ofSeconds(5)); + } + if (nextProducer != null) { + nextProducer.close(Duration.ofSeconds(5)); + } + restoreKerberosSystemProperties(previousKerberosSystemProperties); + throw e; + } + } + + private static Object testConnection(JsonObject params) throws Exception { + JsonObject conn = connectionObject(params); + Map previousKerberosSystemProperties = applyKerberosSystemProperties(conn); + AdminClient probe = null; + try { + probe = buildAdminClient(conn); + int timeout = intOrDefault(conn, "request_timeout_ms", DEFAULT_REQUEST_TIMEOUT_MS); + DescribeClusterResult cluster = probe.describeCluster(); + String clusterId = cluster.clusterId().get(timeout, TimeUnit.MILLISECONDS); + Node controller = cluster.controller().get(timeout, TimeUnit.MILLISECONDS); + Collection brokers = cluster.nodes().get(timeout, TimeUnit.MILLISECONDS); + + // Probe ACL support: try a describe operation and catch security errors. + boolean aclEnabled = true; + try { + probe.describeAcls(AclBindingFilter.ANY) + .values().get(timeout, TimeUnit.MILLISECONDS); + } catch (Exception aclEx) { + Throwable cause = aclEx; + while (cause != null) { + if (cause.getClass().getSimpleName().contains("SecurityDisabled") + || (cause.getMessage() != null && cause.getMessage().contains("No Authorizer"))) { + aclEnabled = false; + break; + } + cause = cause.getCause(); + } + } + + Map result = new LinkedHashMap<>(); + result.put("ok", true); + result.put("clusterId", clusterId); + result.put("controller", controller != null ? nodeToMap(controller) : null); + result.put("aclEnabled", aclEnabled); + List> brokerList = new ArrayList<>(); + for (Node node : brokers) { + brokerList.add(nodeToMap(node)); + } + result.put("brokers", brokerList); + return result; + } finally { + if (probe != null) { + probe.close(Duration.ofSeconds(5)); + } + restoreKerberosSystemProperties(previousKerberosSystemProperties); + } + } + + private static void closeClients() { + if (adminClient != null) { + adminClient.close(Duration.ofSeconds(5)); + adminClient = null; + } + if (producer != null) { + producer.close(Duration.ofSeconds(5)); + producer = null; + } + restoreKerberosSystemProperties(BASELINE_KERBEROS_SYSTEM_PROPERTIES); + } + + // ----------------------------------------------------------------------- + // Client builders + // ----------------------------------------------------------------------- + + static AdminClient buildAdminClient(JsonObject conn) { + Properties props = new Properties(); + props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers(conn)); + props.put(AdminClientConfig.REQUEST_TIMEOUT_MS_CONFIG, + intOrDefault(conn, "request_timeout_ms", DEFAULT_REQUEST_TIMEOUT_MS)); + props.put(AdminClientConfig.DEFAULT_API_TIMEOUT_MS_CONFIG, + intOrDefault(conn, "request_timeout_ms", DEFAULT_REQUEST_TIMEOUT_MS)); + applyConnectionProperties(conn, props); + return AdminClient.create(props); + } + + private static KafkaProducer buildProducer(JsonObject conn) { + Properties props = new Properties(); + props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers(conn)); + props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, + "org.apache.kafka.common.serialization.StringSerializer"); + props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, + "org.apache.kafka.common.serialization.ByteArraySerializer"); + props.put(ProducerConfig.ACKS_CONFIG, "all"); + applyConnectionProperties(conn, props); + return new KafkaProducer<>(props); + } + + private static String bootstrapServers(JsonObject conn) { + String servers = stringOrEmpty(conn, "bootstrap_servers"); + if (servers.isBlank()) { + servers = stringOrEmpty(conn, "bootstrapServers"); + } + if (servers.isBlank()) { + throw new IllegalArgumentException("bootstrap_servers is required"); + } + return servers; + } + + static void applySecurityProperties(JsonObject conn, Properties props) { + String securityProtocol = stringOrEmpty(conn, "security_protocol"); + if (securityProtocol.isBlank()) { + securityProtocol = stringOrEmpty(conn, "securityProtocol"); + } + if (securityProtocol.isBlank()) { + securityProtocol = "PLAINTEXT"; + } + props.put("security.protocol", securityProtocol); + + String saslMechanism = stringOrEmpty(conn, "sasl_mechanism"); + if (saslMechanism.isBlank()) { + saslMechanism = stringOrEmpty(conn, "saslMechanism"); + } + if (!saslMechanism.isBlank()) { + props.put("sasl.mechanism", saslMechanism); + } + + String saslUsername = stringOrEmpty(conn, "sasl_username"); + if (saslUsername.isBlank()) saslUsername = stringOrEmpty(conn, "saslUsername"); + String saslPassword = stringOrEmpty(conn, "sasl_password"); + if (saslPassword.isBlank()) saslPassword = stringOrEmpty(conn, "saslPassword"); + + if (!saslUsername.isBlank() && !saslMechanism.isBlank()) { + String jaasTemplate = switch (saslMechanism.toUpperCase()) { + case "PLAIN" -> "org.apache.kafka.common.security.plain.PlainLoginModule required " + + "username=\"%s\" password=\"%s\";"; + case "SCRAM-SHA-256", "SCRAM-SHA-512" -> + "org.apache.kafka.common.security.scram.ScramLoginModule required " + + "username=\"%s\" password=\"%s\";"; + default -> null; + }; + if (jaasTemplate != null) { + props.put("sasl.jaas.config", String.format(jaasTemplate, jaasValue(saslUsername), jaasValue(saslPassword))); + } + } + + JsonObject tls = conn.has("tls") && conn.get("tls").isJsonObject() + ? conn.getAsJsonObject("tls") : null; + boolean skipVerify = boolOrDefault(conn, "tls_skip_verify", false) + || boolOrDefault(conn, "tlsSkipVerify", false) + || (tls != null && boolOrDefault(tls, "skip_verify", false)); + if (skipVerify) { + props.put("ssl.endpoint.identification.algorithm", ""); + } + + // TLS properties + if (tls != null) { + String truststorePath = stringOrEmpty(tls, "truststore_path"); + if (!truststorePath.isBlank()) { + props.put("ssl.truststore.location", truststorePath); + String truststorePassword = stringOrEmpty(tls, "truststore_password"); + if (!truststorePassword.isBlank()) { + props.put("ssl.truststore.password", truststorePassword); + } + } + String keystorePath = stringOrEmpty(tls, "keystore_path"); + if (!keystorePath.isBlank()) { + props.put("ssl.keystore.location", keystorePath); + String keystorePassword = stringOrEmpty(tls, "keystore_password"); + if (!keystorePassword.isBlank()) { + props.put("ssl.keystore.password", keystorePassword); + } + } + } + } + + static void applyConnectionProperties(JsonObject conn, Properties props) { + applySecurityProperties(conn, props); + applyExtraProperties(conn, props); + } + + static String jaasValue(String value) { + return value.replace("\\", "\\\\").replace("\"", "\\\""); + } + + @SuppressWarnings("unchecked") + private static void applyExtraProperties(JsonObject conn, Properties props) { + JsonObject properties = conn.has("properties") && conn.get("properties").isJsonObject() + ? conn.getAsJsonObject("properties") : null; + if (properties != null) { + for (Map.Entry entry : properties.entrySet()) { + if (entry.getValue().isJsonPrimitive()) { + String key = entry.getKey(); + String value = entry.getValue().getAsString(); + props.put(key, value); + } + } + } + } + + static Map applyKerberosSystemProperties(JsonObject conn) { + Map previous = snapshotKerberosSystemProperties(); + JsonObject properties = connectionProperties(conn); + for (String key : KERBEROS_SYSTEM_PROPERTY_KEYS) { + String value = stringProperty(properties, key); + if (value == null || value.isBlank()) { + value = BASELINE_KERBEROS_SYSTEM_PROPERTIES.get(key); + } + setOrClearSystemProperty(key, value); + } + return previous; + } + + static void restoreKerberosSystemProperties(Map values) { + for (String key : KERBEROS_SYSTEM_PROPERTY_KEYS) { + setOrClearSystemProperty(key, values.get(key)); + } + } + + private static Map snapshotKerberosSystemProperties() { + Map values = new LinkedHashMap<>(); + for (String key : KERBEROS_SYSTEM_PROPERTY_KEYS) { + values.put(key, System.getProperty(key)); + } + return values; + } + + private static JsonObject connectionProperties(JsonObject conn) { + return conn.has("properties") && conn.get("properties").isJsonObject() + ? conn.getAsJsonObject("properties") : null; + } + + private static String stringProperty(JsonObject properties, String key) { + if (properties == null || !properties.has(key) || !properties.get(key).isJsonPrimitive()) { + return null; + } + return properties.get(key).getAsString(); + } + + private static void setOrClearSystemProperty(String key, String value) { + if (value == null || value.isBlank()) { + System.clearProperty(key); + } else { + System.setProperty(key, value); + } + } + + // ----------------------------------------------------------------------- + // Topic management + // ----------------------------------------------------------------------- + + private static Object listTopics(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + Set names = admin.listTopics(new ListTopicsOptions().timeoutMs(timeout)) + .names().get(timeout, TimeUnit.MILLISECONDS); + if (names.isEmpty()) { + return Collections.singletonMap("topics", Collections.emptyList()); + } + + Map descriptions = admin.describeTopics(names) + .allTopicNames().get(timeout, TimeUnit.MILLISECONDS); + + List> topics = new ArrayList<>(); + for (Map.Entry entry : descriptions.entrySet()) { + TopicDescription desc = entry.getValue(); + Map topic = new LinkedHashMap<>(); + topic.put("name", desc.name()); + topic.put("partitions", desc.partitions().size()); + topic.put("replicationFactor", desc.partitions().isEmpty() ? 0 + : desc.partitions().get(0).replicas().size()); + topic.put("internal", desc.isInternal()); + topics.add(topic); + } + topics.sort(Comparator.comparing(m -> (String) m.get("name"))); + return Collections.singletonMap("topics", topics); + } + + private static Object createTopic(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String name = stringOrEmpty(params, "name"); + int partitions = intOrDefault(params, "partitions", 1); + short replicationFactor = (short) intOrDefault(params, "replicationFactor", 1); + + NewTopic newTopic = new NewTopic(name, partitions, replicationFactor); + + // Optional configs + JsonObject configs = params.has("configs") && params.get("configs").isJsonObject() + ? params.getAsJsonObject("configs") : null; + if (configs != null) { + Map configMap = new HashMap<>(); + for (Map.Entry entry : configs.entrySet()) { + configMap.put(entry.getKey(), entry.getValue().getAsString()); + } + newTopic.configs(configMap); + } + + admin.createTopics(Collections.singletonList(newTopic)) + .all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + private static Object deleteTopic(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String name = stringOrEmpty(params, "name"); + admin.deleteTopics(Collections.singletonList(name)) + .all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + private static Object updatePartitions(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String name = stringOrEmpty(params, "name"); + int totalPartitions = intOrDefault(params, "totalPartitions", 1); + admin.createPartitions(Collections.singletonMap(name, NewPartitions.increaseTo(totalPartitions))) + .all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + private static Object getTopicStats(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String name = stringOrEmpty(params, "name"); + + TopicDescription desc = admin.describeTopics(Collections.singletonList(name)) + .allTopicNames().get(timeout, TimeUnit.MILLISECONDS).get(name); + + // Collect offsets for size estimation + Map endOffsets = new LinkedHashMap<>(); + Map beginOffsets = new LinkedHashMap<>(); + for (TopicPartitionInfo pi : desc.partitions()) { + TopicPartition tp = new TopicPartition(name, pi.partition()); + endOffsets.put(tp, admin.listOffsets(Collections.singletonMap(tp, OffsetSpec.latest())) + .all().get(timeout, TimeUnit.MILLISECONDS).get(tp)); + beginOffsets.put(tp, admin.listOffsets(Collections.singletonMap(tp, OffsetSpec.earliest())) + .all().get(timeout, TimeUnit.MILLISECONDS).get(tp)); + } + + long totalMessages = 0; + List> partitionStats = new ArrayList<>(); + for (TopicPartitionInfo pi : desc.partitions()) { + TopicPartition tp = new TopicPartition(name, pi.partition()); + long end = endOffsets.get(tp).offset(); + long begin = beginOffsets.get(tp).offset(); + long count = end - begin; + totalMessages += count; + + Map ps = new LinkedHashMap<>(); + ps.put("partition", pi.partition()); + ps.put("leader", pi.leader() != null ? pi.leader().id() : -1); + ps.put("replicas", pi.replicas().stream().map(Node::id).collect(Collectors.toList())); + ps.put("isr", pi.isr().stream().map(Node::id).collect(Collectors.toList())); + ps.put("beginOffset", begin); + ps.put("endOffset", end); + ps.put("messageCount", count); + partitionStats.add(ps); + } + + Map result = new LinkedHashMap<>(); + result.put("name", name); + result.put("partitions", desc.partitions().size()); + result.put("replicationFactor", desc.partitions().isEmpty() ? 0 + : desc.partitions().get(0).replicas().size()); + result.put("totalMessages", totalMessages); + result.put("partitionStats", partitionStats); + return result; + } + + private static Object getTopicConfig(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String name = stringOrEmpty(params, "name"); + + ConfigResource resource = new ConfigResource(ConfigResource.Type.TOPIC, name); + Config config = admin.describeConfigs(Collections.singletonList(resource)) + .all().get(timeout, TimeUnit.MILLISECONDS).get(resource); + + Map configs = new LinkedHashMap<>(); + for (ConfigEntry entry : config.entries()) { + Map entryMap = new LinkedHashMap<>(); + entryMap.put("value", entry.value()); + entryMap.put("source", entry.source().name()); + entryMap.put("isSensitive", entry.isSensitive()); + entryMap.put("isReadOnly", entry.isReadOnly()); + entryMap.put("isDefault", entry.isDefault()); + configs.put(entry.name(), entryMap); + } + return Collections.singletonMap("configs", configs); + } + + private static Object alterTopicConfig(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String name = stringOrEmpty(params, "name"); + + JsonArray entries = params.has("configs") && params.get("configs").isJsonArray() + ? params.getAsJsonArray("configs") : new JsonArray(); + + List ops = new ArrayList<>(); + for (JsonElement el : entries) { + JsonObject entry = el.getAsJsonObject(); + String key = entry.get("key").getAsString(); + String value = entry.has("value") && !entry.get("value").isJsonNull() + ? entry.get("value").getAsString() : null; + String opStr = stringOrDefault(entry, "op", "set"); + AlterConfigOp.OpType opType = switch (opStr.toLowerCase()) { + case "delete" -> AlterConfigOp.OpType.DELETE; + case "append" -> AlterConfigOp.OpType.APPEND; + case "subtract" -> AlterConfigOp.OpType.SUBTRACT; + default -> AlterConfigOp.OpType.SET; + }; + ops.add(new AlterConfigOp(new ConfigEntry(key, value), opType)); + } + + ConfigResource resource = new ConfigResource(ConfigResource.Type.TOPIC, name); + admin.incrementalAlterConfigs(Collections.singletonMap(resource, ops)) + .all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + // ----------------------------------------------------------------------- + // Consumer groups + // ----------------------------------------------------------------------- + + private static Object listConsumerGroups(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + Collection groups = admin.listConsumerGroups( + new ListConsumerGroupsOptions().timeoutMs(timeout)) + .all().get(timeout, TimeUnit.MILLISECONDS); + + List> result = new ArrayList<>(); + for (ConsumerGroupListing group : groups) { + Map g = new LinkedHashMap<>(); + g.put("groupId", group.groupId()); + g.put("state", group.state().map(Enum::name).orElse("UNKNOWN")); + g.put("simpleGroup", group.isSimpleConsumerGroup()); + result.add(g); + } + result.sort(Comparator.comparing(m -> (String) m.get("groupId"))); + return Collections.singletonMap("groups", result); + } + + private static Object describeConsumerGroup(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String groupId = stringOrEmpty(params, "groupId"); + + ConsumerGroupDescription desc = admin.describeConsumerGroups(Collections.singletonList(groupId)) + .all().get(timeout, TimeUnit.MILLISECONDS).get(groupId); + + Map result = new LinkedHashMap<>(); + result.put("groupId", desc.groupId()); + result.put("state", desc.state().name()); + result.put("coordinator", nodeToMap(desc.coordinator())); + result.put("partitionAssignor", desc.partitionAssignor()); + + List> members = new ArrayList<>(); + for (MemberDescription member : desc.members()) { + Map m = new LinkedHashMap<>(); + m.put("memberId", member.consumerId()); + m.put("clientId", member.clientId()); + m.put("host", member.host()); + List> assignments = new ArrayList<>(); + for (TopicPartition tp : member.assignment().topicPartitions()) { + Map a = new LinkedHashMap<>(); + a.put("topic", tp.topic()); + a.put("partition", tp.partition()); + assignments.add(a); + } + m.put("assignments", assignments); + members.add(m); + } + result.put("members", members); + return result; + } + + private static Object listProducers(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String topic = stringOrEmpty(params, "topic"); + + try { + TopicDescription desc = admin.describeTopics(Collections.singletonList(topic)) + .allTopicNames().get(timeout, TimeUnit.MILLISECONDS).get(topic); + List partitions = desc.partitions().stream() + .map(pi -> new TopicPartition(topic, pi.partition())) + .collect(Collectors.toList()); + + DescribeProducersResult described = admin.describeProducers( + partitions, + new DescribeProducersOptions().timeoutMs(timeout)); + + Map> byProducer = new LinkedHashMap<>(); + for (TopicPartition tp : partitions) { + DescribeProducersResult.PartitionProducerState state = + described.partitionResult(tp).get(timeout, TimeUnit.MILLISECONDS); + for (ProducerState producerState : state.activeProducers()) { + long producerId = producerState.producerId(); + Map producer = byProducer.computeIfAbsent(producerId, id -> { + Map p = new LinkedHashMap<>(); + p.put("producerId", id); + p.put("producerName", "producer-" + id); + p.put("msgRateIn", 0.0); + p.put("msgThroughputIn", 0.0); + p.put("clientVersion", "Kafka producer"); + p.put("partitions", new ArrayList()); + p.put("lastTimestamp", producerState.lastTimestamp()); + return p; + }); + @SuppressWarnings("unchecked") + List producerPartitions = (List) producer.get("partitions"); + producerPartitions.add(tp.partition()); + long currentLastTimestamp = (long) producer.get("lastTimestamp"); + if (producerState.lastTimestamp() > currentLastTimestamp) { + producer.put("lastTimestamp", producerState.lastTimestamp()); + } + } + } + + for (Map producer : byProducer.values()) { + @SuppressWarnings("unchecked") + List producerPartitions = (List) producer.get("partitions"); + producerPartitions.sort(Integer::compareTo); + producer.put( + "address", + producerPartitions.size() == 1 + ? "partition " + producerPartitions.get(0) + : "partitions " + producerPartitions.stream().map(String::valueOf).collect(Collectors.joining(", ")) + ); + } + + return Collections.singletonMap("producers", new ArrayList<>(byProducer.values())); + } catch (Exception e) { + if (isUnsupportedVersionError(e)) { + return Collections.singletonMap("producers", Collections.emptyList()); + } + throw e; + } + } + + private static Object deleteConsumerGroup(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String groupId = stringOrEmpty(params, "groupId"); + admin.deleteConsumerGroups(Collections.singletonList(groupId)) + .all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + private static Object resetConsumerGroupOffsets(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String groupId = stringOrEmpty(params, "groupId"); + String topic = stringOrEmpty(params, "topic"); + + Map offsets = new HashMap<>(); + JsonArray offsetArray = params.has("offsets") && params.get("offsets").isJsonArray() + ? params.getAsJsonArray("offsets") : new JsonArray(); + + for (JsonElement el : offsetArray) { + JsonObject offsetObj = el.getAsJsonObject(); + int partition = offsetObj.get("partition").getAsInt(); + long offset = offsetObj.get("offset").getAsLong(); + offsets.put(new TopicPartition(topic, partition), new OffsetAndMetadata(offset)); + } + + // If no explicit offsets, check for a "position" parameter. + if (offsets.isEmpty()) { + String position = stringOrDefault(params, "position", "latest"); + Long timestampMs = params.has("timestampMs") && !params.get("timestampMs").isJsonNull() + ? params.get("timestampMs").getAsLong() : null; + TopicDescription desc = admin.describeTopics(Collections.singletonList(topic)) + .allTopicNames().get(timeout, TimeUnit.MILLISECONDS).get(topic); + + Map specMap = new HashMap<>(); + for (TopicPartitionInfo pi : desc.partitions()) { + TopicPartition tp = new TopicPartition(topic, pi.partition()); + specMap.put(tp, offsetSpecForPosition(position, timestampMs)); + } + Map resolved = + admin.listOffsets(specMap).all().get(timeout, TimeUnit.MILLISECONDS); + List unresolvedTimestampPartitions = new ArrayList<>(); + for (Map.Entry entry : resolved.entrySet()) { + long offset = entry.getValue().offset(); + if (offset >= 0) { + offsets.put(entry.getKey(), new OffsetAndMetadata(offset)); + } else { + unresolvedTimestampPartitions.add(entry.getKey()); + } + } + if (!unresolvedTimestampPartitions.isEmpty()) { + Map latestSpecs = new HashMap<>(); + for (TopicPartition tp : unresolvedTimestampPartitions) { + latestSpecs.put(tp, OffsetSpec.latest()); + } + Map latest = + admin.listOffsets(latestSpecs).all().get(timeout, TimeUnit.MILLISECONDS); + for (Map.Entry entry : latest.entrySet()) { + offsets.put(entry.getKey(), new OffsetAndMetadata(entry.getValue().offset())); + } + } + } + + admin.alterConsumerGroupOffsets(groupId, offsets) + .all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + static OffsetSpec offsetSpecForPosition(String position, Long timestampMs) { + String normalized = position == null ? "latest" : position.trim().toLowerCase(Locale.ROOT); + return switch (normalized) { + case "earliest" -> OffsetSpec.earliest(); + case "latest", "" -> OffsetSpec.latest(); + case "timestamp" -> { + if (timestampMs == null) { + throw new IllegalArgumentException("timestampMs is required when position is timestamp"); + } + yield OffsetSpec.forTimestamp(timestampMs); + } + default -> throw new IllegalArgumentException("Unsupported reset position: " + position); + }; + } + + // ----------------------------------------------------------------------- + // Messages + // ----------------------------------------------------------------------- + + private static Object peekMessages(JsonObject params) throws Exception { + String topic = stringOrEmpty(params, "topic"); + int partition = intOrDefault(params, "partition", 0); + long offset = longOrDefault(params, "offset", 0); + int count = intOrDefault(params, "count", 10); + + // Build a temporary consumer for peeking (no commit) + Properties props = new Properties(); + props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, + adminClient != null ? adminClient.describeCluster().clusterId() + .get(5, TimeUnit.SECONDS) : "localhost:9092"); + // Reuse the admin's bootstrap servers + JsonObject conn = params.has("connection") && params.get("connection").isJsonObject() + ? params.getAsJsonObject("connection") : null; + if (conn != null) { + props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers(conn)); + applyConnectionProperties(conn, props); + } + props.put(ConsumerConfig.GROUP_ID_CONFIG, "dbx-peek-" + UUID.randomUUID()); + props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, + "org.apache.kafka.common.serialization.StringDeserializer"); + props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, + "org.apache.kafka.common.serialization.ByteArrayDeserializer"); + props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false"); + props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "none"); + props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, count); + + TopicPartition tp = new TopicPartition(topic, partition); + try (KafkaConsumer consumer = new KafkaConsumer<>(props)) { + consumer.assign(Collections.singletonList(tp)); + Map beginningOffsets = + consumer.beginningOffsets(Collections.singletonList(tp), Duration.ofSeconds(5)); + Map endOffsets = + consumer.endOffsets(Collections.singletonList(tp), Duration.ofSeconds(5)); + long beginningOffset = beginningOffsets.getOrDefault(tp, 0L); + long endOffset = endOffsets.getOrDefault(tp, beginningOffset); + Long seekOffset = normalizePeekOffset(offset, beginningOffset, endOffset); + if (seekOffset == null) { + return Collections.singletonMap("messages", Collections.emptyList()); + } + consumer.seek(tp, seekOffset); + + List> messages = new ArrayList<>(); + ConsumerRecords records = consumer.poll(Duration.ofSeconds(5)); + for (ConsumerRecord record : records) { + if (messages.size() >= count) break; + Map msg = new LinkedHashMap<>(); + msg.put("topic", record.topic()); + msg.put("partition", record.partition()); + msg.put("offset", record.offset()); + msg.put("timestamp", record.timestamp()); + msg.put("key", record.key()); + // Headers + Map headers = new LinkedHashMap<>(); + record.headers().forEach(h -> + headers.put(h.key(), new String(h.value(), StandardCharsets.UTF_8))); + msg.put("headers", headers); + // Payload + if (record.value() != null) { + msg.put("payloadBase64", Base64.getEncoder().encodeToString(record.value())); + String text = tryDecodeUtf8(record.value()); + if (text != null) { + msg.put("payloadText", text); + } + } else { + msg.put("payloadBase64", ""); + } + messages.add(msg); + } + return Collections.singletonMap("messages", messages); + } + } + + private static Object sendMessage(JsonObject params) throws Exception { + if (producer == null) { + throw new IllegalStateException("Producer is not initialized. Call connect first."); + } + + String topic = stringOrEmpty(params, "topic"); + String key = params.has("key") && !params.get("key").isJsonNull() + ? params.get("key").getAsString() : null; + + // Decode payload from base64 + String payloadBase64 = stringOrEmpty(params, "payloadBase64"); + byte[] value = payloadBase64.isEmpty() ? new byte[0] : Base64.getDecoder().decode(payloadBase64); + + // Build the record + Integer partition = params.has("partition") && !params.get("partition").isJsonNull() + ? params.get("partition").getAsInt() : null; + + ProducerRecord record; + if (partition != null) { + record = new ProducerRecord<>(topic, partition, key, value); + } else { + record = new ProducerRecord<>(topic, key, value); + } + + // Add headers + JsonObject headers = params.has("headers") && params.get("headers").isJsonObject() + ? params.getAsJsonObject("headers") : null; + if (headers != null) { + for (Map.Entry entry : headers.entrySet()) { + record.headers().add(new RecordHeader( + entry.getKey(), + entry.getValue().getAsString().getBytes(StandardCharsets.UTF_8))); + } + } + + RecordMetadata metadata = producer.send(record).get(30, TimeUnit.SECONDS); + + Map result = new LinkedHashMap<>(); + result.put("ok", true); + result.put("topic", metadata.topic()); + result.put("partition", metadata.partition()); + result.put("offset", metadata.offset()); + result.put("timestamp", metadata.timestamp()); + return result; + } + + // ----------------------------------------------------------------------- + // ACLs + // ----------------------------------------------------------------------- + + private static Object listAcls(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + + AclBindingFilter filter = buildAclFilter(params); + Collection bindings = admin.describeAcls(filter) + .values().get(timeout, TimeUnit.MILLISECONDS); + + List> acls = new ArrayList<>(); + for (AclBinding binding : bindings) { + Map acl = new LinkedHashMap<>(); + acl.put("resourceType", binding.pattern().resourceType().name()); + acl.put("resourceName", binding.pattern().name()); + acl.put("patternType", binding.pattern().patternType().name()); + acl.put("principal", binding.entry().principal()); + acl.put("host", binding.entry().host()); + acl.put("operation", binding.entry().operation().name()); + acl.put("permissionType", binding.entry().permissionType().name()); + acls.add(acl); + } + return Collections.singletonMap("acls", acls); + } + + private static Object createAcls(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + JsonArray aclsArray = params.has("acls") && params.get("acls").isJsonArray() + ? params.getAsJsonArray("acls") : new JsonArray(); + + List bindings = new ArrayList<>(); + for (JsonElement el : aclsArray) { + JsonObject acl = el.getAsJsonObject(); + ResourceType resourceType = ResourceType.valueOf(stringOrDefault(acl, "resourceType", "TOPIC")); + String resourceName = stringOrEmpty(acl, "resourceName"); + PatternType patternType = PatternType.valueOf(stringOrDefault(acl, "patternType", "LITERAL")); + String principal = stringOrEmpty(acl, "principal"); + String host = stringOrDefault(acl, "host", "*"); + AclOperation operation = AclOperation.valueOf(stringOrDefault(acl, "operation", "ALL")); + AclPermissionType permissionType = AclPermissionType.valueOf( + stringOrDefault(acl, "permissionType", "ALLOW")); + + ResourcePattern pattern = new ResourcePattern(resourceType, resourceName, patternType); + AccessControlEntry entry = new AccessControlEntry(principal, host, operation, permissionType); + bindings.add(new AclBinding(pattern, entry)); + } + + admin.createAcls(bindings).all().get(timeout, TimeUnit.MILLISECONDS); + return Collections.singletonMap("ok", true); + } + + private static Object deleteAcls(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + JsonArray filtersArray = params.has("filters") && params.get("filters").isJsonArray() + ? params.getAsJsonArray("filters") : new JsonArray(); + + List filters = new ArrayList<>(); + for (JsonElement el : filtersArray) { + filters.add(buildAclFilter(el.getAsJsonObject())); + } + if (filters.isEmpty()) { + filters.add(AclBindingFilter.ANY); + } + + Collection deletedBindings = admin.deleteAcls(filters).all().get(timeout, TimeUnit.MILLISECONDS); + int deleted = deletedAclCount(deletedBindings); + Map result = new LinkedHashMap<>(); + result.put("ok", true); + result.put("deleted", deleted); + return result; + } + + static int deletedAclCount(Collection deletedBindings) { + return deletedBindings == null ? 0 : deletedBindings.size(); + } + + private static AclBindingFilter buildAclFilter(JsonObject params) { + ResourceType resourceType = params.has("resourceType") + ? ResourceType.valueOf(params.get("resourceType").getAsString()) : ResourceType.ANY; + String resourceName = params.has("resourceName") && !params.get("resourceName").isJsonNull() + ? params.get("resourceName").getAsString() : null; + PatternType patternType = params.has("patternType") + ? PatternType.valueOf(params.get("patternType").getAsString()) : PatternType.ANY; + + ResourcePatternFilter patternFilter = new ResourcePatternFilter( + resourceType, resourceName, patternType); + + String principal = params.has("principal") && !params.get("principal").isJsonNull() + ? params.get("principal").getAsString() : null; + String host = params.has("host") && !params.get("host").isJsonNull() + ? params.get("host").getAsString() : null; + AclOperation operation = params.has("operation") + ? AclOperation.valueOf(params.get("operation").getAsString()) : AclOperation.ANY; + AclPermissionType permissionType = params.has("permissionType") + ? AclPermissionType.valueOf(params.get("permissionType").getAsString()) : AclPermissionType.ANY; + + AccessControlEntryFilter entryFilter = new AccessControlEntryFilter( + principal, host, operation, permissionType); + return new AclBindingFilter(patternFilter, entryFilter); + } + + // ----------------------------------------------------------------------- + // Cluster / monitoring + // ----------------------------------------------------------------------- + + private static Object describeCluster(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + + DescribeClusterResult cluster = admin.describeCluster(); + String clusterId = cluster.clusterId().get(timeout, TimeUnit.MILLISECONDS); + Node controller = cluster.controller().get(timeout, TimeUnit.MILLISECONDS); + Collection nodes = cluster.nodes().get(timeout, TimeUnit.MILLISECONDS); + + Map result = new LinkedHashMap<>(); + result.put("clusterId", clusterId); + result.put("controller", controller != null ? nodeToMap(controller) : null); + List> brokerList = new ArrayList<>(); + for (Node node : nodes) { + brokerList.add(nodeToMap(node)); + } + result.put("brokers", brokerList); + result.put("nodeCount", nodes.size()); + return result; + } + + private static Object getConsumerLag(JsonObject params) throws Exception { + AdminClient admin = requireAdmin(); + int timeout = requestTimeout(params); + String groupId = stringOrEmpty(params, "groupId"); + String topic = stringOrEmpty(params, "topic"); + + // Get committed offsets for the consumer group + Map committed = admin.listConsumerGroupOffsets(groupId) + .partitionsToOffsetAndMetadata().get(timeout, TimeUnit.MILLISECONDS); + + // Filter to the requested topic + Map topicCommitted = committed.entrySet().stream() + .filter(e -> e.getKey().topic().equals(topic)) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + if (topicCommitted.isEmpty()) { + return Collections.singletonMap("partitions", Collections.emptyList()); + } + + // Get end offsets + Map specMap = new HashMap<>(); + for (TopicPartition tp : topicCommitted.keySet()) { + specMap.put(tp, OffsetSpec.latest()); + } + Map endOffsets = + admin.listOffsets(specMap).all().get(timeout, TimeUnit.MILLISECONDS); + + List> partitions = new ArrayList<>(); + long totalLag = 0; + for (Map.Entry entry : topicCommitted.entrySet()) { + TopicPartition tp = entry.getKey(); + long currentOffset = entry.getValue().offset(); + ListOffsetsResult.ListOffsetsResultInfo endInfo = endOffsets.get(tp); + long endOffset = endInfo != null ? endInfo.offset() : -1; + long lag = endOffset >= 0 ? Math.max(0, endOffset - currentOffset) : -1; + totalLag += Math.max(0, lag); + + Map p = new LinkedHashMap<>(); + p.put("partition", tp.partition()); + p.put("currentOffset", currentOffset); + p.put("endOffset", endOffset); + p.put("lag", lag); + partitions.add(p); + } + partitions.sort(Comparator.comparingInt(a -> (int) a.get("partition"))); + + Map result = new LinkedHashMap<>(); + result.put("partitions", partitions); + result.put("totalLag", totalLag); + return result; + } + + // ----------------------------------------------------------------------- + // Helpers + // ----------------------------------------------------------------------- + + private static String normalizeErrorMessage(Exception e) { + String message = e.getMessage() == null || e.getMessage().isBlank() + ? e.getClass().getName() + : e.getMessage(); + Throwable root = rootCause(e); + if (root != e && root.getMessage() != null && !root.getMessage().isBlank() + && !message.contains(root.getMessage())) { + message = message + ": " + root.getMessage(); + } + if (isSslHandshakeError(e)) { + message = message + + ". Hint: SSL handshake failed. Check the Kafka security protocol. " + + "Use PLAINTEXT for a PLAINTEXT broker listener, SSL for SSL, " + + "SASL_PLAINTEXT for SASL without TLS, or SASL_SSL for SASL with TLS. " + + "For older Kafka/JDK TLS setups, also check truststore settings, certificates, " + + "hostname verification, and enabled TLS protocol versions."; + } + return message; + } + + private static boolean isSslHandshakeError(Throwable error) { + for (Throwable current : causeChain(error)) { + String className = current.getClass().getName(); + String message = current.getMessage() == null ? "" : current.getMessage().toLowerCase(Locale.ROOT); + if (className.contains("SslAuthenticationException") + || className.contains("SSLHandshakeException") + || message.contains("ssl handshake failed")) { + return true; + } + } + return false; + } + + private static boolean isUnsupportedVersionError(Throwable error) { + for (Throwable current : causeChain(error)) { + String className = current.getClass().getName(); + String message = current.getMessage() == null ? "" : current.getMessage().toLowerCase(Locale.ROOT); + if (className.contains("UnsupportedVersionException") + || message.contains("unsupported version")) { + return true; + } + } + return false; + } + + private static Throwable rootCause(Throwable error) { + Throwable current = null; + for (Throwable cause : causeChain(error)) { + current = cause; + } + return current == null ? error : current; + } + + private static List causeChain(Throwable error) { + List chain = new ArrayList<>(); + Set seen = Collections.newSetFromMap(new IdentityHashMap<>()); + Throwable current = error; + for (int depth = 0; current != null && depth < 32 && seen.add(current); depth++) { + chain.add(current); + Throwable next = current.getCause(); + if (next == current) { + break; + } + current = next; + } + return chain; + } + + private static AdminClient requireAdmin() { + if (adminClient == null) { + throw new IllegalStateException("Not connected. Call connect first."); + } + return adminClient; + } + + private static JsonObject connectionObject(JsonObject params) { + JsonElement connection = params.get("connection"); + return connection != null && connection.isJsonObject() + ? connection.getAsJsonObject() : params; + } + + private static int requestTimeout(JsonObject params) { + return intOrDefault(params, "timeout_ms", DEFAULT_REQUEST_TIMEOUT_MS); + } + + private static Map nodeToMap(Node node) { + Map m = new LinkedHashMap<>(); + m.put("id", node.id()); + m.put("host", node.host()); + m.put("port", node.port()); + m.put("rack", node.rack()); + return m; + } + + private static String tryDecodeUtf8(byte[] bytes) { + try { + String text = new String(bytes, StandardCharsets.UTF_8); + // Verify round-trip + byte[] reEncoded = text.getBytes(StandardCharsets.UTF_8); + if (Arrays.equals(bytes, reEncoded)) { + return text; + } + } catch (Exception ignored) {} + return null; + } + + static Long normalizePeekOffset(long requestedOffset, long beginningOffset, long endOffset) { + if (endOffset <= beginningOffset) { + return null; + } + if (requestedOffset < beginningOffset) { + return beginningOffset; + } + if (requestedOffset >= endOffset) { + return null; + } + return requestedOffset; + } + + private static String stringOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? null : element.getAsString(); + } + + private static String stringOrEmpty(JsonObject object, String key) { + return stringOrDefault(object, key, ""); + } + + private static String stringOrDefault(JsonObject object, String key, String fallback) { + String value = stringOrNull(object, key); + return value == null ? fallback : value; + } + + private static int intOrDefault(JsonObject object, String key, int fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsInt(); + } + + private static long longOrDefault(JsonObject object, String key, long fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsLong(); + } + + private static boolean boolOrDefault(JsonObject object, String key, boolean fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsBoolean(); + } + + // ----------------------------------------------------------------------- + // Inner types + // ----------------------------------------------------------------------- + + private static final class HandshakeResult { + private final int protocolVersion; + private final int agentProtocolVersion; + private final List capabilities; + + private HandshakeResult(int protocolVersion, int agentProtocolVersion, List capabilities) { + this.protocolVersion = protocolVersion; + this.agentProtocolVersion = agentProtocolVersion; + this.capabilities = capabilities; + } + } +} diff --git a/agents/drivers/kafka/src/test/java/com/dbx/agent/kafka/KafkaAgentTest.java b/agents/drivers/kafka/src/test/java/com/dbx/agent/kafka/KafkaAgentTest.java new file mode 100644 index 0000000..1b4ad46 --- /dev/null +++ b/agents/drivers/kafka/src/test/java/com/dbx/agent/kafka/KafkaAgentTest.java @@ -0,0 +1,141 @@ +package com.dbx.agent.kafka; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import com.google.gson.JsonParser; +import java.util.Map; +import java.util.Properties; +import org.junit.jupiter.api.Test; + +class KafkaAgentTest { + @Test + void normalizesPeekOffsetToEarliestAvailableOffset() { + assertEquals(5L, KafkaAgent.normalizePeekOffset(0, 5, 10)); + } + + @Test + void normalizesNegativePeekOffsetToEarliestAvailableOffset() { + assertEquals(0L, KafkaAgent.normalizePeekOffset(-1, 0, 10)); + } + + @Test + void keepsPeekOffsetWhenItIsWithinAvailableRange() { + assertEquals(7L, KafkaAgent.normalizePeekOffset(7, 5, 10)); + } + + @Test + void returnsNoSeekOffsetWhenRequestedOffsetIsAtOrAfterEnd() { + assertNull(KafkaAgent.normalizePeekOffset(10, 5, 10)); + } + + @Test + void returnsNoSeekOffsetWhenTopicHasNoReadableMessages() { + assertNull(KafkaAgent.normalizePeekOffset(0, 5, 5)); + } + + @Test + void appliesKerberosKafkaProperties() { + Properties props = new Properties(); + KafkaAgent.applyConnectionProperties(JsonParser.parseString(""" + { + "security_protocol": "SASL_SSL", + "sasl_mechanism": "GSSAPI", + "properties": { + "sasl.jaas.config": "com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab=\\"/tmp/user.keytab\\" principal=\\"user@EXAMPLE.COM\\";", + "sasl.kerberos.service.name": "kafka" + } + } + """).getAsJsonObject(), props); + + assertEquals("SASL_SSL", props.getProperty("security.protocol")); + assertEquals("GSSAPI", props.getProperty("sasl.mechanism")); + assertEquals("kafka", props.getProperty("sasl.kerberos.service.name")); + assertEquals( + "com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab=\"/tmp/user.keytab\" principal=\"user@EXAMPLE.COM\";", + props.getProperty("sasl.jaas.config") + ); + } + + @Test + void appliesAllowedKerberosSystemPropertiesFromConnectionProperties() { + Map previous = KafkaAgent.applyKerberosSystemProperties(JsonParser.parseString(""" + { + "properties": { + "java.security.krb5.conf": "/tmp/krb5.conf", + "sun.security.krb5.debug": "true", + "custom.system.property": "should-not-leak" + } + } + """).getAsJsonObject()); + try { + assertEquals("/tmp/krb5.conf", System.getProperty("java.security.krb5.conf")); + assertEquals("true", System.getProperty("sun.security.krb5.debug")); + assertNull(System.getProperty("custom.system.property")); + } finally { + KafkaAgent.restoreKerberosSystemProperties(previous); + } + } + + @Test + void clearsPreviousKerberosSystemPropertiesForNextConnection() { + String baseline = System.getProperty("java.security.krb5.conf"); + Map previous = KafkaAgent.applyKerberosSystemProperties(JsonParser.parseString(""" + { + "properties": { + "java.security.krb5.conf": "/tmp/cluster-a.krb5.conf" + } + } + """).getAsJsonObject()); + try { + assertEquals("/tmp/cluster-a.krb5.conf", System.getProperty("java.security.krb5.conf")); + + Map beforeSecondConnection = KafkaAgent.applyKerberosSystemProperties(JsonParser.parseString(""" + { + "properties": { + "sasl.kerberos.service.name": "kafka" + } + } + """).getAsJsonObject()); + try { + assertEquals(baseline, System.getProperty("java.security.krb5.conf")); + } finally { + KafkaAgent.restoreKerberosSystemProperties(beforeSecondConnection); + } + } finally { + KafkaAgent.restoreKerberosSystemProperties(previous); + } + } + + @Test + void restoresKerberosSystemPropertiesWhenTestConnectionClientConstructionFails() { + String previous = System.getProperty("java.security.krb5.conf"); + try { + String response = KafkaAgent.handleRequest(""" + { + "jsonrpc": "2.0", + "id": 42, + "method": "test_connection", + "params": { + "connection": { + "bootstrap_servers": "", + "properties": { + "java.security.krb5.conf": "/tmp/leaked-test-connection.krb5.conf" + } + } + } + } + """); + + assertEquals(-1, JsonParser.parseString(response).getAsJsonObject() + .getAsJsonObject("error").get("code").getAsInt()); + assertEquals(previous, System.getProperty("java.security.krb5.conf")); + } finally { + if (previous == null) { + System.clearProperty("java.security.krb5.conf"); + } else { + System.setProperty("java.security.krb5.conf", previous); + } + } + } +} diff --git a/agents/drivers/kingbase/build.gradle b/agents/drivers/kingbase/build.gradle new file mode 100644 index 0000000..7c9eef1 --- /dev/null +++ b/agents/drivers/kingbase/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'cn.com.kingbase:kingbase8:9.0.1.jre7' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': '人大金仓 KingbaseES', 'Main-Class': 'com.dbx.agent.kingbase.KingbaseAgent') + } +} diff --git a/agents/drivers/kingbase/libs/.gitkeep b/agents/drivers/kingbase/libs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java b/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java new file mode 100644 index 0000000..94b0d79 --- /dev/null +++ b/agents/drivers/kingbase/src/main/java/com/dbx/agent/kingbase/KingbaseAgent.java @@ -0,0 +1,839 @@ +package com.dbx.agent.kingbase; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.PostgresLikeAgent; +import com.dbx.agent.PostgresLikeAgentProfile; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class KingbaseAgent extends PostgresLikeAgent { + private static final int KINGBASE_VOID_TYPE_OID = 2278; + private static final String KINGBASE_REL_NAME = "CAST(c.relname AS varchar(256))"; + private static final String KINGBASE_REL_OID = "CAST(c.oid AS varchar(64))"; + private static final String KINGBASE_REL_NAMESPACE = "CAST(c.relnamespace AS varchar(64))"; + private static final String KINGBASE_SCHEMA_NAME = "CAST(n.nspname AS varchar(256))"; + private static final String KINGBASE_NAMESPACE_OID = "CAST(n.oid AS varchar(64))"; + private static final String KINGBASE_DESCRIPTION = "CAST(d.description AS varchar(4000))"; + private static final String KINGBASE_ROUTINE_NAME = "CAST(p.proname AS varchar(256))"; + private static final String KINGBASE_ROUTINE_OID = "CAST(p.oid AS varchar(64))"; + private static final String KINGBASE_ROUTINE_NAMESPACE = "CAST(p.pronamespace AS varchar(64))"; + private static final String KINGBASE_VIEW_NAME = "CAST(v.viewname AS varchar(256))"; + private static final String KINGBASE_VIEW_SCHEMA = "CAST(v.schemaname AS varchar(256))"; + private static final String KINGBASE_MATVIEW_NAME = "CAST(mv.matviewname AS varchar(256))"; + private static final String KINGBASE_MATVIEW_SCHEMA = "CAST(mv.schemaname AS varchar(256))"; + private boolean postgresCatalogMode; + + public static final PostgresLikeAgentProfile KINGBASE_PROFILE = new PostgresLikeAgentProfile( + "com.kingbase8.Driver", + "jdbc:kingbase8://{host}:{port}/{database}" + ); + + public KingbaseAgent() { + super(KINGBASE_PROFILE); + } + + @Override + protected void afterConnect(ConnectParams params, Connection connection) { + postgresCatalogMode = false; + if (params.isMysql_compat_mode()) { + setMysqlCompatMode(true); + return; + } + postgresCatalogMode = !catalogExists(connection, "sys_catalog.sys_namespace") + && catalogExists(connection, "pg_catalog.pg_namespace"); + } + + private static boolean catalogExists(Connection connection, String catalog) { + try (Statement stmt = connection.createStatement(); + ResultSet ignored = stmt.executeQuery("SELECT 1 FROM " + catalog + " WHERE 1 = 0")) { + return true; + } catch (Exception ignored) { + // Kingbase compatibility modes expose different catalog families. + return false; + } + } + + @Override + public List listDatabases() { + if (postgresCatalogMode) return super.listDatabases(); + return unchecked(() -> { + if (isMysqlCompatMode()) { + List result = queryDatabases("SELECT current_database() AS database_name"); + if (!result.isEmpty()) return result; + } + for (String sql : List.of( + "SELECT datname AS database_name FROM sys_catalog.sys_database WHERE datistemplate = false ORDER BY datname", + "SELECT datname AS database_name FROM pg_database WHERE datistemplate = false ORDER BY datname" + )) { + try { + List result = queryDatabases(sql); + if (!result.isEmpty()) return result; + } catch (Exception ignored) { + // Kingbase catalog names differ across compatibility modes and versions. + } + } + return Collections.singletonList(new DatabaseInfo(getConfiguredDatabase())); + }); + } + + private List queryDatabases(String sql) throws Exception { + try (PreparedStatement stmt = requireConnected().prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + List result = new ArrayList<>(); + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString("database_name"))); + } + return result; + } + } + + @Override + public List listSchemas() { + if (postgresCatalogMode) return super.listSchemas(); + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = isMysqlCompatMode() + ? "SELECT schema_name " + + "FROM information_schema.schemata " + + "WHERE UPPER(schema_name) <> 'INFORMATION_SCHEMA' " + + "AND UPPER(schema_name) NOT LIKE 'SYS%' " + + "AND UPPER(schema_name) NOT LIKE 'XLOG%' " + + "ORDER BY schema_name" + : "SELECT nspname AS schema_name " + + "FROM sys_namespace " + + "WHERE nspname NOT LIKE 'sys_temp_%' " + + "AND nspname NOT LIKE 'sys_toast_temp_%' " + + "ORDER BY nspname"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql); + ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(rs.getString("schema_name")); + } + } + return result; + }); + } + + @Override + public List listTables(String schema) { + if (postgresCatalogMode) return super.listTables(schema); + if (isMysqlCompatMode()) { + return listTables(schema, "table_type IN ('BASE TABLE', 'VIEW')"); + } + return queryRegularTables(schema, MetadataListConstraints.NONE); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + if (postgresCatalogMode) return super.listTables(schema, constraints); + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return isMysqlCompatMode() + ? queryMysqlCompatTables(schema, normalized) + : queryRegularTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryRegularTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + List branches = new ArrayList<>(); + addRegularRelationBranches(branches, args, effectiveSchema(schema), constraints, "table_name", "table_type", "table_comment"); + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT table_name, table_type, table_comment FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_tables ORDER BY table_name"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("table_name"), + normalizeTableType(rs.getString("table_type")), + rs.getString("table_comment") + )); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + private List queryMysqlCompatTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = ?"); + args.add(effectiveSchema(schema)); + appendMysqlCompatTableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "table_name", constraints); + sql.append(" ORDER BY table_name"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1), normalizeTableType(rs.getString(2)))); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + if (postgresCatalogMode) return super.listObjects(schema); + return unchecked(() -> { + String effectiveSchema = effectiveSchema(schema); + List result = new ArrayList<>(); + for (TableInfo table : listTables(effectiveSchema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), effectiveSchema, table.getComment())); + } + if (isMysqlCompatMode()) { + return result; + } + + String sql = "SELECT " + KINGBASE_ROUTINE_NAME + " AS routine_name, " + + "CASE WHEN p.prorettype = " + KINGBASE_VOID_TYPE_OID + " THEN 'PROCEDURE' ELSE 'FUNCTION' END AS routine_type, " + + KINGBASE_DESCRIPTION + " AS routine_comment " + + "FROM sys_catalog.sys_proc p " + + "JOIN sys_catalog.sys_namespace n ON " + KINGBASE_NAMESPACE_OID + " = " + KINGBASE_ROUTINE_NAMESPACE + " " + + "LEFT JOIN sys_catalog.sys_description d ON CAST(d.objoid AS varchar(64)) = " + KINGBASE_ROUTINE_OID + " AND d.objsubid = 0 " + + "WHERE " + KINGBASE_SCHEMA_NAME + " = " + sqlString(effectiveSchema) + " " + + "ORDER BY " + KINGBASE_ROUTINE_NAME; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo( + rs.getString("routine_name"), + rs.getString("routine_type"), + effectiveSchema, + rs.getString("routine_comment") + )); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + if (postgresCatalogMode) return super.listObjects(schema, constraints); + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return isMysqlCompatMode() + ? normalized.filterObjects(toObjects(queryMysqlCompatTables(schema, normalized), effectiveSchema(schema))) + : queryRegularObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryRegularObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + String effectiveSchema = effectiveSchema(schema); + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + addRegularRelationBranches(branches, args, effectiveSchema, constraints, "object_name", "object_type", "object_comment"); + } + if (constraints.objectTypeAllowed("PROCEDURE") || constraints.objectTypeAllowed("FUNCTION")) { + StringBuilder routineSql = new StringBuilder("SELECT ") + .append(KINGBASE_ROUTINE_NAME).append(" AS object_name, ") + .append("CASE WHEN p.prorettype = ").append(KINGBASE_VOID_TYPE_OID).append(" THEN 'PROCEDURE' ELSE 'FUNCTION' END AS object_type, ") + .append(KINGBASE_DESCRIPTION).append(" AS object_comment ") + .append("FROM sys_catalog.sys_proc p ") + .append("JOIN sys_catalog.sys_namespace n ON ").append(KINGBASE_NAMESPACE_OID).append(" = ").append(KINGBASE_ROUTINE_NAMESPACE).append(' ') + .append("LEFT JOIN sys_catalog.sys_description d ON CAST(d.objoid AS varchar(64)) = ").append(KINGBASE_ROUTINE_OID).append(" AND d.objsubid = 0 ") + .append("WHERE ").append(KINGBASE_SCHEMA_NAME).append(" = ").append(sqlString(effectiveSchema)); + appendRoutineKindPredicate(routineSql, args, constraints); + MetadataSqlSupport.appendNameFilter(routineSql, args, KINGBASE_ROUTINE_NAME, constraints); + branches.add(routineSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT object_name, object_type, object_comment FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY CASE object_type WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 WHEN 'MATERIALIZED_VIEW' THEN 2 WHEN 'FOREIGN_TABLE' THEN 3 WHEN 'PROCEDURE' THEN 4 WHEN 'FUNCTION' THEN 5 ELSE 9 END, object_name"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo( + rs.getString("object_name"), + rs.getString("object_type"), + effectiveSchema, + rs.getString("object_comment") + )); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + if (postgresCatalogMode) return super.getObjectSource(schema, name, objectType); + if ("FUNCTION".equalsIgnoreCase(objectType) || "PROCEDURE".equalsIgnoreCase(objectType)) { + return routineSource(schema, name, objectType); + } + if (!"VIEW".equalsIgnoreCase(objectType) && !"MATERIALIZED_VIEW".equalsIgnoreCase(objectType)) { + return new ObjectSource(name, objectType, effectiveSchema(schema), ""); + } + return unchecked(() -> { + String source = ""; + String sql = "SELECT view_definition " + + "FROM information_schema.views " + + "WHERE table_schema = " + sqlString(effectiveSchema(schema)) + + " AND table_name = " + sqlString(name); + if (!isMysqlCompatMode()) { + sql = "SELECT sys_get_viewdef(c.oid) AS view_definition " + + "FROM sys_catalog.sys_class c " + + "JOIN sys_catalog.sys_namespace n ON " + KINGBASE_NAMESPACE_OID + " = " + KINGBASE_REL_NAMESPACE + " " + + "WHERE " + KINGBASE_SCHEMA_NAME + " = " + sqlString(effectiveSchema(schema)) + + " AND " + KINGBASE_REL_NAME + " = " + sqlString(name) + + " LIMIT 1"; + } + try (Statement stmt = requireConnected().createStatement()) { + try (ResultSet rs = stmt.executeQuery(sql)) { + if (rs.next()) { + source = coalesce(rs.getString("view_definition")); + } + } + } + return new ObjectSource(name, objectType, effectiveSchema(schema), source); + }); + } + + private ObjectSource routineSource(String schema, String name, String objectType) { + return unchecked(() -> { + String source = ""; + String sql = "SELECT sys_get_functiondef(p.oid) AS source " + + "FROM sys_catalog.sys_proc p " + + "JOIN sys_catalog.sys_namespace n ON " + KINGBASE_NAMESPACE_OID + " = " + KINGBASE_ROUTINE_NAMESPACE + " " + + "WHERE " + KINGBASE_SCHEMA_NAME + " = " + sqlString(effectiveSchema(schema)) + + " AND " + KINGBASE_ROUTINE_NAME + " = " + sqlString(name) + " " + + "ORDER BY CASE WHEN p.prorettype = " + KINGBASE_VOID_TYPE_OID + " THEN " + + ("PROCEDURE".equalsIgnoreCase(objectType) ? "0 ELSE 1" : "1 ELSE 0") + + " END, p.oid LIMIT 1"; + try (PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + try (ResultSet rs = stmt.executeQuery()) { + if (rs.next()) { + source = coalesce(rs.getString("source")); + } + } + } + return new ObjectSource(name, objectType, effectiveSchema(schema), source); + }); + } + + @Override + public List getColumns(String schema, String table) { + if (postgresCatalogMode) return super.getColumns(schema, table); + return unchecked(() -> { + Set primaryKeys = primaryKeys(schema, table); + if (!isMysqlCompatMode()) { + return getRegularColumns(schema, table, primaryKeys); + } + return getInformationSchemaColumns(schema, table, primaryKeys); + }); + } + + private List getRegularColumns(String schema, String table, Set primaryKeys) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT a.attname AS column_name, " + + "format_type(a.atttypid, a.atttypmod) AS data_type, " + + "NOT a.attnotnull AS is_nullable, " + + "sys_get_expr(ad.adbin, ad.adrelid) AS column_default, " + + "d.description AS column_comment, " + + "CASE WHEN t.typname = 'numeric' AND a.atttypmod > 0 " + + "THEN ((a.atttypmod - 4) >> 16) & 65535 ELSE NULL END AS numeric_precision, " + + "CASE WHEN t.typname = 'numeric' AND a.atttypmod > 0 " + + "THEN (a.atttypmod - 4) & 65535 ELSE NULL END AS numeric_scale, " + + "CASE WHEN t.typname IN ('varchar', 'bpchar') AND a.atttypmod > 0 " + + "THEN a.atttypmod - 4 ELSE NULL END AS character_maximum_length " + + "FROM sys_catalog.sys_attribute a " + + "JOIN sys_catalog.sys_type t ON t.oid = a.atttypid " + + "JOIN sys_catalog.sys_class c ON c.oid = a.attrelid " + + "JOIN sys_catalog.sys_namespace n ON n.oid = c.relnamespace " + + "LEFT JOIN sys_catalog.sys_attrdef ad ON ad.adrelid = a.attrelid AND ad.adnum = a.attnum " + + "LEFT JOIN sys_catalog.sys_description d ON d.objoid = a.attrelid AND d.objsubid = a.attnum " + + "WHERE n.nspname = " + sqlString(effectiveSchema(schema)) + + " AND c.relname = " + sqlString(table) + " " + + "AND a.attnum > 0 AND NOT a.attisdropped " + + "ORDER BY a.attnum"; + try (Statement stmt = requireConnected().createStatement()) { + try (ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String columnName = rs.getString("column_name"); + result.add(new ColumnInfo( + columnName, + rs.getString("data_type"), + rs.getBoolean("is_nullable"), + rs.getString("column_default"), + primaryKeys.contains(columnName), + null, + rs.getString("column_comment"), + intObject(rs, "numeric_precision"), + intObject(rs, "numeric_scale"), + intObject(rs, "character_maximum_length") + )); + } + } + } + return result; + }); + } + + private List getInformationSchemaColumns(String schema, String table, Set primaryKeys) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT column_name, data_type, is_nullable, column_default, " + + "numeric_precision, numeric_scale, character_maximum_length " + + "FROM information_schema.columns " + + "WHERE table_schema = " + sqlString(effectiveSchema(schema)) + + " AND table_name = " + sqlString(table) + " " + + "ORDER BY ordinal_position"; + try (Statement stmt = requireConnected().createStatement()) { + try (ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String columnName = rs.getString("column_name"); + result.add(new ColumnInfo( + columnName, + rs.getString("data_type"), + "YES".equalsIgnoreCase(coalesce(rs.getString("is_nullable"))), + rs.getString("column_default"), + primaryKeys.contains(columnName), + null, + null, + intObject(rs, "numeric_precision"), + intObject(rs, "numeric_scale"), + intObject(rs, "character_maximum_length") + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + if (postgresCatalogMode) return super.listIndexes(schema, table); + return unchecked(() -> { + Map indexes = new LinkedHashMap<>(); + String sql = "SELECT i.relname AS index_name, am.amname AS index_type, " + + "ix.indisunique AS is_unique, ix.indisprimary AS is_primary, " + + "a.attname AS column_name, pos.n AS ordinal_position " + + "FROM SYS_CATALOG.SYS_INDEX ix " + + "JOIN SYS_CATALOG.SYS_CLASS t ON t.oid = ix.indrelid " + + "JOIN SYS_CATALOG.SYS_CLASS i ON i.oid = ix.indexrelid " + + "JOIN SYS_CATALOG.SYS_NAMESPACE n ON n.oid = t.relnamespace " + + "JOIN SYS_CATALOG.SYS_AM am ON am.oid = i.relam " + + "JOIN generate_series(1, 64) AS pos(n) ON pos.n <= array_length(string_to_array(ix.indkey::text, ' '), 1) " + + "JOIN SYS_CATALOG.SYS_ATTRIBUTE a ON a.attrelid = t.oid AND a.attnum = (string_to_array(ix.indkey::text, ' '))[pos.n]::int2 " + + "WHERE n.nspname = " + sqlString(effectiveSchema(schema)) + + " AND t.relname = " + sqlString(table) + " " + + "ORDER BY i.relname, pos.n"; + try (Statement stmt = requireConnected().createStatement()) { + try (ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String name = rs.getString("index_name"); + CatalogIndexBuilder builder = indexes.get(name); + if (builder == null) { + builder = new CatalogIndexBuilder( + name, + rs.getBoolean("is_unique"), + rs.getBoolean("is_primary"), + rs.getString("index_type") + ); + indexes.put(name, builder); + } + builder.columns.add(rs.getString("column_name")); + } + } + } + List result = new ArrayList<>(); + for (CatalogIndexBuilder index : indexes.values()) { + result.add(new IndexInfo(index.name, index.columns, index.unique, index.primary, null, index.indexType, null, null)); + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + if (postgresCatalogMode) return super.listForeignKeys(schema, table); + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT fk.constraint_name, fk.column_name, pk.table_name AS ref_table, pk.column_name AS ref_column " + + "FROM information_schema.table_constraints tc " + + "JOIN information_schema.key_column_usage fk " + + "ON fk.constraint_schema = tc.constraint_schema " + + "AND fk.constraint_name = tc.constraint_name " + + "AND fk.table_schema = tc.table_schema " + + "AND fk.table_name = tc.table_name " + + "JOIN information_schema.referential_constraints rc " + + "ON rc.constraint_schema = tc.constraint_schema " + + "AND rc.constraint_name = tc.constraint_name " + + "JOIN information_schema.key_column_usage pk " + + "ON pk.constraint_schema = rc.unique_constraint_schema " + + "AND pk.constraint_name = rc.unique_constraint_name " + + "AND pk.ordinal_position = fk.position_in_unique_constraint " + + "WHERE tc.table_schema = " + sqlString(effectiveSchema(schema)) + + " AND tc.table_name = " + sqlString(table) + " " + + "AND tc.constraint_type = 'FOREIGN KEY' " + + "ORDER BY fk.constraint_name, fk.ordinal_position"; + try (Statement stmt = requireConnected().createStatement()) { + try (ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString("constraint_name"), + rs.getString("column_name"), + rs.getString("ref_table"), + rs.getString("ref_column") + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + if (postgresCatalogMode) return super.listTriggers(schema, table); + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + if (postgresCatalogMode) return super.setSchemaSQL(schema); + // Kingbase searches sys_catalog implicitly before user schemas unless it + // is listed explicitly. Put it after the selected schema so business + // tables named like system tables (for example sys_config) win. + return "SET search_path TO " + JdbcIdentifiers.INSTANCE.doubleQuote(effectiveSchema(schema)) + ", sys_catalog"; + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType, String columnTypeName) { + if (isTemporalType(sqlType, columnTypeName)) { + return unchecked(() -> { + Object value = rs.getTimestamp(index); + return rs.wasNull() ? null : value.toString(); + }); + } + return super.resultValue(rs, index, sqlType, columnTypeName); + } + + private static boolean isTemporalType(int sqlType, String columnTypeName) { + switch (sqlType) { + case Types.DATE: + case Types.TIME: + case Types.TIME_WITH_TIMEZONE: + case Types.TIMESTAMP: + case Types.TIMESTAMP_WITH_TIMEZONE: + return true; + default: + break; + } + if (columnTypeName == null) { + return false; + } + String normalized = columnTypeName.trim().toLowerCase(Locale.ROOT); + return normalized.equals("date") + || normalized.equals("time") + || normalized.equals("datetime") + || normalized.startsWith("timestamp"); + } + + private Set primaryKeys(String schema, String table) { + return unchecked(() -> { + Set primaryKeys = new LinkedHashSet<>(); + String sql = "SELECT kcu.column_name " + + "FROM information_schema.table_constraints tc " + + "JOIN information_schema.key_column_usage kcu " + + "ON kcu.constraint_schema = tc.constraint_schema " + + "AND kcu.constraint_name = tc.constraint_name " + + "AND kcu.table_schema = tc.table_schema " + + "AND kcu.table_name = tc.table_name " + + "WHERE tc.table_schema = " + sqlString(effectiveSchema(schema)) + + " AND tc.table_name = " + sqlString(table) + " " + + "AND tc.constraint_type = 'PRIMARY KEY' " + + "ORDER BY kcu.ordinal_position"; + try (Statement stmt = requireConnected().createStatement()) { + try (ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + primaryKeys.add(rs.getString("column_name")); + } + } + } + return primaryKeys; + }); + } + + private List listTables(String schema, String tableTypePredicate) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT table_name, table_type " + + "FROM information_schema.tables " + + "WHERE table_schema = " + sqlString(effectiveSchema(schema)) + " AND " + tableTypePredicate + " " + + "ORDER BY table_name"; + try (Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1), normalizeTableType(rs.getString(2)))); + } + } + return result; + }); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() + || constraints.objectTypeAllowed("PROCEDURE") + || constraints.objectTypeAllowed("FUNCTION"); + } + + private static void addRegularRelationBranches( + List branches, + List args, + String schema, + MetadataListConstraints constraints, + String nameAlias, + String typeAlias, + String commentAlias + ) { + if (constraints.tableTypeAllowed("TABLE")) { + branches.add(regularRelationBranch(schema, args, constraints, nameAlias, typeAlias, commentAlias, "TABLE")); + } + if (constraints.tableTypeAllowed("VIEW")) { + branches.add(regularViewBranch(schema, args, constraints, nameAlias, typeAlias, commentAlias)); + } + if (constraints.tableTypeAllowed("MATERIALIZED_VIEW")) { + branches.add(regularMaterializedViewBranch(schema, args, constraints, nameAlias, typeAlias, commentAlias)); + } + } + + private static String regularRelationBranch( + String schema, + List args, + MetadataListConstraints constraints, + String nameAlias, + String typeAlias, + String commentAlias, + String objectType + ) { + StringBuilder sql = new StringBuilder("SELECT ") + .append(KINGBASE_REL_NAME).append(" AS ").append(nameAlias).append(", '") + .append(objectType).append("' AS ").append(typeAlias).append(", ") + .append(KINGBASE_DESCRIPTION).append(" AS ").append(commentAlias).append(' ') + .append("FROM sys_catalog.sys_class c ") + .append("JOIN sys_catalog.sys_namespace n ON ").append(KINGBASE_NAMESPACE_OID).append(" = ").append(KINGBASE_REL_NAMESPACE).append(' ') + .append("LEFT JOIN sys_catalog.sys_description d ON CAST(d.objoid AS varchar(64)) = ").append(KINGBASE_REL_OID).append(" AND d.objsubid = 0 ") + .append("WHERE ").append(KINGBASE_SCHEMA_NAME).append(" = ").append(sqlString(schema)); + appendRegularTablePredicate(sql); + MetadataSqlSupport.appendNameFilter(sql, args, KINGBASE_REL_NAME, constraints); + return sql.toString(); + } + + private static String regularViewBranch( + String schema, + List args, + MetadataListConstraints constraints, + String nameAlias, + String typeAlias, + String commentAlias + ) { + // sys_views/sys_matviews avoid relkind while preserving the sidebar's + // separate VIEW and MATERIALIZED_VIEW groups. + StringBuilder sql = new StringBuilder("SELECT ") + .append(KINGBASE_VIEW_NAME).append(" AS ").append(nameAlias).append(", 'VIEW' AS ").append(typeAlias).append(", ") + .append(KINGBASE_DESCRIPTION).append(" AS ").append(commentAlias).append(' ') + .append("FROM sys_catalog.sys_views v ") + .append("JOIN sys_catalog.sys_namespace n ON ").append(KINGBASE_SCHEMA_NAME).append(" = ").append(KINGBASE_VIEW_SCHEMA).append(' ') + .append("JOIN sys_catalog.sys_class c ON ").append(KINGBASE_REL_NAMESPACE).append(" = ").append(KINGBASE_NAMESPACE_OID) + .append(" AND ").append(KINGBASE_REL_NAME).append(" = ").append(KINGBASE_VIEW_NAME).append(' ') + .append("LEFT JOIN sys_catalog.sys_description d ON CAST(d.objoid AS varchar(64)) = ").append(KINGBASE_REL_OID).append(" AND d.objsubid = 0 ") + .append("WHERE ").append(KINGBASE_VIEW_SCHEMA).append(" = ").append(sqlString(schema)); + MetadataSqlSupport.appendNameFilter(sql, args, KINGBASE_VIEW_NAME, constraints); + return sql.toString(); + } + + private static String regularMaterializedViewBranch( + String schema, + List args, + MetadataListConstraints constraints, + String nameAlias, + String typeAlias, + String commentAlias + ) { + StringBuilder sql = new StringBuilder("SELECT ") + .append(KINGBASE_MATVIEW_NAME).append(" AS ").append(nameAlias).append(", 'MATERIALIZED_VIEW' AS ").append(typeAlias).append(", ") + .append(KINGBASE_DESCRIPTION).append(" AS ").append(commentAlias).append(' ') + .append("FROM sys_catalog.sys_matviews mv ") + .append("JOIN sys_catalog.sys_namespace n ON ").append(KINGBASE_SCHEMA_NAME).append(" = ").append(KINGBASE_MATVIEW_SCHEMA).append(' ') + .append("JOIN sys_catalog.sys_class c ON ").append(KINGBASE_REL_NAMESPACE).append(" = ").append(KINGBASE_NAMESPACE_OID) + .append(" AND ").append(KINGBASE_REL_NAME).append(" = ").append(KINGBASE_MATVIEW_NAME).append(' ') + .append("LEFT JOIN sys_catalog.sys_description d ON CAST(d.objoid AS varchar(64)) = ").append(KINGBASE_REL_OID).append(" AND d.objsubid = 0 ") + .append("WHERE ").append(KINGBASE_MATVIEW_SCHEMA).append(" = ").append(sqlString(schema)); + MetadataSqlSupport.appendNameFilter(sql, args, KINGBASE_MATVIEW_NAME, constraints); + return sql.toString(); + } + + private static void appendRegularTablePredicate(StringBuilder sql) { + sql.append(" AND NOT EXISTS (SELECT 1 FROM sys_catalog.sys_rewrite r ") + .append("WHERE CAST(r.ev_class AS varchar(64)) = ").append(KINGBASE_REL_OID) + .append(" AND CAST(r.rulename AS varchar(256)) = '_RETURN')") + .append(" AND NOT EXISTS (SELECT 1 FROM sys_catalog.sys_index ix ") + .append("WHERE CAST(ix.indexrelid AS varchar(64)) = ").append(KINGBASE_REL_OID).append(')') + .append(" AND NOT EXISTS (SELECT 1 FROM sys_catalog.sys_attribute sa1 ") + .append("JOIN sys_catalog.sys_attribute sa2 ON CAST(sa2.attrelid AS varchar(64)) = CAST(sa1.attrelid AS varchar(64)) ") + .append("WHERE CAST(sa1.attrelid AS varchar(64)) = ").append(KINGBASE_REL_OID) + .append(" AND CAST(sa1.attname AS varchar(256)) = 'last_value'") + .append(" AND CAST(sa2.attname AS varchar(256)) = 'log_cnt')"); + } + + private static void appendMysqlCompatTableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + sql.append(" AND table_type IN ('BASE TABLE', 'VIEW')"); + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND table_type IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static void appendRoutineKindPredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + boolean includeProcedures = constraints.objectTypeAllowed("PROCEDURE"); + boolean includeFunctions = constraints.objectTypeAllowed("FUNCTION"); + if (includeProcedures && includeFunctions) { + return; + } + if (!includeProcedures && !includeFunctions) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(includeProcedures + ? " AND p.prorettype = " + KINGBASE_VOID_TYPE_OID + : " AND p.prorettype <> " + KINGBASE_VOID_TYPE_OID); + } + + private static List toObjects(List tables, String schema) { + List result = new ArrayList<>(); + for (TableInfo table : tables) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + return result; + } + + private String effectiveSchema(String schema) { + if (schema != null && !schema.trim().isEmpty()) { + return schema; + } + return "PUBLIC"; + } + + private static Integer intObject(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static String normalizeTableType(String type) { + if (type == null || type.trim().isEmpty()) return "TABLE"; + if ("BASE TABLE".equalsIgnoreCase(type)) return "TABLE"; + return type; + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + private static String sqlString(String value) { + return "'" + coalesce(value).replace("'", "''") + "'"; + } + + private static final class CatalogIndexBuilder { + final String name; + final boolean unique; + final boolean primary; + final String indexType; + final List columns = new ArrayList<>(); + + CatalogIndexBuilder(String name, boolean unique, boolean primary, String indexType) { + this.name = name; + this.unique = unique; + this.primary = primary; + this.indexType = indexType; + } + } + + public static void main(String[] args) { + new JsonRpcServer(new KingbaseAgent()).run(); + } +} diff --git a/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java b/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java new file mode 100644 index 0000000..0e7a55b --- /dev/null +++ b/agents/drivers/kingbase/src/test/java/com/dbx/agent/kingbase/KingbaseAgentTest.java @@ -0,0 +1,603 @@ +package com.dbx.agent.kingbase; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +class KingbaseAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new KingbaseAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } + + @Test + void declaresKingbasePostgresLikeProfile() { + KingbaseAgent agent = new KingbaseAgent(); + + Assertions.assertEquals("com.kingbase8.Driver", agent.getProfile().getDriverClass()); + Assertions.assertEquals("jdbc:kingbase8://{host}:{port}/{database}", agent.getProfile().getUrlTemplate()); + } + + @Test + void schemaSwitchPlacesSysCatalogAfterSelectedSchema() { + KingbaseAgent agent = new KingbaseAgent(); + + Assertions.assertEquals("SET search_path TO \"app\", sys_catalog", agent.setSchemaSQL("app")); + Assertions.assertEquals("SET search_path TO \"app\"\"prod\", sys_catalog", agent.setSchemaSQL("app\"prod")); + } + + @Test + void mysqlCompatListDatabasesUsesCurrentDatabase() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + agent.setMysqlCompatMode(true); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"database_name"}, + new Object[][]{{"TEST"}} + ))); + + Assertions.assertEquals("TEST", agent.listDatabases().get(0).getName()); + Assertions.assertEquals("SELECT current_database() AS database_name", sql.get(0)); + } + + @Test + void regularListDatabasesUsesKingbaseCatalog() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"database_name"}, + new Object[][]{{"app"}, {"analytics"}} + ))); + + List databases = agent.listDatabases(); + Assertions.assertEquals(2, databases.size()); + Assertions.assertEquals("app", databases.get(0).getName()); + Assertions.assertEquals("analytics", databases.get(1).getName()); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_database"), sql.get(0)); + } + + @Test + void regularListDatabasesFallsBackToPostgresCatalog() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnectionWithFailure(sql, "sys_catalog.sys_database", resultSet( + new String[]{"database_name"}, + new Object[][]{{"test"}} + ))); + + List databases = agent.listDatabases(); + + Assertions.assertEquals(1, databases.size()); + Assertions.assertEquals("test", databases.get(0).getName()); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_database"), sql.get(0)); + Assertions.assertTrue(sql.get(1).contains("FROM pg_database"), sql.get(1)); + } + + @Test + void regularListSchemasKeepsKingbaseSystemSchemas() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"schema_name"}, + new Object[][]{{"public"}, {"sys_catalog"}} + ))); + + Assertions.assertEquals(Arrays.asList("public", "sys_catalog"), agent.listSchemas()); + Assertions.assertTrue(sql.get(0).contains("FROM sys_namespace"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("SYS%"), sql.get(0)); + } + + @Test + void postgresCompatModeUsesPostgresCatalogForMetadata() throws Exception { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + Connection connection = postgresCatalogConnection(sql, resultSet( + new String[]{"schema_name"}, + new Object[][]{{"public"}} + )); + + Method afterConnect = KingbaseAgent.class.getDeclaredMethod("afterConnect", ConnectParams.class, Connection.class); + afterConnect.setAccessible(true); + afterConnect.invoke(agent, new ConnectParams(), connection); + TestSupport.setPrivateConnection(agent, connection); + + Assertions.assertEquals(List.of("public"), agent.listSchemas()); + Assertions.assertEquals("SELECT 1 FROM sys_catalog.sys_namespace WHERE 1 = 0", sql.get(0)); + Assertions.assertEquals("SELECT 1 FROM pg_catalog.pg_namespace WHERE 1 = 0", sql.get(1)); + Assertions.assertTrue(sql.get(2).contains("FROM pg_catalog.pg_namespace"), sql.get(2)); + Assertions.assertEquals("SET search_path TO \"app\"", agent.setSchemaSQL("app")); + } + + @Test + void mysqlCompatListTablesUsesInformationSchema() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + agent.setMysqlCompatMode(true); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"table_name", "table_type"}, + new Object[][]{{"test_timestamps", "BASE TABLE"}} + ))); + + Assertions.assertEquals("test_timestamps", agent.listTables("PUBLIC").get(0).getName()); + Assertions.assertTrue(sql.get(0).contains("FROM information_schema.tables")); + Assertions.assertFalse(sql.get(0).contains("SHOW")); + } + + @Test + void regularListTablesUsesKingbaseCatalogAndIncludesViews() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"table_name", "table_type", "table_comment"}, + new Object[][]{{"app_table", "TABLE", "table comment"}, {"app_view", "VIEW", "view comment"}} + ))); + + List tables = agent.listTables("public"); + + Assertions.assertEquals(2, tables.size()); + Assertions.assertEquals("app_table", tables.get(0).getName()); + Assertions.assertEquals("TABLE", tables.get(0).getTable_type()); + Assertions.assertEquals("app_view", tables.get(1).getName()); + Assertions.assertEquals("VIEW", tables.get(1).getTable_type()); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_class"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_rewrite"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_index"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_views"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_matviews"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("relkind"), sql.get(0)); + } + + @Test + void regularListObjectsIncludesKingbaseViewsProceduresAndFunctions() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, + resultSet( + new String[]{"table_name", "table_type", "table_comment"}, + new Object[][]{{"app_table", "TABLE", null}, {"app_view", "VIEW", "view comment"}} + ), + resultSet( + new String[]{"routine_name", "routine_type", "routine_comment"}, + new Object[][]{{"refresh_stats", "PROCEDURE", "proc comment"}, {"format_name", "FUNCTION", "fn comment"}} + ) + )); + + List objects = agent.listObjects("public"); + + Assertions.assertEquals(4, objects.size()); + Assertions.assertEquals("app_table", objects.get(0).getName()); + Assertions.assertEquals("TABLE", objects.get(0).getObject_type()); + Assertions.assertEquals("app_view", objects.get(1).getName()); + Assertions.assertEquals("VIEW", objects.get(1).getObject_type()); + Assertions.assertEquals("refresh_stats", objects.get(2).getName()); + Assertions.assertEquals("PROCEDURE", objects.get(2).getObject_type()); + Assertions.assertEquals("format_name", objects.get(3).getName()); + Assertions.assertEquals("FUNCTION", objects.get(3).getObject_type()); + Assertions.assertTrue(sql.get(1).contains("FROM sys_catalog.sys_proc"), sql.get(1)); + Assertions.assertTrue(sql.get(1).contains("p.prorettype = 2278"), sql.get(1)); + Assertions.assertFalse(sql.get(1).contains("prokind"), sql.get(1)); + } + + @Test + void constrainedRegularTableMetadataPushesFilterTypesAndPaging() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"table_name", "table_type", "table_comment"}, + new Object[][]{} + ))); + + agent.listTables("public", new MetadataListConstraints("ord", 30, 60, List.of("TABLE", "VIEW"))); + + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_class"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_views"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UNION ALL"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(CAST(c.relname AS varchar(256))) LIKE ? ESCAPE '\\\\'"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("relkind"), sql.get(0)); + Assertions.assertTrue(sql.get(0).endsWith("LIMIT 30 OFFSET 60"), sql.get(0)); + } + + @Test + void constrainedRegularMaterializedViewMetadataUsesMatviewCatalog() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"table_name", "table_type", "table_comment"}, + new Object[][]{{"mv_sales", "MATERIALIZED_VIEW", "cached sales"}} + ))); + + List tables = agent.listTables("public", new MetadataListConstraints("sales", 10, null, List.of("MATERIALIZED_VIEW"))); + + Assertions.assertEquals(1, tables.size()); + Assertions.assertEquals("mv_sales", tables.get(0).getName()); + Assertions.assertEquals("MATERIALIZED_VIEW", tables.get(0).getTable_type()); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_matviews"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("FROM sys_catalog.sys_views"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(CAST(mv.matviewname AS varchar(256))) LIKE ? ESCAPE '\\\\'"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("relkind"), sql.get(0)); + } + + @Test + void constrainedRegularObjectMetadataPushesRoutineTypesAndPaging() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"object_name", "object_type", "object_comment"}, + new Object[][]{} + ))); + + agent.listObjects("public", new MetadataListConstraints("sync", 10, null, List.of("PROCEDURE", "FUNCTION"))); + + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_proc"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("p.prorettype = 2278"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("prokind"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("ORDER BY CASE object_type"), sql.get(0)); + Assertions.assertTrue(sql.get(0).endsWith("LIMIT 10"), sql.get(0)); + } + + @Test + void constrainedMysqlCompatTableMetadataPushesInformationSchemaPaging() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + agent.setMysqlCompatMode(true); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"table_name", "table_type"}, + new Object[][]{} + ))); + + agent.listTables("PUBLIC", new MetadataListConstraints("ord", 20, 40, List.of("VIEW"))); + + Assertions.assertTrue(sql.get(0).contains("FROM information_schema.tables"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("table_type IN (?)"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(table_name) LIKE ? ESCAPE '\\\\'"), sql.get(0)); + Assertions.assertTrue(sql.get(0).endsWith("LIMIT 20 OFFSET 40"), sql.get(0)); + } + + @Test + void regularRoutineSourceUsesKingbaseFunctionDefinition() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"source"}, + new Object[][]{{"CREATE FUNCTION public.format_name() RETURNS text AS $$ SELECT 'x'; $$"}} + ))); + + ObjectSource source = agent.getObjectSource("public", "format_name", "FUNCTION"); + + Assertions.assertTrue(source.getSource().startsWith("CREATE FUNCTION public.format_name()"), source.getSource()); + Assertions.assertTrue(sql.get(0).contains("SELECT sys_get_functiondef(p.oid) AS source"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("FROM sys_catalog.sys_proc"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("prokind"), sql.get(0)); + } + + @Test + void regularGetColumnsUsesFormattedCatalogTypes() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, + resultSet( + new String[]{"column_name"}, + new Object[][]{{"id"}} + ), + resultSet( + new String[]{ + "column_name", + "data_type", + "is_nullable", + "column_default", + "column_comment", + "numeric_precision", + "numeric_scale", + "character_maximum_length" + }, + new Object[][]{ + {"id", "integer", false, "nextval('orders_id_seq'::regclass)", "identifier", 32, 0, null}, + {"create_time", "timestamp with time zone", true, null, null, null, null, null}, + {"name", "character varying(64)", true, null, "display name", null, null, 64} + } + ) + )); + + List columns = agent.getColumns("public", "orders"); + + Assertions.assertEquals(3, columns.size()); + Assertions.assertEquals("integer", columns.get(0).getData_type()); + Assertions.assertTrue(columns.get(0).getIs_primary_key()); + Assertions.assertFalse(columns.get(0).getIs_nullable()); + Assertions.assertEquals("timestamp with time zone", columns.get(1).getData_type()); + Assertions.assertNotEquals("USER-DEFINED", columns.get(1).getData_type()); + Assertions.assertEquals(Integer.valueOf(64), columns.get(2).getCharacter_maximum_length()); + Assertions.assertTrue(sql.get(1).contains("format_type(a.atttypid, a.atttypmod) AS data_type"), sql.get(1)); + Assertions.assertTrue(sql.get(1).contains("FROM sys_catalog.sys_attribute"), sql.get(1)); + Assertions.assertFalse(sql.get(1).contains("information_schema.columns"), sql.get(1)); + } + + @Test + void mysqlCompatGetColumnsKeepsInformationSchemaPath() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + agent.setMysqlCompatMode(true); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, + resultSet( + new String[]{"column_name"}, + new Object[][]{{"id"}} + ), + resultSet( + new String[]{ + "column_name", + "data_type", + "is_nullable", + "column_default", + "numeric_precision", + "numeric_scale", + "character_maximum_length" + }, + new Object[][]{{"id", "int", "NO", null, 32, 0, null}} + ) + )); + + List columns = agent.getColumns("PUBLIC", "orders"); + + Assertions.assertEquals("int", columns.get(0).getData_type()); + Assertions.assertTrue(sql.get(1).contains("FROM information_schema.columns"), sql.get(1)); + } + + @Test + void regularListIndexesIncludesPrimaryUniqueAndSecondaryIndexes() { + List sql = new ArrayList<>(); + KingbaseAgent agent = new KingbaseAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"index_name", "index_type", "is_unique", "is_primary", "column_name", "ordinal_position"}, + new Object[][]{ + {"orders_pkey", "btree", true, true, "id", 1}, + {"idx_orders_created", "btree", false, false, "created", 1}, + {"idx_orders_name_created", "btree", false, false, "name", 1}, + {"idx_orders_name_created", "btree", false, false, "created", 2} + } + ))); + + List indexes = agent.listIndexes("public", "orders"); + + Assertions.assertEquals(3, indexes.size()); + Assertions.assertEquals("orders_pkey", indexes.get(0).getName()); + Assertions.assertEquals(Arrays.asList("id"), indexes.get(0).getColumns()); + Assertions.assertTrue(indexes.get(0).getIs_unique()); + Assertions.assertTrue(indexes.get(0).getIs_primary()); + Assertions.assertEquals("idx_orders_created", indexes.get(1).getName()); + Assertions.assertEquals(Arrays.asList("created"), indexes.get(1).getColumns()); + Assertions.assertFalse(indexes.get(1).getIs_unique()); + Assertions.assertFalse(indexes.get(1).getIs_primary()); + Assertions.assertEquals(Arrays.asList("name", "created"), indexes.get(2).getColumns()); + Assertions.assertTrue(sql.get(0).contains("FROM SYS_CATALOG.SYS_INDEX"), sql.get(0)); + Assertions.assertFalse(sql.get(0).contains("information_schema.table_constraints"), sql.get(0)); + } + + @Test + void mysqlCompatTimestampTypeNameIsReadAsTimestampText() throws Exception { + Timestamp timestamp = Timestamp.valueOf("2026-06-22 11:29:00"); + KingbaseAgent agent = new KingbaseAgent(); + agent.setMysqlCompatMode(true); + + Object value = readResultValue(agent, timestampResultSet(timestamp), Types.BINARY, "timestamp"); + + Assertions.assertEquals("2026-06-22 11:29:00.0", value); + } + + private static Connection preparedConnection(List sql, ResultSet rs) { + return preparedConnection(sql, new ResultSet[]{rs}); + } + + private static Connection preparedConnection(List sql, ResultSet... resultSets) { + int[] resultSetIndex = {0}; + PreparedStatement statement = proxy(PreparedStatement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + int current = Math.min(resultSetIndex[0], resultSets.length - 1); + resultSetIndex[0] += 1; + return resultSets[current]; + } + if ("setString".equals(method.getName())) { + return null; + } + if ("close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + Statement plainStatement = proxy(Statement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + int current = Math.min(resultSetIndex[0], resultSets.length - 1); + resultSetIndex[0] += 1; + return resultSets[current]; + } + if ("close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("prepareStatement".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return statement; + } + if ("createStatement".equals(method.getName())) { + return plainStatement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Connection preparedConnectionWithFailure(List sql, String failingSqlFragment, ResultSet fallback) { + return proxy(Connection.class, (method, args) -> { + if ("prepareStatement".equals(method.getName())) { + String preparedSql = String.valueOf(args[0]); + sql.add(preparedSql); + return proxy(PreparedStatement.class, (statementMethod, statementArgs) -> { + if ("executeQuery".equals(statementMethod.getName())) { + if (preparedSql.contains(failingSqlFragment)) { + throw new SQLException("relation does not exist: " + failingSqlFragment); + } + return fallback; + } + if ("close".equals(statementMethod.getName())) { + return null; + } + return defaultValue(statementMethod.getReturnType()); + }); + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Connection postgresCatalogConnection(List sql, ResultSet metadataResult) { + return proxy(Connection.class, (method, args) -> { + if ("createStatement".equals(method.getName())) { + return proxy(Statement.class, (statementMethod, statementArgs) -> { + if ("executeQuery".equals(statementMethod.getName())) { + String query = String.valueOf(statementArgs[0]); + sql.add(query); + if (query.contains("sys_catalog.sys_namespace")) { + throw new SQLException("relation does not exist: sys_catalog.sys_namespace"); + } + return resultSet(new String[]{"probe"}, new Object[][]{}); + } + return defaultValue(statementMethod.getReturnType()); + }); + } + if ("prepareStatement".equals(method.getName())) { + String query = String.valueOf(args[0]); + sql.add(query); + return proxy(PreparedStatement.class, (statementMethod, statementArgs) -> { + if ("executeQuery".equals(statementMethod.getName())) return metadataResult; + return defaultValue(statementMethod.getReturnType()); + }); + } + if ("isClosed".equals(method.getName())) return false; + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet resultSet(String[] columns, Object[][] rows) { + int[] index = {-1}; + return proxy(ResultSet.class, (method, args) -> { + switch (method.getName()) { + case "next": + index[0] += 1; + return index[0] < rows.length; + case "getString": + Object key = args[0]; + if (key instanceof Number) { + return rows[index[0]][((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return rows[index[0]][i]; + } + } + return null; + case "getBoolean": + Object booleanValue = columnValue(columns, rows[index[0]], args[0]); + if (booleanValue instanceof Boolean) return booleanValue; + if (booleanValue instanceof Number) return ((Number) booleanValue).intValue() != 0; + return Boolean.parseBoolean(String.valueOf(booleanValue)); + case "getObject": + return columnValue(columns, rows[index[0]], args[0]); + case "wasNull": + return false; + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static Object columnValue(String[] columns, Object[] row, Object key) { + if (key instanceof Number) { + return row[((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return row[i]; + } + } + return null; + } + + private static ResultSet timestampResultSet(Timestamp timestamp) { + return proxy(ResultSet.class, (method, args) -> { + switch (method.getName()) { + case "getTimestamp": + return timestamp; + case "getBytes": + throw new AssertionError("timestamp should not be read as bytes"); + case "wasNull": + return false; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = (Object unused, Method method, Object[] args) -> handler.handle(method, args); + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) return false; + if (Byte.TYPE.equals(type)) return (byte) 0; + if (Short.TYPE.equals(type)) return (short) 0; + if (Integer.TYPE.equals(type)) return 0; + if (Long.TYPE.equals(type)) return 0L; + if (Float.TYPE.equals(type)) return 0f; + if (Double.TYPE.equals(type)) return 0.0d; + if (Character.TYPE.equals(type)) return '\0'; + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } + + private static Object readResultValue(KingbaseAgent agent, ResultSet rs, int sqlType, String columnTypeName) throws Exception { + Method method = KingbaseAgent.class.getDeclaredMethod("resultValue", ResultSet.class, int.class, int.class, String.class); + method.setAccessible(true); + return method.invoke(agent, rs, 1, sqlType, columnTypeName); + } +} diff --git a/agents/drivers/kylin/build.gradle b/agents/drivers/kylin/build.gradle new file mode 100644 index 0000000..7ec3cd6 --- /dev/null +++ b/agents/drivers/kylin/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'org.apache.kylin:kylin-jdbc:5.0.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Apache Kylin', 'Main-Class': 'com.dbx.agent.kylin.KylinAgent') + } +} diff --git a/agents/drivers/kylin/src/main/java/com/dbx/agent/kylin/KylinAgent.java b/agents/drivers/kylin/src/main/java/com/dbx/agent/kylin/KylinAgent.java new file mode 100644 index 0000000..8af270c --- /dev/null +++ b/agents/drivers/kylin/src/main/java/com/dbx/agent/kylin/KylinAgent.java @@ -0,0 +1,144 @@ +package com.dbx.agent.kylin; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +public final class KylinAgent extends AbstractJdbcAgent { + + @Override + protected String driverClass() { + return "org.apache.kylin.jdbc.Driver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (ResultSet rs = requireConnected().getMetaData().getCatalogs()) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString("TABLE_CAT"))); + } + } + result.sort(Comparator.comparing(DatabaseInfo::getName)); + return result; + }); + } + + @Override + public List listSchemas() { + return Collections.emptyList(); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (ResultSet rs = requireConnected().getMetaData().getTables(null, schema, null, null)) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("TABLE_NAME"), + normalizeTableType(rs.getString("TABLE_TYPE")), + null + )); + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + return result; + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Set primaryKeys = new LinkedHashSet<>(); + try (ResultSet rs = requireConnected().getMetaData().getPrimaryKeys(null, schema, table)) { + while (rs.next()) { + primaryKeys.add(rs.getString("COLUMN_NAME")); + } + } + + List result = new ArrayList<>(); + try (ResultSet rs = requireConnected().getMetaData().getColumns(null, schema, table, null)) { + while (rs.next()) { + String colName = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + colName, + rs.getString("TYPE_NAME"), + "YES".equals(rs.getString("IS_NULLABLE")), + rs.getString("COLUMN_DEF"), + primaryKeys.contains(colName), + null, + emptyToNull(rs.getString("REMARKS")), + intOrNull(rs, "COLUMN_SIZE"), + intOrNull(rs, "DECIMAL_DIGITS"), + null + )); + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + return ""; + } + + private static String buildUrl(ConnectParams params) { + return "jdbc:kylin://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + } + + private static String normalizeTableType(String type) { + if ("BASE TABLE".equals(type)) { + return "TABLE"; + } + return type; + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static String emptyToNull(String value) { + return value == null || value.isEmpty() ? null : value; + } + + public static void main(String[] args) { + new JsonRpcServer(new KylinAgent()).run(); + } +} diff --git a/agents/drivers/kylin/src/test/java/com/dbx/agent/kylin/KylinAgentTest.java b/agents/drivers/kylin/src/test/java/com/dbx/agent/kylin/KylinAgentTest.java new file mode 100644 index 0000000..4c3e88b --- /dev/null +++ b/agents/drivers/kylin/src/test/java/com/dbx/agent/kylin/KylinAgentTest.java @@ -0,0 +1,16 @@ +package com.dbx.agent.kylin; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; + +class KylinAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new KylinAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } +} diff --git a/agents/drivers/mongodb/build.gradle b/agents/drivers/mongodb/build.gradle new file mode 100644 index 0000000..125b760 --- /dev/null +++ b/agents/drivers/mongodb/build.gradle @@ -0,0 +1,11 @@ +dependencies { + implementation project(':common') + implementation 'org.mongodb:mongodb-driver-sync:3.12.14' + implementation 'com.google.code.gson:gson:2.11.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'MongoDB (Legacy)', 'Main-Class': 'com.dbx.agent.mongodb.MongoAgent') + } +} diff --git a/agents/drivers/mongodb/src/main/java/com/dbx/agent/mongodb/MongoAgent.java b/agents/drivers/mongodb/src/main/java/com/dbx/agent/mongodb/MongoAgent.java new file mode 100644 index 0000000..b5b883f --- /dev/null +++ b/agents/drivers/mongodb/src/main/java/com/dbx/agent/mongodb/MongoAgent.java @@ -0,0 +1,927 @@ +package com.dbx.agent.mongodb; + +import com.dbx.agent.AgentProtocol; +import com.dbx.agent.IndexInfo; +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mongodb.ConnectionString; +import com.mongodb.MongoCredential; +import com.mongodb.MongoClientSettings; +import com.mongodb.ServerAddress; +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.model.UpdateOptions; +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.security.KeyFactory; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.SecureRandom; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.spec.PKCS8EncodedKeySpec; +import java.time.Instant; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import org.bson.Document; +import org.bson.json.JsonMode; +import org.bson.json.JsonWriterSettings; +import org.bson.types.ObjectId; + +public final class MongoAgent { + private static final Gson GSON = new Gson(); + private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ISO_INSTANT.withZone(ZoneOffset.UTC); + private static final long JS_MAX_SAFE_INTEGER = 9_007_199_254_740_991L; + private static final JsonWriterSettings EXTENDED_JSON_SETTINGS = JsonWriterSettings.builder() + .outputMode(JsonMode.RELAXED) + .build(); + private static MongoClient client; + + private MongoAgent() { + } + + private static String stringOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + return element == null || element instanceof JsonNull ? null : element.getAsString(); + } + + static Document documentOrNull(JsonObject object, String key) { + String json = stringOrNull(object, key); + return json == null || json.isBlank() ? null : Document.parse(json); + } + + static MongoClientSettings.Builder configureBuilder(JsonObject connObj) { + String host = connObj.has("host") ? connObj.get("host").getAsString() : "127.0.0.1"; + int port = connObj.has("port") ? connObj.get("port").getAsInt() : 27017; + String username = coalesce(stringOrNull(connObj, "username")); + String password = coalesce(stringOrNull(connObj, "password")); + String authDatabase = authenticationDatabase(connObj); + String connectionString = stringOrNull(connObj, "connection_string"); + boolean ssl = connObj.has("ssl") && !connObj.get("ssl").isJsonNull() && connObj.get("ssl").getAsBoolean(); + String caCertPath = stringOrNull(connObj, "ca_cert_path"); + String clientCertPath = firstNonBlank( + stringOrNull(connObj, "client_cert_path"), stringOrNull(connObj, "cert_path")); + String clientKeyPath = firstNonBlank( + stringOrNull(connObj, "client_key_path"), stringOrNull(connObj, "key_path")); + + if ((clientCertPath == null) != (clientKeyPath == null)) { + throw new IllegalArgumentException("Client certificate and key must be provided together"); + } + + MongoClientSettings.Builder builder = MongoClientSettings.builder(); + if (connectionString != null && !connectionString.isBlank()) { + builder.applyConnectionString(new ConnectionString(connectionString)); + } else { + builder.applyToClusterSettings( + settings -> settings.hosts(Collections.singletonList(new ServerAddress(host, port)))); + if (!username.isBlank()) { + builder.credential(MongoCredential.createCredential(username, authDatabase, password.toCharArray())); + } + } + + if (ssl) { + applyTlsSettings(builder, caCertPath, clientCertPath, clientKeyPath); + } + + return builder; + } + + private static Object connect(JsonObject params) { + JsonObject connObj = params.has("connection") && params.get("connection").isJsonObject() + ? params.getAsJsonObject("connection") + : params; + String database = defaultString(stringOrNull(connObj, "database"), "admin"); + + MongoClientSettings.Builder builder = configureBuilder(connObj); + + if (client != null) { + client.close(); + } + client = MongoClients.create(builder.build()); + client.getDatabase(database).runCommand(new Document("ping", 1)); + return Collections.singletonMap("ok", true); + } + + private static void applyTlsSettings(MongoClientSettings.Builder builder, + String caCertPath, String clientCertPath, String clientKeyPath) { + builder.applyToSslSettings(sslBuilder -> { + sslBuilder.enabled(true); + if (caCertPath != null && !caCertPath.isBlank() + || clientCertPath != null && !clientCertPath.isBlank()) { + try { + sslBuilder.context(createTlsSslContext(caCertPath, clientCertPath, clientKeyPath)); + } catch (Exception e) { + throw new RuntimeException("Failed to configure TLS: " + e.getMessage(), e); + } + } + }); + } + + static SSLContext createTlsSslContext(String caCertPath, String clientCertPath, String clientKeyPath) + throws Exception { + TrustManager[] trustManagers = null; + if (caCertPath != null && !caCertPath.isBlank()) { + trustManagers = loadTrustManagersFromPem(caCertPath); + } + + KeyManager[] keyManagers = null; + if (clientCertPath != null && !clientCertPath.isBlank() + && clientKeyPath != null && !clientKeyPath.isBlank()) { + keyManagers = loadKeyManagersFromPem(clientCertPath, clientKeyPath); + } + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(keyManagers, trustManagers, new SecureRandom()); + return ctx; + } + + static TrustManager[] loadTrustManagersFromPem(String caCertPath) throws Exception { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + trustStore.load(null, null); + int i = 0; + try (InputStream is = new FileInputStream(caCertPath)) { + for (Certificate cert : (Collection) cf.generateCertificates(is)) { + trustStore.setCertificateEntry("ca-" + i, cert); + i++; + } + } + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(trustStore); + return tmf.getTrustManagers(); + } + + static KeyManager[] loadKeyManagersFromPem(String certPath, String keyPath) throws Exception { + CertificateFactory cf = CertificateFactory.getInstance("X.509"); + Certificate cert; + try (InputStream is = new FileInputStream(certPath)) { + cert = cf.generateCertificate(is); + } + + PrivateKey key = loadPrivateKeyFromPem(keyPath); + + KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + keyStore.load(null, null); + keyStore.setCertificateEntry("client", cert); + keyStore.setKeyEntry("client", key, new char[0], new Certificate[] {cert}); + + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(keyStore, new char[0]); + return kmf.getKeyManagers(); + } + + static PrivateKey loadPrivateKeyFromPem(String keyPath) throws Exception { + String content = new String(Files.readAllBytes(Paths.get(keyPath)), StandardCharsets.UTF_8); + content = content.replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", "") + .replace("-----BEGIN RSA PRIVATE KEY-----", "") + .replace("-----END RSA PRIVATE KEY-----", "") + .replace("-----BEGIN EC PRIVATE KEY-----", "") + .replace("-----END EC PRIVATE KEY-----", ""); + byte[] keyBytes = Base64.getDecoder().decode(content.replaceAll("\\s", "")); + + // PKCS#8 (standard format, "-----BEGIN PRIVATE KEY-----") + try { + return KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(keyBytes)); + } catch (Exception e) { + // ignore — try next format + } + try { + return KeyFactory.getInstance("EC").generatePrivate(new PKCS8EncodedKeySpec(keyBytes)); + } catch (Exception e) { + // ignore — try next format + } + + // PKCS#1 RSA — add PKCS#8 AlgorithmIdentifier prefix + // The prefix is: SEQUENCE { INTEGER 0, SEQUENCE { OID 1.2.840.113549.1.1.1, NULL }, OCTET STRING } + try { + byte[] pkcs8Header = { + 0x30, (byte) 0x82, 0, 0, // SEQUENCE (length filled in below) + 0x02, 0x01, 0x00, // INTEGER 0 + 0x30, 0x0d, // SEQUENCE (AlgorithmIdentifier) + 0x06, 0x09, 0x2a, (byte) 0x86, 0x48, (byte) 0x86, (byte) 0xf7, 0x0d, 0x01, 0x01, 0x01, // OID 1.2.840.113549.1.1.1 + 0x05, 0x00, // NULL + 0x04 // OCTET STRING (length filled in below) + }; + int totalLen = pkcs8Header.length + keyBytes.length - 4; // subtract placeholder SEQUENCE length + pkcs8Header[2] = (byte) ((totalLen >> 8) & 0xff); + pkcs8Header[3] = (byte) (totalLen & 0xff); + // OCTET STRING length + int octetLen = keyBytes.length; + byte[] octetLenBytes; + if (octetLen < 128) { + octetLenBytes = new byte[] {(byte) octetLen}; + } else if (octetLen < 256) { + octetLenBytes = new byte[] {(byte) 0x81, (byte) octetLen}; + } else { + octetLenBytes = new byte[] {(byte) 0x82, (byte) (octetLen >> 8), (byte) (octetLen & 0xff)}; + } + byte[] pkcs8Key = new byte[pkcs8Header.length + octetLenBytes.length - 1 + keyBytes.length]; + int pos = 0; + System.arraycopy(pkcs8Header, 0, pkcs8Key, pos, pkcs8Header.length - 1); // exclude placeholder OCTET STRING length + pos += pkcs8Header.length - 1; + System.arraycopy(octetLenBytes, 0, pkcs8Key, pos, octetLenBytes.length); + pos += octetLenBytes.length; + System.arraycopy(keyBytes, 0, pkcs8Key, pos, keyBytes.length); + return KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(pkcs8Key)); + } catch (Exception e) { + throw new IllegalArgumentException( + "Unsupported private key format in " + keyPath + + ". Use PKCS#8 (-----BEGIN PRIVATE KEY-----) or PKCS#1 RSA (-----BEGIN RSA PRIVATE KEY-----).", + e); + } + } + + static String firstNonBlank(String... values) { + for (String value : values) { + if (value != null && !value.isBlank()) { + return value; + } + } + return null; + } + + static String authenticationDatabase(JsonObject connObj) { + String authSource = urlParam(stringOrNull(connObj, "url_params"), "authSource"); + if (authSource != null && !authSource.isBlank()) { + return authSource; + } + return "admin"; + } + + private static String urlParam(String urlParams, String key) { + if (urlParams == null || urlParams.isBlank()) { + return null; + } + String normalized = urlParams.startsWith("?") ? urlParams.substring(1) : urlParams; + for (String pair : normalized.split("&")) { + if (pair.isBlank()) continue; + String[] parts = pair.split("=", 2); + if (decode(parts[0]).equals(key)) { + return parts.length > 1 ? decode(parts[1]) : ""; + } + } + return null; + } + + private static String decode(String value) { + return URLDecoder.decode(value, StandardCharsets.UTF_8); + } + + private static Object listDatabases() { + MongoClient c = requireClient(); + List> result = new ArrayList<>(); + for (String name : c.listDatabaseNames()) { + result.add(Collections.singletonMap("name", name)); + } + return result; + } + + private static Object listCollections(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + List result = new ArrayList<>(); + for (String name : c.getDatabase(database).listCollectionNames()) { + result.add(name); + } + return result; + } + + private static Object listIndexes(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("table").getAsString(); + List result = new ArrayList<>(); + for (Document index : c.getDatabase(database).getCollection(collection).listIndexes()) { + result.add(indexInfoFromDocument(index)); + } + return result; + } + + static IndexInfo indexInfoFromDocument(Document index) { + Document keys = index.get("key") instanceof Document document ? document : new Document(); + String name = index.getString("name"); + if (name == null || name.isBlank()) { + List parts = new ArrayList<>(); + for (Map.Entry entry : keys.entrySet()) { + parts.add(entry.getKey() + "_" + String.valueOf(entry.getValue())); + } + name = String.join("_", parts); + } + + List columns = new ArrayList<>(keys.keySet()); + String indexType = null; + if (!keys.isEmpty()) { + List parts = new ArrayList<>(); + for (Map.Entry entry : keys.entrySet()) { + parts.add(entry.getKey() + ": " + String.valueOf(entry.getValue())); + } + indexType = String.join(", ", parts); + } + + Object unique = index.get("unique"); + Document filter = index.get("partialFilterExpression") instanceof Document document ? document : null; + return new IndexInfo( + name, + columns, + unique instanceof Boolean && (Boolean) unique, + "_id_".equals(name), + filter == null ? null : filter.toJson(), + indexType, + null, + null + ); + } + + private static Object findDocuments(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + long skip = params.has("skip") ? params.get("skip").getAsLong() : 0; + int limit = params.has("limit") ? params.get("limit").getAsInt() : 50; + Document filterDoc = documentOrNull(params, "filter"); + Document projectionDoc = documentOrNull(params, "projection"); + Document sortDoc = documentOrNull(params, "sort"); + + var col = c.getDatabase(database).getCollection(collection); + if (filterDoc == null) { + filterDoc = new Document(); + } + long total = col.countDocuments(filterDoc); + + var iterable = col.find(filterDoc).skip((int) skip).limit(limit); + if (projectionDoc != null) { + iterable = iterable.projection(projectionDoc); + } + if (sortDoc != null) { + iterable = iterable.sort(sortDoc); + } + + List> documents = new ArrayList<>(); + for (Document document : iterable) { + documents.add(bsonToJson(document)); + } + Map result = new LinkedHashMap<>(); + result.put("documents", documents); + result.put("total", total); + return result; + } + + /** + * MongoDB Extended JSON read path for transfer; output follows the driver's + * relaxed Extended JSON representation rather than the UI display format. + */ + private static Object findDocumentsExtendedJson(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + long skip = params.has("skip") ? params.get("skip").getAsLong() : 0; + int limit = params.has("limit") ? params.get("limit").getAsInt() : 50; + Document filterDoc = documentOrNull(params, "filter"); + Document projectionDoc = documentOrNull(params, "projection"); + Document sortDoc = documentOrNull(params, "sort"); + + var col = c.getDatabase(database).getCollection(collection); + if (filterDoc == null) { + filterDoc = new Document(); + } + long total = col.countDocuments(filterDoc); + + var iterable = col.find(filterDoc).skip((int) skip).limit(limit); + if (projectionDoc != null) { + iterable = iterable.projection(projectionDoc); + } + if (sortDoc != null) { + iterable = iterable.sort(sortDoc); + } + + List documents = new ArrayList<>(); + for (Document document : iterable) { + documents.add(bsonToExtendedJson(document)); + } + Map result = new LinkedHashMap<>(); + result.put("documents", documents); + result.put("total", total); + return result; + } + + private static Object serverVersion(JsonObject params) { + MongoClient c = requireClient(); + String database = defaultString(stringOrNull(params, "database"), "admin"); + Document buildInfo = c.getDatabase(database).runCommand(new Document("buildInfo", 1)); + return serverVersionFromBuildInfo(buildInfo); + } + + static String serverVersionFromBuildInfo(Document buildInfo) { + String version = buildInfo.getString("version"); + if (version == null || version.isBlank()) { + throw new IllegalStateException("MongoDB server version not found"); + } + return version; + } + + private static Object createIndex(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + Document keys = requiredDocument(params, "keys_json", "Index keys"); + if (keys.isEmpty()) { + throw new IllegalArgumentException("Index keys are required"); + } + + Document index = new Document("key", keys); + Document options = documentOrNull(params, "options_json"); + if (options != null) { + index.putAll(options); + } + String name = index.getString("name"); + if (name == null || name.isBlank()) { + name = defaultIndexName(keys); + index.put("name", name); + } + + c.getDatabase(database).runCommand( + new Document("createIndexes", collection) + .append("indexes", Collections.singletonList(index)) + ); + return Collections.singletonMap("name", name); + } + + private static Document requiredDocument(JsonObject params, String key, String label) { + Document document = documentOrNull(params, key); + if (document == null) { + throw new IllegalArgumentException(label + " are required"); + } + return document; + } + + private static String defaultIndexName(Document keys) { + List parts = new ArrayList<>(); + for (Map.Entry entry : keys.entrySet()) { + parts.add(entry.getKey() + "_" + String.valueOf(entry.getValue())); + } + return String.join("_", parts); + } + + private static Object dropIndexes(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + String indexesJson = stringOrNull(params, "indexes_json"); + boolean single = params.has("single") && !params.get("single").isJsonNull() && params.get("single").getAsBoolean(); + Object index = parseDropIndexesValue(indexesJson, single); + + List before = listIndexInfos(c, database, collection); + c.getDatabase(database).runCommand(new Document("dropIndexes", collection).append("index", index)); + List after = listIndexInfos(c, database, collection); + List droppedNames = diffDroppedIndexNames(before, after); + Map result = new LinkedHashMap<>(); + result.put("dropped_names", droppedNames); + result.put("affected_rows", droppedNames.size()); + return result; + } + + private static Object dropCollection(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + c.getDatabase(database).getCollection(collection).drop(); + return Collections.singletonMap("ok", true); + } + + private static Object parseDropIndexesValue(String indexesJson, boolean single) { + if (indexesJson == null || indexesJson.isBlank()) { + if (single) { + throw new IllegalArgumentException("dropIndex requires a string index name or JSON document"); + } + return "*"; + } + + JsonElement value = JsonParser.parseString(indexesJson); + if (value.isJsonPrimitive() && value.getAsJsonPrimitive().isString()) { + String name = value.getAsString(); + if (name.isBlank()) { + throw new IllegalArgumentException("Index name is required"); + } + if (single && "*".equals(name)) { + throw new IllegalArgumentException("dropIndex does not accept \"*\"; use dropIndexes() or dropIndexes(\"*\") instead"); + } + return name; + } + if (value.isJsonObject()) { + JsonObject object = value.getAsJsonObject(); + if (object.size() == 0) { + throw new IllegalArgumentException("Index specification is required"); + } + return Document.parse(indexesJson); + } + if (value.isJsonArray()) { + if (single) { + throw new IllegalArgumentException("dropIndex only accepts a string index name or JSON document; arrays are not supported"); + } + List names = new ArrayList<>(); + value.getAsJsonArray().forEach(item -> { + if (!item.isJsonPrimitive() || !item.getAsJsonPrimitive().isString() || item.getAsString().isBlank()) { + throw new IllegalArgumentException("dropIndexes only accepts arrays of string index names"); + } + names.add(item.getAsString()); + }); + if (names.isEmpty()) { + throw new IllegalArgumentException("dropIndexes only accepts non-empty string arrays"); + } + return names; + } + if (single) { + throw new IllegalArgumentException("dropIndex only accepts a string index name or JSON document"); + } + throw new IllegalArgumentException("dropIndexes only accepts a string index name, JSON document, or string array"); + } + + private static List listIndexInfos(MongoClient c, String database, String collection) { + List result = new ArrayList<>(); + for (Document index : c.getDatabase(database).getCollection(collection).listIndexes()) { + result.add(indexInfoFromDocument(index)); + } + return result; + } + + private static List diffDroppedIndexNames(List before, List after) { + Set remaining = new HashSet<>(); + for (IndexInfo index : after) { + remaining.add(index.getName()); + } + List droppedNames = new ArrayList<>(); + for (IndexInfo index : before) { + if (!remaining.contains(index.getName())) { + droppedNames.add(index.getName()); + } + } + return droppedNames; + } + + private static Object insertDocument(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + String docJson = params.get("doc_json").getAsString(); + + Document doc = Document.parse(docJson); + c.getDatabase(database).getCollection(collection).insertOne(doc); + Object insertedId = convertValue(doc.get("_id")); + return Collections.singletonMap("inserted_id", insertedId); + } + + private static Object parseId(String id) { + try { + return new ObjectId(id); + } catch (Exception e) { + return id; + } + } + + private static Object updateDocument(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + String id = params.get("id").getAsString(); + String docJson = params.get("doc_json").getAsString(); + + var col = c.getDatabase(database).getCollection(collection); + Document newDoc = documentForWrite(docJson); + var filter = new Document("_id", parseId(id)); + var result = isUpdateOperatorDocument(newDoc) + ? col.updateOne(filter, newDoc) + : col.replaceOne(filter, replacementDocument(newDoc)); + return Collections.singletonMap("modified_count", result.getModifiedCount()); + } + + private static Object updateDocuments(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + String filterJson = params.get("filter_json").getAsString(); + String updateJson = params.get("update_json").getAsString(); + boolean many = params.get("many").getAsBoolean(); + String optionsJson = params.has("options_json") && !params.get("options_json").isJsonNull() + ? params.get("options_json").getAsString() + : null; + + var col = c.getDatabase(database).getCollection(collection); + Document filter = documentForWrite(filterJson); + Document update = documentForWrite(updateJson); + requireBulkUpdateOperatorDocument(update); + UpdateOptions options = updateOptionsForWrite(optionsJson); + var result = many ? col.updateMany(filter, update, options) : col.updateOne(filter, update, options); + return Collections.singletonMap("modified_count", result.getModifiedCount()); + } + + static UpdateOptions updateOptionsForWrite(String optionsJson) { + UpdateOptions result = new UpdateOptions(); + if (optionsJson == null || optionsJson.trim().isEmpty()) { + return result; + } + Document options = Document.parse(optionsJson); + for (String key : options.keySet()) { + if (!"arrayFilters".equals(key)) { + throw new IllegalArgumentException("Unsupported update option: " + key); + } + } + Object rawFilters = options.get("arrayFilters"); + if (rawFilters == null) { + return result; + } + if (!(rawFilters instanceof List)) { + throw new IllegalArgumentException("arrayFilters must be an array"); + } + List filters = new ArrayList<>(); + for (Object filter : (List) rawFilters) { + if (!(filter instanceof Document)) { + throw new IllegalArgumentException("Each arrayFilters entry must be an object"); + } + filters.add((Document) filter); + } + return result.arrayFilters(filters); + } + + static Document documentForWrite(String docJson) { + Document doc = Document.parse(docJson); + convertMongoShellDates(doc); + return doc; + } + + private static Document replacementDocument(Document doc) { + Document replacement = new Document(doc); + replacement.remove("_id"); + return replacement; + } + + static boolean isUpdateOperatorDocument(Document doc) { + if (doc.isEmpty()) { + return false; + } + for (String key : doc.keySet()) { + if (!key.startsWith("$")) { + return false; + } + } + return true; + } + + static void requireBulkUpdateOperatorDocument(Document doc) { + if (!isUpdateOperatorDocument(doc)) { + // updateOne/updateMany are shell-style bulk updates here; replacements stay on the + // single-document save path so a broad filter cannot replace many documents by accident. + throw new IllegalArgumentException("Bulk update requires update operators such as $set"); + } + } + + private static Object deleteDocument(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + String id = params.get("id").getAsString(); + + var col = c.getDatabase(database).getCollection(collection); + var result = col.deleteOne(new Document("_id", parseId(id))); + return Collections.singletonMap("deleted_count", result.getDeletedCount()); + } + + private static Object deleteDocuments(JsonObject params) { + MongoClient c = requireClient(); + String database = params.get("database").getAsString(); + String collection = params.get("collection").getAsString(); + String filterJson = params.get("filter_json").getAsString(); + boolean many = params.get("many").getAsBoolean(); + + var col = c.getDatabase(database).getCollection(collection); + Document filter = documentForWrite(filterJson); + // Shell deleteOne/deleteMany use a filter document, unlike the row-view + // delete path which always targets a single _id. + var result = many ? col.deleteMany(filter) : col.deleteOne(filter); + return Collections.singletonMap("deleted_count", result.getDeletedCount()); + } + + private static Map bsonToJson(Document doc) { + Map result = new LinkedHashMap<>(); + for (Map.Entry entry : doc.entrySet()) { + result.put(entry.getKey(), convertValue(entry.getValue())); + } + return result; + } + + static JsonObject bsonToExtendedJson(Document doc) { + return JsonParser.parseString(doc.toJson(EXTENDED_JSON_SETTINGS)).getAsJsonObject(); + } + + static Object convertValue(Object value) { + if (value == null) { + return null; + } + if (value instanceof ObjectId objectId) { + return objectId.toHexString(); + } + if (value instanceof Document document) { + return bsonToJson(document); + } + if (value instanceof List values) { + List result = new ArrayList<>(); + for (Object item : values) { + result.add(convertValue(item)); + } + return result; + } + if (value instanceof java.util.Date date) { + Instant instant = Instant.ofEpochMilli(date.getTime()); + return "ISODate(\"" + DATE_FORMAT.format(instant) + "\")"; + } + if (value instanceof Long longValue) { + return longValue < -JS_MAX_SAFE_INTEGER || longValue > JS_MAX_SAFE_INTEGER ? longValue.toString() : longValue; + } + if (value instanceof Boolean || value instanceof Integer || value instanceof Double || value instanceof String) { + return value; + } + return value.toString(); + } + + @SuppressWarnings("unchecked") + private static Object convertMongoShellDates(Object value) { + if (value instanceof Document document) { + for (String key : new ArrayList<>(document.keySet())) { + document.put(key, convertMongoShellDates(document.get(key))); + } + return document; + } + if (value instanceof List values) { + List converted = (List) values; + for (int i = 0; i < converted.size(); i++) { + converted.set(i, convertMongoShellDates(converted.get(i))); + } + return converted; + } + if (value instanceof String text) { + Date date = parseMongoShellDate(text); + if (date == null) { + date = parseLegacyDateDisplay(text); + } + return date == null ? value : date; + } + return value; + } + + static Date parseMongoShellDate(String value) { + String trimmed = value.trim(); + String inner = null; + if (trimmed.startsWith("ISODate(") && trimmed.endsWith(")")) { + inner = trimmed.substring("ISODate(".length(), trimmed.length() - 1).trim(); + } else if (trimmed.startsWith("new Date(") && trimmed.endsWith(")")) { + inner = trimmed.substring("new Date(".length(), trimmed.length() - 1).trim(); + } + if (inner == null || inner.length() < 2) { + return null; + } + char quote = inner.charAt(0); + if ((quote != '"' && quote != '\'') || inner.charAt(inner.length() - 1) != quote) { + return null; + } + try { + Instant instant = Instant.parse(inner.substring(1, inner.length() - 1)); + return Date.from(instant); + } catch (Exception e) { + return null; + } + } + + static Date parseLegacyDateDisplay(String value) { + String trimmed = value.trim(); + if (!trimmed.matches("\\d{4}-\\d{2}-\\d{2}[ T]\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,3})?")) { + return null; + } + String normalized = trimmed.replace(' ', 'T'); + int dot = normalized.indexOf('.'); + if (dot < 0) { + normalized = normalized + ".000"; + } else { + int millisStart = dot + 1; + int millisEnd = normalized.length(); + normalized = normalized.substring(0, millisStart) + + String.format("%-3s", normalized.substring(millisStart, millisEnd)).replace(' ', '0'); + } + try { + return Date.from(Instant.parse(normalized + "Z")); + } catch (Exception e) { + return null; + } + } + + private static Object dispatch(String method, JsonObject params) { + return switch (method) { + case AgentProtocol.METHOD_HANDSHAKE -> AgentProtocol.handshakeResult(); + case AgentProtocol.METHOD_CONNECT -> connect(params); + case AgentProtocol.MONGO_METHOD_LIST_DATABASES -> listDatabases(); + case AgentProtocol.MONGO_METHOD_LIST_COLLECTIONS -> listCollections(params); + case AgentProtocol.METHOD_LIST_INDEXES -> listIndexes(params); + case AgentProtocol.MONGO_METHOD_FIND_DOCUMENTS -> findDocuments(params); + case AgentProtocol.MONGO_METHOD_FIND_DOCUMENTS_EXTENDED_JSON -> findDocumentsExtendedJson(params); + case AgentProtocol.MONGO_METHOD_SERVER_VERSION -> serverVersion(params); + case AgentProtocol.MONGO_METHOD_CREATE_INDEX -> createIndex(params); + case AgentProtocol.MONGO_METHOD_DROP_INDEXES -> dropIndexes(params); + case AgentProtocol.MONGO_METHOD_DROP_COLLECTION -> dropCollection(params); + case AgentProtocol.MONGO_METHOD_INSERT_DOCUMENT -> insertDocument(params); + case AgentProtocol.MONGO_METHOD_UPDATE_DOCUMENT -> updateDocument(params); + case AgentProtocol.MONGO_METHOD_UPDATE_DOCUMENTS -> updateDocuments(params); + case AgentProtocol.MONGO_METHOD_DELETE_DOCUMENT -> deleteDocument(params); + case AgentProtocol.MONGO_METHOD_DELETE_DOCUMENTS -> deleteDocuments(params); + case AgentProtocol.METHOD_DISCONNECT, AgentProtocol.METHOD_SHUTDOWN -> { + if (client != null) { + client.close(); + client = null; + } + if (AgentProtocol.METHOD_SHUTDOWN.equals(method)) { + System.exit(0); + } + yield Collections.singletonMap("ok", true); + } + default -> throw new IllegalArgumentException("Unknown method: " + method); + }; + } + + private static MongoClient requireClient() { + if (client == null) { + throw new IllegalStateException("Not connected"); + } + return client; + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + private static String defaultString(String value, String fallback) { + return value == null ? fallback : value; + } + + static String handleRequest(String line) { + JsonObject req = JsonParser.parseString(line).getAsJsonObject(); + JsonElement id = req.get("id"); + String method = req.get("method").getAsString(); + JsonObject params = req.has("params") && req.get("params").isJsonObject() + ? req.getAsJsonObject("params") + : new JsonObject(); + + JsonObject response = new JsonObject(); + response.addProperty("jsonrpc", "2.0"); + response.add("id", id); + + try { + Object result = dispatch(method, params); + response.add("result", GSON.toJsonTree(result)); + } catch (Exception e) { + JsonObject error = new JsonObject(); + error.addProperty("code", -1); + error.addProperty("message", e.getMessage() == null ? "Unknown error" : e.getMessage()); + response.add("error", error); + } + + return GSON.toJson(response); + } + + public static void main(String[] args) throws Exception { + System.out.println("{\"ready\":true}"); + System.out.flush(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + + System.out.println(handleRequest(line)); + System.out.flush(); + } + } +} diff --git a/agents/drivers/mongodb/src/test/java/com/dbx/agent/mongodb/MongoAgentTest.java b/agents/drivers/mongodb/src/test/java/com/dbx/agent/mongodb/MongoAgentTest.java new file mode 100644 index 0000000..a90406c --- /dev/null +++ b/agents/drivers/mongodb/src/test/java/com/dbx/agent/mongodb/MongoAgentTest.java @@ -0,0 +1,517 @@ +package com.dbx.agent.mongodb; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.dbx.agent.AgentProtocol; +import com.dbx.agent.IndexInfo; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.mongodb.MongoClientSettings; +import com.mongodb.client.model.UpdateOptions; +import java.io.FileInputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.util.Base64; +import java.util.Date; +import org.bson.Document; +import org.bson.types.ObjectId; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class MongoAgentTest { + @TempDir + static Path tempDir; + + private static Path caPemPath; + private static Path clientPemPath; + private static Path clientKeyPath; + + @BeforeAll + static void setUpCerts() throws Exception { + Path keystore = tempDir.resolve("keystore.jks"); + caPemPath = tempDir.resolve("ca.pem"); + clientPemPath = tempDir.resolve("client.pem"); + clientKeyPath = tempDir.resolve("client-key.pem"); + + // Generate a key pair in a JKS keystore using keytool + ProcessBuilder pb = new ProcessBuilder( + "keytool", "-genkeypair", "-alias", "test", "-keyalg", "RSA", "-keysize", "2048", + "-keystore", keystore.toString(), "-storepass", "pass123", "-keypass", "pass123", + "-dname", "CN=Test TLS Cert", "-validity", "365" + ); + pb.inheritIO(); + int rc = pb.start().waitFor(); + if (rc != 0) { + throw new RuntimeException("keytool -genkeypair failed with exit code " + rc); + } + + // Export the certificate as PEM (for ca_cert_path / client_cert_path) + for (Path pem : new Path[] {caPemPath, clientPemPath}) { + ProcessBuilder exportPb = new ProcessBuilder( + "keytool", "-exportcert", "-alias", "test", + "-keystore", keystore.toString(), "-storepass", "pass123", "-rfc" + ); + exportPb.redirectOutput(pem.toFile()); + exportPb.redirectError(ProcessBuilder.Redirect.INHERIT); + int exportRc = exportPb.start().waitFor(); + if (exportRc != 0) { + throw new RuntimeException("keytool -exportcert failed with exit code " + exportRc); + } + } + + // Extract the private key as PKCS#8 PEM + KeyStore ks = KeyStore.getInstance("JKS"); + try (FileInputStream fis = new FileInputStream(keystore.toFile())) { + ks.load(fis, "pass123".toCharArray()); + } + PrivateKey pk = (PrivateKey) ks.getKey("test", "pass123".toCharArray()); + String pkcs8Pem = "-----BEGIN PRIVATE KEY-----\n" + + Base64.getEncoder().encodeToString(pk.getEncoded()) + + "\n-----END PRIVATE KEY-----\n"; + Files.writeString(clientKeyPath, pkcs8Pem); + } + + // ─── existing tests ─── + + @Test + void exposesProtocolHandshakeOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":7,\"method\":\"handshake\"," + + "\"params\":{\"appVersion\":\"0.5.13\",\"supportedProtocolVersions\":[1]}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + JsonObject result = json.getAsJsonObject("result"); + assertEquals("2.0", json.get("jsonrpc").getAsString()); + assertEquals(7, json.get("id").getAsInt()); + assertEquals(AgentProtocol.PROTOCOL_VERSION, result.get("protocolVersion").getAsInt()); + assertEquals(AgentProtocol.PROTOCOL_VERSION, result.get("agentProtocolVersion").getAsInt()); + assertTrue(containsCapability(result.getAsJsonArray("capabilities"), AgentProtocol.CAPABILITY_CONNECT)); + assertTrue(containsCapability(result.getAsJsonArray("capabilities"), AgentProtocol.CAPABILITY_QUERY)); + assertTrue(containsCapability(result.getAsJsonArray("capabilities"), AgentProtocol.CAPABILITY_METADATA)); + } + + @Test + void listIndexesMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":8,\"method\":\"list_indexes\"," + + "\"params\":{\"database\":\"app\",\"schema\":\"\",\"table\":\"orders\"}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(8, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + } + + @Test + void parsesOptionalDocumentParameters() { + JsonObject params = new JsonObject(); + params.addProperty("projection", "{\"title\":1,\"_id\":0}"); + params.addProperty("filter", ""); + + Document projection = MongoAgent.documentOrNull(params, "projection"); + + assertNotNull(projection); + assertEquals(1, projection.get("title")); + assertEquals(0, projection.get("_id")); + assertEquals(null, MongoAgent.documentOrNull(params, "filter")); + assertEquals(null, MongoAgent.documentOrNull(params, "sort")); + } + + @Test + void documentParametersParseExtendedJsonLongFilters() { + JsonObject params = new JsonObject(); + params.addProperty("filter", "{\"processInfoId\":{\"$numberLong\":\"2048938405781032962\"},\"snowflake\":{\"$numberLong\":\"9007199254740993\"}}"); + + Document filter = MongoAgent.documentOrNull(params, "filter"); + + assertNotNull(filter); + assertEquals(2_048_938_405_781_032_962L, filter.get("processInfoId")); + assertEquals(9_007_199_254_740_993L, filter.get("snowflake")); + } + + @Test + void serverVersionMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":9,\"method\":\"server_version\"," + + "\"params\":{\"database\":\"admin\"}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(9, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + } + + @Test + void createIndexMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":12,\"method\":\"create_index\"," + + "\"params\":{\"database\":\"app\",\"collection\":\"orders\"," + + "\"keys_json\":\"{\\\"email\\\":1}\",\"options_json\":\"{\\\"name\\\":\\\"email_1\\\",\\\"background\\\":true}\"}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(12, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + assertTrue(AgentProtocol.MONGO_LEGACY_METHODS.contains(AgentProtocol.MONGO_METHOD_CREATE_INDEX)); + } + + @Test + void dropIndexesMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":13,\"method\":\"drop_indexes\"," + + "\"params\":{\"database\":\"app\",\"collection\":\"orders\"," + + "\"indexes_json\":\"\\\"email_1\\\"\",\"single\":true}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(13, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + assertTrue(AgentProtocol.MONGO_LEGACY_METHODS.contains(AgentProtocol.MONGO_METHOD_DROP_INDEXES)); + } + + @Test + void dropCollectionMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":14,\"method\":\"drop_collection\"," + + "\"params\":{\"database\":\"app\",\"collection\":\"orders\"}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(14, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + assertTrue(AgentProtocol.MONGO_LEGACY_METHODS.contains(AgentProtocol.MONGO_METHOD_DROP_COLLECTION)); + } + + @Test + void updateDocumentsMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":10,\"method\":\"update_documents\"," + + "\"params\":{\"database\":\"app\",\"collection\":\"orders\",\"filter_json\":\"{}\"," + + "\"update_json\":\"{\\\"$set\\\":{\\\"data\\\":null}}\",\"many\":true}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(10, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + } + + @Test + void parsesArrayFiltersUpdateOption() { + UpdateOptions options = MongoAgent.updateOptionsForWrite( + "{\"arrayFilters\":[{\"item.id\":322678}]}" + ); + + assertEquals(1, options.getArrayFilters().size()); + assertEquals(322678, ((Document) options.getArrayFilters().get(0)).getInteger("item.id")); + } + + @Test + void rejectsUnsupportedUpdateOptions() { + IllegalArgumentException error = assertThrows( + IllegalArgumentException.class, + () -> MongoAgent.updateOptionsForWrite("{\"upsert\":true}") + ); + assertEquals("Unsupported update option: upsert", error.getMessage()); + } + + @Test + void deleteDocumentsMethodIsRecognizedOverJsonRpc() { + String response = MongoAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":11,\"method\":\"delete_documents\"," + + "\"params\":{\"database\":\"app\",\"collection\":\"orders\"," + + "\"filter_json\":\"{\\\"status\\\":\\\"draft\\\"}\",\"many\":true}}"); + + JsonObject json = JsonParser.parseString(response).getAsJsonObject(); + assertEquals(11, json.get("id").getAsInt()); + assertEquals("Not connected", json.getAsJsonObject("error").get("message").getAsString()); + assertFalse(json.getAsJsonObject("error").get("message").getAsString().contains("Unknown method")); + assertTrue(AgentProtocol.MONGO_LEGACY_METHODS.contains(AgentProtocol.MONGO_METHOD_DELETE_DOCUMENTS)); + } + + @Test + void extractsServerVersionFromBuildInfo() { + assertEquals("4.4.29", MongoAgent.serverVersionFromBuildInfo(new Document("version", "4.4.29"))); + assertThrows(IllegalStateException.class, () -> MongoAgent.serverVersionFromBuildInfo(new Document("ok", 1))); + } + + @Test + void convertsMongoIndexDocumentToIndexInfo() { + Document index = new Document("name", "idx_user_status") + .append("key", new Document("user_id", 1).append("status", -1)) + .append("unique", true) + .append("partialFilterExpression", new Document("deleted", false)); + + IndexInfo info = MongoAgent.indexInfoFromDocument(index); + + assertEquals("idx_user_status", info.getName()); + assertEquals(java.util.List.of("user_id", "status"), info.getColumns()); + assertEquals(true, info.getIs_unique()); + assertEquals(false, info.getIs_primary()); + assertEquals("user_id: 1, status: -1", info.getIndex_type()); + assertTrue(info.getFilter().contains("\"deleted\"")); + } + + @Test + void usesAuthSourceFromUrlParamsAsAuthenticationDatabase() { + JsonObject connection = new JsonObject(); + connection.addProperty("database", "gray_lite_twin_fat"); + connection.addProperty("url_params", "authSource=admin&authMechanism=SCRAM-SHA-1"); + + assertEquals("admin", MongoAgent.authenticationDatabase(connection)); + } + + @Test + void fallsBackToAdminWhenAuthSourceIsMissing() { + JsonObject connection = new JsonObject(); + connection.addProperty("database", "gray_lite_twin_fat"); + + assertEquals("admin", MongoAgent.authenticationDatabase(connection)); + } + + // ─── TLS: configureBuilder JSON parsing ─── + + @Test + void sslTrueFromConnectionObject() { + JsonObject connection = minimalConnection(); + connection.addProperty("ssl", true); + + MongoClientSettings.Builder builder = MongoAgent.configureBuilder(connection); + + assertNotNull(builder); + } + + @Test + void sslFalseByDefault() { + JsonObject connection = minimalConnection(); + // ssl is not set — should default to false + + MongoClientSettings.Builder builder = MongoAgent.configureBuilder(connection); + + assertNotNull(builder); + } + + @Test + void sslTrueFromTopLevelParams() { + JsonObject connObj = minimalConnection(); + connObj.addProperty("ssl", true); + JsonObject params = new JsonObject(); + params.add("connection", connObj); + + // connect() unwraps the connection sub-object; verify configureBuilder reads ssl from it + JsonObject extracted = params.has("connection") && params.get("connection").isJsonObject() + ? params.getAsJsonObject("connection") + : params; + assertEquals(true, extracted.get("ssl").getAsBoolean()); + } + + @Test + void readsCaCertPathFromConnection() { + JsonObject connection = minimalConnection(); + connection.addProperty("ssl", true); + connection.addProperty("ca_cert_path", caPemPath.toString()); + + MongoClientSettings.Builder builder = MongoAgent.configureBuilder(connection); + + assertNotNull(builder); + } + + @Test + void readsClientCertAndKeyPathsFromConnection() { + JsonObject connection = minimalConnection(); + connection.addProperty("ssl", true); + connection.addProperty("client_cert_path", clientPemPath.toString()); + connection.addProperty("client_key_path", clientKeyPath.toString()); + + MongoClientSettings.Builder builder = MongoAgent.configureBuilder(connection); + + assertNotNull(builder); + } + + @Test + void certPathAndKeyPathFallbackNames() { + JsonObject connection = minimalConnection(); + connection.addProperty("ssl", true); + connection.addProperty("cert_path", clientPemPath.toString()); + connection.addProperty("key_path", clientKeyPath.toString()); + + // Should not throw — cert_path/key_path are fallback names for client_cert_path/client_key_path + MongoClientSettings.Builder builder = MongoAgent.configureBuilder(connection); + + assertNotNull(builder); + } + + @Test + void rejectsMismatchedClientCertAndKey() { + JsonObject connection = minimalConnection(); + connection.addProperty("ssl", true); + connection.addProperty("client_cert_path", clientPemPath.toString()); + // client_key_path is missing + + assertThrows(IllegalArgumentException.class, () -> MongoAgent.configureBuilder(connection)); + } + + // ─── TLS: SSLContext creation ─── + + @Test + void createsSslContextWithCaCert() throws Exception { + var ctx = MongoAgent.createTlsSslContext(caPemPath.toString(), null, null); + + assertNotNull(ctx); + } + + @Test + void createsSslContextWithClientCertAndKey() throws Exception { + var ctx = MongoAgent.createTlsSslContext(null, clientPemPath.toString(), clientKeyPath.toString()); + + assertNotNull(ctx); + } + + @Test + void createsSslContextWithAllCertPaths() throws Exception { + var ctx = MongoAgent.createTlsSslContext( + caPemPath.toString(), clientPemPath.toString(), clientKeyPath.toString()); + + assertNotNull(ctx); + } + + // ─── TLS: trust manager loading ─── + + @Test + void loadsTrustManagersFromPemFile() throws Exception { + var trustManagers = MongoAgent.loadTrustManagersFromPem(caPemPath.toString()); + + assertNotNull(trustManagers); + assertTrue(trustManagers.length > 0); + } + + // ─── TLS: key manager loading ─── + + @Test + void loadsKeyManagersFromPemFiles() throws Exception { + var keyManagers = MongoAgent.loadKeyManagersFromPem( + clientPemPath.toString(), clientKeyPath.toString()); + + assertNotNull(keyManagers); + assertTrue(keyManagers.length > 0); + } + + // ─── TLS: private key format support ─── + + @Test + void loadsPkcs8PrivateKeyFromPem() throws Exception { + var key = MongoAgent.loadPrivateKeyFromPem(clientKeyPath.toString()); + + assertNotNull(key); + assertEquals("RSA", key.getAlgorithm()); + } + + // ─── utility ─── + + @Test + void firstNonBlankReturnsFirstNonBlankValue() { + assertEquals("b", MongoAgent.firstNonBlank(null, "", "b", "c")); + assertEquals("a", MongoAgent.firstNonBlank("a", "b")); + } + + @Test + void firstNonBlankReturnsNullWhenAllBlank() { + assertEquals(null, MongoAgent.firstNonBlank(null, "", " ")); + } + + @Test + void convertValuePreservesUnsafeLongForJsonClients() { + assertEquals("2326645729978441729", MongoAgent.convertValue(2_326_645_729_978_441_729L)); + assertEquals("-2326645729978441729", MongoAgent.convertValue(-2_326_645_729_978_441_729L)); + } + + @Test + void convertValueKeepsSafeLongAsNumber() { + assertEquals(42L, MongoAgent.convertValue(42L)); + } + + @Test + void convertValueFormatsDatesAsMongoShellIsoDate() { + assertEquals("ISODate(\"2026-06-10T13:59:31.287Z\")", MongoAgent.convertValue(Date.from(java.time.Instant.parse("2026-06-10T13:59:31.287Z")))); + } + + @Test + void convertValueKeepsObjectIdAsStringByDefault() { + assertEquals( + "507f1f77bcf86cd799439011", + MongoAgent.convertValue(new ObjectId("507f1f77bcf86cd799439011")) + ); + } + + @Test + void bsonToExtendedJsonUsesMongoExtendedJson() { + Document doc = new Document("_id", new ObjectId("507f1f77bcf86cd799439011")) + .append("created_at", Date.from(java.time.Instant.parse("2026-06-10T13:59:31.287Z"))); + + assertEquals( + "{\"_id\":{\"$oid\":\"507f1f77bcf86cd799439011\"},\"created_at\":{\"$date\":\"2026-06-10T13:59:31.287Z\"}}", + new com.google.gson.Gson().toJson(MongoAgent.bsonToExtendedJson(doc)) + ); + } + + @Test + void documentForWriteParsesMongoShellIsoDateStrings() { + Document doc = MongoAgent.documentForWrite("{\"$set\":{\"CreateDate\":\"ISODate(\\\"2026-06-10T13:59:31.287Z\\\")\"}}"); + + assertTrue(MongoAgent.isUpdateOperatorDocument(doc)); + Document set = (Document) doc.get("$set"); + assertTrue(set.get("CreateDate") instanceof Date); + } + + @Test + void documentForWriteParsesNestedMongoShellIsoDateStrings() { + Document doc = MongoAgent.documentForWrite("{\"items\":[{\"created\":\"new Date(\\\"2026-06-10T13:59:31.287Z\\\")\"}]}"); + + assertTrue(((Document) ((java.util.List) doc.get("items")).get(0)).get("created") instanceof Date); + } + + @Test + void documentForWriteParsesLegacyDateDisplayStrings() { + Document doc = MongoAgent.documentForWrite("{\"$set\":{\"CreateDate\":\"2025-08-14 02:25:43.718\"}}"); + + Document set = (Document) doc.get("$set"); + assertTrue(set.get("CreateDate") instanceof Date); + assertEquals(1_755_138_343_718L, ((Date) set.get("CreateDate")).getTime()); + } + + @Test + void bulkUpdateRequiresOperatorDocument() { + Document update = MongoAgent.documentForWrite("{\"$set\":{\"data\":null}}"); + MongoAgent.requireBulkUpdateOperatorDocument(update); + + assertThrows( + IllegalArgumentException.class, + () -> MongoAgent.requireBulkUpdateOperatorDocument(MongoAgent.documentForWrite("{\"data\":null}")) + ); + } + + // ─── helpers ─── + + private static JsonObject minimalConnection() { + JsonObject conn = new JsonObject(); + conn.addProperty("host", "127.0.0.1"); + conn.addProperty("port", 27017); + return conn; + } + + private static boolean containsCapability(JsonArray capabilities, String expected) { + for (int i = 0; i < capabilities.size(); i++) { + if (expected.equals(capabilities.get(i).getAsString())) { + return true; + } + } + return false; + } +} diff --git a/agents/drivers/neo4j/build.gradle b/agents/drivers/neo4j/build.gradle new file mode 100644 index 0000000..232f595 --- /dev/null +++ b/agents/drivers/neo4j/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'org.neo4j:neo4j-jdbc-full-bundle:6.10.0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Neo4j', 'Main-Class': 'com.dbx.agent.neo4j.Neo4jAgent') + } +} diff --git a/agents/drivers/neo4j/src/main/java/com/dbx/agent/neo4j/Neo4jAgent.java b/agents/drivers/neo4j/src/main/java/com/dbx/agent/neo4j/Neo4jAgent.java new file mode 100644 index 0000000..9447b38 --- /dev/null +++ b/agents/drivers/neo4j/src/main/java/com/dbx/agent/neo4j/Neo4jAgent.java @@ -0,0 +1,350 @@ +package com.dbx.agent.neo4j; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TransactionExecutor; +import com.dbx.agent.TriggerInfo; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +public class Neo4jAgent extends BaseDatabaseAgent { + private Connection connection; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public String setSchemaSQL(String schema) { + return ""; + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + Class.forName("org.neo4j.jdbc.Neo4jDriver"); + String url = buildNeo4jUrl(params); + connection = DriverManager.getConnection(url, params.getUsername(), params.getPassword()); + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + Class.forName("org.neo4j.jdbc.Neo4jDriver"); + String url = buildNeo4jUrl(params); + try (Connection conn = DriverManager.getConnection(url, params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + } + + private static String buildNeo4jUrl(ConnectParams params) { + StringBuilder url = new StringBuilder(); + url.append("jdbc:neo4j://").append(params.getHost()).append(":").append(params.getPort()); + String database = params.getDatabase(); + if (database != null && !database.trim().isEmpty()) { + url.append("?database=").append(database.trim()); + } + return url.toString(); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + Connection conn = requireConnected(); + List result = new ArrayList<>(); + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString("name"))); + } + } + result.sort(Comparator.comparing(DatabaseInfo::getName)); + return result; + }); + } + + @Override + public List listSchemas() { + return Collections.emptyList(); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + Connection conn = requireConnected(); + // Try JDBC metadata first — the driver handles version compatibility. + List result = new ArrayList<>(); + DatabaseMetaData meta = conn.getMetaData(); + try (ResultSet rs = meta.getTables(null, blankToNull(schema), "%", new String[]{"TABLE", "VIEW"})) { + while (rs.next()) { + String name = rs.getString("TABLE_NAME"); + String type = rs.getString("TABLE_TYPE"); + String comment = getStringOrNull(rs, "REMARKS"); + if (name != null && !name.isEmpty()) { + result.add(new TableInfo(name, type, comment)); + } + } + } catch (Exception ignored) { + // Fall through to Cypher fallback + } + // Fallback: use Cypher for drivers that don't implement getTables(). + if (result.isEmpty()) { + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("CALL db.labels()")) { + while (rs.next()) { + String label = getStringOrDefault(rs, "label", ""); + if (label.isEmpty()) { + label = rs.getString(1); + } + if (label != null && !label.isEmpty()) { + result.add(new TableInfo(label, "TABLE", null)); + } + } + } catch (Exception ignored) { + // Cypher fallback also failed + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + return result; + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Connection conn = requireConnected(); + List result = new ArrayList<>(); + // Try JDBC metadata first. + DatabaseMetaData meta = conn.getMetaData(); + Set primaryKeys = new LinkedHashSet<>(); + try (ResultSet rs = meta.getPrimaryKeys(null, blankToNull(schema), table)) { + while (rs.next()) { + String pkColumn = rs.getString("COLUMN_NAME"); + if (pkColumn != null) { + primaryKeys.add(pkColumn); + } + } + } catch (Exception ignored) { + // Fall through + } + try (ResultSet rs = meta.getColumns(null, blankToNull(schema), table, "%")) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + if (name == null || name.isEmpty()) { + continue; + } + String type = rs.getString("TYPE_NAME"); + if (type == null) { + type = "Unknown"; + } + boolean nullable = true; + try { + nullable = "YES".equals(rs.getString("IS_NULLABLE")); + } catch (Exception ignored) { + // keep default + } + String defaultValue = getStringOrNull(rs, "COLUMN_DEF"); + String comment = getStringOrNull(rs, "REMARKS"); + result.add(new ColumnInfo( + name, type, nullable, defaultValue, + primaryKeys.contains(name), + comment, null, null, null, null + )); + } + } catch (Exception ignored) { + // Fall through to Cypher fallback + } + // Fallback: use Cypher for drivers that don't implement getColumns(). + if (result.isEmpty()) { + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("CALL db.schema.nodeTypeProperties()")) { + while (rs.next()) { + String nodeLabels = rs.getString("nodeLabels"); + if (nodeLabels == null) { + nodeLabels = ""; + } + if (!nodeLabels.contains(table)) { + continue; + } + String propertyName = rs.getString("propertyName"); + if (propertyName == null) { + continue; + } + String propertyTypes = rs.getString("propertyTypes"); + if (propertyTypes == null) { + propertyTypes = "Unknown"; + } + boolean isNullable; + try { + isNullable = !rs.getBoolean("mandatory"); + } catch (Exception ignored) { + isNullable = true; + } + result.add(new ColumnInfo( + propertyName, propertyTypes, isNullable, + null, false, null, null, null, null, null + )); + } + } catch (Exception ignored) { + // Cypher fallback also failed + } + } + result.sort(Comparator.comparing(ColumnInfo::getName)); + return result; + }); + } + + private static String blankToNull(String value) { + if (value == null) return null; + String trimmed = value.trim(); + return trimmed.isEmpty() ? null : trimmed; + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + Connection conn = requireConnected(); + List result = new ArrayList<>(); + try (Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery("SHOW INDEXES")) { + while (rs.next()) { + String labelsOrTypes = getStringOrDefault(rs, "labelsOrTypes", ""); + if (!labelsOrTypes.contains(table)) { + continue; + } + + String properties = getStringOrDefault(rs, "properties", ""); + String uniqueness = getStringOrDefault(rs, "uniqueness", ""); + result.add(new IndexInfo( + getStringOrDefault(rs, "name", ""), + parseProperties(properties), + "UNIQUE".equals(uniqueness.toUpperCase(Locale.ROOT)), + false, + null, + getStringOrNull(rs, "type"), + null, + null + )); + } + } + result.sort(Comparator.comparing(IndexInfo::getName)); + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public QueryResult executeTransaction(List statements, String schema) { + return TransactionExecutor.executeStatements(requireConnected(), statements, schema, this::setSchemaSQL, (stmt, sql) -> { + stmt.execute(sql); + return Math.max(stmt.getUpdateCount(), 0); + }); + } + + public QueryResult executeQuery(String sql, String schema) { + return executeQuery(sql, schema, new ExecuteQueryOptions()); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::stringResultValue + ); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private Object stringResultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + private static List parseProperties(String properties) { + String trimmed = properties; + if (trimmed.startsWith("[") && trimmed.endsWith("]") && trimmed.length() >= 2) { + trimmed = trimmed.substring(1, trimmed.length() - 1); + } + + List result = new ArrayList<>(); + for (String property : trimmed.split(",")) { + String value = property.trim(); + if (value.startsWith("\"") && value.endsWith("\"") && value.length() >= 2) { + value = value.substring(1, value.length() - 1); + } + if (!value.isEmpty()) { + result.add(value); + } + } + return result; + } + + private static String getStringOrDefault(ResultSet rs, String column, String defaultValue) { + try { + String value = rs.getString(column); + return value == null ? defaultValue : value; + } catch (Exception ignored) { + return defaultValue; + } + } + + private static String getStringOrNull(ResultSet rs, String column) { + try { + return rs.getString(column); + } catch (Exception ignored) { + return null; + } + } + + public static void main(String[] args) { + new JsonRpcServer(new Neo4jAgent()).run(); + } +} diff --git a/agents/drivers/neo4j/src/test/java/com/dbx/agent/neo4j/Neo4jAgentTest.java b/agents/drivers/neo4j/src/test/java/com/dbx/agent/neo4j/Neo4jAgentTest.java new file mode 100644 index 0000000..0573ea3 --- /dev/null +++ b/agents/drivers/neo4j/src/test/java/com/dbx/agent/neo4j/Neo4jAgentTest.java @@ -0,0 +1,183 @@ +package com.dbx.agent.neo4j; + +import com.dbx.agent.QueryResult; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class Neo4jAgentTest { + @Test + void executesCypherWritesWithReturnThroughStatementExecute() throws Exception { + Neo4jAgent agent = new Neo4jAgent(); + List calls = new ArrayList<>(); + setConnectionForTest(agent, fakeConnection(calls)); + + QueryResult result = agent.executeQuery("CREATE (n:Person {name: 'Ada'}) RETURN n", null); + + Assertions.assertEquals(Collections.singletonList("n"), result.getColumns()); + Assertions.assertEquals( + Collections.singletonList(Collections.singletonList("(:Person {name: Ada})")), + result.getRows() + ); + Assertions.assertTrue(calls.contains("execute")); + Assertions.assertFalse(calls.contains("executeUpdate")); + } + + @Test + void executesTransactionsThroughStatementExecute() throws Exception { + Neo4jAgent agent = new Neo4jAgent(); + List calls = new ArrayList<>(); + setConnectionForTest(agent, fakeConnection(calls)); + + QueryResult result = agent.executeTransaction( + Arrays.asList( + "MATCH (n:Employee) WHERE elementId(n) = '4:abc:7' SET n.name = 'Grace'", + "CREATE (n:Employee {name: 'Linus'})" + ), + null + ); + + Assertions.assertEquals(0L, result.getAffected_rows()); + Assertions.assertEquals( + Arrays.asList("setAutoCommit:false", "execute", "execute", "commit", "setAutoCommit:true"), + calls + ); + Assertions.assertFalse(calls.contains("executeUpdate")); + } + + private static void setConnectionForTest(Neo4jAgent agent, Connection connection) throws Exception { + java.lang.reflect.Field field = Neo4jAgent.class.getDeclaredField("connection"); + field.setAccessible(true); + field.set(agent, connection); + } + + private static Connection fakeConnection(List calls) { + Statement statement = fakeStatement(calls); + return proxy(Connection.class, (unused, method, args) -> { + switch (method.getName()) { + case "createStatement": + return statement; + case "setAutoCommit": + calls.add("setAutoCommit:" + args[0]); + return null; + case "getAutoCommit": + return true; + case "commit": + calls.add("commit"); + return null; + case "rollback": + calls.add("rollback"); + return null; + case "close": + return null; + case "isClosed": + return false; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static Statement fakeStatement(List calls) { + ResultSet resultSet = fakeResultSet(); + return proxy(Statement.class, (unused, method, args) -> { + switch (method.getName()) { + case "execute": + calls.add("execute"); + return true; + case "executeUpdate": + calls.add("executeUpdate"); + throw new SQLException("syntax error or access rule violation - invalid syntax"); + case "executeQuery": + calls.add("executeQuery"); + return resultSet; + case "getResultSet": + return resultSet; + case "getUpdateCount": + return 0; + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet fakeResultSet() { + int[] index = {-1}; + ResultSetMetaData metadata = fakeMetadata(); + return proxy(ResultSet.class, (unused, method, args) -> { + switch (method.getName()) { + case "next": + index[0] += 1; + return index[0] == 0; + case "getMetaData": + return metadata; + case "getObject": + return "(:Person {name: Ada})"; + case "wasNull": + return false; + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSetMetaData fakeMetadata() { + return proxy(ResultSetMetaData.class, (unused, method, args) -> { + switch (method.getName()) { + case "getColumnCount": + return 1; + case "getColumnLabel": + return "n"; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + @SuppressWarnings("unchecked") + private static T proxy(Class type, InvocationHandler handler) { + return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, handler); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) { + return false; + } + if (type == Byte.TYPE) { + return (byte) 0; + } + if (type == Short.TYPE) { + return (short) 0; + } + if (type == Integer.TYPE) { + return 0; + } + if (type == Long.TYPE) { + return 0L; + } + if (type == Float.TYPE) { + return 0F; + } + if (type == Double.TYPE) { + return 0.0D; + } + if (type == Character.TYPE) { + return '\0'; + } + return null; + } +} diff --git a/agents/drivers/oceanbase-oracle/build.gradle b/agents/drivers/oceanbase-oracle/build.gradle new file mode 100644 index 0000000..ef3e6f3 --- /dev/null +++ b/agents/drivers/oceanbase-oracle/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.oceanbase:oceanbase-client:2.4.18' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'OceanBase Oracle Mode', 'Main-Class': 'com.dbx.agent.oceanbaseoracle.OceanBaseOracleAgent') + } +} diff --git a/agents/drivers/oceanbase-oracle/src/main/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgent.java b/agents/drivers/oceanbase-oracle/src/main/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgent.java new file mode 100644 index 0000000..18d4964 --- /dev/null +++ b/agents/drivers/oceanbase-oracle/src/main/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgent.java @@ -0,0 +1,623 @@ +package com.dbx.agent.oceanbaseoracle; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.DdlBuilder; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public final class OceanBaseOracleAgent extends ConfiguredJdbcAgent { + private static final long MICROS_PER_SECOND = 1_000_000L; + private static final String COMPATIBLE_OJDBC_VERSION = "compatibleOjdbcVersion"; + private static final String DEFAULT_COMPATIBLE_OJDBC_VERSION = "compatibleOjdbcVersion=8"; + private static final Set SYSTEM_SCHEMAS = Set.of( + "SYS", "SYSTEM", "SYSMAN", "DBSNMP", "SYSBACKUP", "SYSDG", "SYSKM", "OUTLN", + "AUDSYS", "LBACSYS", "DVF", "DVSYS", "APPQOSSYS", "CTXSYS", "MDSYS", "MDDATA", + "ORDSYS", "ORDDATA", "ORDPLUGINS", "XDB", "ANONYMOUS", "DIP", "EXFSYS", + "GSMADMIN_INTERNAL", "GSMCATUSER", "GSMUSER", "OJVMSYS", "OLAPSYS", + "ORACLE_OCM", "SI_INFORMTN_SCHEMA", "WMSYS", "XS$NULL", "DBSFWUSER", + "REMOTE_SCHEDULER_AGENT", "PDBADMIN", "DGPDB_INT", "OPS$ORACLE", + "GGSYS", "FLOWS_FILES", "APEX_PUBLIC_USER", "GSMROOTUSER", "SYSRAC" + ); + + public static final JdbcAgentProfile OCEANBASE_ORACLE_PROFILE = new JdbcAgentProfile( + "com.oceanbase.jdbc.Driver", + "jdbc:oceanbase://{host}:{port}/{database}", + 2883, + false, + SYSTEM_SCHEMAS, + List.of("TABLE", "VIEW", "BASE TABLE") + ) { + @Override + public String schemaSwitchSql(String schema, String quote) { + return "ALTER SESSION SET CURRENT_SCHEMA = " + quote + schema.replace(quote, quote + quote) + quote; + } + }; + + public OceanBaseOracleAgent() { + super(OCEANBASE_ORACLE_PROFILE); + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + static String buildUrl(ConnectParams params) { + return appendDefaultCompatibilityOption(OCEANBASE_ORACLE_PROFILE.buildUrl(params)); + } + + @Override + protected void beforeQueryExecution(Connection connection, int timeoutSecs) throws SQLException { + // Connector/J's Statement timeout does not update OceanBase's stricter + // session variable, so synchronize both limits before every execution. + try (var stmt = connection.createStatement()) { + stmt.execute(queryTimeoutSql(timeoutSecs)); + } + } + + static String queryTimeoutSql(int timeoutSecs) { + if (timeoutSecs < 0) { + throw new IllegalArgumentException("Query timeout cannot be negative: " + timeoutSecs); + } + return "ALTER SESSION SET ob_query_timeout = " + timeoutSecs * MICROS_PER_SECOND; + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + for (String schema : querySchemas()) { + result.add(new DatabaseInfo(schema)); + } + return result; + }); + } + + @Override + public List listSchemas() { + return unchecked(this::querySchemas); + } + + @Override + public List listTables(String schema) { + return queryTables(schema, MetadataListConstraints.NONE); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + return queryTables(schema, MetadataListConstraints.orNone(constraints)); + } + + private List queryTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + String owner = normalizeSchema(schema); + List objectTypes = oceanBaseTableTypes(constraints); + if (objectTypes.isEmpty()) { + return List.of(); + } + String baseSql = """ + SELECT o.OBJECT_NAME, + CASE o.OBJECT_TYPE WHEN 'VIEW' THEN 'VIEW' ELSE 'TABLE' END AS TABLE_TYPE, + c.COMMENTS + FROM ALL_OBJECTS o + LEFT JOIN ALL_TAB_COMMENTS c ON c.OWNER = o.OWNER AND c.TABLE_NAME = o.OBJECT_NAME + WHERE o.OWNER = ? AND o.OBJECT_TYPE IN (%s) + """.stripIndent().trim(); + MetadataSql query = oceanBaseMetadataSql( + String.format(baseSql, placeholders(objectTypes.size())), + "OBJECT_NAME, TABLE_TYPE, COMMENTS", + "o.OBJECT_NAME", + "ORDER BY OBJECT_NAME", + owner, + objectTypes, + constraints + ); + + List result = new ArrayList<>(); + try (var stmt = requireConnection().prepareStatement(query.sql)) { + bind(stmt, query.args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1), rs.getString(2), rs.getString(3))); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return queryObjects(schema, MetadataListConstraints.NONE); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + return queryObjects(schema, MetadataListConstraints.orNone(constraints)); + } + + private List queryObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + String owner = normalizeSchema(schema); + List objectTypes = oceanBaseObjectTypes(constraints); + if (objectTypes.isEmpty()) { + return List.of(); + } + String baseSql = """ + SELECT OBJECT_NAME, OBJECT_TYPE + FROM ALL_OBJECTS + WHERE OWNER = ? AND OBJECT_TYPE IN (%s) + """.stripIndent().trim(); + MetadataSql query = oceanBaseMetadataSql( + String.format(baseSql, placeholders(objectTypes.size())), + "OBJECT_NAME, OBJECT_TYPE", + "OBJECT_NAME", + """ + ORDER BY CASE OBJECT_TYPE + WHEN 'TABLE' THEN 0 + WHEN 'VIEW' THEN 1 + WHEN 'PROCEDURE' THEN 2 + WHEN 'FUNCTION' THEN 3 + WHEN 'PACKAGE' THEN 4 + WHEN 'SEQUENCE' THEN 5 + ELSE 6 + END, OBJECT_NAME + """.stripIndent().trim(), + owner, + objectTypes, + constraints + ); + + List result = new ArrayList<>(); + try (var stmt = requireConnection().prepareStatement(query.sql)) { + bind(stmt, query.args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), owner, null)); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + private static MetadataSql oceanBaseMetadataSql( + String baseSql, + String selectList, + String nameColumn, + String orderSql, + String owner, + List objectTypes, + MetadataListConstraints constraints + ) { + List args = new ArrayList<>(); + args.add(owner); + args.addAll(objectTypes); + String sql = baseSql; + if (constraints.hasFilter()) { + sql += " AND UPPER(" + nameColumn + ") LIKE ? ESCAPE '\\'"; + args.add(constraints.fuzzyLikePattern().toUpperCase(Locale.ROOT)); + } + sql += "\n" + orderSql; + if (constraints.hasLimit()) { + // OceanBase Oracle mode is safest with the classic ordered ROWNUM wrapper for paged metadata. + int offset = constraints.getOffset() == null ? 0 : constraints.getOffset(); + sql = "SELECT " + selectList + "\nFROM (\n SELECT DBX_Q.*, ROWNUM AS DBX_RN\n FROM (\n" + + sql + + "\n ) DBX_Q\n WHERE ROWNUM <= ?\n)\nWHERE DBX_RN > ?"; + args.add(offset + constraints.getLimit()); + args.add(offset); + } else if (constraints.hasOffset()) { + sql = "SELECT " + selectList + "\nFROM (\n SELECT DBX_Q.*, ROWNUM AS DBX_RN\n FROM (\n" + + sql + + "\n ) DBX_Q\n)\nWHERE DBX_RN > ?"; + args.add(constraints.getOffset()); + } + return new MetadataSql(sql, args); + } + + private static List oceanBaseTableTypes(MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return List.of("TABLE", "VIEW"); + } + List result = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + result.add("TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + result.add("VIEW"); + } + return result; + } + + private static List oceanBaseObjectTypes(MetadataListConstraints constraints) { + List supported = List.of("TABLE", "VIEW", "PROCEDURE", "FUNCTION", "PACKAGE", "SEQUENCE", "SYNONYM"); + if (!constraints.hasObjectTypes()) { + return supported; + } + List result = new ArrayList<>(); + for (String objectType : supported) { + if (constraints.objectTypeAllowed(objectType)) { + result.add(objectType); + } + } + return result; + } + + private static String placeholders(int count) { + return String.join(", ", java.util.Collections.nCopies(count, "?")); + } + + private static void bind(java.sql.PreparedStatement stmt, List args) throws SQLException { + for (int index = 0; index < args.size(); index += 1) { + Object arg = args.get(index); + if (arg instanceof Integer) { + stmt.setInt(index + 1, (Integer) arg); + } else { + stmt.setString(index + 1, String.valueOf(arg)); + } + } + } + + private static final class MetadataSql { + private final String sql; + private final List args; + + private MetadataSql(String sql, List args) { + this.sql = sql; + this.args = args; + } + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + String owner = normalizeSchema(schema); + String sql = """ + SELECT c.COLUMN_NAME, c.DATA_TYPE, c.NULLABLE, c.DATA_PRECISION, c.DATA_SCALE, + c.DATA_LENGTH, c.CHAR_LENGTH, c.DATA_DEFAULT, cc.COMMENTS, + CASE WHEN pk.COLUMN_NAME IS NULL THEN 0 ELSE 1 END AS IS_PK + FROM ALL_TAB_COLUMNS c + LEFT JOIN ALL_COL_COMMENTS cc + ON cc.OWNER = c.OWNER AND cc.TABLE_NAME = c.TABLE_NAME AND cc.COLUMN_NAME = c.COLUMN_NAME + LEFT JOIN ( + SELECT cols.COLUMN_NAME + FROM ALL_CONS_COLUMNS cols + JOIN ALL_CONSTRAINTS cons + ON cols.CONSTRAINT_NAME = cons.CONSTRAINT_NAME AND cols.OWNER = cons.OWNER + WHERE cons.CONSTRAINT_TYPE = 'P' AND cons.OWNER = ? AND cons.TABLE_NAME = ? + ) pk ON pk.COLUMN_NAME = c.COLUMN_NAME + WHERE c.OWNER = ? AND c.TABLE_NAME = ? + ORDER BY c.COLUMN_ID + """.stripIndent().trim(); + + List result = new ArrayList<>(); + try (var stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, owner); + stmt.setString(2, table); + stmt.setString(3, owner); + stmt.setString(4, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + // Oracle-compatible DATA_DEFAULT is LONG-like; read it before other metadata fields. + String defaultValue = rs.getString("DATA_DEFAULT"); + String name = rs.getString("COLUMN_NAME"); + String baseType = rs.getString("DATA_TYPE"); + Integer numPrec = intOrNull(rs, "DATA_PRECISION"); + Integer numScale = intOrNull(rs, "DATA_SCALE"); + Integer dataLen = intOrNull(rs, "DATA_LENGTH"); + Integer charLen = intOrNull(rs, "CHAR_LENGTH"); + result.add(new ColumnInfo( + name, + formatDataType(baseType, numPrec, numScale, dataLen, charLen), + "Y".equalsIgnoreCase(rs.getString("NULLABLE")), + defaultValue, + rs.getInt("IS_PK") == 1, + null, + rs.getString("COMMENTS"), + numPrec, + numScale, + charLen + )); + } + } + } + return result; + }); + } + + @Override + public String getTableDdl(String schema, String table) { + List indexes; + try { + indexes = listIndexes(schema, table); + } catch (RuntimeException e) { + indexes = Collections.emptyList(); + } + + List foreignKeys; + try { + foreignKeys = listForeignKeys(schema, table); + } catch (RuntimeException e) { + foreignKeys = Collections.emptyList(); + } + + return DdlBuilder.buildTableDdl(schema, table, getColumns(schema, table), indexes, foreignKeys, false, true); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + String owner = normalizeSchema(schema); + String sql = """ + SELECT i.INDEX_NAME, ic.COLUMN_NAME, ic.COLUMN_POSITION, i.UNIQUENESS, + c.CONSTRAINT_TYPE, i.INDEX_TYPE + FROM ALL_INDEXES i + JOIN ALL_IND_COLUMNS ic + ON i.INDEX_NAME = ic.INDEX_NAME + AND i.OWNER = ic.INDEX_OWNER + AND i.TABLE_OWNER = ic.TABLE_OWNER + AND i.TABLE_NAME = ic.TABLE_NAME + LEFT JOIN ALL_CONSTRAINTS c + ON i.INDEX_NAME = c.INDEX_NAME + AND i.TABLE_OWNER = c.OWNER + AND i.TABLE_NAME = c.TABLE_NAME + AND c.CONSTRAINT_TYPE = 'P' + WHERE i.TABLE_OWNER = ? AND i.TABLE_NAME = ? + ORDER BY i.INDEX_NAME, ic.COLUMN_POSITION + """.stripIndent().trim(); + + Map> columnsByIndex = new LinkedHashMap<>(); + Map uniqueByIndex = new LinkedHashMap<>(); + Map primaryByIndex = new LinkedHashMap<>(); + Map typeByIndex = new LinkedHashMap<>(); + try (var stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, owner); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String indexName = rs.getString("INDEX_NAME"); + columnsByIndex.computeIfAbsent(indexName, ignored -> new ArrayList<>()).add(rs.getString("COLUMN_NAME")); + uniqueByIndex.put(indexName, "UNIQUE".equalsIgnoreCase(rs.getString("UNIQUENESS"))); + primaryByIndex.put(indexName, "P".equalsIgnoreCase(rs.getString("CONSTRAINT_TYPE"))); + typeByIndex.put(indexName, rs.getString("INDEX_TYPE")); + } + } + } + + List result = new ArrayList<>(); + for (Map.Entry> entry : columnsByIndex.entrySet()) { + String name = entry.getKey(); + result.add(new IndexInfo( + name, + entry.getValue(), + Boolean.TRUE.equals(uniqueByIndex.get(name)), + Boolean.TRUE.equals(primaryByIndex.get(name)), + null, + typeByIndex.get(name), + null, + null + )); + } + return result; + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + String owner = normalizeSchema(schema); + String sql = """ + SELECT c.CONSTRAINT_NAME, cc.COLUMN_NAME, rc.TABLE_NAME, rcc.COLUMN_NAME + FROM ALL_CONSTRAINTS c + JOIN ALL_CONS_COLUMNS cc ON c.CONSTRAINT_NAME = cc.CONSTRAINT_NAME AND c.OWNER = cc.OWNER + JOIN ALL_CONSTRAINTS rc ON c.R_CONSTRAINT_NAME = rc.CONSTRAINT_NAME AND c.R_OWNER = rc.OWNER + JOIN ALL_CONS_COLUMNS rcc + ON rc.CONSTRAINT_NAME = rcc.CONSTRAINT_NAME + AND rc.OWNER = rcc.OWNER + AND cc.POSITION = rcc.POSITION + WHERE c.CONSTRAINT_TYPE = 'R' AND c.OWNER = ? AND c.TABLE_NAME = ? + ORDER BY c.CONSTRAINT_NAME, cc.POSITION + """.stripIndent().trim(); + + List result = new ArrayList<>(); + try (var stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, owner); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString(1), + rs.getString(2), + rs.getString(3), + rs.getString(4) + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + String owner = normalizeSchema(schema); + String sql = """ + SELECT TRIGGER_NAME, TRIGGERING_EVENT, TRIGGER_TYPE + FROM ALL_TRIGGERS + WHERE OWNER = ? AND TABLE_NAME = ? + ORDER BY TRIGGER_NAME + """.stripIndent().trim(); + + List result = new ArrayList<>(); + try (var stmt = requireConnection().prepareStatement(sql)) { + stmt.setString(1, owner); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo(rs.getString(1), rs.getString(2), rs.getString(3))); + } + } + } + return result; + }); + } + + @Override + public String setSchemaSQL(String schema) { + return "ALTER SESSION SET CURRENT_SCHEMA = " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + private List querySchemas() throws SQLException { + try { + return querySchemaNames(); + } catch (SQLException primaryError) { + String current; + try { + current = currentSchema(); + } catch (SQLException ignored) { + throw primaryError; + } + if (current == null || current.isBlank()) { + throw primaryError; + } + return List.of(current); + } + } + + private List querySchemaNames() throws SQLException { + String placeholders = SYSTEM_SCHEMAS.stream() + .map(schema -> "'" + schema + "'") + .collect(Collectors.joining(",")); + String sql = """ + SELECT username + FROM ALL_USERS + WHERE username IS NOT NULL + AND username NOT IN (%s) + AND username NOT LIKE 'APEX_%%' + AND username NOT LIKE 'FLOWS_%%' + AND username NOT LIKE '%%$%%' + ORDER BY CASE + WHEN username = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') THEN 0 + WHEN username = SYS_CONTEXT('USERENV', 'SESSION_USER') THEN 1 + ELSE 2 + END, username + """.formatted(placeholders).stripIndent().trim(); + + List result = new ArrayList<>(); + try (var stmt = requireConnection().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String schema = rs.getString(1); + if (schema != null && !schema.isBlank()) { + result.add(schema); + } + } + } + return result; + } + + private String normalizeSchema(String schema) throws SQLException { + String value = schema == null ? "" : schema.trim(); + return value.isEmpty() ? currentSchema() : value; + } + + private String currentSchema() throws SQLException { + try (var stmt = requireConnection().createStatement(); + ResultSet rs = stmt.executeQuery("SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL")) { + if (rs.next()) { + String schema = rs.getString(1); + if (schema != null && !schema.isBlank()) { + return schema; + } + } + } + return ""; + } + + private static String appendDefaultCompatibilityOption(String url) { + if (hasQueryKey(url, COMPATIBLE_OJDBC_VERSION)) { + return url; + } + return url + (url.contains("?") ? "&" : "?") + DEFAULT_COMPATIBLE_OJDBC_VERSION; + } + + private static boolean hasQueryKey(String url, String key) { + int queryStart = url.indexOf('?'); + if (queryStart < 0) { + return false; + } + String query = url.substring(queryStart + 1); + int fragmentStart = query.indexOf('#'); + if (fragmentStart >= 0) { + query = query.substring(0, fragmentStart); + } + for (String part : query.split("[&;]")) { + String normalized = part.trim(); + if (normalized.isEmpty()) { + continue; + } + int equals = normalized.indexOf('='); + String paramKey = equals >= 0 ? normalized.substring(0, equals) : normalized; + if (paramKey.trim().equalsIgnoreCase(key)) { + return true; + } + } + return false; + } + + private static String formatDataType(String base, Integer numPrec, Integer numScale, Integer dataLen, Integer charLen) { + if (base == null || base.isBlank()) { + return ""; + } + return switch (base.toUpperCase(Locale.ROOT)) { + case "VARCHAR2", "NVARCHAR2", "CHAR", "NCHAR" -> { + Integer len = charLen == null ? dataLen : charLen; + yield len == null ? base : base + "(" + len + ")"; + } + case "NUMBER" -> { + if (numPrec != null && numScale != null && numScale > 0) { + yield base + "(" + numPrec + "," + numScale + ")"; + } + if (numPrec != null && numPrec > 0) { + yield base + "(" + numPrec + ")"; + } + yield base; + } + case "RAW" -> dataLen == null ? "RAW" : "RAW(" + dataLen + ")"; + default -> base; + }; + } + + private static Integer intOrNull(ResultSet rs, String column) throws SQLException { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + public static void main(String[] args) { + new JsonRpcServer(new OceanBaseOracleAgent()).run(); + } +} diff --git a/agents/drivers/oceanbase-oracle/src/test/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgentTest.java b/agents/drivers/oceanbase-oracle/src/test/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgentTest.java new file mode 100644 index 0000000..0530b5c --- /dev/null +++ b/agents/drivers/oceanbase-oracle/src/test/java/com/dbx/agent/oceanbaseoracle/OceanBaseOracleAgentTest.java @@ -0,0 +1,352 @@ +package com.dbx.agent.oceanbaseoracle; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +class OceanBaseOracleAgentTest { + @Test + void buildsOceanBaseJdbcUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("oceanbase.example.com"); + params.setPort(0); + params.setDatabase("sys"); + + Assertions.assertEquals( + "jdbc:oceanbase://oceanbase.example.com:2883/sys?compatibleOjdbcVersion=8", + OceanBaseOracleAgent.buildUrl(params) + ); + } + + @Test + void appendsQueryParametersToJdbcUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("oceanbase.example.com"); + params.setPort(2881); + params.setDatabase("sys"); + params.setUrl_params("useSSL=false"); + + Assertions.assertEquals( + "jdbc:oceanbase://oceanbase.example.com:2881/sys?useSSL=false&compatibleOjdbcVersion=8", + OceanBaseOracleAgent.buildUrl(params) + ); + } + + @Test + void keepsExplicitCompatibleOjdbcVersion() { + ConnectParams params = new ConnectParams(); + params.setHost("oceanbase.example.com"); + params.setPort(2881); + params.setDatabase("sys"); + params.setUrl_params("compatibleOjdbcVersion=6&useSSL=false"); + + Assertions.assertEquals( + "jdbc:oceanbase://oceanbase.example.com:2881/sys?compatibleOjdbcVersion=6&useSSL=false", + OceanBaseOracleAgent.buildUrl(params) + ); + } + + @Test + void appendsCompatibleOjdbcVersionToCustomJdbcUrl() { + ConnectParams params = new ConnectParams(); + params.setConnection_string("jdbc:oceanbase://custom-host:2881/sys?useSSL=false"); + + Assertions.assertEquals( + "jdbc:oceanbase://custom-host:2881/sys?useSSL=false&compatibleOjdbcVersion=8", + OceanBaseOracleAgent.buildUrl(params) + ); + } + + @Test + void convertsQueryTimeoutToOceanBaseSessionMicroseconds() { + Assertions.assertEquals( + "ALTER SESSION SET ob_query_timeout = 300000000", + OceanBaseOracleAgent.queryTimeoutSql(300) + ); + Assertions.assertEquals( + "ALTER SESSION SET ob_query_timeout = 0", + OceanBaseOracleAgent.queryTimeoutSql(0) + ); + Assertions.assertEquals( + "ALTER SESSION SET ob_query_timeout = 2147483647000000", + OceanBaseOracleAgent.queryTimeoutSql(Integer.MAX_VALUE) + ); + } + + @Test + void rejectsNegativeQueryTimeout() { + Assertions.assertThrows(IllegalArgumentException.class, () -> OceanBaseOracleAgent.queryTimeoutSql(-1)); + } + + @Test + void synchronizesSessionTimeoutForEveryQueryEntryPoint() { + List sql = new ArrayList<>(); + OceanBaseOracleAgent agent = new OceanBaseOracleAgent(); + TestSupport.setPrivateConnection(agent, executionConnection(sql)); + + agent.executeQuery("SELECT 1 FROM DUAL", null, new ExecuteQueryOptions(10, null, 12)); + agent.executeQueryPage("SELECT 2 FROM DUAL", null, new QueryPageOptions(10, null, 10, 13)); + agent.startTableRead("SELECT 3 FROM DUAL", null, new QueryPageOptions(10, null, 10, 14)); + + Assertions.assertEquals(List.of( + "ALTER SESSION SET ob_query_timeout = 12000000", + "SELECT 1 FROM DUAL", + "ALTER SESSION SET ob_query_timeout = 13000000", + "SELECT 2 FROM DUAL", + "ALTER SESSION SET ob_query_timeout = 14000000", + "SELECT 3 FROM DUAL" + ), sql); + } + + @Test + void constrainedListTablesUsesOceanBaseOracleMetadataSql() { + List sql = new ArrayList<>(); + OceanBaseOracleAgent agent = new OceanBaseOracleAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"OBJECT_NAME", "TABLE_TYPE", "COMMENTS"}, + new Object[][]{ + {"USER_SETTINGS", "TABLE", null} + } + ))); + + List tables = agent.listTables( + "APP", + new MetadataListConstraints("user", 1, 1, List.of("TABLE")) + ); + + Assertions.assertEquals(1, tables.size()); + Assertions.assertEquals("USER_SETTINGS", tables.get(0).getName()); + Assertions.assertTrue(sql.get(0).contains("ALL_OBJECTS"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("UPPER(o.OBJECT_NAME) LIKE ?"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("ROWNUM <= ?"), sql.get(0)); + } + + @Test + void constrainedListObjectsUsesOceanBaseOracleMetadataSql() { + List sql = new ArrayList<>(); + OceanBaseOracleAgent agent = new OceanBaseOracleAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, resultSet( + new String[]{"OBJECT_NAME", "OBJECT_TYPE"}, + new Object[][]{ + {"FORMAT_USER", "FUNCTION"} + } + ))); + + List objects = agent.listObjects( + "APP", + new MetadataListConstraints("user", 1, 1, List.of("FUNCTION")) + ); + + Assertions.assertEquals(1, objects.size()); + Assertions.assertEquals("FORMAT_USER", objects.get(0).getName()); + Assertions.assertEquals("FUNCTION", objects.get(0).getObject_type()); + Assertions.assertTrue(sql.get(0).contains("OBJECT_TYPE IN (?)"), sql.get(0)); + Assertions.assertTrue(sql.get(0).contains("ROWNUM <= ?"), sql.get(0)); + } + + @Test + void getColumnsIncludesDefaultAndCommentMetadata() { + List sql = new ArrayList<>(); + OceanBaseOracleAgent agent = new OceanBaseOracleAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(sql, columnResultSet( + new Object[][]{ + {"DISPLAY_NAME", "VARCHAR2", "Y", null, null, 64, 64, "'anonymous'", "User's display name", 0} + } + ))); + + List columns = agent.getColumns("APP", "USERS"); + + Assertions.assertEquals(1, columns.size()); + ColumnInfo column = columns.get(0); + Assertions.assertEquals("DISPLAY_NAME", column.getName()); + Assertions.assertEquals("VARCHAR2(64)", column.getData_type()); + Assertions.assertTrue(column.getIs_nullable()); + Assertions.assertEquals("'anonymous'", column.getColumn_default()); + Assertions.assertFalse(column.getIs_primary_key()); + Assertions.assertEquals("User's display name", column.getComment()); + Assertions.assertEquals(64, column.getCharacter_maximum_length()); + Assertions.assertTrue(sql.get(0).contains("c.DATA_DEFAULT"), sql.get(0)); + } + + @Test + void tableDdlIncludesDefaultsAndOnlyNonBlankColumnComments() { + OceanBaseOracleAgent agent = new OceanBaseOracleAgent(); + TestSupport.setPrivateConnection(agent, preparedConnection(new ArrayList<>(), + resultSet( + new String[]{"INDEX_NAME", "COLUMN_NAME", "COLUMN_POSITION", "UNIQUENESS", "CONSTRAINT_TYPE", "INDEX_TYPE"}, + new Object[][]{} + ), + resultSet( + new String[]{"CONSTRAINT_NAME", "COLUMN_NAME", "TABLE_NAME", "REF_COLUMN_NAME"}, + new Object[][]{} + ), + columnResultSet(new Object[][]{ + {"CREATED_AT", "TIMESTAMP", "N", null, null, null, null, "SYSDATE", "Created timestamp", 0}, + {"INTERNAL_NOTE", "VARCHAR2", "Y", null, null, 100, 100, null, " ", 0} + }) + )); + + String ddl = agent.getTableDdl("APP", "AUDIT_LOG"); + + Assertions.assertTrue(ddl.contains("\"CREATED_AT\" TIMESTAMP NOT NULL DEFAULT SYSDATE"), ddl); + Assertions.assertTrue( + ddl.contains("COMMENT ON COLUMN \"APP\".\"AUDIT_LOG\".\"CREATED_AT\" IS 'Created timestamp';"), + ddl + ); + Assertions.assertTrue(ddl.contains("\"INTERNAL_NOTE\" VARCHAR2(100)"), ddl); + Assertions.assertFalse(ddl.contains("\"INTERNAL_NOTE\" IS"), ddl); + } + + private static ResultSet columnResultSet(Object[][] rows) { + return resultSet( + new String[]{ + "COLUMN_NAME", + "DATA_TYPE", + "NULLABLE", + "DATA_PRECISION", + "DATA_SCALE", + "DATA_LENGTH", + "CHAR_LENGTH", + "DATA_DEFAULT", + "COMMENTS", + "IS_PK" + }, + rows + ); + } + + private static Connection preparedConnection(List sql, ResultSet... resultSets) { + int[] resultSetIndex = {0}; + PreparedStatement statement = proxy(PreparedStatement.class, (method, args) -> { + if ("executeQuery".equals(method.getName())) { + int current = Math.min(resultSetIndex[0], resultSets.length - 1); + resultSetIndex[0] += 1; + return resultSets[current]; + } + if ("setString".equals(method.getName()) || "setInt".equals(method.getName()) || "close".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("prepareStatement".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return statement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Connection executionConnection(List sql) { + Statement statement = proxy(Statement.class, (method, args) -> { + if ("execute".equals(method.getName())) { + sql.add(String.valueOf(args[0])); + return false; + } + if ("getUpdateCount".equals(method.getName())) { + return 0; + } + if ("close".equals(method.getName()) || "setMaxRows".equals(method.getName()) + || "setFetchSize".equals(method.getName()) || "setQueryTimeout".equals(method.getName())) { + return null; + } + return defaultValue(method.getReturnType()); + }); + return proxy(Connection.class, (method, args) -> { + if ("createStatement".equals(method.getName())) { + return statement; + } + if ("isClosed".equals(method.getName())) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet resultSet(String[] columns, Object[][] rows) { + int[] index = {-1}; + return proxy(ResultSet.class, (method, args) -> { + switch (method.getName()) { + case "next": + index[0] += 1; + return index[0] < rows.length; + case "getString": + Object value = columnValue(columns, rows[index[0]], args[0]); + return value == null ? null : String.valueOf(value); + case "getObject": + return columnValue(columns, rows[index[0]], args[0]); + case "getInt": + Object intValue = columnValue(columns, rows[index[0]], args[0]); + if (intValue instanceof Number) { + return ((Number) intValue).intValue(); + } + if (intValue == null) { + return 0; + } + return Integer.parseInt(String.valueOf(intValue)); + case "close": + return null; + default: + return defaultValue(method.getReturnType()); + } + }); + } + + private static Object columnValue(String[] columns, Object[] row, Object key) { + if (key instanceof Number) { + return row[((Number) key).intValue() - 1]; + } + for (int i = 0; i < columns.length; i++) { + if (columns[i].equalsIgnoreCase(String.valueOf(key))) { + return row[i]; + } + } + return null; + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + return handler.handle(method, args == null ? new Object[0] : args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (type == Boolean.TYPE) return false; + if (type == Byte.TYPE) return (byte) 0; + if (type == Short.TYPE) return (short) 0; + if (type == Integer.TYPE) return 0; + if (type == Long.TYPE) return 0L; + if (type == Float.TYPE) return 0f; + if (type == Double.TYPE) return 0d; + if (type == Character.TYPE) return (char) 0; + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args) throws Throwable; + } +} diff --git a/agents/drivers/oracle-go/.gitignore b/agents/drivers/oracle-go/.gitignore new file mode 100644 index 0000000..8aa3c07 --- /dev/null +++ b/agents/drivers/oracle-go/.gitignore @@ -0,0 +1,2 @@ +agent +agent.exe diff --git a/agents/drivers/oracle-go/README.md b/agents/drivers/oracle-go/README.md new file mode 100644 index 0000000..847b78d --- /dev/null +++ b/agents/drivers/oracle-go/README.md @@ -0,0 +1,36 @@ +# DBX Oracle Go Agent + +Experimental native Oracle agent for DBX using `github.com/sijms/go-ora/v2`. + +## Build + +```bash +go build -o agent . +``` + +Cross-compile release builds use pure Go output: + +```bash +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o dbx-agent-oracle-linux-x64 . +CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-s -w" -o dbx-agent-oracle-macos-aarch64 . +CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o dbx-agent-oracle-windows-x64.exe . +``` + +## Local DBX Test + +Build the binary, then copy it into DBX's installed Oracle driver directory: + +```bash +mkdir -p ~/.dbx/agents/drivers/oracle +cp agent ~/.dbx/agents/drivers/oracle/agent +chmod +x ~/.dbx/agents/drivers/oracle/agent +``` + +DBX prefers `agent` over `agent.jar`, so Oracle connections will use this Go +agent until the file is removed. + +To restore the Java agent: + +```bash +rm ~/.dbx/agents/drivers/oracle/agent +``` diff --git a/agents/drivers/oracle-go/go.mod b/agents/drivers/oracle-go/go.mod new file mode 100644 index 0000000..9d4188c --- /dev/null +++ b/agents/drivers/oracle-go/go.mod @@ -0,0 +1,7 @@ +module github.com/t8y2/dbx/agents/drivers/oracle-go + +go 1.22 + +require github.com/sijms/go-ora/v2 v2.9.0 + +require golang.org/x/text v0.22.0 diff --git a/agents/drivers/oracle-go/go.sum b/agents/drivers/oracle-go/go.sum new file mode 100644 index 0000000..a0fd27b --- /dev/null +++ b/agents/drivers/oracle-go/go.sum @@ -0,0 +1,4 @@ +github.com/sijms/go-ora/v2 v2.9.0 h1:+iQbUeTeCOFMb5BsOMgUhV8KWyrv9yjKpcK4x7+MFrg= +github.com/sijms/go-ora/v2 v2.9.0/go.mod h1:QgFInVi3ZWyqAiJwzBQA+nbKYKH77tdp1PYoCqhR2dU= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= diff --git a/agents/drivers/oracle-go/main.go b/agents/drivers/oracle-go/main.go new file mode 100644 index 0000000..c3fff0e --- /dev/null +++ b/agents/drivers/oracle-go/main.go @@ -0,0 +1,2902 @@ +package main + +import ( + "bufio" + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "io" + "net" + "net/url" + "os" + "regexp" + "sort" + "strconv" + "strings" + "time" + + _ "github.com/sijms/go-ora/v2" + go_ora "github.com/sijms/go-ora/v2" + "github.com/sijms/go-ora/v2/converters" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/transform" +) + +const protocolVersion = 1 +const defaultMaxRows = 1000 +const oracleCharsetZHS32GB18030 = 854 + +var ( + oraclePlSQLBlockStartRegexp = regexp.MustCompile(`(?is)^\s*(?:DECLARE|BEGIN|CREATE\s+(?:OR\s+REPLACE\s+)?(?:(?:EDITIONABLE|NONEDITIONABLE)\s+)?(?:FUNCTION|PROCEDURE|TRIGGER|PACKAGE(?:\s+BODY)?|TYPE(?:\s+BODY)?))\b`) + oraclePlSQLBlockEndRegexp = regexp.MustCompile(`(?is)\bEND\s*;\s*$`) + oracleNamedPlSQLBlockEndRegexp = regexp.MustCompile(`(?is)\bEND\s+([A-Z0-9_$#]+)\s*;\s*$`) + oracleUnsupportedServerCharsetRegexp = regexp.MustCompile(`server use charset with id: ([0-9]+).*not supported by the driver`) + oracleStringConverters = map[int]converters.IStringConverter{ + oracleCharsetZHS32GB18030: oracleGB18030Converter{}, + } +) + +const oracleListDatabasesSQL = ` +SELECT username AS owner +FROM all_users +WHERE username IS NOT NULL + AND username NOT IN ( + 'SYS','SYSTEM','SYSMAN','DBSNMP','SYSBACKUP','SYSDG','SYSKM','SYSRAC','OUTLN', + 'AUDSYS','LBACSYS','DVF','DVSYS','APPQOSSYS','CTXSYS','MDSYS','MDDATA', + 'ORDSYS','ORDDATA','ORDPLUGINS','XDB','ANONYMOUS','DIP','EXFSYS', + 'GSMADMIN_INTERNAL','GSMCATUSER','GSMROOTUSER','GSMUSER','OJVMSYS','OLAPSYS', + 'ORACLE_OCM','SI_INFORMTN_SCHEMA','WMSYS','XS$NULL','DBSFWUSER', + 'REMOTE_SCHEDULER_AGENT','PDBADMIN','DGPDB_INT','OPS$ORACLE', + 'GGSYS','FLOWS_FILES','APEX_PUBLIC_USER' + ) + AND username NOT LIKE 'APEX_%' + AND username NOT LIKE 'FLOWS_%' + AND username NOT LIKE '%$%' +ORDER BY CASE + WHEN username = SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') THEN 0 + WHEN username = SYS_CONTEXT('USERENV', 'SESSION_USER') THEN 1 + ELSE 2 +END, username` +const oracleListTablesBaseSQL = ` +SELECT OBJECT_NAME, TABLE_TYPE, COMMENTS +FROM ( +SELECT t.TABLE_NAME AS OBJECT_NAME, + 'TABLE' AS TABLE_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM ALL_TABLES t +WHERE t.OWNER = :1 + AND t.NESTED = 'NO' +UNION ALL +SELECT o.OBJECT_NAME, + 'VIEW' AS TABLE_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM ALL_OBJECTS o +WHERE o.OWNER = :2 + AND o.OBJECT_TYPE = 'VIEW' +)` +const oracleListTablesSessionUserBaseSQL = ` +SELECT OBJECT_NAME, TABLE_TYPE, COMMENTS +FROM ( +SELECT t.TABLE_NAME AS OBJECT_NAME, + 'TABLE' AS TABLE_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM USER_TABLES t +WHERE t.NESTED = 'NO' +UNION ALL +SELECT o.OBJECT_NAME, + 'VIEW' AS TABLE_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM USER_OBJECTS o +WHERE o.OBJECT_TYPE = 'VIEW' +)` +const oracleListTablesOrderSQL = `ORDER BY OBJECT_NAME` +const oracleListTablesSQL = oracleListTablesBaseSQL + "\n" + oracleListTablesOrderSQL +const oracleListObjectsBaseSQL = ` +SELECT OBJECT_NAME, OBJECT_TYPE, COMMENTS +FROM ( +SELECT t.TABLE_NAME AS OBJECT_NAME, + 'TABLE' AS OBJECT_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM ALL_TABLES t +WHERE t.OWNER = :1 + AND t.NESTED = 'NO' +UNION ALL +SELECT o.OBJECT_NAME, + CASE o.OBJECT_TYPE WHEN 'PACKAGE BODY' THEN 'PACKAGE_BODY' ELSE o.OBJECT_TYPE END AS OBJECT_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM ALL_OBJECTS o +WHERE o.OWNER = :2 + AND o.OBJECT_TYPE IN ('VIEW', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY') +)` +const oracleListObjectsSessionUserBaseSQL = ` +SELECT OBJECT_NAME, OBJECT_TYPE, COMMENTS +FROM ( +SELECT t.TABLE_NAME AS OBJECT_NAME, + 'TABLE' AS OBJECT_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM USER_TABLES t +WHERE t.NESTED = 'NO' +UNION ALL +SELECT o.OBJECT_NAME, + CASE o.OBJECT_TYPE WHEN 'PACKAGE BODY' THEN 'PACKAGE_BODY' ELSE o.OBJECT_TYPE END AS OBJECT_TYPE, + CAST(NULL AS VARCHAR2(4000)) AS COMMENTS +FROM USER_OBJECTS o +WHERE o.OBJECT_TYPE IN ('VIEW', 'PROCEDURE', 'FUNCTION', 'PACKAGE', 'PACKAGE BODY') +)` +const oracleListObjectsOrderSQL = `ORDER BY CASE OBJECT_TYPE + WHEN 'TABLE' THEN 0 + WHEN 'VIEW' THEN 1 + WHEN 'PROCEDURE' THEN 2 + WHEN 'FUNCTION' THEN 3 + WHEN 'PACKAGE' THEN 4 + ELSE 5 +END, OBJECT_NAME` +const oracleListObjectsSQL = oracleListObjectsBaseSQL + "\n" + oracleListObjectsOrderSQL + +type request struct { + ID json.RawMessage `json:"id"` + Method string `json:"method"` + Params map[string]json.RawMessage `json:"params"` +} + +type response struct { + JSONRPC string `json:"jsonrpc,omitempty"` + ID json.RawMessage `json:"id,omitempty"` + Result any `json:"result,omitempty"` + Error *rpcError `json:"error,omitempty"` +} + +type rpcError struct { + Code int `json:"code"` + Message string `json:"message"` +} + +type connectParams struct { + Host string `json:"host"` + Port int `json:"port"` + Database string `json:"database"` + Username string `json:"username"` + Password string `json:"password"` + SysDBA bool `json:"sysdba"` + URLParams string `json:"url_params"` + ConnectionString string `json:"connection_string"` +} + +type queryOptions struct { + SQL string `json:"sql"` + Database string `json:"database"` + Schema string `json:"schema"` + MaxRows int `json:"maxRows"` + FetchSize int `json:"fetchSize"` +} + +type queryResult struct { + Columns []string `json:"columns"` + ColumnTypes []string `json:"column_types"` + Rows [][]any `json:"rows"` + AffectedRows int64 `json:"affected_rows"` + ExecutionTimeMS int64 `json:"execution_time_ms"` + Truncated bool `json:"truncated"` +} + +func (r queryResult) MarshalJSON() ([]byte, error) { + type alias queryResult + value := alias(r) + if value.Columns == nil { + value.Columns = []string{} + } + if value.ColumnTypes == nil { + value.ColumnTypes = []string{} + } + if value.Rows == nil { + value.Rows = [][]any{} + } + return json.Marshal(value) +} + +type queryPageResult struct { + Columns []string `json:"columns"` + ColumnTypes []string `json:"column_types"` + Rows [][]any `json:"rows"` + AffectedRows int64 `json:"affected_rows"` + ExecutionTimeMS int64 `json:"execution_time_ms"` + Truncated bool `json:"truncated"` + SessionID *string `json:"session_id"` + HasMore bool `json:"has_more"` +} + +func (r queryPageResult) MarshalJSON() ([]byte, error) { + type alias queryPageResult + value := alias(r) + if value.Columns == nil { + value.Columns = []string{} + } + if value.ColumnTypes == nil { + value.ColumnTypes = []string{} + } + if value.Rows == nil { + value.Rows = [][]any{} + } + return json.Marshal(value) +} + +type querySession struct { + rows *sql.Rows + columns []string + columnTypes []string + pending []any + remaining int +} + +type oracleColumnMeta struct { + Name string + DataType string +} + +type oracleColumnMetaLoader func(schema, table string) ([]oracleColumnMeta, error) + +type databaseInfo struct { + Name string `json:"name"` +} + +type tableInfo struct { + Name string `json:"name"` + TableType string `json:"table_type"` + Comment *string `json:"comment"` +} + +type metadataListConstraints struct { + Filter string + Limit int + Offset int + ObjectTypes []string +} + +type objectInfo struct { + Name string `json:"name"` + ObjectType string `json:"object_type"` + Schema string `json:"schema"` + Comment *string `json:"comment"` +} + +type columnInfo struct { + Name string `json:"name"` + DataType string `json:"data_type"` + IsNullable bool `json:"is_nullable"` + ColumnDefault *string `json:"column_default"` + IsPrimaryKey bool `json:"is_primary_key"` + Extra *string `json:"extra"` + Comment *string `json:"comment"` + NumericPrecision *int `json:"numeric_precision"` + NumericScale *int `json:"numeric_scale"` + CharacterMaximumLength *int `json:"character_maximum_length"` +} + +type indexInfo struct { + Name string `json:"name"` + Columns []string `json:"columns"` + IsUnique bool `json:"is_unique"` + IsPrimary bool `json:"is_primary"` + Filter *string `json:"filter"` + IndexType *string `json:"index_type"` + IncludedColumns []string `json:"included_columns"` + Comment *string `json:"comment"` +} + +func (i indexInfo) MarshalJSON() ([]byte, error) { + type alias indexInfo + value := alias(i) + if value.Columns == nil { + value.Columns = []string{} + } + if value.IncludedColumns == nil { + value.IncludedColumns = []string{} + } + return json.Marshal(value) +} + +type foreignKeyInfo struct { + Name string `json:"name"` + Column string `json:"column"` + RefTable string `json:"ref_table"` + RefColumn string `json:"ref_column"` +} + +type triggerInfo struct { + Name string `json:"name"` + Event string `json:"event"` + Timing string `json:"timing"` +} + +type server struct { + db *sql.DB + params connectParams + sessions map[string]*querySession + tableReadSessions map[string]*querySession + nextSessionID int64 + nextTableReadSessionID int64 +} + +func main() { + s := newServer() + encoder := json.NewEncoder(os.Stdout) + fmt.Fprintln(os.Stdout, `{"ready":true}`) + + scanner := bufio.NewScanner(os.Stdin) + scanner.Buffer(make([]byte, 0, 64*1024), 512*1024*1024) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" { + continue + } + resp, shutdown := s.handleLine(line) + if err := encoder.Encode(resp); err != nil { + fmt.Fprintf(os.Stderr, "failed to write response: %v\n", err) + return + } + if shutdown { + return + } + } + if err := scanner.Err(); err != nil && !errors.Is(err, io.EOF) { + fmt.Fprintf(os.Stderr, "failed to read stdin: %v\n", err) + } +} + +func newServer() *server { + return &server{sessions: map[string]*querySession{}, tableReadSessions: map[string]*querySession{}} +} + +func (s *server) handleLine(line string) (response, bool) { + var req request + if err := json.Unmarshal([]byte(line), &req); err != nil { + return errorResponse(nil, err), false + } + if len(req.ID) == 0 { + req.ID = json.RawMessage("1") + } + result, shutdown, err := s.dispatch(req.Method, req.Params) + if err != nil { + return errorResponse(req.ID, err), false + } + return response{JSONRPC: "2.0", ID: req.ID, Result: result}, shutdown +} + +func (s *server) dispatch(method string, params map[string]json.RawMessage) (any, bool, error) { + switch method { + case "handshake": + return map[string]any{ + "protocolVersion": protocolVersion, + "agentProtocolVersion": protocolVersion, + "capabilities": []string{"connect", "test_connection", "metadata", "query", "ddl"}, + }, false, nil + case "connect": + var cp connectParams + if err := decodeParams(params, &cp); err != nil { + return nil, false, err + } + return map[string]bool{"ok": true}, false, s.connect(cp) + case "test_connection": + var cp connectParams + if err := decodeParams(params, &cp); err != nil { + return nil, false, err + } + db, err := openAndPingDB(cp, 5*time.Second) + if err != nil { + return nil, false, err + } + defer db.Close() + return map[string]bool{"ok": true}, false, nil + case "list_databases": + result, err := s.listDatabases() + return result, false, err + case "list_schemas": + result, err := s.listSchemas(stringSliceParam(params, "visible_schemas")) + return result, false, err + case "list_tables": + schema := stringParam(params, "schema") + result, err := s.listTables(schema, metadataListConstraintsFromParams(params)) + return result, false, err + case "list_objects": + schema := stringParam(params, "schema") + result, err := s.listObjects(schema, metadataListConstraintsFromParams(params)) + return result, false, err + case "get_columns": + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.getColumns(schema, table) + return result, false, err + case "get_object_source": + schema := stringParam(params, "schema") + name := stringParam(params, "name") + objectType := stringParam(params, "object_type") + source, err := s.getObjectSource(schema, name, objectType) + return source, false, err + case "get_table_ddl": + schema := stringParam(params, "schema") + table := stringParam(params, "table") + objectType := stringParam(params, "object_type") + ddl, err := s.getTableDDL(schema, table, objectType) + return ddl, false, err + case "execute_query": + var opts queryOptions + if err := decodeParams(params, &opts); err != nil { + return nil, false, err + } + result, err := s.executeQuery(opts) + return result, false, err + case "execute_query_page": + var opts queryOptions + if err := decodeParams(params, &opts); err != nil { + return nil, false, err + } + result, err := s.executeQueryPage(opts, intParam(params, "pageSize")) + return result, false, err + case "fetch_query_page": + result, err := s.fetchQueryPage(stringParam(params, "sessionId"), intParam(params, "pageSize")) + return result, false, err + case "close_query_session": + return s.closeQuerySession(stringParam(params, "sessionId")), false, nil + case "start_table_read": + var opts queryOptions + if err := decodeParams(params, &opts); err != nil { + return nil, false, err + } + result, err := s.startTableRead(opts, intParam(params, "pageSize")) + return result, false, err + case "fetch_table_read_page": + result, err := s.fetchTableReadPage(stringParam(params, "sessionId"), intParam(params, "pageSize")) + return result, false, err + case "close_table_read_session": + return s.closeTableReadSession(stringParam(params, "sessionId")), false, nil + case "list_indexes": + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.listIndexes(schema, table) + return result, false, err + case "list_foreign_keys": + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.listForeignKeys(schema, table) + return result, false, err + case "list_triggers": + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.listTriggers(schema, table) + return result, false, err + case "get_explain_info": + sqlText := stringParam(params, "sql") + plan, err := s.getExplainInfo( + sqlText, + stringParam(params, "database"), + stringParam(params, "schema"), + intParam(params, "timeoutSecs"), + ) + return map[string]any{"plan": plan, "has_actual_stats": false}, false, err + case "execute_transaction": + result, err := s.executeTransaction(params) + return result, false, err + case "disconnect": + return map[string]bool{"ok": true}, false, s.disconnect() + case "shutdown": + _ = s.disconnect() + return map[string]bool{"ok": true}, true, nil + default: + return nil, false, fmt.Errorf("unknown method: %s", method) + } +} + +func (s *server) connect(params connectParams) error { + _ = s.disconnect() + db, err := openAndPingDB(params, 15*time.Second) + if err != nil { + return err + } + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + if _, err := db.ExecContext(ctx, "ALTER SESSION SET NLS_LANGUAGE='AMERICAN'"); err != nil { + db.Close() + return err + } + s.db = db + s.params = params + return nil +} + +func (s *server) disconnect() error { + s.closeAllQuerySessions() + if s.db == nil { + return nil + } + err := s.db.Close() + s.db = nil + return err +} + +func openDB(params connectParams) (*sql.DB, error) { + return openDBWithStringConverter(params, nil) +} + +func openDBWithStringConverter(params connectParams, stringConverter converters.IStringConverter) (*sql.DB, error) { + dsn := buildDSN(params) + var db *sql.DB + if stringConverter == nil { + var err error + db, err = sql.Open("oracle", dsn) + if err != nil { + return nil, err + } + } else { + connector := go_ora.NewConnector(dsn) + go_ora.SetStringConverter(connector, stringConverter, nil) + db = sql.OpenDB(connector) + } + db.SetMaxOpenConns(4) + db.SetMaxIdleConns(1) + db.SetConnMaxLifetime(30 * time.Minute) + return db, nil +} + +func openAndPingDB(params connectParams, timeout time.Duration) (*sql.DB, error) { + db, err := openDB(params) + if err != nil { + return nil, err + } + if err := pingDB(db, timeout); err != nil { + db.Close() + stringConverter, ok := oracleStringConverterForUnsupportedCharsetError(err) + if !ok { + return nil, err + } + // Retry only charsets with explicit converters. Guessing a converter + // can make the connection succeed while silently corrupting text. + db, err = openDBWithStringConverter(params, stringConverter) + if err != nil { + return nil, err + } + if retryErr := pingDB(db, timeout); retryErr != nil { + db.Close() + return nil, retryErr + } + } + return db, nil +} + +func pingDB(db *sql.DB, timeout time.Duration) error { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + return db.PingContext(ctx) +} + +func oracleStringConverterForUnsupportedCharsetError(err error) (converters.IStringConverter, bool) { + charsetID, ok := unsupportedOracleServerCharsetID(err) + if !ok { + return nil, false + } + stringConverter, ok := oracleStringConverters[charsetID] + return stringConverter, ok +} + +func unsupportedOracleServerCharsetID(err error) (int, bool) { + if err == nil { + return 0, false + } + match := oracleUnsupportedServerCharsetRegexp.FindStringSubmatch(err.Error()) + if len(match) != 2 { + return 0, false + } + charsetID, parseErr := strconv.Atoi(match[1]) + if parseErr != nil { + return 0, false + } + return charsetID, true +} + +type oracleGB18030Converter struct{} + +func (oracleGB18030Converter) Encode(input string) []byte { + output, _, err := transform.String(simplifiedchinese.GB18030.NewEncoder(), input) + if err != nil { + return []byte(input) + } + return []byte(output) +} + +func (oracleGB18030Converter) Decode(input []byte) string { + output, _, err := transform.Bytes(simplifiedchinese.GB18030.NewDecoder(), input) + if err != nil { + return string(input) + } + return string(output) +} + +func (oracleGB18030Converter) GetLangID() int { + return oracleCharsetZHS32GB18030 +} + +func (oracleGB18030Converter) Clone() converters.IStringConverter { + return oracleGB18030Converter{} +} + +func buildDSN(params connectParams) string { + connectionString := strings.TrimSpace(params.ConnectionString) + if strings.HasPrefix(strings.ToLower(connectionString), "oracle://") { + return connectionString + } + username := params.Username + options := parseURLParams(params.URLParams) + if params.SysDBA { + options["AUTH TYPE"] = "SYSDBA" + } + + if jdbc := parseOracleJDBCURL(connectionString); jdbc.Kind != "" { + if jdbc.Descriptor != "" { + return buildGoOraJDBC(username, params.Password, jdbc.Descriptor, options) + } + host := jdbc.Host + port := jdbc.Port + if port == 0 { + port = 1521 + } + if jdbc.Kind == "sid" { + options["SID"] = jdbc.Database + return buildGoOraURL(host, port, "", username, params.Password, options) + } + return buildGoOraURL(host, port, jdbc.Database, username, params.Password, options) + } + + service := strings.TrimSpace(params.Database) + if strings.HasPrefix(strings.ToUpper(service), "SYSDBA:") { + service = strings.TrimSpace(service[len("SYSDBA:"):]) + } + port := params.Port + if port == 0 { + port = 1521 + } + return buildGoOraURL(params.Host, port, service, username, params.Password, options) +} + +func buildGoOraJDBC(user, password, connStr string, options map[string]string) string { + if options == nil { + options = make(map[string]string) + } + options["connStr"] = connStr + return buildGoOraURL("", 0, "", user, password, options) +} + +func buildGoOraURL(server string, port int, service, user, password string, options map[string]string) string { + // go-ora v2.9.0 uses path escaping for user/password, leaving ':' unescaped. + // Userinfo escaping keeps bastion usernames such as 9008888:reader intact + // without changing their authentication semantics. + ret := fmt.Sprintf( + "oracle://%s@%s/%s", + url.UserPassword(user, password).String(), + net.JoinHostPort(server, strconv.Itoa(port)), + url.PathEscape(service), + ) + if options != nil { + ret += "?" + for key, val := range options { + val = strings.TrimSpace(val) + for _, temp := range strings.Split(val, ",") { + temp = strings.TrimSpace(temp) + if strings.ToUpper(key) == "SERVER" { + ret += fmt.Sprintf("%s=%s&", key, temp) + } else { + ret += fmt.Sprintf("%s=%s&", key, url.QueryEscape(temp)) + } + } + } + ret = strings.TrimRight(ret, "&") + } + return ret +} + +type jdbcURLInfo struct { + Kind string + Host string + Port int + Database string + Descriptor string +} + +var ( + oracleJDBCServiceRegexp = regexp.MustCompile(`(?i)^jdbc:oracle:thin:@//([^/:]+):([0-9]+)/([^?]+)`) + oracleJDBCSIDRegexp = regexp.MustCompile(`(?i)^jdbc:oracle:thin:@([^/:]+):([0-9]+):([^?]+)`) + oracleJDBCLegacyRegexp = regexp.MustCompile(`(?i)^jdbc:oracle:thin:@([^/:]+):([0-9]+)/([^?]+)`) +) + +func parseOracleJDBCURL(value string) jdbcURLInfo { + value = strings.TrimSpace(value) + lower := strings.ToLower(value) + if !strings.HasPrefix(lower, "jdbc:oracle:thin:@") { + return jdbcURLInfo{} + } + descriptor := strings.TrimSpace(value[len("jdbc:oracle:thin:@"):]) + if strings.HasPrefix(descriptor, "(") { + return jdbcURLInfo{Kind: "descriptor", Descriptor: descriptor} + } + if match := oracleJDBCServiceRegexp.FindStringSubmatch(value); len(match) == 4 { + return jdbcURLInfo{Kind: "service", Host: match[1], Port: parsePort(match[2]), Database: match[3]} + } + if match := oracleJDBCSIDRegexp.FindStringSubmatch(value); len(match) == 4 { + return jdbcURLInfo{Kind: "sid", Host: match[1], Port: parsePort(match[2]), Database: match[3]} + } + if match := oracleJDBCLegacyRegexp.FindStringSubmatch(value); len(match) == 4 { + return jdbcURLInfo{Kind: "service", Host: match[1], Port: parsePort(match[2]), Database: match[3]} + } + return jdbcURLInfo{} +} + +func parsePort(value string) int { + port, _ := strconv.Atoi(value) + return port +} + +func (s *server) requireDB() (*sql.DB, error) { + if s.db == nil { + return nil, errors.New("agent is not connected") + } + return s.db, nil +} + +func (s *server) listDatabases() ([]databaseInfo, error) { + rows, err := s.queryRows(oracleListDatabasesSQL, nil) + if err != nil { + if isOraclePGALimitError(err) { + return s.currentSchemaDatabase() + } + return nil, err + } + defer rows.Close() + var result []databaseInfo + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + result = append(result, databaseInfo{Name: name}) + } + if err := rows.Err(); err != nil { + if isOraclePGALimitError(err) { + return s.currentSchemaDatabase() + } + return nil, err + } + return emptyIfNil(result), nil +} + +func isOraclePGALimitError(err error) bool { + return err != nil && strings.Contains(strings.ToUpper(err.Error()), "ORA-04036") +} + +func (s *server) currentSchemaDatabase() ([]databaseInfo, error) { + schema, err := s.currentSchema() + if err != nil { + return nil, err + } + if strings.TrimSpace(schema) == "" { + return []databaseInfo{}, nil + } + return []databaseInfo{{Name: schema}}, nil +} + +func (s *server) listSchemas(visibleSchemas []string) ([]string, error) { + if visibleSchemas != nil && len(visibleSchemas) == 0 { + return []string{}, nil + } + databases, err := s.listDatabasesFiltered(visibleSchemas) + if err != nil { + return nil, err + } + result := make([]string, 0, len(databases)) + for _, database := range databases { + result = append(result, database.Name) + } + return emptyIfNil(result), nil +} + +func (s *server) listDatabasesFiltered(visibleSchemas []string) ([]databaseInfo, error) { + if visibleSchemas == nil { + return s.listDatabases() + } + sqlText, args := oracleListDatabasesSQLWithVisibleSchemas(visibleSchemas) + rows, err := s.queryRows(sqlText, args) + if err != nil { + if isOraclePGALimitError(err) { + return s.currentSchemaDatabase() + } + return nil, err + } + defer rows.Close() + var result []databaseInfo + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + result = append(result, databaseInfo{Name: name}) + } + if err := rows.Err(); err != nil { + if isOraclePGALimitError(err) { + return s.currentSchemaDatabase() + } + return nil, err + } + return emptyIfNil(result), nil +} + +func oracleListDatabasesSQLWithVisibleSchemas(visibleSchemas []string) (string, []any) { + if len(visibleSchemas) == 0 { + return oracleListDatabasesSQL, nil + } + placeholders := make([]string, 0, len(visibleSchemas)) + args := make([]any, 0, len(visibleSchemas)) + for i, schema := range visibleSchemas { + placeholders = append(placeholders, fmt.Sprintf(":%d", i+1)) + args = append(args, schema) + } + sqlText := strings.Replace( + oracleListDatabasesSQL, + "\nORDER BY CASE", + "\n AND username IN ("+strings.Join(placeholders, ",")+")\nORDER BY CASE", + 1, + ) + return sqlText, args +} + +func (s *server) currentSchema() (string, error) { + db, err := s.requireDB() + if err != nil { + return "", err + } + var schema string + if err := db.QueryRow("SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL").Scan(&schema); err != nil { + return "", err + } + return strings.ToUpper(schema), nil +} + +func (s *server) normalizeSchema(schema string) (string, error) { + schema = strings.TrimSpace(schema) + if schema == "" { + return s.currentSchema() + } + return strings.ToUpper(schema), nil +} + +func (s *server) sessionUser() (string, error) { + db, err := s.requireDB() + if err != nil { + return "", err + } + var username string + if err := db.QueryRow("SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL").Scan(&username); err != nil { + return "", err + } + return strings.ToUpper(username), nil +} + +func (s *server) schemaIsSessionUser(schema string) bool { + username, err := s.sessionUser() + return err == nil && strings.EqualFold(schema, username) +} + +type oracleMetadataListQuery struct { + SQL string + Args []any +} + +func metadataListConstraintsFromParams(params map[string]json.RawMessage) metadataListConstraints { + objectTypes := stringSliceParam(params, "object_types") + if len(objectTypes) == 0 { + objectTypes = stringSliceParam(params, "objectTypes") + } + limit := intParam(params, "limit") + offset := intParam(params, "offset") + if limit < 0 { + limit = 0 + } + if offset < 0 { + offset = 0 + } + return metadataListConstraints{ + Filter: stringParam(params, "filter"), + Limit: limit, + Offset: offset, + ObjectTypes: objectTypes, + } +} + +func oracleListTablesQuery(schema string, constraints metadataListConstraints) oracleMetadataListQuery { + return oracleConstrainedMetadataListQuery( + oracleListTablesBaseSQL, + "OBJECT_NAME, TABLE_TYPE, COMMENTS", + "TABLE_TYPE", + oracleListTablesOrderSQL, + []any{schema, schema}, + constraints, + ) +} + +func oracleListSessionUserTablesQuery(constraints metadataListConstraints) oracleMetadataListQuery { + return oracleConstrainedMetadataListQuery( + oracleListTablesSessionUserBaseSQL, + "OBJECT_NAME, TABLE_TYPE, COMMENTS", + "TABLE_TYPE", + oracleListTablesOrderSQL, + nil, + constraints, + ) +} + +func oracleListObjectsQuery(schema string, constraints metadataListConstraints) oracleMetadataListQuery { + return oracleConstrainedMetadataListQuery( + oracleListObjectsBaseSQL, + "OBJECT_NAME, OBJECT_TYPE, COMMENTS", + "OBJECT_TYPE", + oracleListObjectsOrderSQL, + []any{schema, schema}, + constraints, + ) +} + +func oracleListSessionUserObjectsQuery(constraints metadataListConstraints) oracleMetadataListQuery { + return oracleConstrainedMetadataListQuery( + oracleListObjectsSessionUserBaseSQL, + "OBJECT_NAME, OBJECT_TYPE, COMMENTS", + "OBJECT_TYPE", + oracleListObjectsOrderSQL, + nil, + constraints, + ) +} + +func oracleConstrainedMetadataListQuery(baseSQL, selectList, typeColumn, orderSQL string, baseArgs []any, constraints metadataListConstraints) oracleMetadataListQuery { + args := append([]any{}, baseArgs...) + where := make([]string, 0, 2) + if filter := strings.TrimSpace(constraints.Filter); filter != "" { + args = append(args, strings.ToUpper(oracleFuzzyLikePattern(filter))) + where = append(where, fmt.Sprintf("UPPER(OBJECT_NAME) LIKE :%d ESCAPE '\\'", len(args))) + } + if objectTypes := normalizedMetadataObjectTypes(constraints.ObjectTypes); len(objectTypes) > 0 { + placeholders := make([]string, 0, len(objectTypes)) + for _, objectType := range objectTypes { + args = append(args, objectType) + placeholders = append(placeholders, fmt.Sprintf(":%d", len(args))) + } + where = append(where, fmt.Sprintf("%s IN (%s)", typeColumn, strings.Join(placeholders, ","))) + } + + sqlText := fmt.Sprintf("SELECT %s\nFROM (\n%s\n)", selectList, baseSQL) + if len(where) > 0 { + sqlText += "\nWHERE " + strings.Join(where, " AND ") + } + sqlText += "\n" + orderSQL + + if constraints.Limit > 0 { + args = append(args, constraints.Offset+constraints.Limit) + maxRowParam := len(args) + args = append(args, constraints.Offset) + offsetParam := len(args) + sqlText = fmt.Sprintf( + "SELECT %s\nFROM (\n SELECT DBX_Q.*, ROWNUM AS DBX_RN\n FROM (\n%s\n ) DBX_Q\n WHERE ROWNUM <= :%d\n)\nWHERE DBX_RN > :%d", + selectList, + sqlText, + maxRowParam, + offsetParam, + ) + } else if constraints.Offset > 0 { + args = append(args, constraints.Offset) + offsetParam := len(args) + sqlText = fmt.Sprintf( + "SELECT %s\nFROM (\n SELECT DBX_Q.*, ROWNUM AS DBX_RN\n FROM (\n%s\n ) DBX_Q\n)\nWHERE DBX_RN > :%d", + selectList, + sqlText, + offsetParam, + ) + } + + return oracleMetadataListQuery{SQL: sqlText, Args: args} +} + +func normalizedMetadataObjectTypes(values []string) []string { + seen := map[string]bool{} + result := make([]string, 0, len(values)) + for _, value := range values { + normalized := strings.ToUpper(strings.TrimSpace(value)) + normalized = strings.ReplaceAll(normalized, "-", "_") + normalized = strings.ReplaceAll(normalized, " ", "_") + if normalized == "" || seen[normalized] { + continue + } + seen[normalized] = true + result = append(result, normalized) + } + sort.Strings(result) + return result +} + +func oracleFuzzyLikePattern(value string) string { + value = strings.TrimSpace(value) + if value == "" { + return "%%" + } + var builder strings.Builder + builder.Grow(len(value)*2 + 2) + builder.WriteByte('%') + for _, ch := range value { + switch ch { + case '\\', '%', '_': + builder.WriteByte('\\') + } + builder.WriteRune(ch) + builder.WriteByte('%') + } + return builder.String() +} + +func (s *server) listTables(schema string, constraints metadataListConstraints) ([]tableInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + query := oracleListTablesQuery(schema, constraints) + if s.schemaIsSessionUser(schema) { + query = oracleListSessionUserTablesQuery(constraints) + } + rows, err := s.queryRows(query.SQL, query.Args) + if err != nil { + if isOraclePGALimitError(err) { + return []tableInfo{}, nil + } + return nil, err + } + defer rows.Close() + var result []tableInfo + for rows.Next() { + var item tableInfo + if err := rows.Scan(&item.Name, &item.TableType, &item.Comment); err != nil { + return nil, err + } + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) listObjects(schema string, constraints metadataListConstraints) ([]objectInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + query := oracleListObjectsQuery(schema, constraints) + if s.schemaIsSessionUser(schema) { + query = oracleListSessionUserObjectsQuery(constraints) + } + rows, err := s.queryRows(query.SQL, query.Args) + if err != nil { + if isOraclePGALimitError(err) { + return []objectInfo{}, nil + } + return nil, err + } + defer rows.Close() + var result []objectInfo + for rows.Next() { + var item objectInfo + item.Schema = schema + if err := rows.Scan(&item.Name, &item.ObjectType, &item.Comment); err != nil { + return nil, err + } + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) getColumns(schema, table string) ([]columnInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT c.COLUMN_NAME, + c.DATA_TYPE, + c.NULLABLE, + c.DATA_DEFAULT, + CASE WHEN pk.COLUMN_NAME IS NULL THEN 0 ELSE 1 END AS IS_PRIMARY_KEY, + cc.COMMENTS, + c.DATA_PRECISION, + c.DATA_SCALE, + c.CHAR_LENGTH +FROM ALL_TAB_COLUMNS c +LEFT JOIN ( + SELECT acc.OWNER, acc.TABLE_NAME, acc.COLUMN_NAME + FROM ALL_CONSTRAINTS ac + JOIN ALL_CONS_COLUMNS acc ON acc.OWNER = ac.OWNER AND acc.CONSTRAINT_NAME = ac.CONSTRAINT_NAME + WHERE ac.CONSTRAINT_TYPE = 'P' +) pk ON pk.OWNER = c.OWNER AND pk.TABLE_NAME = c.TABLE_NAME AND pk.COLUMN_NAME = c.COLUMN_NAME +LEFT JOIN ALL_COL_COMMENTS cc ON cc.OWNER = c.OWNER AND cc.TABLE_NAME = c.TABLE_NAME AND cc.COLUMN_NAME = c.COLUMN_NAME +WHERE c.OWNER = :1 AND c.TABLE_NAME = :2 +ORDER BY c.COLUMN_ID`, []any{schema, table}) + if err != nil { + return nil, err + } + defer rows.Close() + var result []columnInfo + for rows.Next() { + var item columnInfo + var nullable string + var primary int + if err := rows.Scan( + &item.Name, + &item.DataType, + &nullable, + &item.ColumnDefault, + &primary, + &item.Comment, + &item.NumericPrecision, + &item.NumericScale, + &item.CharacterMaximumLength, + ); err != nil { + return nil, err + } + item.IsNullable = nullable == "Y" + item.IsPrimaryKey = primary != 0 + item.DataType = oracleColumnTypeDDL(item) + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) loadOracleColumnMeta(schema, table string) ([]oracleColumnMeta, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT COLUMN_NAME, DATA_TYPE +FROM ALL_TAB_COLUMNS +WHERE OWNER = :1 AND TABLE_NAME = :2 +ORDER BY COLUMN_ID`, []any{schema, table}) + if err != nil { + return nil, err + } + defer rows.Close() + var result []oracleColumnMeta + for rows.Next() { + var item oracleColumnMeta + if err := rows.Scan(&item.Name, &item.DataType); err != nil { + return nil, err + } + result = append(result, item) + } + return result, rows.Err() +} + +func (s *server) listIndexes(schema, table string) ([]indexInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT i.INDEX_NAME, + ic.COLUMN_NAME, + i.UNIQUENESS, + CASE WHEN pk.CONSTRAINT_NAME IS NULL THEN 0 ELSE 1 END AS IS_PRIMARY, + i.INDEX_TYPE, + ic.COLUMN_POSITION +FROM ALL_INDEXES i +JOIN ALL_IND_COLUMNS ic ON ic.INDEX_OWNER = i.OWNER AND ic.INDEX_NAME = i.INDEX_NAME +LEFT JOIN ALL_CONSTRAINTS pk ON pk.OWNER = i.TABLE_OWNER + AND pk.TABLE_NAME = i.TABLE_NAME + AND pk.CONSTRAINT_TYPE = 'P' + AND pk.INDEX_NAME = i.INDEX_NAME +WHERE i.TABLE_OWNER = :1 AND i.TABLE_NAME = :2 +ORDER BY i.INDEX_NAME, ic.COLUMN_POSITION`, []any{schema, table}) + if err != nil { + return nil, err + } + defer rows.Close() + + byName := map[string]*indexInfo{} + order := []string{} + for rows.Next() { + var name, column, uniqueness, indexType string + var primary int + var position int + if err := rows.Scan(&name, &column, &uniqueness, &primary, &indexType, &position); err != nil { + return nil, err + } + item := byName[name] + if item == nil { + item = &indexInfo{ + Name: name, + Columns: []string{}, + IsUnique: uniqueness == "UNIQUE", + IsPrimary: primary != 0, + IndexType: &indexType, + IncludedColumns: []string{}, + } + byName[name] = item + order = append(order, name) + } + item.Columns = append(item.Columns, column) + } + if err := rows.Err(); err != nil { + return nil, err + } + result := make([]indexInfo, 0, len(order)) + for _, name := range order { + result = append(result, *byName[name]) + } + return emptyIfNil(result), nil +} + +func (s *server) listForeignKeys(schema, table string) ([]foreignKeyInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT ac.CONSTRAINT_NAME, + acc.COLUMN_NAME, + rcc.TABLE_NAME AS REF_TABLE, + rcc.COLUMN_NAME AS REF_COLUMN +FROM ALL_CONSTRAINTS ac +JOIN ALL_CONS_COLUMNS acc ON acc.OWNER = ac.OWNER AND acc.CONSTRAINT_NAME = ac.CONSTRAINT_NAME +JOIN ALL_CONS_COLUMNS rcc ON rcc.OWNER = ac.R_OWNER AND rcc.CONSTRAINT_NAME = ac.R_CONSTRAINT_NAME + AND rcc.POSITION = acc.POSITION +WHERE ac.OWNER = :1 + AND ac.TABLE_NAME = :2 + AND ac.CONSTRAINT_TYPE = 'R' +ORDER BY ac.CONSTRAINT_NAME, acc.POSITION`, []any{schema, table}) + if err != nil { + return nil, err + } + defer rows.Close() + var result []foreignKeyInfo + for rows.Next() { + var item foreignKeyInfo + if err := rows.Scan(&item.Name, &item.Column, &item.RefTable, &item.RefColumn); err != nil { + return nil, err + } + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) listTriggers(schema, table string) ([]triggerInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT TRIGGER_NAME, TRIGGERING_EVENT, TRIGGER_TYPE +FROM ALL_TRIGGERS +WHERE OWNER = :1 AND TABLE_NAME = :2 +ORDER BY TRIGGER_NAME`, []any{schema, table}) + if err != nil { + return nil, err + } + defer rows.Close() + var result []triggerInfo + for rows.Next() { + var item triggerInfo + if err := rows.Scan(&item.Name, &item.Event, &item.Timing); err != nil { + return nil, err + } + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) getObjectSource(schema, name, objectType string) (map[string]any, error) { + var err error + schema, err = s.normalizeSchema(schema) + if err != nil { + return nil, err + } + upperType := strings.ToUpper(objectType) + if upperType == "VIEW" { + // ALL_VIEWS.TEXT for views — ALL_SOURCE doesn't contain views, and + // DBMS_METADATA.GET_DDL fails on XE editions. + var source string + err = s.db.QueryRow( + "SELECT TEXT FROM ALL_VIEWS WHERE OWNER = :1 AND VIEW_NAME = :2", + schema, strings.ToUpper(name), + ).Scan(&source) + if errors.Is(err, sql.ErrNoRows) { + return map[string]any{"name": name, "object_type": objectType, "schema": schema, "source": ""}, nil + } + if err != nil { + return nil, err + } + return map[string]any{"name": name, "object_type": objectType, "schema": schema, "source": source}, nil + } + + rows, err := s.queryRows(` +SELECT TEXT +FROM ALL_SOURCE +WHERE OWNER = :1 AND NAME = :2 AND TYPE = :3 +ORDER BY LINE`, []any{schema, strings.ToUpper(name), upperType}) + if err != nil { + return nil, err + } + defer rows.Close() + var builder strings.Builder + for rows.Next() { + var line string + if err := rows.Scan(&line); err != nil { + return nil, err + } + builder.WriteString(line) + } + return map[string]any{"name": name, "object_type": objectType, "schema": schema, "source": builder.String()}, rows.Err() +} + +func (s *server) getTableDDL(schema, table, objectType string) (string, error) { + var err error + schema, err = s.normalizeSchema(schema) + if err != nil { + return "", err + } + db, err := s.requireDB() + if err != nil { + return "", err + } + objectType, err = s.resolveDDLObjectType(schema, table, objectType) + if err != nil { + return "", err + } + if objectType == "VIEW" { + return s.buildViewDDL(schema, table) + } + var ddl string + err = db.QueryRow("SELECT DBMS_METADATA.GET_DDL(:1, :2, :3) FROM DUAL", objectType, strings.ToUpper(table), schema).Scan(&ddl) + if err == nil && strings.TrimSpace(ddl) != "" { + return ddl, nil + } + if objectType == "TABLE" { + return s.buildTableDDL(schema, table) + } + return "", err +} + +func (s *server) resolveDDLObjectType(schema, name, requested string) (string, error) { + objectType := normalizeDDLObjectType(requested) + if objectType != "" { + return objectType, nil + } + db, err := s.requireDB() + if err != nil { + return "", err + } + err = db.QueryRow(` +SELECT OBJECT_TYPE +FROM ( + SELECT OBJECT_TYPE + FROM ALL_OBJECTS + WHERE OWNER = :1 + AND OBJECT_NAME = :2 + AND OBJECT_TYPE IN ('TABLE', 'VIEW', 'MATERIALIZED VIEW') + ORDER BY CASE OBJECT_TYPE WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 ELSE 2 END +) +WHERE ROWNUM = 1`, schema, strings.ToUpper(name)).Scan(&objectType) + if errors.Is(err, sql.ErrNoRows) { + return "", fmt.Errorf("object not found: %s.%s", schema, name) + } + if err != nil { + return "", err + } + return normalizeDDLObjectType(objectType), nil +} + +func normalizeDDLObjectType(value string) string { + switch strings.ToUpper(strings.ReplaceAll(strings.TrimSpace(value), " ", "_")) { + case "TABLE": + return "TABLE" + case "VIEW": + return "VIEW" + case "MATERIALIZED_VIEW": + return "MATERIALIZED_VIEW" + default: + return "" + } +} + +func (s *server) buildViewDDL(schema, name string) (string, error) { + db, err := s.requireDB() + if err != nil { + return "", err + } + var source string + err = db.QueryRow( + "SELECT TEXT FROM ALL_VIEWS WHERE OWNER = :1 AND VIEW_NAME = :2", + schema, strings.ToUpper(name), + ).Scan(&source) + if errors.Is(err, sql.ErrNoRows) { + return "", fmt.Errorf("view not found: %s.%s", schema, name) + } + if err != nil { + return "", err + } + return fmt.Sprintf("CREATE OR REPLACE VIEW %s.%s AS\n%s", quoteIdentifier(schema), quoteIdentifier(name), strings.TrimSpace(source)), nil +} + +func (s *server) buildTableDDL(schema, table string) (string, error) { + columns, err := s.getColumns(schema, table) + if err != nil { + return "", err + } + if len(columns) == 0 { + return "", fmt.Errorf("table not found: %s.%s", schema, table) + } + var builder strings.Builder + builder.WriteString("CREATE TABLE ") + builder.WriteString(quoteIdentifier(schema)) + builder.WriteByte('.') + builder.WriteString(quoteIdentifier(table)) + builder.WriteString(" (\n") + for i, column := range columns { + if i > 0 { + builder.WriteString(",\n") + } + builder.WriteString(" ") + builder.WriteString(quoteIdentifier(column.Name)) + builder.WriteByte(' ') + builder.WriteString(oracleColumnTypeDDL(column)) + if column.ColumnDefault != nil && strings.TrimSpace(*column.ColumnDefault) != "" { + builder.WriteString(" DEFAULT ") + builder.WriteString(strings.TrimSpace(*column.ColumnDefault)) + } + if !column.IsNullable { + builder.WriteString(" NOT NULL") + } + } + primary := make([]string, 0) + for _, column := range columns { + if column.IsPrimaryKey { + primary = append(primary, quoteIdentifier(column.Name)) + } + } + if len(primary) > 0 { + builder.WriteString(",\n PRIMARY KEY (") + builder.WriteString(strings.Join(primary, ", ")) + builder.WriteByte(')') + } + builder.WriteString("\n)") + return builder.String(), nil +} + +func oracleColumnTypeDDL(column columnInfo) string { + dataType := strings.ToUpper(strings.TrimSpace(column.DataType)) + if dataType == "" { + return "VARCHAR2(4000)" + } + if strings.Contains(dataType, "(") { + return dataType + } + if isOracleCharacterType(dataType) && column.CharacterMaximumLength != nil && *column.CharacterMaximumLength > 0 { + return fmt.Sprintf("%s(%d)", dataType, *column.CharacterMaximumLength) + } + if dataType == "NUMBER" { + if column.NumericPrecision != nil && *column.NumericPrecision > 0 { + if column.NumericScale != nil && *column.NumericScale != 0 { + return fmt.Sprintf("NUMBER(%d,%d)", *column.NumericPrecision, *column.NumericScale) + } + return fmt.Sprintf("NUMBER(%d)", *column.NumericPrecision) + } + return "NUMBER" + } + if (dataType == "FLOAT" || dataType == "BINARY_FLOAT" || dataType == "BINARY_DOUBLE") && + column.NumericPrecision != nil && *column.NumericPrecision > 0 { + return fmt.Sprintf("%s(%d)", dataType, *column.NumericPrecision) + } + return dataType +} + +func isOracleCharacterType(dataType string) bool { + switch dataType { + case "CHAR", "VARCHAR2", "VARCHAR", "NCHAR", "NVARCHAR2", "RAW": + return true + default: + return false + } +} + +func (s *server) getExplainInfo(sqlText, database, schema string, timeoutSecs int) (string, error) { + if strings.TrimSpace(sqlText) == "" { + return "", errors.New("sql is required") + } + db, err := s.requireDB() + if err != nil { + return "", err + } + + ctx := context.Background() + var cancel context.CancelFunc + if timeoutSecs > 0 { + ctx, cancel = context.WithTimeout(ctx, time.Duration(timeoutSecs)*time.Second) + } else { + ctx, cancel = context.WithCancel(ctx) + } + defer cancel() + + conn, err := db.Conn(ctx) + if err != nil { + return "", err + } + defer conn.Close() + + targetSchema := strings.TrimSpace(schema) + if targetSchema == "" && !strings.EqualFold(strings.TrimSpace(database), strings.TrimSpace(s.params.Database)) { + targetSchema = strings.TrimSpace(database) + } + if targetSchema != "" { + var originalSchema string + if err := conn.QueryRowContext(ctx, "SELECT SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') FROM DUAL").Scan(&originalSchema); err != nil { + return "", err + } + if !strings.EqualFold(originalSchema, targetSchema) { + if _, err := conn.ExecContext(ctx, "ALTER SESSION SET CURRENT_SCHEMA = "+quoteIdentifier(targetSchema)); err != nil { + return "", err + } + defer restoreOracleCurrentSchema(conn, originalSchema) + } + } + + statementID := "DBX_" + strings.ToUpper(strconv.FormatInt(time.Now().UnixNano(), 36)) + defer cleanupOracleExplainPlan(conn, statementID) + statementSQL := trimStatementSQL(sqlText) + explainArgs := oracleExplainPlanBindArgs(statementSQL) + if _, err := conn.ExecContext(ctx, "EXPLAIN PLAN SET STATEMENT_ID = '"+statementID+"' FOR "+statementSQL, explainArgs...); err != nil { + return "", err + } + planRows, err := conn.QueryContext( + ctx, + "SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE', :1, 'TYPICAL +PREDICATE'))", + statementID, + ) + if err != nil { + return "", err + } + defer planRows.Close() + var builder strings.Builder + for planRows.Next() { + var line string + if err := planRows.Scan(&line); err != nil { + return "", err + } + builder.WriteString(line) + builder.WriteByte('\n') + } + return strings.TrimSpace(builder.String()), planRows.Err() +} + +func cleanupOracleExplainPlan(conn *sql.Conn, statementID string) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + _, _ = conn.ExecContext(ctx, "DELETE FROM PLAN_TABLE WHERE STATEMENT_ID = :1", statementID) +} + +type oracleBindParam struct { + Name string + Positional bool +} + +func oracleExplainPlanBindArgs(sqlText string) []any { + params := oracleExplainPlanBindParams(sqlText) + args := make([]any, 0, len(params)) + for _, param := range params { + if param.Positional { + args = append(args, nil) + continue + } + args = append(args, sql.Named(param.Name, nil)) + } + return args +} + +func oracleExplainPlanBindParams(sqlText string) []oracleBindParam { + params := make([]oracleBindParam, 0) + seenNamed := map[string]bool{} + for pos := 0; pos < len(sqlText); pos++ { + switch sqlText[pos] { + case '\'': + pos = skipSingleQuotedSQL(sqlText, pos) + case '"': + pos = skipDoubleQuotedSQL(sqlText, pos) + case 'q', 'Q': + if end, ok := skipOracleAlternativeQuotedSQL(sqlText, pos); ok { + pos = end + } + case '-': + if pos+1 < len(sqlText) && sqlText[pos+1] == '-' { + pos = skipLineCommentSQL(sqlText, pos) + } + case '/': + if pos+1 < len(sqlText) && sqlText[pos+1] == '*' { + pos = skipBlockCommentSQL(sqlText, pos) + } + case ':': + param, end, ok := readOracleBindParam(sqlText, pos) + if !ok { + continue + } + if param.Positional { + params = append(params, param) + } else if key := strings.ToUpper(param.Name); !seenNamed[key] { + seenNamed[key] = true + params = append(params, param) + } + pos = end - 1 + } + } + return params +} + +func readOracleBindParam(sqlText string, pos int) (oracleBindParam, int, bool) { + if pos < 0 || pos+1 >= len(sqlText) || sqlText[pos] != ':' { + return oracleBindParam{}, pos, false + } + if pos > 0 && sqlText[pos-1] == ':' { + return oracleBindParam{}, pos, false + } + next := sqlText[pos+1] + if next >= '0' && next <= '9' { + end := pos + 2 + for end < len(sqlText) && sqlText[end] >= '0' && sqlText[end] <= '9' { + end++ + } + return oracleBindParam{Name: sqlText[pos+1 : end], Positional: true}, end, true + } + if !isOracleIdentifierStart(next) { + return oracleBindParam{}, pos, false + } + end := pos + 2 + for end < len(sqlText) && isOracleIdentifierPart(sqlText[end]) { + end++ + } + return oracleBindParam{Name: sqlText[pos+1 : end]}, end, true +} + +func restoreOracleCurrentSchema(conn *sql.Conn, schema string) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + _, _ = conn.ExecContext(ctx, "ALTER SESSION SET CURRENT_SCHEMA = "+quoteIdentifier(schema)) +} + +func (s *server) executeTransaction(params map[string]json.RawMessage) (queryResult, error) { + var payload struct { + Statements []string `json:"statements"` + Schema string `json:"schema"` + } + if err := decodeParams(params, &payload); err != nil { + return queryResult{}, err + } + db, err := s.requireDB() + if err != nil { + return queryResult{}, err + } + tx, err := db.Begin() + if err != nil { + return queryResult{}, err + } + if strings.TrimSpace(payload.Schema) != "" { + if _, err := tx.Exec("ALTER SESSION SET CURRENT_SCHEMA = " + quoteIdentifier(payload.Schema)); err != nil { + tx.Rollback() + return queryResult{}, err + } + } + var affected int64 + start := time.Now() + for _, statement := range payload.Statements { + statement = trimStatementSQL(statement) + if statement == "" { + continue + } + result, err := tx.Exec(statement) + if err != nil { + tx.Rollback() + return queryResult{}, err + } + count, _ := result.RowsAffected() + affected += count + } + if err := tx.Commit(); err != nil { + return queryResult{}, err + } + return queryResult{ + Columns: []string{}, + Rows: [][]any{}, + AffectedRows: affected, + ExecutionTimeMS: time.Since(start).Milliseconds(), + }, nil +} + +func (s *server) executeQueryPage(opts queryOptions, pageSize int) (queryPageResult, error) { + start := time.Now() + if strings.TrimSpace(opts.Schema) != "" { + if err := s.setSchema(opts.Schema); err != nil { + return queryPageResult{}, err + } + } + sqlText := trimStatementSQL(opts.SQL) + if !isQuerySQL(sqlText) { + result, err := s.executeQuery(opts) + return queryPageResult{ + Columns: result.Columns, + ColumnTypes: result.ColumnTypes, + Rows: result.Rows, + AffectedRows: result.AffectedRows, + ExecutionTimeMS: result.ExecutionTimeMS, + Truncated: result.Truncated, + SessionID: nil, + HasMore: false, + }, err + } + rows, err := s.queryRowsWithXMLTypeRewriteIfNeeded(sqlText) + if err != nil { + return queryPageResult{}, err + } + columns, err := rows.Columns() + if err != nil { + rows.Close() + return queryPageResult{}, err + } + columnTypes := columnTypeNames(rows) + maxRows := opts.MaxRows + if maxRows <= 0 { + maxRows = defaultMaxRows + } + session := &querySession{rows: rows, columns: columns, columnTypes: columnTypes, remaining: maxRows} + result, err := readQuerySessionPage(session, pageSize) + result.ExecutionTimeMS = time.Since(start).Milliseconds() + if err != nil { + rows.Close() + return queryPageResult{}, err + } + if result.HasMore { + sessionID := s.storeQuerySession(session) + result.SessionID = &sessionID + } else { + rows.Close() + } + return result, nil +} + +func (s *server) fetchQueryPage(sessionID string, pageSize int) (queryPageResult, error) { + session := s.sessions[sessionID] + if session == nil { + return queryPageResult{Columns: []string{}, ColumnTypes: []string{}, Rows: [][]any{}, SessionID: nil, HasMore: false}, nil + } + result, err := readQuerySessionPage(session, pageSize) + if err != nil { + s.closeQuerySession(sessionID) + return queryPageResult{}, err + } + if result.HasMore { + result.SessionID = &sessionID + } else { + s.closeQuerySession(sessionID) + } + return result, nil +} + +func (s *server) storeQuerySession(session *querySession) string { + s.nextSessionID++ + sessionID := fmt.Sprintf("oracle-go-%d", s.nextSessionID) + s.sessions[sessionID] = session + return sessionID +} + +func (s *server) startTableRead(opts queryOptions, pageSize int) (queryPageResult, error) { + start := time.Now() + if strings.TrimSpace(opts.Schema) != "" { + if err := s.setSchema(opts.Schema); err != nil { + return queryPageResult{}, err + } + } + sqlText := trimStatementSQL(opts.SQL) + if !isQuerySQL(sqlText) { + return queryPageResult{}, errors.New("table read requires a SELECT query") + } + rows, err := s.queryRowsWithXMLTypeRewriteIfNeeded(sqlText) + if err != nil { + return queryPageResult{}, err + } + columns, err := rows.Columns() + if err != nil { + rows.Close() + return queryPageResult{}, err + } + columnTypes := columnTypeNames(rows) + maxRows := opts.MaxRows + if maxRows <= 0 { + maxRows = defaultMaxRows + } + session := &querySession{rows: rows, columns: columns, columnTypes: columnTypes, remaining: maxRows} + result, err := readQuerySessionPage(session, pageSize) + result.ExecutionTimeMS = time.Since(start).Milliseconds() + if err != nil { + rows.Close() + return queryPageResult{}, err + } + if result.HasMore { + sessionID := s.storeTableReadSession(session) + result.SessionID = &sessionID + } else { + rows.Close() + } + return result, nil +} + +func (s *server) fetchTableReadPage(sessionID string, pageSize int) (queryPageResult, error) { + session := s.tableReadSessions[sessionID] + if session == nil { + return queryPageResult{Columns: []string{}, ColumnTypes: []string{}, Rows: [][]any{}, SessionID: nil, HasMore: false}, nil + } + result, err := readQuerySessionPage(session, pageSize) + if err != nil { + s.closeTableReadSession(sessionID) + return queryPageResult{}, err + } + if result.HasMore { + result.SessionID = &sessionID + } else { + s.closeTableReadSession(sessionID) + } + return result, nil +} + +func (s *server) storeTableReadSession(session *querySession) string { + s.nextTableReadSessionID++ + sessionID := fmt.Sprintf("oracle-go-table-%d", s.nextTableReadSessionID) + s.tableReadSessions[sessionID] = session + return sessionID +} + +func (s *server) closeQuerySession(sessionID string) bool { + session := s.sessions[sessionID] + if session == nil { + return false + } + session.rows.Close() + delete(s.sessions, sessionID) + return true +} + +func (s *server) closeTableReadSession(sessionID string) bool { + session := s.tableReadSessions[sessionID] + if session == nil { + return false + } + session.rows.Close() + delete(s.tableReadSessions, sessionID) + return true +} + +func (s *server) closeAllQuerySessions() { + for sessionID := range s.sessions { + s.closeQuerySession(sessionID) + } + for sessionID := range s.tableReadSessions { + s.closeTableReadSession(sessionID) + } +} + +func readQuerySessionPage(session *querySession, pageSize int) (queryPageResult, error) { + if pageSize <= 0 { + pageSize = defaultMaxRows + } + result := queryPageResult{Columns: session.columns, ColumnTypes: session.columnTypes, Rows: [][]any{}, SessionID: nil, HasMore: false} + for len(result.Rows) < pageSize && session.remaining > 0 { + if session.pending != nil { + result.Rows = append(result.Rows, session.pending) + session.pending = nil + session.remaining-- + continue + } + if !session.rows.Next() { + return result, session.rows.Err() + } + row, err := scanRow(session.rows, len(session.columns), session.columnTypes) + if err != nil { + return queryPageResult{}, err + } + result.Rows = append(result.Rows, row) + session.remaining-- + } + if session.remaining <= 0 { + result.Truncated = true + return result, nil + } + if session.rows.Next() { + row, err := scanRow(session.rows, len(session.columns), session.columnTypes) + if err != nil { + return queryPageResult{}, err + } + session.pending = row + result.HasMore = true + return result, nil + } + return result, session.rows.Err() +} + +func (s *server) executeQuery(opts queryOptions) (queryResult, error) { + start := time.Now() + if strings.TrimSpace(opts.Schema) != "" { + if err := s.setSchema(opts.Schema); err != nil { + return queryResult{}, err + } + } + sqlText := trimStatementSQL(opts.SQL) + maxRows := opts.MaxRows + if maxRows <= 0 { + maxRows = defaultMaxRows + } + if isQuerySQL(sqlText) { + result, err := s.executeSelect(sqlText, maxRows) + result.ExecutionTimeMS = time.Since(start).Milliseconds() + return result, err + } + db, err := s.requireDB() + if err != nil { + return queryResult{}, err + } + execResult, err := db.Exec(sqlText) + if err != nil { + return queryResult{}, err + } + affected, _ := execResult.RowsAffected() + return queryResult{Columns: []string{}, ColumnTypes: []string{}, Rows: [][]any{}, AffectedRows: affected, ExecutionTimeMS: time.Since(start).Milliseconds()}, nil +} + +func (s *server) executeSelect(sqlText string, maxRows int) (queryResult, error) { + rows, err := s.queryRowsWithXMLTypeRewriteIfNeeded(sqlText) + if err != nil { + return queryResult{}, err + } + defer rows.Close() + columns, err := rows.Columns() + if err != nil { + return queryResult{}, err + } + columnTypes := columnTypeNames(rows) + result := queryResult{Columns: columns, ColumnTypes: columnTypes, Rows: [][]any{}} + for rows.Next() { + if len(result.Rows) >= maxRows { + result.Truncated = true + break + } + values, err := scanRow(rows, len(columns), columnTypes) + if err != nil { + return queryResult{}, err + } + result.Rows = append(result.Rows, values) + } + return result, rows.Err() +} + +func scanRow(rows *sql.Rows, columnCount int, columnTypes []string) ([]any, error) { + values := make([]any, columnCount) + scanTargets := make([]any, columnCount) + for i := range values { + scanTargets[i] = &values[i] + } + if err := rows.Scan(scanTargets...); err != nil { + return nil, err + } + for i, value := range values { + values[i] = normalizeValue(value, columnTypeAt(columnTypes, i)) + } + return values, nil +} + +func columnTypeAt(columnTypes []string, index int) string { + if index < 0 || index >= len(columnTypes) { + return "" + } + return columnTypes[index] +} + +func columnTypeNames(rows *sql.Rows) []string { + types, err := rows.ColumnTypes() + if err != nil { + return []string{} + } + result := make([]string, 0, len(types)) + for _, columnType := range types { + result = append(result, columnType.DatabaseTypeName()) + } + return result +} + +func (s *server) queryRowsWithXMLTypeRewriteIfNeeded(sqlText string) (*sql.Rows, error) { + rows, err := s.queryRows(sqlText, nil) + if err != nil { + return nil, err + } + if !rowsContainOracleXMLType(rows) { + return rows, nil + } + rewritten, err := s.rewriteXMLTypeSelectSQL(sqlText) + if err != nil { + rows.Close() + return nil, err + } + if rewritten == sqlText { + return rows, nil + } + // Only pay the ALL_TAB_COLUMNS rewrite cost when the result metadata shows + // XMLTYPE. Ordinary Oracle queries should not run dictionary probes first. + rows.Close() + return s.queryRows(rewritten, nil) +} + +func rowsContainOracleXMLType(rows *sql.Rows) bool { + types, err := rows.ColumnTypes() + if err != nil { + return false + } + typeNames := make([]string, 0, len(types)) + for _, columnType := range types { + typeNames = append(typeNames, columnType.DatabaseTypeName()) + } + return oracleColumnTypeNamesContainXMLType(typeNames) +} + +func oracleColumnTypeNamesContainXMLType(typeNames []string) bool { + for _, typeName := range typeNames { + if isOracleXMLType(typeName) { + return true + } + } + return false +} + +func (s *server) rewriteXMLTypeSelectSQL(sqlText string) (string, error) { + return rewriteOracleXMLTypeSelectSQL(sqlText, s.loadOracleColumnMeta) +} + +func rewriteOracleXMLTypeSelectSQL(sqlText string, loadColumns oracleColumnMetaLoader) (string, error) { + rewritten, _, err := rewriteOracleXMLTypeSelectSQLDepth(sqlText, loadColumns, 0) + return rewritten, err +} + +func rewriteOracleXMLTypeSelectSQLDepth(sqlText string, loadColumns oracleColumnMetaLoader, depth int) (string, bool, error) { + if depth > 8 { + return sqlText, false, nil + } + if rewritten, changed, handled, err := rewriteDirectOracleXMLTypeSelectSQL(sqlText, loadColumns); handled || err != nil { + return rewritten, changed, err + } + rewritten, changed, err := rewriteNestedOracleSelects(sqlText, loadColumns, depth) + return rewritten, changed, err +} + +func rewriteNestedOracleSelects(sqlText string, loadColumns oracleColumnMetaLoader, depth int) (string, bool, error) { + var builder strings.Builder + changed := false + last := 0 + for pos := 0; pos < len(sqlText); pos++ { + switch sqlText[pos] { + case '\'': + pos = skipSingleQuotedSQL(sqlText, pos) + case '"': + pos = skipDoubleQuotedSQL(sqlText, pos) + case '-': + if pos+1 < len(sqlText) && sqlText[pos+1] == '-' { + pos = skipLineCommentSQL(sqlText, pos) + } + case '/': + if pos+1 < len(sqlText) && sqlText[pos+1] == '*' { + pos = skipBlockCommentSQL(sqlText, pos) + } + case '(': + end := findMatchingSQLParen(sqlText, pos) + if end < 0 { + return sqlText, false, nil + } + inner := sqlText[pos+1 : end] + if startsWithSQLKeyword(trimLeadingSQLComments(inner), "select") { + rewrittenInner, innerChanged, err := rewriteOracleXMLTypeSelectSQLDepth(inner, loadColumns, depth+1) + if err != nil { + return "", false, err + } + if innerChanged { + builder.WriteString(sqlText[last : pos+1]) + builder.WriteString(rewrittenInner) + last = end + changed = true + } + } + pos = end + } + } + if !changed { + return sqlText, false, nil + } + builder.WriteString(sqlText[last:]) + return builder.String(), true, nil +} + +func rewriteDirectOracleXMLTypeSelectSQL(sqlText string, loadColumns oracleColumnMetaLoader) (string, bool, bool, error) { + selectStart := leadingSQLSelectListStart(sqlText) + if selectStart < 0 { + return sqlText, false, false, nil + } + fromIdx := findTopLevelSQLKeyword(sqlText, selectStart, "from") + if fromIdx < 0 { + return sqlText, false, false, nil + } + selectListPrefix, selectList := splitOracleSelectListModifier(sqlText[selectStart:fromIdx]) + tableRef, ok := parseSingleOracleTableRef(sqlText[fromIdx+len("from"):]) + if !ok { + return sqlText, false, false, nil + } + items := splitTopLevelSQLList(selectList) + if len(items) == 0 || !oracleSelectListMayReferenceXMLType(items) { + return sqlText, false, true, nil + } + columns, err := loadColumns(tableRef.Schema, tableRef.Table) + if err != nil { + return "", false, true, err + } + if !oracleColumnsHaveXMLType(columns) { + return sqlText, false, true, nil + } + rewrittenItems, changed := rewriteOracleSelectItemsForXMLType(items, columns, tableRef) + if !changed { + return sqlText, false, true, nil + } + var builder strings.Builder + builder.WriteString(sqlText[:selectStart]) + builder.WriteString(selectListPrefix) + builder.WriteString(strings.Join(rewrittenItems, ", ")) + builder.WriteByte(' ') + builder.WriteString(sqlText[fromIdx:]) + return builder.String(), true, true, nil +} + +type oracleTableRef struct { + Schema string + Table string + Alias string + AliasText string +} + +type oracleIdentifierToken struct { + Name string + Text string + Quoted bool +} + +func parseSingleOracleTableRef(fromSQL string) (oracleTableRef, bool) { + pos := skipSQLWhitespace(fromSQL, 0) + if pos >= len(fromSQL) || fromSQL[pos] == '(' { + return oracleTableRef{}, false + } + first, next, ok := readOracleIdentifierToken(fromSQL, pos) + if !ok { + return oracleTableRef{}, false + } + ref := oracleTableRef{Table: first.Name} + pos = skipSQLWhitespace(fromSQL, next) + if pos < len(fromSQL) && fromSQL[pos] == '.' { + second, afterSecond, ok := readOracleIdentifierToken(fromSQL, skipSQLWhitespace(fromSQL, pos+1)) + if !ok { + return oracleTableRef{}, false + } + ref.Schema = first.Name + ref.Table = second.Name + pos = skipSQLWhitespace(fromSQL, afterSecond) + } + if pos < len(fromSQL) { + if strings.HasPrefix(strings.TrimLeft(fromSQL[pos:], " \t\r\n"), ",") { + return oracleTableRef{}, false + } + if nextKeywordIsOracleClause(fromSQL[pos:]) { + return ref, true + } + if startsWithSQLKeyword(fromSQL[pos:], "join") || + startsWithSQLKeyword(fromSQL[pos:], "inner") || + startsWithSQLKeyword(fromSQL[pos:], "left") || + startsWithSQLKeyword(fromSQL[pos:], "right") || + startsWithSQLKeyword(fromSQL[pos:], "full") || + startsWithSQLKeyword(fromSQL[pos:], "cross") { + return oracleTableRef{}, false + } + alias, afterAlias, ok := readOracleIdentifierToken(fromSQL, pos) + if ok && !oracleIdentifierIsClause(alias.Name) { + ref.Alias = alias.Name + ref.AliasText = alias.Text + pos = skipSQLWhitespace(fromSQL, afterAlias) + } + if strings.HasPrefix(strings.TrimLeft(fromSQL[pos:], " \t\r\n"), ",") || + startsWithSQLKeyword(fromSQL[pos:], "join") || + startsWithSQLKeyword(fromSQL[pos:], "inner") || + startsWithSQLKeyword(fromSQL[pos:], "left") || + startsWithSQLKeyword(fromSQL[pos:], "right") || + startsWithSQLKeyword(fromSQL[pos:], "full") || + startsWithSQLKeyword(fromSQL[pos:], "cross") { + return oracleTableRef{}, false + } + } + return ref, true +} + +func splitOracleSelectListModifier(selectList string) (string, string) { + trimmedLeft := strings.TrimLeft(selectList, " \t\r\n") + prefixLen := len(selectList) - len(trimmedLeft) + for _, keyword := range []string{"distinct", "all"} { + if startsWithSQLKeyword(trimmedLeft, keyword) { + modifierEnd := prefixLen + len(keyword) + for modifierEnd < len(selectList) && isSQLWhitespace(selectList[modifierEnd]) { + modifierEnd++ + } + return selectList[:modifierEnd], selectList[modifierEnd:] + } + } + return selectList[:prefixLen], selectList[prefixLen:] +} + +func oracleSelectListMayReferenceXMLType(items []string) bool { + for _, item := range items { + if _, ok := parseOracleStarSelectItem(item); ok { + return true + } + if _, _, _, ok := parseOracleColumnSelectItem(item); ok { + return true + } + } + return false +} + +func rewriteOracleSelectItemsForXMLType(items []string, columns []oracleColumnMeta, tableRef oracleTableRef) ([]string, bool) { + xmlColumns := map[string]oracleColumnMeta{} + for _, column := range columns { + if isOracleXMLType(column.DataType) { + xmlColumns[oracleIdentifierKey(column.Name)] = column + } + } + rewritten := make([]string, 0, len(items)) + changed := false + for _, item := range items { + if qualifier, ok := parseOracleStarSelectItem(item); ok && oracleQualifierMatchesTable(qualifier, tableRef) { + for _, column := range columns { + rewritten = append(rewritten, oracleSelectExpressionForColumn(column, tableRef, xmlColumns)) + } + changed = true + continue + } + qualifier, column, alias, ok := parseOracleColumnSelectItem(item) + if ok && oracleQualifierMatchesTable(qualifier, tableRef) { + if meta, isXML := xmlColumns[oracleIdentifierKey(column.Name)]; isXML { + outputAlias := alias + if outputAlias == "" { + outputAlias = quoteIdentifier(meta.Name) + } + rewritten = append(rewritten, oracleXMLSerializeExpression(oracleColumnRef(qualifier, meta.Name), outputAlias)) + changed = true + continue + } + } + rewritten = append(rewritten, item) + } + return rewritten, changed +} + +func oracleSelectExpressionForColumn(column oracleColumnMeta, tableRef oracleTableRef, xmlColumns map[string]oracleColumnMeta) string { + qualifier := "" + if tableRef.AliasText != "" { + qualifier = tableRef.AliasText + } + if _, isXML := xmlColumns[oracleIdentifierKey(column.Name)]; isXML { + return oracleXMLSerializeExpression(oracleColumnRef(qualifier, column.Name), quoteIdentifier(column.Name)) + } + return oracleColumnRef(qualifier, column.Name) +} + +func oracleXMLSerializeExpression(columnRef, alias string) string { + // go-ora v2.9.0 does not fully decode Oracle XMLTYPE result payloads, + // especially when 11g switches larger values to locator-based transfer. + return fmt.Sprintf("XMLSERIALIZE(CONTENT %s AS CLOB) AS %s", columnRef, alias) +} + +func oracleColumnRef(qualifier, column string) string { + if strings.TrimSpace(qualifier) == "" { + return quoteIdentifier(column) + } + return qualifier + "." + quoteIdentifier(column) +} + +func parseOracleStarSelectItem(item string) (string, bool) { + trimmed := strings.TrimSpace(item) + if trimmed == "*" { + return "", true + } + qualifier, pos, ok := readOracleIdentifierToken(trimmed, 0) + if !ok { + return "", false + } + pos = skipSQLWhitespace(trimmed, pos) + if pos >= len(trimmed) || trimmed[pos] != '.' { + return "", false + } + pos = skipSQLWhitespace(trimmed, pos+1) + if pos < len(trimmed) && trimmed[pos] == '*' && strings.TrimSpace(trimmed[pos+1:]) == "" { + return qualifier.Text, true + } + return "", false +} + +func parseOracleColumnSelectItem(item string) (qualifier string, column oracleIdentifierToken, alias string, ok bool) { + trimmed := strings.TrimSpace(item) + first, pos, ok := readOracleIdentifierToken(trimmed, 0) + if !ok { + return "", oracleIdentifierToken{}, "", false + } + column = first + pos = skipSQLWhitespace(trimmed, pos) + if pos < len(trimmed) && trimmed[pos] == '.' { + second, afterSecond, ok := readOracleIdentifierToken(trimmed, skipSQLWhitespace(trimmed, pos+1)) + if !ok { + return "", oracleIdentifierToken{}, "", false + } + qualifier = first.Text + column = second + pos = skipSQLWhitespace(trimmed, afterSecond) + } + if pos >= len(trimmed) { + return qualifier, column, "", true + } + if startsWithSQLKeyword(trimmed[pos:], "as") { + aliasToken, afterAlias, ok := readOracleIdentifierToken(trimmed, skipSQLWhitespace(trimmed, pos+len("as"))) + if !ok || strings.TrimSpace(trimmed[afterAlias:]) != "" { + return "", oracleIdentifierToken{}, "", false + } + return qualifier, column, aliasToken.Text, true + } + aliasToken, afterAlias, ok := readOracleIdentifierToken(trimmed, pos) + if !ok || strings.TrimSpace(trimmed[afterAlias:]) != "" { + return "", oracleIdentifierToken{}, "", false + } + return qualifier, column, aliasToken.Text, true +} + +func oracleQualifierMatchesTable(qualifier string, tableRef oracleTableRef) bool { + if strings.TrimSpace(qualifier) == "" { + return true + } + key := oracleIdentifierKey(unquoteOracleIdentifierText(qualifier)) + if tableRef.Alias != "" && key == oracleIdentifierKey(tableRef.Alias) { + return true + } + return key == oracleIdentifierKey(tableRef.Table) +} + +func oracleColumnsHaveXMLType(columns []oracleColumnMeta) bool { + for _, column := range columns { + if isOracleXMLType(column.DataType) { + return true + } + } + return false +} + +func isOracleXMLType(dataType string) bool { + normalized := strings.ToUpper(strings.TrimSpace(dataType)) + return normalized == "XMLTYPE" || normalized == "SYS.XMLTYPE" +} + +func leadingSQLSelectListStart(sqlText string) int { + trimmed := trimLeadingSQLComments(sqlText) + prefixLen := len(sqlText) - len(trimmed) + if !startsWithSQLKeyword(trimmed, "select") { + return -1 + } + return prefixLen + len("select") +} + +func splitTopLevelSQLList(value string) []string { + var result []string + start := 0 + depth := 0 + for pos := 0; pos < len(value); pos++ { + switch value[pos] { + case '\'': + pos = skipSingleQuotedSQL(value, pos) + case '"': + pos = skipDoubleQuotedSQL(value, pos) + case '-': + if pos+1 < len(value) && value[pos+1] == '-' { + pos = skipLineCommentSQL(value, pos) + } + case '/': + if pos+1 < len(value) && value[pos+1] == '*' { + pos = skipBlockCommentSQL(value, pos) + } + case '(': + depth++ + case ')': + if depth > 0 { + depth-- + } + case ',': + if depth == 0 { + result = append(result, strings.TrimSpace(value[start:pos])) + start = pos + 1 + } + } + } + tail := strings.TrimSpace(value[start:]) + if tail != "" { + result = append(result, tail) + } + return result +} + +func findTopLevelSQLKeyword(sqlText string, start int, keyword string) int { + depth := 0 + for pos := start; pos < len(sqlText); pos++ { + switch sqlText[pos] { + case '\'': + pos = skipSingleQuotedSQL(sqlText, pos) + case '"': + pos = skipDoubleQuotedSQL(sqlText, pos) + case '-': + if pos+1 < len(sqlText) && sqlText[pos+1] == '-' { + pos = skipLineCommentSQL(sqlText, pos) + } + case '/': + if pos+1 < len(sqlText) && sqlText[pos+1] == '*' { + pos = skipBlockCommentSQL(sqlText, pos) + } + case '(': + depth++ + case ')': + if depth > 0 { + depth-- + } + default: + if depth == 0 && sqlKeywordAt(sqlText, pos, keyword) { + return pos + } + } + } + return -1 +} + +func findMatchingSQLParen(sqlText string, open int) int { + depth := 0 + for pos := open; pos < len(sqlText); pos++ { + switch sqlText[pos] { + case '\'': + pos = skipSingleQuotedSQL(sqlText, pos) + case '"': + pos = skipDoubleQuotedSQL(sqlText, pos) + case '-': + if pos+1 < len(sqlText) && sqlText[pos+1] == '-' { + pos = skipLineCommentSQL(sqlText, pos) + } + case '/': + if pos+1 < len(sqlText) && sqlText[pos+1] == '*' { + pos = skipBlockCommentSQL(sqlText, pos) + } + case '(': + depth++ + case ')': + depth-- + if depth == 0 { + return pos + } + } + } + return -1 +} + +func readOracleIdentifierToken(value string, pos int) (oracleIdentifierToken, int, bool) { + pos = skipSQLWhitespace(value, pos) + if pos >= len(value) { + return oracleIdentifierToken{}, pos, false + } + if value[pos] == '"' { + end := pos + 1 + var builder strings.Builder + for end < len(value) { + if value[end] == '"' { + if end+1 < len(value) && value[end+1] == '"' { + builder.WriteByte('"') + end += 2 + continue + } + return oracleIdentifierToken{Name: builder.String(), Text: value[pos : end+1], Quoted: true}, end + 1, true + } + builder.WriteByte(value[end]) + end++ + } + return oracleIdentifierToken{}, pos, false + } + if !isOracleIdentifierStart(value[pos]) { + return oracleIdentifierToken{}, pos, false + } + end := pos + 1 + for end < len(value) && isOracleIdentifierPart(value[end]) { + end++ + } + text := value[pos:end] + return oracleIdentifierToken{Name: strings.ToUpper(text), Text: text}, end, true +} + +func unquoteOracleIdentifierText(value string) string { + value = strings.TrimSpace(value) + if len(value) >= 2 && value[0] == '"' && value[len(value)-1] == '"' { + return strings.ReplaceAll(value[1:len(value)-1], `""`, `"`) + } + return strings.ToUpper(value) +} + +func oracleIdentifierKey(value string) string { + return strings.ToUpper(strings.TrimSpace(value)) +} + +func oracleIdentifierIsClause(value string) bool { + switch oracleIdentifierKey(value) { + case "WHERE", "GROUP", "ORDER", "HAVING", "CONNECT", "START", "MODEL", "FETCH", "OFFSET", "UNION", "MINUS", "INTERSECT": + return true + default: + return false + } +} + +func nextKeywordIsOracleClause(value string) bool { + trimmed := strings.TrimSpace(value) + if trimmed == "" { + return true + } + token, _, ok := readOracleIdentifierToken(trimmed, 0) + return ok && oracleIdentifierIsClause(token.Name) +} + +func isOracleIdentifierStart(ch byte) bool { + return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '_' || ch == '$' || ch == '#' +} + +func isOracleIdentifierPart(ch byte) bool { + return isOracleIdentifierStart(ch) || (ch >= '0' && ch <= '9') +} + +func skipSQLWhitespace(value string, pos int) int { + for pos < len(value) && isSQLWhitespace(value[pos]) { + pos++ + } + return pos +} + +func isSQLWhitespace(ch byte) bool { + return ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' +} + +func skipSingleQuotedSQL(value string, pos int) int { + pos++ + for pos < len(value) { + if value[pos] == '\'' { + if pos+1 < len(value) && value[pos+1] == '\'' { + pos += 2 + continue + } + return pos + } + pos++ + } + return len(value) - 1 +} + +func skipOracleAlternativeQuotedSQL(value string, pos int) (int, bool) { + if pos+2 >= len(value) || (value[pos] != 'q' && value[pos] != 'Q') || value[pos+1] != '\'' { + return pos, false + } + open := value[pos+2] + close := open + switch open { + case '[': + close = ']' + case '{': + close = '}' + case '(': + close = ')' + case '<': + close = '>' + } + for end := pos + 3; end+1 < len(value); end++ { + if value[end] == close && value[end+1] == '\'' { + return end + 1, true + } + } + return len(value) - 1, true +} + +func skipDoubleQuotedSQL(value string, pos int) int { + pos++ + for pos < len(value) { + if value[pos] == '"' { + if pos+1 < len(value) && value[pos+1] == '"' { + pos += 2 + continue + } + return pos + } + pos++ + } + return len(value) - 1 +} + +func skipLineCommentSQL(value string, pos int) int { + for pos < len(value) { + if value[pos] == '\n' || value[pos] == '\r' { + return pos + } + pos++ + } + return len(value) - 1 +} + +func skipBlockCommentSQL(value string, pos int) int { + end := strings.Index(value[pos+2:], "*/") + if end < 0 { + return len(value) - 1 + } + return pos + end + 3 +} + +func (s *server) setSchema(schema string) error { + db, err := s.requireDB() + if err != nil { + return err + } + _, err = db.Exec("ALTER SESSION SET CURRENT_SCHEMA = " + quoteIdentifier(schema)) + return err +} + +func (s *server) queryRows(sqlText string, args []any) (*sql.Rows, error) { + db, err := s.requireDB() + if err != nil { + return nil, err + } + if len(args) == 0 { + return db.Query(sqlText) + } + return db.Query(sqlText, args...) +} + +func decodeParams(params map[string]json.RawMessage, target any) error { + if params == nil { + params = map[string]json.RawMessage{} + } + data, err := json.Marshal(params) + if err != nil { + return err + } + return json.Unmarshal(data, target) +} + +func stringParam(params map[string]json.RawMessage, key string) string { + if params == nil || len(params[key]) == 0 { + return "" + } + var value string + _ = json.Unmarshal(params[key], &value) + return value +} + +func stringSliceParam(params map[string]json.RawMessage, key string) []string { + if params == nil || len(params[key]) == 0 { + return nil + } + var value []string + if err := json.Unmarshal(params[key], &value); err != nil { + return nil + } + return value +} + +func intParam(params map[string]json.RawMessage, key string) int { + if params == nil || len(params[key]) == 0 { + return 0 + } + var value int + _ = json.Unmarshal(params[key], &value) + return value +} + +func errorResponse(id json.RawMessage, err error) response { + return response{JSONRPC: "2.0", ID: id, Error: &rpcError{Code: -1, Message: err.Error()}} +} + +func parseURLParams(raw string) map[string]string { + result := map[string]string{} + values, err := url.ParseQuery(raw) + if err != nil { + return result + } + for key, items := range values { + if len(items) > 0 { + result[key] = items[len(items)-1] + } + } + return result +} + +func trimStatementSQL(sqlText string) string { + trimmed := stripTrailingSlashDelimiter(strings.TrimSpace(sqlText)) + if isOraclePlSQLBlock(trimmed) { + return trimmed + } + return strings.TrimRight(trimmed, "; \t\r\n") +} + +func stripTrailingSlashDelimiter(sqlText string) string { + trimmed := strings.TrimSpace(sqlText) + if !strings.HasSuffix(trimmed, "/") { + return trimmed + } + slashStart := len(trimmed) - 1 + lineStart := strings.LastIndex(trimmed[:slashStart], "\n") + 1 + if strings.TrimSpace(trimmed[lineStart:slashStart]) != "" { + return trimmed + } + beforeSlash := strings.TrimSpace(trimmed[:lineStart]) + // SQL*Plus uses a standalone slash to execute PL/SQL blocks; go-ora needs + // only the block text and not that client-side delimiter. + if isOraclePlSQLBlock(beforeSlash) { + return beforeSlash + } + return trimmed +} + +func isOraclePlSQLBlock(sqlText string) bool { + trimmed := strings.TrimSpace(sqlText) + start := trimLeadingSQLComments(trimmed) + if !oraclePlSQLBlockStartRegexp.MatchString(start) { + return false + } + upper := strings.ToUpper(trimmed) + if oraclePlSQLBlockEndRegexp.MatchString(upper) { + return true + } + matches := oracleNamedPlSQLBlockEndRegexp.FindStringSubmatch(upper) + if len(matches) != 2 { + return false + } + switch matches[1] { + case "IF", "LOOP", "CASE": + return false + default: + return true + } +} + +func isQuerySQL(sqlText string) bool { + executable := trimLeadingSQLComments(sqlText) + return startsWithSQLKeyword(executable, "select") || startsWithSQLKeyword(executable, "with") +} + +func trimLeadingSQLComments(sqlText string) string { + remaining := strings.TrimSpace(sqlText) + for { + switch { + case strings.HasPrefix(remaining, "--"): + lineEnd := strings.IndexAny(remaining, "\r\n") + if lineEnd < 0 { + return "" + } + remaining = strings.TrimSpace(remaining[lineEnd+1:]) + case strings.HasPrefix(remaining, "/*"): + commentEnd := strings.Index(remaining[2:], "*/") + if commentEnd < 0 { + return "" + } + remaining = strings.TrimSpace(remaining[commentEnd+4:]) + default: + return remaining + } + } +} + +func startsWithSQLKeyword(sqlText, keyword string) bool { + sqlText = strings.TrimSpace(sqlText) + if len(sqlText) < len(keyword) || !strings.EqualFold(sqlText[:len(keyword)], keyword) { + return false + } + if len(sqlText) == len(keyword) { + return true + } + next := sqlText[len(keyword)] + return !((next >= 'a' && next <= 'z') || (next >= 'A' && next <= 'Z') || (next >= '0' && next <= '9') || next == '_' || next == '$') +} + +func sqlKeywordAt(sqlText string, pos int, keyword string) bool { + if pos < 0 || pos+len(keyword) > len(sqlText) || !strings.EqualFold(sqlText[pos:pos+len(keyword)], keyword) { + return false + } + if pos > 0 && isOracleIdentifierPart(sqlText[pos-1]) { + return false + } + if pos+len(keyword) >= len(sqlText) { + return true + } + return !isOracleIdentifierPart(sqlText[pos+len(keyword)]) +} + +func quoteIdentifier(value string) string { + return `"` + strings.ReplaceAll(value, `"`, `""`) + `"` +} + +func normalizeValue(value any, columnTypeName string) any { + switch v := value.(type) { + case nil: + return nil + case []byte: + // Oracle RAW-like columns are binary data; decoding them as text produces mojibake. + if isOracleBinaryColumnType(columnTypeName) { + return bytesToHex(v) + } + return string(v) + case time.Time: + return v.Format(time.RFC3339Nano) + case int64, float64, bool, string: + return v + case fmt.Stringer: + return v.String() + default: + return fmt.Sprint(v) + } +} + +func isOracleBinaryColumnType(columnTypeName string) bool { + normalized := strings.ToUpper(strings.ReplaceAll(strings.TrimSpace(columnTypeName), " ", "")) + switch normalized { + case "RAW", "VARRAW", "LONGRAW", "LONGVARRAW", "BLOB", "BFILE", "OCIBLOBLOCATOR", "OCIFILELOCATOR": + return true + default: + return false + } +} + +func bytesToHex(bytes []byte) string { + const digits = "0123456789abcdef" + result := make([]byte, 2+len(bytes)*2) + result[0] = '0' + result[1] = 'x' + for i, b := range bytes { + result[2+i*2] = digits[b>>4] + result[3+i*2] = digits[b&0x0f] + } + return string(result) +} + +func emptyIfNil[T any](values []T) []T { + if values == nil { + return []T{} + } + return values +} + +func intPtrFromString(value string) *int { + if value == "" { + return nil + } + parsed, err := strconv.Atoi(value) + if err != nil { + return nil + } + return &parsed +} diff --git a/agents/drivers/oracle-go/main_test.go b/agents/drivers/oracle-go/main_test.go new file mode 100644 index 0000000..dfc1287 --- /dev/null +++ b/agents/drivers/oracle-go/main_test.go @@ -0,0 +1,865 @@ +package main + +import ( + "database/sql" + "encoding/json" + "errors" + "net/url" + "os" + "reflect" + "strings" + "testing" +) + +func TestHandshakeResponse(t *testing.T) { + s := newServer() + resp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":7,"method":"handshake","params":{"appVersion":"dev"}}`) + if shutdown { + t.Fatal("handshake should not shut down the server") + } + if resp.Error != nil { + t.Fatalf("unexpected error: %v", resp.Error) + } + data, err := json.Marshal(resp.Result) + if err != nil { + t.Fatal(err) + } + var result struct { + ProtocolVersion int `json:"protocolVersion"` + AgentProtocolVersion int `json:"agentProtocolVersion"` + Capabilities []string `json:"capabilities"` + } + if err := json.Unmarshal(data, &result); err != nil { + t.Fatal(err) + } + if result.ProtocolVersion != 1 || result.AgentProtocolVersion != 1 { + t.Fatalf("unexpected protocol versions: %+v", result) + } + contract := protocolContract(t) + if result.ProtocolVersion != contract.ProtocolVersion || result.AgentProtocolVersion != contract.ProtocolVersion { + t.Fatalf("handshake protocol versions do not match contract: result=%+v contract=%+v", result, contract) + } + for _, capability := range result.Capabilities { + if !contains(contract.AllCapabilities, capability) { + t.Fatalf("handshake returned capability %q outside protocol contract %v", capability, contract.AllCapabilities) + } + } + if !contains(result.Capabilities, "query") || !contains(result.Capabilities, "metadata") { + t.Fatalf("expected query and metadata capabilities, got %v", result.Capabilities) + } +} + +func TestCloseMissingQuerySessionReturnsFalse(t *testing.T) { + s := newServer() + resp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":8,"method":"close_query_session","params":{"sessionId":"missing"}}`) + if shutdown { + t.Fatal("close_query_session should not shut down the server") + } + if resp.Error != nil { + t.Fatalf("unexpected error: %v", resp.Error) + } + if resp.Result != false { + t.Fatalf("expected false result, got %#v", resp.Result) + } +} + +func TestMissingTableReadSessionMethodsReturnEmptyOrFalse(t *testing.T) { + s := newServer() + + fetchResp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":9,"method":"fetch_table_read_page","params":{"sessionId":"missing","pageSize":10}}`) + if shutdown { + t.Fatal("fetch_table_read_page should not shut down the server") + } + if fetchResp.Error != nil { + t.Fatalf("unexpected fetch error: %v", fetchResp.Error) + } + data, err := json.Marshal(fetchResp.Result) + if err != nil { + t.Fatal(err) + } + var page queryPageResult + if err := json.Unmarshal(data, &page); err != nil { + t.Fatal(err) + } + if len(page.Columns) != 0 || len(page.ColumnTypes) != 0 || len(page.Rows) != 0 || page.HasMore || page.SessionID != nil { + t.Fatalf("missing table read session should return empty page, got %+v", page) + } + + closeResp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":10,"method":"close_table_read_session","params":{"sessionId":"missing"}}`) + if shutdown { + t.Fatal("close_table_read_session should not shut down the server") + } + if closeResp.Error != nil { + t.Fatalf("unexpected close error: %v", closeResp.Error) + } + if closeResp.Result != false { + t.Fatalf("expected false result, got %#v", closeResp.Result) + } +} + +func TestEmptyResultSlicesMarshalAsArrays(t *testing.T) { + data, err := json.Marshal(queryResult{}) + if err != nil { + t.Fatal(err) + } + text := string(data) + if strings.Contains(text, `"columns":null`) || strings.Contains(text, `"column_types":null`) || strings.Contains(text, `"rows":null`) { + t.Fatalf("query result should marshal nil slices as arrays: %s", text) + } + if !strings.Contains(text, `"column_types":[]`) { + t.Fatalf("query result should marshal empty column types array: %s", text) + } + + data, err = json.Marshal(indexInfo{}) + if err != nil { + t.Fatal(err) + } + text = string(data) + if strings.Contains(text, `"columns":null`) || strings.Contains(text, `"included_columns":null`) { + t.Fatalf("index info should marshal nil slices as arrays: %s", text) + } +} + +func TestGetTableDDLResultMarshalsAsString(t *testing.T) { + data, err := json.Marshal("CREATE TABLE HR.ORDERS (ID NUMBER)") + if err != nil { + t.Fatal(err) + } + var ddl string + if err := json.Unmarshal(data, &ddl); err != nil { + t.Fatalf("get_table_ddl result must deserialize as a string: %v", err) + } +} + +func TestNormalizeValueFormatsOracleBinaryColumnsAsHex(t *testing.T) { + tests := map[string]string{ + "RAW": "0x000f10ff", + "raw": "0x000f10ff", + "LongRaw": "0x000f10ff", + "LONG RAW": "0x000f10ff", + "LongVarRaw": "0x000f10ff", + "OCIBlobLocator": "0x000f10ff", + } + + for columnType, want := range tests { + if got := normalizeValue([]byte{0x00, 0x0f, 0x10, 0xff}, columnType); got != want { + t.Fatalf("normalizeValue RAW bytes for %q = %#v, want %q", columnType, got, want) + } + } +} + +func TestNormalizeValueKeepsNonBinaryBytesAsText(t *testing.T) { + if got := normalizeValue([]byte("hello"), "VARCHAR2"); got != "hello" { + t.Fatalf("normalizeValue text bytes = %#v, want %q", got, "hello") + } + if got := normalizeValue([]byte("legacy"), ""); got != "legacy" { + t.Fatalf("normalizeValue bytes without metadata = %#v, want %q", got, "legacy") + } +} + +func TestNormalizeDDLObjectType(t *testing.T) { + tests := map[string]string{ + "": "", + "table": "TABLE", + "VIEW": "VIEW", + "materialized view": "MATERIALIZED_VIEW", + "MATERIALIZED_VIEW": "MATERIALIZED_VIEW", + "procedure": "", + } + for input, want := range tests { + if got := normalizeDDLObjectType(input); got != want { + t.Fatalf("normalizeDDLObjectType(%q) = %q, want %q", input, got, want) + } + } +} + +func TestIsQuerySQLSkipsLeadingComments(t *testing.T) { + tests := []string{ + "-- 测试\nSELECT * FROM (SELECT * FROM \"DBX_TEST\".\"ORDERS_10K\") WHERE ROWNUM <= 100", + "/* explain */\nSELECT * FROM dual", + "-- comment\r\nWITH rows AS (SELECT 1 FROM dual) SELECT * FROM rows", + } + for _, sqlText := range tests { + if !isQuerySQL(sqlText) { + t.Fatalf("expected SQL to be treated as query: %s", sqlText) + } + } +} + +func TestIsQuerySQLRequiresKeywordBoundary(t *testing.T) { + tests := []string{ + "-- comment only", + "selectivity FROM stats", + "withdraw FROM account", + "/* unterminated comment", + } + for _, sqlText := range tests { + if isQuerySQL(sqlText) { + t.Fatalf("expected SQL not to be treated as query: %s", sqlText) + } + } +} + +func TestTrimStatementSQLPreservesAnonymousPLSQLBlockTerminator(t *testing.T) { + sqlText := `DECLARE + PRE_TRD_DATE INTEGER ; +BEGIN + SELECT 1 + 2 INTO PRE_TRD_DATE FROM DUAL; +END;` + + if got := trimStatementSQL(sqlText); got != sqlText { + t.Fatalf("trimStatementSQL() = %q, want full PL/SQL block %q", got, sqlText) + } +} + +func TestTrimStatementSQLStripsSlashDelimiterAfterPLSQLBlock(t *testing.T) { + sqlText := "BEGIN\n NULL;\nEND;\n/" + want := "BEGIN\n NULL;\nEND;" + + if got := trimStatementSQL(sqlText); got != want { + t.Fatalf("trimStatementSQL() = %q, want %q", got, want) + } +} + +func TestTrimStatementSQLPreservesCreatePLSQLObjectTerminator(t *testing.T) { + tests := []string{ + "CREATE OR REPLACE PROCEDURE p AS\nBEGIN\n NULL;\nEND;", + "CREATE OR REPLACE FUNCTION f RETURN NUMBER AS\nBEGIN\n RETURN 1;\nEND;", + "CREATE OR REPLACE PACKAGE pkg_utils AS\n FUNCTION get_version RETURN VARCHAR2;\nEND pkg_utils;", + } + for _, sqlText := range tests { + if got := trimStatementSQL(sqlText); got != sqlText { + t.Fatalf("trimStatementSQL() = %q, want full PL/SQL object %q", got, sqlText) + } + } +} + +func TestTrimStatementSQLStripsSlashDelimiterAfterCreatePLSQLObject(t *testing.T) { + sqlText := "CREATE OR REPLACE PROCEDURE p AS\nBEGIN\n NULL;\nEND;\n/" + want := "CREATE OR REPLACE PROCEDURE p AS\nBEGIN\n NULL;\nEND;" + + if got := trimStatementSQL(sqlText); got != want { + t.Fatalf("trimStatementSQL() = %q, want %q", got, want) + } +} + +func TestTrimStatementSQLRemovesRegularStatementSemicolon(t *testing.T) { + if got := trimStatementSQL("SELECT 1 FROM DUAL;"); got != "SELECT 1 FROM DUAL" { + t.Fatalf("trimStatementSQL() = %q, want regular statement without semicolon", got) + } +} + +func TestOracleExplainPlanBindParamsIncludesNamedParameters(t *testing.T) { + sqlText := ` +SELECT * +FROM orders +WHERE id = :id + AND status = :status + AND parent_id = :id` + + want := []oracleBindParam{ + {Name: "id"}, + {Name: "status"}, + } + if got := oracleExplainPlanBindParams(sqlText); !reflect.DeepEqual(got, want) { + t.Fatalf("oracleExplainPlanBindParams() = %#v, want %#v", got, want) + } +} + +func TestOracleExplainPlanBindParamsSkipsQuotedTextAndComments(t *testing.T) { + sqlText := ` +SELECT ':literal' AS literal_value, + q'[not :q_param]' AS q_literal, + "COL:NAME" AS quoted_identifier +FROM orders +WHERE id = :id + -- ignored :comment_param + AND note <> 'escaped '' :text_param' + /* ignored :block_param */` + + want := []oracleBindParam{{Name: "id"}} + if got := oracleExplainPlanBindParams(sqlText); !reflect.DeepEqual(got, want) { + t.Fatalf("oracleExplainPlanBindParams() = %#v, want %#v", got, want) + } +} + +func TestOracleExplainPlanBindParamsIncludesPositionalParameters(t *testing.T) { + sqlText := "SELECT * FROM orders WHERE id = :1 AND status = :status" + + want := []oracleBindParam{ + {Name: "1", Positional: true}, + {Name: "status"}, + } + if got := oracleExplainPlanBindParams(sqlText); !reflect.DeepEqual(got, want) { + t.Fatalf("oracleExplainPlanBindParams() = %#v, want %#v", got, want) + } +} + +func TestOracleExplainPlanBindArgsUsesNamedArguments(t *testing.T) { + args := oracleExplainPlanBindArgs("SELECT * FROM orders WHERE id = :id") + + if len(args) != 1 { + t.Fatalf("expected one bind argument, got %#v", args) + } + named, ok := args[0].(sql.NamedArg) + if !ok { + t.Fatalf("expected sql.NamedArg, got %#v", args[0]) + } + if named.Name != "id" || named.Value != nil { + t.Fatalf("unexpected named bind argument: %#v", named) + } +} + +func protocolContract(t *testing.T) struct { + ProtocolVersion int `json:"protocolVersion"` + AllCapabilities []string `json:"allCapabilities"` +} { + t.Helper() + data, err := os.ReadFile("../../common/src/main/resources/agent-protocol-v1.json") + if err != nil { + t.Fatal(err) + } + var contract struct { + ProtocolVersion int `json:"protocolVersion"` + AllCapabilities []string `json:"allCapabilities"` + } + if err := json.Unmarshal(data, &contract); err != nil { + t.Fatal(err) + } + return contract +} + +func TestOracleColumnTypeDDL(t *testing.T) { + charLen := 64 + precision := 10 + scale := 2 + zeroScale := 0 + + tests := []struct { + name string + column columnInfo + want string + }{ + {name: "varchar", column: columnInfo{DataType: "VARCHAR2", CharacterMaximumLength: &charLen}, want: "VARCHAR2(64)"}, + {name: "number scale", column: columnInfo{DataType: "NUMBER", NumericPrecision: &precision, NumericScale: &scale}, want: "NUMBER(10,2)"}, + {name: "number zero scale", column: columnInfo{DataType: "NUMBER", NumericPrecision: &precision, NumericScale: &zeroScale}, want: "NUMBER(10)"}, + {name: "timestamp preserves precision", column: columnInfo{DataType: "TIMESTAMP(6)"}, want: "TIMESTAMP(6)"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := oracleColumnTypeDDL(tt.column); got != tt.want { + t.Fatalf("oracleColumnTypeDDL() = %q, want %q", got, tt.want) + } + }) + } +} + +func TestBuildDSNUsesConnectionStringWhenProvided(t *testing.T) { + dsn := buildDSN(connectParams{ConnectionString: "oracle://scott:tiger@db.example.com:1521/ORCLPDB1"}) + + if dsn != "oracle://scott:tiger@db.example.com:1521/ORCLPDB1" { + t.Fatalf("unexpected dsn: %s", dsn) + } +} + +func TestBuildDSNPreservesBastionUsernameAndEncodesCredentials(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Port: 1521, + Database: "XE", + Username: "9008888:reader", + Password: "dbx:pass", + }) + + parsed, err := url.Parse(dsn) + if err != nil { + t.Fatal(err) + } + password, _ := parsed.User.Password() + if parsed.User.Username() != "9008888:reader" || password != "dbx:pass" { + t.Fatalf("credentials should survive URL parsing, dsn=%s username=%q password=%q", dsn, parsed.User.Username(), password) + } + if !strings.HasPrefix(parsed.User.String(), "9008888%3Areader:") { + t.Fatalf("bastion username should be escaped without being quoted, dsn=%s", dsn) + } +} + +func TestBuildDSNEncodesColonInCredentialsFromJDBCServiceURL(t *testing.T) { + dsn := buildDSN(connectParams{ + Username: "9008888:reader", + Password: "dbx:pass", + ConnectionString: "jdbc:oracle:thin:@//db.example.com:1521/XE", + }) + + parsed, err := url.Parse(dsn) + if err != nil { + t.Fatal(err) + } + password, _ := parsed.User.Password() + if parsed.User.Username() != "9008888:reader" || password != "dbx:pass" { + t.Fatalf("credentials should survive JDBC URL conversion, dsn=%s username=%q password=%q", dsn, parsed.User.Username(), password) + } + if parsed.Host != "db.example.com:1521" || strings.TrimPrefix(parsed.Path, "/") != "XE" { + t.Fatalf("JDBC host/service should survive conversion, dsn=%s", dsn) + } +} + +func TestBuildDSNPreservesExplicitlyQuotedUsername(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Port: 1521, + Database: "XE", + Username: `"abc:def"`, + Password: "dbx:pass", + }) + + parsed, err := url.Parse(dsn) + if err != nil { + t.Fatal(err) + } + if parsed.User.Username() != `"abc:def"` { + t.Fatalf("explicitly quoted username should remain unchanged, dsn=%s username=%q", dsn, parsed.User.Username()) + } +} + +func TestBuildDSNUsesJdbcServiceHostAndPort(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "127.0.0.1", + Port: 11521, + Database: "ORCLPDB1", + Username: "scott", + Password: "tiger", + ConnectionString: "jdbc:oracle:thin:@//oracle.example.com:1521/ORCLPDB1", + }) + + if strings.Contains(strings.ToLower(dsn), "jdbc:") { + t.Fatalf("dsn should be go-ora format, got: %s", dsn) + } + if !strings.Contains(dsn, "oracle.example.com:1521") || !strings.Contains(dsn, "ORCLPDB1") { + t.Fatalf("dsn should use JDBC host/port/database fields, got: %s", dsn) + } +} + +func TestBuildDSNUsesRewrittenJdbcServiceHostAndPort(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "127.0.0.1", + Port: 11521, + Database: "ORCLPDB1", + Username: "scott", + Password: "tiger", + ConnectionString: "jdbc:oracle:thin:@//127.0.0.1:11521/ORCLPDB1", + }) + + if strings.Contains(strings.ToLower(dsn), "jdbc:") { + t.Fatalf("dsn should be go-ora format, got: %s", dsn) + } + if !strings.Contains(dsn, "127.0.0.1:11521") || !strings.Contains(dsn, "ORCLPDB1") { + t.Fatalf("dsn should use rewritten JDBC host/port/database fields, got: %s", dsn) + } +} + +func TestBuildDSNConvertsJdbcSID(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "127.0.0.1", + Port: 11521, + Database: "ORCL", + Username: "scott", + Password: "tiger", + ConnectionString: "jdbc:oracle:thin:@oracle.example.com:1521:ORCL", + }) + + if strings.Contains(strings.ToLower(dsn), "jdbc:") { + t.Fatalf("dsn should be go-ora format, got: %s", dsn) + } + upperDSN := strings.ToUpper(dsn) + if !strings.Contains(dsn, "oracle.example.com:1521") || !strings.Contains(upperDSN, "SID=ORCL") { + t.Fatalf("dsn should use JDBC host/port and SID option, got: %s", dsn) + } +} + +func TestBuildDSNConvertsJdbcDescriptor(t *testing.T) { + dsn := buildDSN(connectParams{ + Username: "scott", + Password: "tiger", + ConnectionString: "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db.example.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCLPDB1)))", + }) + + if !strings.HasPrefix(dsn, "oracle://scott:tiger@") { + t.Fatalf("descriptor should become go-ora url, got: %s", dsn) + } + if !strings.Contains(dsn, "connStr=") { + t.Fatalf("descriptor should be passed via connStr option, got: %s", dsn) + } +} + +func TestBuildDSNAddsSysDbaOption(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "127.0.0.1", + Port: 1521, + Database: "SYSDBA:ORCLPDB1", + Username: "sys", + Password: "secret", + SysDBA: true, + URLParams: "TRACE FILE=trace.log", + }) + + if strings.Contains(dsn, "SYSDBA:") { + t.Fatalf("dsn should strip SYSDBA prefix: %s", dsn) + } + if !strings.Contains(dsn, "ORCLPDB1") { + t.Fatalf("dsn should include service name: %s", dsn) + } + upperDSN := strings.ToUpper(dsn) + if !strings.Contains(upperDSN, "AUTH TYPE=SYSDBA") && + !strings.Contains(upperDSN, "AUTH+TYPE=SYSDBA") && + !strings.Contains(upperDSN, "AUTH%20TYPE=SYSDBA") { + t.Fatalf("dsn should include SYSDBA auth option: %s", dsn) + } +} + +func TestOracleGB18030ConverterRoundTrip(t *testing.T) { + converter := oracleGB18030Converter{} + input := "DBX \u4e2d\u6587 \U00020000" + + encoded := converter.Encode(input) + if string(encoded) == input { + t.Fatalf("GB18030 converter should encode non-ASCII text away from UTF-8 bytes") + } + if decoded := converter.Decode(encoded); decoded != input { + t.Fatalf("GB18030 round trip = %q, want %q", decoded, input) + } + if converter.GetLangID() != oracleCharsetZHS32GB18030 { + t.Fatalf("GB18030 converter lang id = %d, want %d", converter.GetLangID(), oracleCharsetZHS32GB18030) + } + if clone := converter.Clone(); clone.GetLangID() != oracleCharsetZHS32GB18030 { + t.Fatalf("GB18030 converter clone lang id = %d, want %d", clone.GetLangID(), oracleCharsetZHS32GB18030) + } +} + +func TestOracleStringConverterForUnsupportedCharsetError(t *testing.T) { + err := errors.New("the server use charset with id: 854 which is not supported by the driver") + converter, ok := oracleStringConverterForUnsupportedCharsetError(err) + if !ok { + t.Fatalf("expected GB18030 server charset error to have a converter") + } + if converter.GetLangID() != oracleCharsetZHS32GB18030 { + t.Fatalf("converter lang id = %d, want %d", converter.GetLangID(), oracleCharsetZHS32GB18030) + } + ncharsetErr := errors.New("the server use ncharset with id: 854 which is not supported by the driver") + if _, ok := oracleStringConverterForUnsupportedCharsetError(ncharsetErr); ok { + t.Fatalf("ncharset errors should not have a server charset converter") + } + otherCharsetErr := errors.New("the server use charset with id: 852 which is not supported by the driver") + if charsetID, ok := unsupportedOracleServerCharsetID(otherCharsetErr); !ok || charsetID != 852 { + t.Fatalf("other server charset should still be parsed, got id=%d ok=%v", charsetID, ok) + } + if _, ok := oracleStringConverterForUnsupportedCharsetError(otherCharsetErr); ok { + t.Fatalf("unknown charset ids should not get a guessed converter") + } +} + +func TestListDatabasesSQLUsesUserDictionaryInsteadOfObjectDictionary(t *testing.T) { + sqlText := strings.ToUpper(oracleListDatabasesSQL) + + if !strings.Contains(sqlText, "ALL_USERS") { + t.Fatalf("schema listing should query ALL_USERS, got: %s", oracleListDatabasesSQL) + } + if strings.Contains(sqlText, "ALL_TABLES") || strings.Contains(sqlText, "ALL_VIEWS") { + t.Fatalf("schema listing should not scan object dictionaries, got: %s", oracleListDatabasesSQL) + } +} + +func TestListDatabasesSQLCanApplyVisibleSchemaFilter(t *testing.T) { + sqlText, args := oracleListDatabasesSQLWithVisibleSchemas([]string{"APP", "REPORTING"}) + upperSQL := strings.ToUpper(sqlText) + + if !strings.Contains(upperSQL, "ALL_USERS") { + t.Fatalf("schema listing should query ALL_USERS, got: %s", sqlText) + } + if !strings.Contains(upperSQL, "USERNAME IN (:1,:2)") { + t.Fatalf("schema listing should apply visible schema filter, got: %s", sqlText) + } + if len(args) != 2 || args[0] != "APP" || args[1] != "REPORTING" { + t.Fatalf("visible schema args were not preserved: %#v", args) + } + if strings.Contains(upperSQL, "ALL_TABLES") || strings.Contains(upperSQL, "ALL_VIEWS") { + t.Fatalf("schema listing should not scan object dictionaries, got: %s", sqlText) + } +} + +func TestListTablesSQLUsesSplitDictionaryQuery(t *testing.T) { + sqlText := strings.ToUpper(oracleListTablesSQL) + + if !strings.Contains(sqlText, "ALL_TABLES") || !strings.Contains(sqlText, "ALL_OBJECTS") { + t.Fatalf("table listing should split tables and views, got: %s", oracleListTablesSQL) + } + if !strings.Contains(sqlText, "UNION ALL") { + t.Fatalf("table listing should union table and view metadata, got: %s", oracleListTablesSQL) + } + if strings.Contains(sqlText, "ALL_TAB_COMMENTS") { + t.Fatalf("table listing should not load comments during refresh, got: %s", oracleListTablesSQL) + } +} + +func TestListTablesQueryAppliesMetadataConstraints(t *testing.T) { + query := oracleListTablesQuery("APP", metadataListConstraints{ + Filter: "u_r", + Limit: 501, + Offset: 10, + ObjectTypes: []string{"view", "TABLE", "TABLE"}, + }) + sqlText := strings.ToUpper(query.SQL) + + if !strings.Contains(sqlText, "UPPER(OBJECT_NAME) LIKE :3 ESCAPE '\\'") { + t.Fatalf("table listing should push filter predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "TABLE_TYPE IN (:4,:5)") { + t.Fatalf("table listing should push table type predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "ROWNUM <= :6") || !strings.Contains(sqlText, "DBX_RN > :7") { + t.Fatalf("table listing should use rownum pagination, got: %s", query.SQL) + } + if len(query.Args) != 7 { + t.Fatalf("unexpected args: %#v", query.Args) + } + if query.Args[0] != "APP" || query.Args[1] != "APP" || query.Args[2] != "%U%\\_%R%" || query.Args[3] != "TABLE" || query.Args[4] != "VIEW" || query.Args[5] != 511 || query.Args[6] != 10 { + t.Fatalf("constraints args were not normalized: %#v", query.Args) + } +} + +func TestListSessionUserTablesQueryUsesUserDictionary(t *testing.T) { + query := oracleListSessionUserTablesQuery(metadataListConstraints{ + Filter: "u_r", + Limit: 501, + Offset: 10, + ObjectTypes: []string{"view", "TABLE", "TABLE"}, + }) + sqlText := strings.ToUpper(query.SQL) + + if !strings.Contains(sqlText, "USER_TABLES") || !strings.Contains(sqlText, "USER_OBJECTS") { + t.Fatalf("session-user table listing should use USER_* dictionaries, got: %s", query.SQL) + } + if strings.Contains(sqlText, "ALL_TABLES") || strings.Contains(sqlText, "ALL_OBJECTS") { + t.Fatalf("session-user table listing should avoid ALL_* dictionaries, got: %s", query.SQL) + } + if strings.Contains(sqlText, "OWNER =") { + t.Fatalf("session-user table listing should not add owner predicates, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "UPPER(OBJECT_NAME) LIKE :1 ESCAPE '\\'") { + t.Fatalf("table listing should push filter predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "TABLE_TYPE IN (:2,:3)") { + t.Fatalf("table listing should push table type predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "ROWNUM <= :4") || !strings.Contains(sqlText, "DBX_RN > :5") { + t.Fatalf("table listing should use rownum pagination, got: %s", query.SQL) + } + if len(query.Args) != 5 { + t.Fatalf("unexpected args: %#v", query.Args) + } + if query.Args[0] != "%U%\\_%R%" || query.Args[1] != "TABLE" || query.Args[2] != "VIEW" || query.Args[3] != 511 || query.Args[4] != 10 { + t.Fatalf("constraints args were not normalized: %#v", query.Args) + } +} + +func TestListObjectsSQLUsesSplitDictionaryQuery(t *testing.T) { + sqlText := strings.ToUpper(oracleListObjectsSQL) + + if !strings.Contains(sqlText, "ALL_TABLES") || !strings.Contains(sqlText, "ALL_OBJECTS") { + t.Fatalf("object listing should split tables from other objects, got: %s", oracleListObjectsSQL) + } + if !strings.Contains(sqlText, "UNION ALL") { + t.Fatalf("object listing should union object metadata, got: %s", oracleListObjectsSQL) + } + if strings.Contains(sqlText, "ALL_TAB_COMMENTS") { + t.Fatalf("object listing should not load comments during refresh, got: %s", oracleListObjectsSQL) + } + if !strings.Contains(sqlText, "'PACKAGE BODY'") || !strings.Contains(sqlText, "PACKAGE_BODY") { + t.Fatalf("object listing should include package bodies with normalized type, got: %s", oracleListObjectsSQL) + } +} + +func TestListObjectsQueryAppliesMetadataConstraints(t *testing.T) { + query := oracleListObjectsQuery("APP", metadataListConstraints{ + Filter: "pkg%", + Limit: 25, + ObjectTypes: []string{"FUNCTION", "package"}, + }) + sqlText := strings.ToUpper(query.SQL) + + if !strings.Contains(sqlText, "UPPER(OBJECT_NAME) LIKE :3 ESCAPE '\\'") { + t.Fatalf("object listing should push filter predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "OBJECT_TYPE IN (:4,:5)") { + t.Fatalf("object listing should push object type predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "ROWNUM <= :6") || !strings.Contains(sqlText, "DBX_RN > :7") { + t.Fatalf("object listing should use rownum pagination, got: %s", query.SQL) + } + if len(query.Args) != 7 { + t.Fatalf("unexpected args: %#v", query.Args) + } + if query.Args[2] != "%P%K%G%\\%%" || query.Args[3] != "FUNCTION" || query.Args[4] != "PACKAGE" || query.Args[5] != 25 || query.Args[6] != 0 { + t.Fatalf("object constraints args were not normalized: %#v", query.Args) + } +} + +func TestListSessionUserObjectsQueryUsesUserDictionary(t *testing.T) { + query := oracleListSessionUserObjectsQuery(metadataListConstraints{ + Filter: "pkg%", + Limit: 25, + ObjectTypes: []string{"FUNCTION", "package"}, + }) + sqlText := strings.ToUpper(query.SQL) + + if !strings.Contains(sqlText, "USER_TABLES") || !strings.Contains(sqlText, "USER_OBJECTS") { + t.Fatalf("session-user object listing should use USER_* dictionaries, got: %s", query.SQL) + } + if strings.Contains(sqlText, "ALL_TABLES") || strings.Contains(sqlText, "ALL_OBJECTS") { + t.Fatalf("session-user object listing should avoid ALL_* dictionaries, got: %s", query.SQL) + } + if strings.Contains(sqlText, "OWNER =") { + t.Fatalf("session-user object listing should not add owner predicates, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "UPPER(OBJECT_NAME) LIKE :1 ESCAPE '\\'") { + t.Fatalf("object listing should push filter predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "OBJECT_TYPE IN (:2,:3)") { + t.Fatalf("object listing should push object type predicate, got: %s", query.SQL) + } + if !strings.Contains(sqlText, "ROWNUM <= :4") || !strings.Contains(sqlText, "DBX_RN > :5") { + t.Fatalf("object listing should use rownum pagination, got: %s", query.SQL) + } + if len(query.Args) != 5 { + t.Fatalf("unexpected args: %#v", query.Args) + } + if query.Args[0] != "%P%K%G%\\%%" || query.Args[1] != "FUNCTION" || query.Args[2] != "PACKAGE" || query.Args[3] != 25 || query.Args[4] != 0 { + t.Fatalf("object constraints args were not normalized: %#v", query.Args) + } +} + +func TestOracleFuzzyLikePatternEscapesSpecialCharacters(t *testing.T) { + got := oracleFuzzyLikePattern(`a_%\b`) + want := `%a%\_%\%%\\%b%` + if got != want { + t.Fatalf("oracleFuzzyLikePattern() = %q, want %q", got, want) + } +} + +func TestIsOraclePGALimitError(t *testing.T) { + if !isOraclePGALimitError(errors.New("ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT")) { + t.Fatal("expected ORA-04036 to be detected") + } + if isOraclePGALimitError(errors.New("ORA-00942: table or view does not exist")) { + t.Fatal("unexpected ORA-00942 match") + } +} + +func TestRewriteOracleXMLTypeSelectStar(t *testing.T) { + sqlText, err := rewriteOracleXMLTypeSelectSQL( + `SELECT * FROM TEST_LOBS`, + fakeOracleColumnLoader([]oracleColumnMeta{ + {Name: "ID", DataType: "NUMBER"}, + {Name: "XML_CONTENT", DataType: "XMLTYPE"}, + {Name: "TEST_NAME", DataType: "VARCHAR2"}, + }), + ) + if err != nil { + t.Fatal(err) + } + want := `SELECT "ID", XMLSERIALIZE(CONTENT "XML_CONTENT" AS CLOB) AS "XML_CONTENT", "TEST_NAME" FROM TEST_LOBS` + if sqlText != want { + t.Fatalf("rewriteOracleXMLTypeSelectSQL() = %s, want %s", sqlText, want) + } +} + +func TestRewriteOracleXMLTypeExplicitColumn(t *testing.T) { + sqlText, err := rewriteOracleXMLTypeSelectSQL( + `SELECT t.ID, t.XML_CONTENT AS xml_doc FROM TEST_LOBS t WHERE t.ID = 1`, + fakeOracleColumnLoader([]oracleColumnMeta{ + {Name: "ID", DataType: "NUMBER"}, + {Name: "XML_CONTENT", DataType: "SYS.XMLTYPE"}, + }), + ) + if err != nil { + t.Fatal(err) + } + want := `SELECT t.ID, XMLSERIALIZE(CONTENT t."XML_CONTENT" AS CLOB) AS xml_doc FROM TEST_LOBS t WHERE t.ID = 1` + if sqlText != want { + t.Fatalf("rewriteOracleXMLTypeSelectSQL() = %s, want %s", sqlText, want) + } +} + +func TestRewriteOracleXMLTypeNestedRownumQuery(t *testing.T) { + sqlText, err := rewriteOracleXMLTypeSelectSQL( + `SELECT * FROM (SELECT "ID", "XML_CONTENT" FROM "DBX"."TEST_LOBS") WHERE ROWNUM <= 100`, + fakeOracleColumnLoader([]oracleColumnMeta{ + {Name: "ID", DataType: "NUMBER"}, + {Name: "XML_CONTENT", DataType: "XMLTYPE"}, + }), + ) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(sqlText, `XMLSERIALIZE(CONTENT "XML_CONTENT" AS CLOB) AS "XML_CONTENT"`) { + t.Fatalf("expected nested XMLTYPE column to be serialized, got: %s", sqlText) + } +} + +func TestRewriteOracleXMLTypeSkipsJoins(t *testing.T) { + called := false + sqlText, err := rewriteOracleXMLTypeSelectSQL( + `SELECT * FROM TEST_LOBS l JOIN OTHER_TABLE o ON o.ID = l.ID`, + func(schema, table string) ([]oracleColumnMeta, error) { + called = true + return nil, nil + }, + ) + if err != nil { + t.Fatal(err) + } + if called { + t.Fatal("join query should not load table metadata") + } + if sqlText != `SELECT * FROM TEST_LOBS l JOIN OTHER_TABLE o ON o.ID = l.ID` { + t.Fatalf("join query should not be rewritten, got: %s", sqlText) + } +} + +func TestOracleColumnTypeNamesContainXMLType(t *testing.T) { + tests := []struct { + name string + typeNames []string + want bool + }{ + {name: "plain xmltype", typeNames: []string{"NUMBER", "XMLTYPE"}, want: true}, + {name: "qualified xmltype", typeNames: []string{"SYS.XMLTYPE"}, want: true}, + {name: "case and spaces", typeNames: []string{" varchar2 ", "sys.xmltype"}, want: true}, + {name: "ordinary columns", typeNames: []string{"NUMBER", "VARCHAR2", "DATE"}, want: false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := oracleColumnTypeNamesContainXMLType(tt.typeNames); got != tt.want { + t.Fatalf("oracleColumnTypeNamesContainXMLType(%v) = %v, want %v", tt.typeNames, got, tt.want) + } + }) + } +} + +func fakeOracleColumnLoader(columns []oracleColumnMeta) oracleColumnMetaLoader { + return func(schema, table string) ([]oracleColumnMeta, error) { + if strings.ToUpper(table) != "TEST_LOBS" { + return nil, nil + } + return columns, nil + } +} + +func contains(values []string, target string) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} diff --git a/agents/drivers/oscar/build.gradle b/agents/drivers/oscar/build.gradle new file mode 100644 index 0000000..88d88c8 --- /dev/null +++ b/agents/drivers/oscar/build.gradle @@ -0,0 +1,12 @@ +dependencies { + implementation files('libs/oscarJDBC8.jar') +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': '\u795e\u901a OSCAR', + 'Main-Class': 'com.dbx.agent.oscar.OscarAgent' + ) + } +} diff --git a/agents/drivers/oscar/libs/oscarJDBC8.jar b/agents/drivers/oscar/libs/oscarJDBC8.jar new file mode 100644 index 0000000000000000000000000000000000000000..7d1a6c4e115d9652a42a33b8cfdd2ead30e83f20 GIT binary patch literal 3639760 zcmdSBbySvH6E{prH_{!_AuTQ4-7U>ccZVX~-6h@KDIwhmNOyNPe0b_npXYGS`@VmD zti|G97xSCiGqY#!xj;r76bu>&2oeY=*nvy~=!Y*TATS_FK?PnKQ7Iw1hdv-6nLkJ& zfr6e$5!Bard!EQ~fq{TtKK=ZQRFYRpR7g->fmTvTGn8Js<29m>qxb^?Yx}!?_)j#` zV`T)@W#vN3n?%7l9PED34_u*v&?{Nk2ji}n3rLyx6m&Z=Z*E^==T%QQRK{e4cp7tL zx)PJa7I}D_jU)9%w)-* zTWj=jYq(DVTW@f3@>0=2DFvaUbgwEE{RM_zzZQ5`=LjDB(dt$s(;zqErSdLE>S#=j zToIfC`s+<_jYPXXcvYSX9u%H0^rD1cSpT#f2q?*lLH!3G0U`Woxw(#mfd$=vh=27c z!G9C$S(?*YS{T_F*wWhS+31)*gC_eIXgxE4frZ`wD-%m|bIa%KK>kq^TLT*hfS!Tv z4?^R9aT3@Q{ga_TP<#)dr-y%i!90EXPGMweX=G;b3?bsrgnE|xKT`kdaMb@nZDOzg zqprU~aQ_aXqhq6I%)<18ZofjY{}yVl|11#e?|=ZtH!RNxB>X#^ndMVV{iD7_{|L8u zR&Bh$!KigVVI3F2qawstlE3nMEV1FL7m z|5-Kum+kg;fFCpA*V6a2^Zr))ENzT_5b!J2pOx%8)!)R(uMnIc82<#(vvIbvvwTJv z$v+_V0Y(P4c0X3pUuFN9-v6cUFV6Ti8lO6m-<@Hrr(^SshHyX8>HN61zpCL;m&(h{OA>Z48AB0$1IX|QPuf)%C{%hfXQ(qroYo%kSXZ)-M ze>wkG$UhkISHS#=duk~FcF$S#=T7jukAG0oz{x<*-p=wlf0O>?y8ng!UPE*&^q=wQ zpBv$S$^Y$vjE>DylkyDwuY&xm;XlG{t)I){zxAEfKMDU^`~N`N+UeLCnE%|>{Tkzc zyW&=smd|PZx42)@^jCQ(KdqVJ({A+?mB!C_82%@K5#YJn@pHs~r_}{m=-50Le?RN< z9rB9-zt)+bQ_w_TSMM3+f36_E5&u+ier5jGM)q4c{YmejV`gt){1nG#&&DF!PoDY> z{9oz!tH7U2)^C{q7W6CV&rbUHocRuN`oRakQe*y?T26G9zwPKc&jr}`gW-Sb;!{LF z6_V$>fS;Gr%Er>pQtzi2{#CO-yYAoZ_zPgAqi1UH(;oFJ@aLlSU%+RV_^)2)w ztgS7;_PJx&&x!XJ{;Ah6_~{JzYvTR9Xf_N#2kx&H{+x9-IzI;aue3kM(0AJZQM-Qy z{Vd?;3i%JTwm*i=ue3j>=Rf4~&!PDnv7V)cgMrP@`~0smer_S0be;+R@8{Q_+p}Mp zeLt3br*JZ`0sNE@zY>10B|i|_TIg8))GPc-|J}I%rq{JMH2kTG{5zP1jvc_^$2R6y z*!MQ}zoq>F;}unT#z)_`;Af#$R?mgs_YVA@;Lo08o|P|TV_?81FYt`|%#U=cD{z=MW8g0a&pYASRZs?4 z=vzAecx3stzEM243V*`?IToJv=AUeycgC~(*bgk8cgOc;@V}$#r^6&9Q2Ns?KUTLvD0lnA~Nv=yLMyi40YE4Ph*K%DTtK3=)(pvg~GpBAJPt2L8Se2I0FepW5S^B z%n{lq015=e{nT*M{-3GuWNtREEN+?n8nNZD)Jmz@ixq$%yN0M3LR2mGwE!@qrMYU5 z@;=0@5<&6$kh!Y~O=W3>zcKfmlV{kC5vXCBjQ*Qke*Dr@zpZCASTqU}1D+;bTFbn1 zTz}HL4{{W#6r-P2Z0(!pj8n9D=RK`d=>E*acd(MjVbl- zg!0PHsj=sRqP?>P>*tTaj|D>Oo)#TopN1h0MZx0qxVm`&c1mZe5? zFB^bRZFQi@PA(V;xuBgnIlp-4&~%!zcAocAkS!6zh`@8`%{a;udn0dEpno)YBBh?f z9scJF1XTMyU8Pb4seLZJfOM|ZIv0Ljwhdp=K;|IzWZR5PvjIC0OKWofVQ+NChYUph zlt9G68VAWLRD-2xG54*4qM6VR)pEu@g&m*l^>jO&cb;#@y@6kDDR-@uA*dz`8eYQz zQB?u6pK=~$8ADb9A+0OuO16=GJX1m}({lkeQ+-Q`F=hC1)4_i5{pNXhEt{BE0*xx| zKn61W4A2X8daOCBSTjlBQb@*uVWo7JYfbp@N&~6OXnp5u2!E z%!8$DVAenN8q_+^MDnq|B}~X^nb z++$BMEc;Rki1uYBb~PTzZ&fKBjM;Yg*oSI1 zkAKW&_F=$;I4Jz$1_}_mYXB{4tems^+=4XBFDZ`IC|$s&r*bWU5nwnk1g@(lOe(3$ zg~p$l2@8qW95>C{c!OKTzF}E>5gtdWatHjMeEdFHHF4M|vVO`#`+r+bexEMez(14Ayz&w8|@5 zXsG6hLGiKq!@2wJ?NEna^5^Q3@f`vR?A$iY!U>|L%_&Z>P~UMP1qmoGS*qv;clxh9 zLM1KQ=toln@13%UJ?MkIT}sI}4EtlSCpuX30c_ z{Lviyq>H|ziB}cCz!nvrJRlBUnvLeE?T(A{?)Z-JbEz|=p5S^uk&U_`N`ml_gR%5w73P>R%thP|QZ5 z##OBz`-kH5wHsEet@7O7LTG<7$PS;R?6c3InCQ<>%JJ}@4 zR5cb>Q{+A6Sa<a>On~cy^s}%rgODy$_1n{ja&uGyNGq) zYA}Qds@gQD`E=&C4#JD>{P$J$rL&Z57I>nO)o<}z?yj1K``yxCl#wZ<^D23qftY2i zfIK#O5mWg|L9=FhQWkFxYKo_;l`zRbOh&Cd7D967u9yS1X*gEV)v!kn!%Y&*iR@+f zUx%FsEf2s*gIm$1Kis8ONtp>5Uj8hBc^YdT zR%AKSjk$}CmHggubIL>;yxaTQ$u3W&GMs0{yO~Y>D0aAeJ@6_f609|Y0!j+PI~N5D zkps3B-);l+m_w}c@jub}3 z5g!_!=%Jm7L7!N}SupRInnq?#N4RYx) zRMa(ZBS375scF%l_M~d|J@_|e1L5=2vGG@V((WgNEKJ<-M`P$w&{<5cgixvjNV~+{ zj&5{=x$^=@m1OUR2SC*EU}q#Q29h7|rVei(6Piyi2WNq>kWQBnrFzNvlY$-WM4U8y z-%GXF9cL%eaUr{0H%qr~n{g5nL)^RJUxW_=vAW6e2?!C+kihnlZ(I^$z6zbvfg(mu z)$OTBor;QqgY71gwIyUSO{}!0dC9D&W=xAJ?mL8WBUf6VzS9+tnKD%*uRoT9-7wK6 zgZ(C5auDp}2>&MRHPZZuuN=&{nyyAlXjB%tuF%AlcjCx3H_b~YHCVsPMriCH3ey2G z;~kKX$SkllqbSNzq9M_)@UfEXtyft)U=7_Ea~~4RLP9HP7A={?R*uhfE+1i=Hb1Te z$}$?Lzy`Nh0KlgdSosg)vxPPxCIqq3k}BDEAXZX&57Yxqf?_SO6dGT~@4)*x_gUB) z`cBpvTBTVt=1+e?1U-pQ5EG~#XNRcM_hdM?-4RseWrL?W$`EYN^P&%Cv|F&Wo?FCx zf%2ws2~b5I-^u1n%&A3Qf>rscOa~AkU@|(U+sI52-+qltGe7VZ3gOU%9?VI@a{zu% zdM4tY(>T3LS`+nB{l*LJG>Ia}=s4I5CQs>z+6y}MW1mdZF3&hX$bvuL$*uFN^BJs9 zWU(SQ1Eah0E!H8VLoI_#aEfrhJrjeOU>*oWe_PwZ`QJW;W+!#opF&=0TIGOhZM! zv@azMqN#QDc3`{&l(qq=p5=;EWgkn!a%9NI&v=jscZu|_DwbVstrWQ|t&TNOOW{-E zP!GB(5lqAoEmUmkQ`7C6W#H*`A~Q$)WVZ$rrK>tB~GB%YwvJh>}yS#_DsKBUc(AxX`WhwYLG5^Yo(d1UtoZI}f<8{igP$6J$Y(^YFEuvJ=oVajkUUgeyDcH=MsL~=X&zdC zMM5`!rukv3r3J=WAKj)jjKC7LUjW`EK_o9O;PzeZm&=u*SI&d&(03d?uI}D$l`=&7 zy4plmJ$}}y3-lb}(j&s?S6+WG%ckhAkL}Ga&_UZKR z85QoJaa)msTUTG)eLz1Zqt$~cU82)ytC8gA0Uir7OahOn!odQAAG6S=%>^t;O9CQe zdr3uR;-GZ9z2xOzghkQ?%tp(_@+0WEf}t+>7{M&KPO}A|`QcX06eExW-cKGcO*gki zIIEBn_ystu1ZE~l*$ijGgiW&)zY)76a$y(nRHocRGAHZt_WY%e4!$4CU5jOhc+LB zxGMFviL|A{_^Tzl*Q0Mcdy+^WNcEZ+)phLgApr$XSqx3=}v_>=ew6XuS=~byN)+|`_)*C~E8I}UYs7#|F zVX}KVnaQc6CS7MQ{u*-sajaIs)L6J-0x+dqNJ;Tj*%_C2dm;^#E>JVg&5`x1swEu~ zU-xztWDOza&+Q*(aymZ0nk{CqdQHVS6RBPpJ)kPS6_T>f)CAbWVpkg}APxjZWwoE< zlj}AQMw#)ceOK?Z(k`mXXE=>yCzqNOiR?{iC2s(gTp*_Zp_`IU406_r1^SeER?Cj2 zn~|#Z(|HQ`%an@x?#8Mz?)AxJn{yJeZmvbF#W^>4Uh=c=8=_eD-YRt~pA*Q|x{8dkul)T^WBm@E=L+oUO`ke2c%|=H(v?~M;x;hwHm2koYcp3-t2U?h>U*jxKkDgMO0&Z zd-bL~%!%mnnnt(RT>zyww;lfUO0Clv2Zc?l#p|SmmMBf6!hcO$;EZ^HD1$l!j=h># zoIY5FOeh~l?`w$aP8-pe?7U>@4S}!xXcJTyiN#F)Fd|ePN-}-&qv_p>*_#OV_ZWGF z*m34SXY8Z=ThdZVc~Eb51ij@d>JGXmgVKn=!(-S!))7=*g|+d_(~|T2(E5L$a#aK$ zDq?{E0i8bOq|pC$KFS&B=qngM4bk-fXlvyAEyiUKxlm@EF~)sk!4i?v!^b+ItP%I# zLT013%Y7A8Z`j@;wU&?Tj784XZ6hn^H38FYgE*4)Pe?kFd6gwX%~{G}yD@OJaLCi* z0eS>0ZPT;-0S+7COM(A4v}1BVTm^G9X6t#_9ZV)jCAw50s1I&lNNK4RIN(UPntVH1 zk|JbA%UNSYdv-3zJ=mSc?=YO2>+qd6#~(Ufv3(9NS0bP@JL)cJMN(~hgI+^N#d#ar z_a;Ww98QHoZP0EaDskw%+>;ibf9ICfz#m#6{PagE@0D;JbLPpgvM-{^Ab{%>XywAI3N{Leq zO>zjkrr7r+i7F5uNkXe%}H>#emwCC7>0~&-EN3W7td0~yi2%K)ecV}y!8vDdB65a zfM$LnA&zzimES^8Sfw&@BvZl@Be1?$@77e=&opdD zvPjO5YOb(oj!kOf=&D~Ix@PKNgxt&eh1K`hZ>GA&KF+z~aX!v$wnDxu9dKFxf`5(p z1;*s8yWqOQ-%%+(jL&c^ldjIiBOkhXs$JzK5?gd5l<)Ksyr`DIP}U{i)94fxi{EZjj+ z8^9)%XsNbbqbkITv&%O0Nw9g0*i9i;p-zWHY$$cc#v~$0j{KyBhXnZoL>SOkCY=~2 z71uCQBqR9yyNo2%={q96^@CPu7{iy$ag^z$_n?OwRgk(@<{)cR=s7Z(>@9(#kFv2V=F57m3DEE`m=Pn60@ zY+R6D61h>&oEmIoX%y|n(d8^eM@*at(;c-DF*lHvfEOacj#r%#(dk5jt9%MF8pDN3 z##gJYZQKamvP2J;9|K%OF_L^$gw-pQVFXT0aZA3Sa;EzDVtw=ta8a)ouXz#do~aiH z4)LnemKx;bm%edBb0|y9PB%=-@?iLNJIcMFn2{|?mmysH_LW{#jlBT1{Ar}1hrFd- z=!IOB{p5t95rXz1o%jHKX&;xBa&AVfv;dMkNkx;$OTpfY#&M;u1NtsD$DPp$q<*nB zA2&CA(|Nn5zgNF>R3Tm*`(dV^S;>sus>;qETi zC)k}??DX$r_V+fI;AhsBf=H|;a0bIE2?px5=Cqq(%w_7B{^D5Bs{8N!}QEr-R7 z^^g>T#f+g>Lb8lj>gS~ZJDQPc74K5CjdnKbX=c#rakm)=UlrR<1XNhE&>cw*VA$~C zUa{~?6&x+nAxVEY+#}y zuvv&iN}-BFx}l#^oA;jw5>3G%FqR1-cX!;1D6eOdbm?A->OFSevQI3~S zt?85uI15^Tx!gM>z#(Fkhkcd$neOCVZZ9cH$-$O1PE2*1dXOvEjGJN;uAU%eion_U zqzW_p6U2hXLX47ch~R4k)Ma@w8h2Q1rL1Y@qfC+ArqjSUA%eTddWLT8+#-Vc)pzY4 zREP58mGvS-@?D2cIpXw85MhdFYlh{CLj@rml-w4kA5qg#s;iH8dI^K7e#q7R;m3Q#S)X4Y!)MI4P-_+MlZ-pU=l4ub;;0?ltoYx`oF|uIWgAvN&w3Y z7Ce;3+j^tJV8^QSkDCOEUI|wysY<@?mo81n=%rvx$(Ecgfmw9GHKQOYrdg-c`dD+r z97v3lCLuglS%SSR7>(b-4&uMc#1l1arQ`#)$@uD&M56#`^;>oyQKQi(qf6@3y@zD3 zQn_q`TT*%};L5upmLs4Ai%WzR!p6r>Aon^=9S5FuBbAdCxA;_NJX%|-9@AuHEm=Z5 zZO3>QMUqPv3BnVCx8KtAcl8hoRx^+fmwT+@kK~;!c|S`>@k3o<80}~SUr++m?9zQ| zFz9$yr?!S{K-z$S~>*iwt|b z^OTbJRAIi|`i+Z=k;1E)PD1SSK`LC!9^jHF6Av2^P;s7vJ)DycE+DC#ASp9MlakcB z_X2PG^*T5$;=8+~96zUY=LAUIGr)tNak4n>0MC2s;i=zHzO6Dban&Po;mYd_v zax?>%65W1GUMpYiIJ&v_+x%8jR;-kv9tLjg*@!&H;%7c|ydPLo^7hp6=Bq+&F7RSy z5TxXQUfd&%^Ii^p@9pL^~C^1)g#2C61r#GBMMQ8 zCv}%Dja!Km*D!=hbrA28uT!}Ba%l14 zbNAy~xU3Vve+GSLQxrUfzPM`A-0q7O{$%=e8EE(Zm!4lhLpQWeKar$ zGr)Xn!wiw*btqbUGisDE@!jk-lV3beBjkCrw>5;;Qqqa!UU!g0^kKUAT%BZ7ou<;K zFf!b5a654nmw4!V2gpkXH!||a%f0SfqR?3i8A0yS6cNSOS!k`6+Kl#c@**%XAhR;3 zPs2;M0GR^k7rX1wEN1R6G@(@`mDA4==N7Z0DYfLFIX(RW7rVy0FY`%}avxBrx)wSf zUTQ2t{CtiB$1VZ%J>4SAJ>BZj|J!pM|8IXZ`TJ=uMPXM8MHcZvO1*KvfkuWrPl3EI zdmeiCg&>Vq`j>B6fubM49%=S-Xse7^_hXl4k02AjrAPL7;)|tJiksAnP$umqv)LN9 zTyN|RJlvh%L%eq`>VecFl^}X0pw>n3^>sk7HwWQBAEd677wK{dEG9zdXp^@e1JQyZ zuYZ+yHv{-<;$bhYB!Y-36ntE!EFy zGRt!;Cwh>n)C`(yKCw!a^RR#?BN#^M)Tq?#s7+K9F!NKPysw!rV5+vaI9M-kusDfS zT%b?Z7-Xu8G6+vPc!=2sPSY7XR=G8ff}naWAQq~%;G8*YVMr;|E^nhgO@&>frLDC{eOe1T>0D_rtJFbHSy(eV@}<~8 z({h6cE9BFooe}+&d`7>4)aOQUgQdsB7d!Pj!-Zb~lT++Z)4qT-6vB5C3YH(2*l#8J zQg&&UGKR(X_iEJ?%pW3E=J82_pl$%(gn0NE%>2odIy3J4KptwRJHYXYfR0?!nWMsl zPGzu#TI(;hVLgOiN%Y%5pE3pB;k)k;u1TJ>&iL}V2yBhA+;F3W;uDkP&TD-1<`PiD zk*y%L3far-39or8AJ>7Q`aUZTf6BUJJq}$@6vs!XQk1h>6#xAptIzE#l2;NV03M47 zwzr|YE|z+cS>#(O>I8_&t?6mse2o>kadqFF0+naNcjP503i@9OyxwJyZThT7x>`aP zgt!pxYCc{kZ5qsU4AUxHPh7>#w}kL>V&Ju|SeiUdrKg{ggYn-chWyi?_8Qob(Epwq zF>?JYN55q%6_ zW(N$INp*D@O5v!zzrMc#xBBoAqy1ZG$LG)hO%zwyQCaC5A9>%^hD-C=t?E3YK&mYZH!3!{LXQw5j3r+ zT1{OB`+ck0FIJ{K_vL~m=fJ2jI zlt&#AR}#b#iV<0?Kut5rx}%(hF^2}fJ%MrdUWF3%PWioYqRJ;Op*%L8+P)ZsG8@{* zfDw)_gq?s8sR>q*5w+B9<04@BmkDX=B1D3rK-o|}0R0@c$#UMt50Yj&F*3<#%lX)z zKQG;>0-Orm)5O=}Y2y2@YufKi_eV{Ob(cp`e%Y0lL{07OLryLO#Zm+5oS!A9Rz`s8 zHTjjm9Q3QqZH0G=9rK=HB;1UpUMnw$JUBJu`S8#gBiqd8fkhM|5y~K}<7KMrfvv~p zT-^GivgbYAJ2W1@be)#CLAYr*y!KbrXBDan)|C+Agm$YisI`1sUjnOg6^jb$aQRxN z9_3hA^;d_QXFmqJc}#qCrK})?)sy^kk0?Z6s;l|7UnN#nH15n~A`jY*E-`kS8Va_% zBJ9kaOL44NmvU1-yvZ88_?_Z32$vQ~P5`7VAOrFcS>8sCq|9Hu1ZSU9c zsjecVV%QfBasPDw*yAih59L}11AnVgt4UL-`i=08kxMY4{Oz#>hXQABWKg>y z70DK2$ree_3Tn1SB?=5JJiYy04w_sO|0QfVd|kc{MG2EDG&VTwcoJ((mu4-l4^&C9 z)Mj7HGaaVOGUPZKb_0c*tHUFcK>BeN4KpUJh}z`WBr_QXVto&f-Y%I4mxC!Sglw-t z3l3pThIiNa9v;gOOvq7|I9KT_;kL}|!(4)Tyo@)KIAu|DwM@;aeItP~Wzg(_9B*QF zFIlKY6}KO#w^tGu5=e_)2gr`HB&4${ITwKf(>sv>p!r;eFcq$1ST@KwS^06bjvKA% zCSl6GLE1e!65V{?8$6aG`NmZG#O%dBR#59rs2YvYOsUl5Jep-wB7=Rm!Q;+$pz}ro ze9)41{z+m7ss|)fk2ZQ;3VkRLZRI5nw3k~6DLf%^FDMvt1Sl9vZx2%RKB(P`)K8BX z^VhuRh+K5Y-CKj>%y#cv{7+zYux_$-mVlOd@=!W&&B(3;Kw4R$g|1ivfrY}}1z+^X zf9l4`5Q(A?E6qbsYevv$QFNw{kZn13AliJnI81z$n35hCANWR?SY)JVq_*YOuR5!je)eKLebT*BSrl6#wue){QS3TV+ zIboeKmgA8V5a^|B=~qkbF~;w6kIE4qys3!E$UuYE_9Baf>%z5*K59j$cVi5Zb*(KC z3VD>uBQz+mQj~cU&aIr3)Kzt)W=Uhe#hDT%)nM@T46wEaG4fS~K{rZSK)wLc^LgZ5 zq!&8%b2{|dV_AW(3vxuDoJ8Ef!IVGUxTeq5&_>F!MoX(fI^>{On4)}mzcTyM(<#>J zeIdzd(kf|`DTe;Wg7gDb^}y5HKuw_QJpZXJ-(OEz5}vKrc=}WMEp*_&-xmISan%f< zYyb3OiT-adme~IGVhOFS<-V%B)yqw1&qGi|NN=DIi0zZW1%$m;AnnQ`dQ$9Aq6%&* zvEZ)B`qd5US&X@w_LeV@>++MWQCO`}h75JtQ7}FnV>pg=9fTt=OHuEUD0L;USeFSG z^N8W(W_G3W2AB6|i%f0KU%DSUTsi>r8r}?_b`%<=Eplrgp0+gB-rkgAt2tb`a}yyF z@DM0qCv=}dZgz{GvLIE&40yHni)I5jK02+&p*o2A(_K1};^;*M<0hR=uc`8^rk&2- z-_0FTUN-ja``|1aK&y5(f4sw3Z<1F+X@s?@zq}NhJEPfb;^!9Fle?M+^?a|D2pZIJ>?#-4Rjo&K#n*yg$RE?6Vug%b*JRetS-zbeYkYCS- ztR6l#-CQ0%Zpihv)$s649?MSU`aK@l^tL{(yZ1k?JBIPtJ!X?ZEX>kgYTRsiJ`m0v z-9V@xuu6H1IW`q-I^Oi6Kk8|(cW7UgdNyddufILT9o;*3K_jT_UD9CnAjC{No34|6 zgVxabX0uKEXbB+AM|;=m{H+$*wH0jPtjzP<;gIF!lII#y_oi&_BJofrx8nmo*Gk&c zvjZgIi#(%3h_v%OTmJV8RO@T9E49b{15IDnu0V2lx~^Xtrr7q@f4O*5=#Dnsa$U=sbLTD@;*qknHF^_w-3?#oP6cZG_PT^NTgPlp9jG)(-QDozbiK5Mp;PJEz;vjclHmN3)& zSd7_+7Seuqik1pKAf-W|9;KnQN5Tx*9=ckL=LzYhRa>@iODnftr8}yf`J{VJXV3xP zR|#r^--x5#ON}g6Z&3j}w6$7;Hfp!hvaV@d;-5ZX8+!z`Bs_hXefr?RIyih5G=j~r z5FhZlaL=-G+Gd95DwzYic7GJLGcD)drzBUInhY>wG3!#(CP_8ucTo% zz?nRl3KOw!d55$jbU*dMmW;p#r^y6jEl z6C@H-y$Ho*x3Pkl-?t`9dX#>AhR1l|Ydc$U%H)YD<00F)M_#hN6b(_r_^Iedz6}GX z0$%TD%_ykk{Qi+s`BP#{9!$4lP&Yq3f@tg#B1MRI8s^n95JfW;s092Q*Y9@e^DMUn z{ZEO$z36puLa_K~aDxLClWR~X)U(t+{9#z;a~wC1-50?&+77QuFCyw@&zJpWNMIE{|Wh z;urQD$;ar&cYQL|&+8inm5bmWKBdlbrc^a2uBxH5)oc=S<$`9(dAw-9_DH=QZyDc> z683PJXKS9n&N^=xG7=WN!IqC@9@;$JrZ~L5+swan!#j>2mLICe%oo9~Wn$&gz0dRV zP~hV+d1sMMXT&Y&n^wZG>HDP~(s~JJQm}=tFrBWD2y?6dww|4@f2_DElmmd9hK0lZ zg5_x7{${(NZTVAT&(YJX;z}P6O^)CqH&69cVnb~fufN7^!bcj@UIP44->1Tj-4&`@ zOrPPqX>=xYo>b1_C*=*Z)b!cCDlO#;Hm`O!Q{Va~plzmCC^5X=V%yXOUY?!p zW!-kqfA~?(pVfJ7eRpQWDDRPUZ;QQ&9Z>E1X^Ff3fD42xXO%o>by2rIt!TG2u(XwC z@;2fgO>Hr*Xt8jX@9tyudsZHKQNrO?4H%~filo(PG7}xQ3n;aoacK!E)6FlnMya{@ zF|&LjfwHXc$g3M@5tv9~@C2FVR@_HSj6B?DoKE{s8i36l_E4g)C_&Tq$@bi@l<|!! zyWhs%OS9a9^bCJ=Ls-KMw_W~Z3%n*2PLp7EaY_)@CO$+=!2g&u=mD|TU^>0`BHWg& za@zDOo_=-OfwWO24FSLWbP;d`)Y{Xj)DmfNSqXWsbzGS(Zog*i9;IQb4rwPpSHN9# z8|qP1+in5(+;+hkyT~NS2e-KeeJ_!`{NwaQ{kK=!xAkR(G*Bs!sjy#%8Z$4T9uFKB z9^k|!_P4IWyyn>rjk-V^4Hvq-eHt4D3QCNSEo`fhT0K>RihtWnOWNzIj$oyYt&k7c=&tMmXH z8}&0)AKw1|`^Q7{8})X5;eeF1__Ktu?(+m-(oGxp@U(%|oBA&jN>=W{ zx5_rn{{03TT5D5r93`GiF%tuKoX4<3m&0rJR_;B+Yd9sfr#FH1Ez#mqQODFUTj=Mf zR|XnsUkupdh{BhMZTIX$t=MKGEGheU5Ug*hrv&lI>K;nx=sWCXH`B0`$=q348lYeY z?;m4AMz?B461(R2(;&@ZE#WMo%~fhW#v2B)xpCDh)khz62@+(ceX6l*JXXND%5L_L0FqiNT&o4DJ0>Z5!1C$r;I-@B!7;}N?d^8y zldCZHmB*M~^ovcT)JrVS&qd33keh|hCvpodVUjIJY_@~Mma^}=Rn5W{5v}m2+~*#C zZ(uX=E~H(Lc#f7lk*w0<=n-ytj$AHc8JYtwbqq$_n+mzE64PDpj7QwL_Mj@7vfZ?V z*d9^C-gq9id3Jw%qz~iiT2;1v5F2Uc5oCo3_5ijwyJF%uA;k3xgiQ8PF22d zN?S}^)*{Q_7T;#>6)=)irdA^EcPVl`?W!)wz)df;FkRl-Ev469GHGAF^IR%(){~TA zMb-&XxQvQVmJsuMdHudhyLmpG(i<#-;pXBHq1&HiKe$GWX7I8`6ghyZVJt=jGmsXO zOO84}Uo23eyN$d=R8zEAUP{cGe_TFt4nh&Y)hzl&W@ULWsn*PfHS&V&t2fDR11AAR z!6$_9`-Ztpk>i%sRA8%eV`LR9mT?E>QSH+69;kCI8i%*^12&FTlLsc@SPoPC%|%Yu zc+vp5+M=!~=!l)eMa{-SHfZW5PH{NNx#Ij5)Vvx^+2ya_DsoF|1ZOJsx|`w5<b3xUdvcrza3aL;R9W-yuazi0RFxN?%6BUnSm#3gG z=xG2BaO{IHfWjjGxlJG975}X@-=`ed10G9|S-pssE7H!aI+&hxTTZ9ymIsILK+m6#VNz7o^(D5on3v$`=A~%I4w9&p;L;!hs-Gd47N;nQb0sWnQq9I*@Xev9$& z)vSu>8|D$co)iMOlwJ$#91~yU1G(Gw6!!pqH*+E>iDGpr`zR~7w=bkg;Zii&^0xB5 zb7o#bm28X2<@nweu>!)&*uu*`oporR)-yQcS?L}wLa(wG!(tGWd^UaIm`o}A{yBAv4S3!rz0ZC`AZ@;U?f1~NOnLS=!cID`p`U2_wSFtb-hAk`Tzcf@L4R0rH4Ep-PhPd>ZY6!Q zStNhu$8}dcW>AQcIyBkh=5G!GaNP@J5%gGpz|<1RCYRagYI)$VHsvI*q44(ew$`s8r7r{Ee{jbUYeO1$}250wj0@b4to8Ut@81OZcL6{(n zN)0d*0hcjf#p@9udY)X~&%K6@J+u}Ms|VCzBxqQ=ntEny(eft6>t|olJPYsHLhwda z!qf0%r1quvmW`?3vA!oVr}2!~Z$30~G<5Jydv|M7;dpR)(0th9y4aL(x#2#m$-QV% zi6o1&M(Z_qp%YAphRT{H0F)#N-f;-V5ZVV%G->b!gX>kNsHd#u>$@rICW~NsVbgus z%h_`mhmxt@bN2eCbZlp3u)&QP)w|ZHRU!6(EdW|BYPSNu7Hf!MQ$z`Y3+34XaC6&Q zU(n>REZFJW92^z)p0?C!4T)b>r#{N1If6R!tc216EDx)}aO|U9A_ z*vF4`HHTe%<8|!E))KQyRagEIXL!?r#6ozEE)7WQtrXd1i0#hIJ$82^>=l0fJ;mIR zK4|v9US`*$P~U3aC-o5TWw~v|fM}G!5c4oq>Vwq7u=m5i3)|eaI^i z5c`;FtPl_>n97VdjcpN)-M;Lb4id*LsD*nfxSlAJUQa!@1?64PzHp1G2=Dy$GgdZJ zhLeJi0EJLuvBo*d6 zSMj8DX3IA(<(fc8N)$M`k=xP=mF|^DfOs{^L&&XdjY5|UQMRON-LkU zgSo>Vq8WIvGc{wwvqt=(+)LSSZ?B~j85_TcH|cTh5H##)v)Rc4y5;>a=+z$Tur9S8 zbKQmem;5$Az>#h!0-^Ue=DMslT&yO(kEUt2)mU!+;HBeB(^zw*ZMIBKQQ%WjvV&L} zyN^O}sfBI$qe~skPPyR2<4dzlPA%YzC2cTFSMYG$d>>nj+Ny`i^3U}hbYbL(DvC=J8P^fz@x2pl=%&fc_j!n>RN%x#xM$d7dZX?U&^hJ6&qjX6)%^&sR>1Yk8DX8jpJUsQzXf;F(h> zcAqH{Ccj_iA9o3_xaf+;0I;M~-+mr@f&Yu-Geqx8$vkwW6i&~HT#%noc;!eV*KtyD z<1rOF>T68cb6YD*eUG1N=fjY;b@pwTh*WG8A&S$_a{=QEXD}{wTBo{^()10xwQwm) zsE&J{hEZ|(snGqy=3Z|{L2DWX_#=#RE?=%?FE#rU#r8|;?d))=38n!%j~VB&rOU?- z`IkNor1yp|j|^Tq*uSjaY~xwWuA#3os2Wm9DG%Z>HhrTN6iLno(y)G^@J7)u0)K;74uVYc$bn9EMl ze>)g0t(><+_ovqG0H)Jhgw3C+@HcsJW*>(VJl~oFIa0THa5(9Y;umNW_)eFOPL-N! zd7=y*&TKb3v%j89%%{^Ak+*gb%=E+vv~HrmXa%>Fg6wPMYB4!^lsY<4F-@r5^2dv- z`{qQYvwTUuzsMrx<)}Qc<8tX0mA$n0DY3nD0B>IZ{^p-#_~9KNYn1K}d7R`$3}p$@ zda>7o6h0Y)YxNmV=a7BLF*^~V-#?AN0#;LqK2)}_%2rsl6>}I(73p zrEIwI?xZK@#LB6sdmi96z;rtc=$mDy^m2G_h6O20U&+61b+uo5;NP>oqQ{?svYT9)=Oh7nOr%bg_Xd8y%0 z3Spj^RX?fiu;qi+`++u2wm&H~V$kpMZ_K%!Bl%}S_$+%s!$ZGB8<@PQ0g4sxgA#E; zz2Z1#8raiy>ieR1mpTN0$tvl$jh z<(}v;I7yD5JAR6uTa^+sd(t)>O z?T0uE4Q$Lc7#-FiER*A@QOZ)kVG;1}yqBQ$J#DS<4@-Xztoo2Iui&$VX-$(Dy?30l z&1CWc{DxCqnW-i}VhZvg8>rW_`cx}4l`dx@=fULnfd&rjvxg1RImE^81}JoiWPIw~ zeAUrHfZ^1-Bw3T z>U&2*jkh;6Lm396F;0(-V*Z`6SRV$86SN!4$WD5vN|7$xp~@4nqJdAXkWOT7ArhrK z0K>HMi^jUfQ-^L|W2j5-UNe>ZNo@{S&urc|!h_!gqCvG>VxXf|A}TnV1RDMt=y4tGWHa`ldi_ zsx;r18pF&^vgR+tyk-z-N!O-gZdpC>HRVen`OGPiVURvC>u68M21D6S!xROqu>hD5 z`|wv3JjQlRPkz58MbSK!!?d0LSf;U#2LaPMB*J*aji_tT}l1TkTAC`LgQ=sA3bqK)rWr zeu6OEWeiFl);$N)t-fuexh9C8pMmhsAU#X~af#PHc0)AV*0aHb1<-+;oH|YLXaQI& z5JGRo>$2lReLWa3z^q?^!s>J9yPkp0v`b3>nNB|du8$<;9xPE^=Cs@K+tMpC0k7`2 zx~$$VoOQ+_l@LY;v1i{*x37WJHwt%|Z2-HT2;^G~XTd2Vc@&*YD$zETq;+BaE}k|w z7s9G31+2O0vFE_zf&9~G2NjE$hEh3aR{OcQfAcJl4#ki-eLF~3xt~BksUoRy4KJAW z_>f4TK92Ga{P@*uVSB0a&M46qIB5-^x<*v>N0siWN#@@@W^DFrU**zIei{e(OGpdx z{ksUA?JR~UmF$s70!_c>Pi-@6!@%?m*7wN6*TvefYI?Ag7sKI&zyLfiZ*!=_B<^U; zck3}(LEW|{m`yWpOjNbh*M`I6*LT`jgg?k3Qg-JZ8)l1KFk zCE|g4d=Z>q;44*0SDb;0jzCRbdE>s?KIDn@M#-P#s#9NiF}T{~SHX7`v4u=_)61L_;*x=n~nQx+&d>go?_qggUGbb5Es9yXo$jWtAyy}9@jb*nX!rKNFyUW$Nb!k{P2M4v`;aT- z@CSSkQ~=KoYWHc+RXfufm{7qux;hbNxVIl{_UElMO0F~CT+^c@%9r`8PJFG=?j^Ay zZ>^aTX9izQ)liC*dsc$6PL)NVMLQ#99qhUFZ=*EHMjP}`Q)LB3Z>036$BI^P^oG#@ zg6<08JibAVLqlFgbg<;NUmbwfe=L1s`fUchev`RWk!^DlTnEVB{q->s(VnA=r}fD3IOMiwUZ{1P!2TkB-{GB}SOJL|0-JmVU&LD|sL1vk zd+DN9lf&_%j7Elig6cGeGTc=5?4>xl?SYW^guKXJy-?SJ`)W)cxfN8jZkoW~B!Ny8 z@xR2vu>Yr_i1O_0C(BpQp8b9jzu^B*b7%k4=HNd-Rzo~jojI~@7ZGV15(^wOB019; zoiOQ@2u(yK&yNNK72}J)FJDOscknGmjCXs%c-VAE4XCW=b;6BmTky&A3h6u%7VqIR z>R%}%sFoE~=!V`3={3@*xlPZ#!0ycVI1B24NusM{UYz7go^`--117{_Pq?*fAL!Cg ztDOAZZD}*AVnKHJ-A4XPJ*oI#9~mnd^?%^7@Qv36Sy7TPxe^;`jMiE1goNgNi}CHk zGhmp7nGROu@b}%Lt4BSr+WRuQ=B9)D!-7`}94dv&=s_Wz63<@bk`Fwrc36n)&P42V z!bcb49=CxtT>C!GevgLKJ^!ueUu1dz`Q%@s4SZQ2xTN>6 z9A$h~dxf;x@b&V(X;fNA?WD9-CDM04OpN%Y9NwHqHI@TT-b)>(fP;m<_Qxaw8txZa zo)b8&+6Y<+wDJ}lal^kUpzJM&jJa=MhKHc0jR0=nYRt1Xc*f6J)JW(j?#mqRn>6$~ zbbr#FreYlX(wovRRB&l$QpS1@1m%WV51*?9^$rO0jyeGqd)qy_?2){EAMg#U`V#*7 z0E%^~?{P=f!@$e9LlnK4_>6r7`;Mv})l&qi<9a9^6*qh)e0+*o8DWiyC-1%WO6=RM% z&c^!&K6?GFFCi}R8n@La?m1Ph5oEvcI4-N?U-OD6eV}Wa^9FGIG`OkPdndLv^T8qY zK67h^l(^iQrE0+PYg}`UuH~C(2Z7*b5<`RNAL*JbGJSU39|D13;yK<`0}O4jd6yw` za~sFYdBj(iBDhk)S_vGTB{GzQ|%T3|A!h*-B&8Yi602V;VD=b z4E3E+Bxil+xEq?5!@Q~aMM#;S9KQv=<~AppH>}cAerHbDHn8pJD@PPp*^YO0bhul2 z%6YoH+7-1CH(K^`MGW{0KkqEcqcr|{`5^g2Jv^ZALzFe8h5h-Nkt?^nh;j_{dDH&`hcQ=cy=Doh&OjS-jhdi@p_lHH9_OgM0eG>dW5 zePwA8EHX$!xD7zXl5QWq*Bz zYY9&o{I|d9EH^1@(365OaZ@j1u4bw5Ml8JdcwW(qb$Wd-^zfQ~qmt$K?2QWEs*h83 zBUz;~&C?>8u z`--g6X`zXiHbVvf?L(<)v!jPX%X-eLabuu@M%B;Xwz!ARl)ld%vIs&1rsPMCJ|@lH z+d3^8^}Z=$&-L#MiFxWwJGz@xecG`HVyuHiEle#qMS9hYCBil6Gm zN(b@m5|B*O-RwVlEN0bluZi*W6A>!(R+1rCe|S?Z01e0c2UoG zx+3Gg_KhgsdbW*D?!&uvW5C8?>*e zdiDtQpo!(md~Lu?!OglLEGBEGGXWw7xL~W%`cD|p%pUK*>Z+4k=EMhd%U2{4r z#(mVWg^jhx(>Twbiw`&2_hte22Kf070TqXQ3Uf!lOjkz>r)$h9-W3|J-`Z$?4z$Ny z2!NPzWv9k&6q-< zixuyVIGx*rrG3(g8h6C63(D5v#kd~`@@?`36NT!d*;K>E%=#G`z2&s;5mFwzbpWEJ=oI2D*2FPe$$xTah}%wG7D*f|G1^3-Lw z4_t_!6>msu9wd(4{ zg!lLYx=E}6{kv19s_=S;2H1)+KwlP~sg`55}Guvx9 zQ&pT|+K%W*p{+6qwzJy5Z^8bV8wr)3(tCQL?ha!Mb%bpIZ7Vnap2auP@4}gylQLC! z9+u^R4P{@i6NT^|#HMst+^~V$-JxBvZgn>AA%b=26BpWdT$CgnBEvY+@RLwl;!{!; zzW`D7q+DS=b~h^8dck(ykn)63ZnTBgOPqqW1&v=q;GvRAI!(Ccq!<<>WKTgSZ z&K)W20d8g!i*hccJFfXM#FNLbItbjv0u$EM6*E+9N1cdvZWAnYWG2!Bl1D9Q585v% z$+4DX4Bq~@#c>w}Z!xX%$E}KYnx^)9{OP^i1i?(#^92+&ohx6nyHU$sS`pWaKha*H zOt!9@92xnM~LkyoYOl%UDf%-Ev*N^yJId_NJ>+)a+r?lOv?zAhf5{m+% zx-aO*mq#tid_|+OwvuRh%RBj^AfLOtMtZn8o4BGNT2h()+tI#D7A@oth2LlwMxUct z&RvQ&K+lnL*hu9KC_%XI;%oXgw*W_zc=pk61iDmLTfXn3MACP5Yj53H#a=H$Uk_-6 z!X+&mQ4Skid3U#FKbzb1zek1pJ!8x#9=MY3A;6i;z(f{2jXS3%KG6gWE;$wq&IvG& z(T&V|eU$ekWO|A~4I5ZIa5r3J-j|7#K=VpeUnnk*U*@ReUMGa%6tx1wS&V7i0Yudq?{t*l;;`!Fi%7j)#9gh#cF4 zxT=Lb^GZ~M>?sT|%xoDIwalHc|1<%A(Mnn6556ECTO4juvy<(5hF-Nwu4f!*k@bW- zy5+G#G|KG^rc=KK{Dufdm`BjQ^n6{#dOf3x&$7HCjwikz(PVGzk!`bfI?njcYIVOB z?x9yxescg@ja2YzqTW&P*yFzCP0ARnayb8d^Xm;(P?C&+0R51i=)1?Vf2YC%&sZ{UiiZ z@%h;^k^h8O{&#z||2u3sF$s3n8Ki>-h<#u}BasPtc{5ycJHbiud@!!%_A>T|@W)sD zTGc_F9RY0myk~EH_%b~e0}A2AGtKeRRXVkiI`5ZNY8Rzx%YXEvPs|d2(6U&j!bAwr zaS^Y)86q?TKX}8|0s_v^a1K;$*F~COU5}lQr$E@l4tF7m}b!%a+cvJt&f zbFDG zUGC`qZh<-x$kUkx=|G3WB_+Kv$cah;cgb79Le*0DMJJC!6Z~CEjtto>G;4BFZn!Q- z#)rF+=X(R+m(W&bmB19ArSL{1IB*M8%NJR50|n-CrWG^|40fi^xOr{T?{VvXtEo&D z`fp#X`Dr?FxwIw6IqIsB{pv;++~d+Hkdn8`x8v~9}! zHRM#i7RFZveV`+!kOxm`rNW4nu3`W-?LsM zWHJp}NvBTxl;9;(DmO>-M9Y6NiLBQ$M93<=W3AJ*%oBHU3K?P z-4lKzmO>8qFT{VI%E7j7*44+3V%?8E3gGN;(%=WxKw}Ll?#38E6+J6V+)MLae22%k#nA-=G%w^ zuPvJV{u_if7A{EI=Fi^8SkH{4@zi+U$f zv`Gye`s@DHJ(`;clePZ2MC7;;ba1ZC^~Sl5*X>57uKP!Iz_0shj8(Wv(5F@;@44DP z40HtV_*oJ@cFta5&dr$!-FbO=Sb!wFoHcb{F8t_3u)i;$r|lLG*ErzQ)O?Zu^=hS& z=Okb3w4RG3GXB-SAWwpanTQesHikcTeRhCyXuxbCKu{aOqmISAX6e7>*w=e@@c)J?E*L1_m?W> zaxY%q$2N#d&@XBW(Jvamr-u_V6_<;Lzpy>UeiaFMl;l^O>=QxUeLLf%gUJ~OiyU+Y z6qA1wUc?ttz_dpr*JGxqY3qP^;9U0koa9~X(N_>SGhiRDNNw=F7kVurLa?S6d9owU zX7@=$#OjslnLTZwwF#VRn5=7-XB9W_<*+2435mv$2X)|X-81JI?M$Lu$5}+qc@qUB zhpKELSaqoX9!45Ec1st+sKB*?<@7@O@5t?koZ6=W{-}?}L8`H4O3zO&+=>=vDzre` zrX1nBjq1OTH9V}l3|e7MvLuy`TwiIIrFa(;y4Kfu{TYmPa-)NC(q{s_D+$Ffi-aQC3Tiz=AQWAb<(ksFlvKJDlTczC1_sp$rK zjvXGwV}ul1%`TjI+#(k;yTHo?xXV{o^7R}C5&Li+(&dGcv`wj3cM!UrC;}WKOYWm; zU`oA=OB0@3@bCKj9)0_BGPnYa?5{bGO^=4=6t6)nb&Uc~1Hn+ggBENi8EvclZ^$$H zPl-9Kx$%N7ef|%*2Y;XaPQ{1Mq!G5s8ByJ)5OuIi`6P5DEnuE-E@Qz(X#iB;>t78l z)HMxdGzPyj{g!z@Ug4oyE6!nuqGJ7xyn7|!b+z1w~YR?iRc?LLXHeAi4e-%BWRb~%~dcy`-s!hNOw z^d`b@wL@S$W&IW?oheyphpPXp(9Y8U+DTDzse;z?lgs|j$E2w`zIAfnRbUEFBp?hf zt-Lp-?lc|z!no7-C)Enc%BW?m;z4=V?e@MST4Nm~WQiO?yGI||RY-6f(cCSKZ2*;A z40eoX#X=8rAu>FfD)*O2_6@zsj=ahKqgugWl}Op~ET}ho=D{ENDoE@&DBx2|4K&V& zpc+~LZwUiYK7>u@*9vL}Smn7rWZwA#^AhtXLu!5jIh5K(CCm3Wt~Z=Fc4YEbq{UqK zx8O2PinXHR_O@<;;oTGZ?A5xaRVG=gDyA)N?P_|nqydQ{Z8MY0O;_e&X ze^@h2-2cBrDazRLPMsSZy(_>_cBge^m$$2Is(8eW6}`*Y6j*t;>X9DxNPGfMnK44Y zday@v!ve#B7VX-Of$1Hdx$}k-e@#XV>B&DKzWm#Z_moIC9(1oXpgwmkBqJa*y0P)g zlL1pU+xTw0q=Pp5~~f@i#O7%hCATWjSNiaJ`$P5%KHy;o(srl3I*5 zg%qIRYVUecWZnCV7|)FC^_)kh1HD1k?t`&g?{_|~eA|I6G8pxR^IL7yRpj>dJhXqZYI}Gx}W?Aj60KeH?YclP!~S%^;#WQ2F(3yZ8FP z0+d@Yfc{7T>oDa$HKfb!q_dC8iI`bGl3Ldip`Jl?= zx&xEs@&mfeK}ygQSAw2?e7GJKg0)wQA$Xv$OJtHBwEYe1^7xF(V1G(#_Z#%+oAlu~ z6z?RGKCIa97DhRCu?$^l7;u0}tG~Ti+JM5Ap;qVL<)kOyZ&Y+Lr*S7j`gVDeKKe-{ zX&RM$De+pGi`^0^E%wlg{i|iBMXy|C(au^{gU_aU%lll*iG&$G5k^WpX!pS}n!WF{ zNnBO*7nRia@3mN_=jk(a#i&iZ=YBdI(`t2c@i&F^nFg5bwE!!dJC84t8;s!yLFIIfrFl26S)^& zb=4c10o~Dz`Z`nQy2_fb6=ajX%mZJVE|m`zIlib2NrSjvu=z0eX9O^ybxDMpSXpF= zO^7r;+Zl?zYQpc@4&CcBxM$L5GI;%%9(6_YV^v7D?zG`rKKUCr;RMCcXDo~d=mY&M z^$QK_0Ly7PjlIU#6AJ~Zx9cSCGtojX4r-~$2{E-zovKJ*)Un~XSVL38-(Xo_VMmHv zUK|t|kp64Y6I`SU_7D~6TylR~(yvKa4Xgth~~mDw#!?5 z4LUeHI(PA~PMRVS0JROwOxd0U$#Q`D4CDSZd7y3MnFJuc!01U$>?yYUSVQ}NG3e(7 zpe&OU@r?2l-&FJS1SzE_@|57)uaI;Ls`pJ-*xS0fNOZ^o(-Yy|%iCE%bmZ_%w*4yc zZ+HCB>dV^B3>pv!`~f5&xg_@8&D#v(q~f@v%@NR+S;yytzl*0gcA;+8Jv@@=y8jl4 z^wIX~SIaQE6KTKjy9*HWyIr3YWjG6@TcH3~{X{WS!lu{ErOnVFAekL0a<<6{A+8B6 zB$d1)WG6o0p+cgg-sL4b@0~@@qKZE zj0!G)5_oz*?4;=M)e%f6<^r{Eeu)tO1&LfijH2Ud`;jk-=5|NAFK96SL@~^syZ8CH zqd|@UTdz@9XT-?&QCF8JjQ^97IzUt7^Zm(=<9z1XGtvJi0Q)b4>i>YiOoJS0Azs04 zB~lz(Z>>M2JF)d>na7BWuyOopFo4J=0GRBxiRH9@{H-$JJ=5D+f{1T9R}!=-C&bXg z3E1?csGIIwIT_u<^p8a-Fxwu8mi=FzmsJYyN@sYR0yr+q(a-PA86g9%*6^g(ap z!3v(`yHTO~amV8-QZT$;YWDBeV|nzYSrRPWuXM$Q@yQd!t;=DaD?o@B>s>vF4dEXF zIIGc5!0L2wbmgN^3j1C@Vsx$|7HN8BAaMH_LR44n&hA@!{lIt9GINZc-&Gw5kFyYX$`&^kVaYVBtjoI zZ|-$oe0sfT5CbsEWT)?bD_v&>q>4-1aS1CXiQq&)+Y0HgHI1-_Vgw+J}j)Q9h&e54SJAnzsGm+2cK8;xbpQTyr$R{qD= z3r(Q_9yo7r8!j>cZ9?D6^)Y(`C3~LM*R60K6v{_|_GYlTf(!vytb;s9(Yqo~^yhL06Kg-);S=tvp~ZD`m&y z>RxeF&xy4DFtlkttXi&ZPx%f@u)?~=)6-sc<}H$r7Z~w5@zwv??HX@@|18X(W@-OG-N1L&@Ea@<@c= zaqx41RG+W7Z0jpy?vc*CHdd009cKP91*Ub1+R>83)3DZwgfg2T)3y7DSqIbpIlZe# z3fF|KVA|sq8lz30OC`X={0H(2o{I;bV1`{M#g8V5;-tt5>EH7-tUu;-Uo(|AK<*ZIbb&bXxQbJ#2G`q3ptjpuNs-GlX21a5nGax7YVc`XplGJ8^bMnqV7d66He|nvrMYtTH*g#NzyJFFd6Q3aey5p768wy(?gIA{96gCeA z=47ecJ`Wl;t%*N{GvCk8UE&o}a@ltJxvI$ZlR8CvvYS#W zr`ch$aBUX6(xOqkW-meez~CBCZtCOwVy{(a$NSaq%SXBp?ATs+4}^55-f}SdBkGnK zrXjP?Zfo1zRP-ol7a-pX-d|p|(h)3N0uZ}>6(BIo7y?C1Y*79>>a%RhG*}^=7bYEC zet-2k^oAZ{WSf`mP>yfa1+(gU@a@VdoYaBEZd$1dTbvMZwLstp{SLvD4$vTs7SxvR zdVReWxZA7Yu}&hRa4}JbEUrY(YoD)^d%`&c6-@#@ zLrkJXeZcLrr2!WoZuyRgM$w2X6vjH%r?|mQv7w^-{u4)uC0{=X`nCk~R^VqU+}xuH zTGzxuq}V-uub1U&yRErH#E`pG7YG*gCjRk}T`Kq(4DZQ`4dmUt$sRls%IMgnyc62G zfw}PFo7t-8vhRK0Zo17gw4yjn1M^+X<0k%iynKl8l3gBk7_|n0TT^e2d^~A1{yY3f zBtzfh@4bhxt)Ov*&a31-;@hpRr_49WBY&UIjyGWv&|@;zM8Vx*$j1lmG}&0XL&$~LcCOGTV_nUY|FOEdF!PdzL`igZ9+fUb6yd@j~ zXe{4Sjue+WibuWmUT#H^?N-}5cD#A!x=FU;EaQjNT{%@~zl5{~J=;}JRnh`7?CKPp zo-&=CV?=OIn-GI=(dpItfpG3w8%K{nPj6 zv3eRl>OAHo@(pr5+IrII(`oI;;!+lm%jJ5Ezhz+ovK+ivUc1PLY(KwkPhRmN+cLcz z$Qjzs5oKGDX~~&b!Mretb9>=BX7tN6Xx;f+jzEq^(fGFAOx-feOJP$x4@Z2O^pwHF zP~oMb#_zixO#gk-DUy$Ic3}5TkryL0SZ@1Lz0hae-SBBj@WVRm4!#@GYUB=PdqSGh z#k7vzs}akG8v*=~3t+mA{Q!7#EgsH|0GZ`i@`s@%!Bq&&xi<) z_`6;+eg&4xZHVB7{7asijF!<4N3Pt1A+0j`-w|iS>r3rd5^oeMYTNIS<`qs?t*)*o zzklC&IfNY@F02^`pZ%7`juduTU6vr!pzf`;@o&q*cV2qqcxo5`p!9XhMd>FNE>k;T z9L2W~l3wYIv^z4XA%(jLqJa{g+rkTSRPROXN_}~xQC)$C!1aK;OT^9QF2&A%Rt6vw z1Tq6^0rLay2Jen~NA*b$k2f=RAhV;}b6Grt`h6J8rEqJ0y<|W>0MLoxx$_zv)lbU} zwr)Uwsb7`@CZp&315F2&n*mvKIsVkYah~0DiP|R%C`;=PUaWFrZ4j#VmB_#ae%y3; z9&ENLBI-nXnOZ9%4vmGJSP&`I!H7HP9=0w}f*{1>z1OT*+p9xxNj|3&iWx$G_dP@U z?0nGcPRXKv{?T;5$+z3o?Kt+R`*qKDMW9es8+kcC>^aPsh)U|`3;BoDo==7l z2|P~3e&Dr$^1?+hrMr`k1d>j_)_UebVVlym7ot`w2&JH7r672@d~Ta@J2G?waMg$s zu>e5(ZuaGoLe`}x3lHbxQh|vCF6kHE)$e}+)y|?rTfYbVu{SbvAofuASIw0PQdrF+Bl(32YpjgOPl3mTa7K{qxk}QwWliYg{Nft z-v^RPDds{*jn4aGn*IRBY-(DS%yg>iYCfmJvl#a6-@W;%#W~7cT?F2x@v_>9cm(*T zaugY5#ihFfYw2-kPRe-H7dv|UMADf#buP!wtFu*Y&d$?bQystC-nF$l9y!m6iwjH7 zF3wlM-U)lP9&$fz`Y`Y(H-Xl$#b-IM^sfrYG3H!1VQ5x+3Enzg#NFb>-@A98psXk3|cE4W7L zR7qQGEo4?oOVExUd_{R8uM3?1$V=Q|pGPsT>9CA(S$VTWMb_Ru{IunewJ~3eDZOP` zGyGEH*{8Z5Xl5MAlfL*POTGN>sVl->OJwd@usP{>c9}ID4y5Xv`J;m=DIbZXy&CvoX^rw&c#9;fN^ebBa&KJc2c&(o)p9<)F zqOjj%-Lj(xa`vU|v_GK9oTD{IPye&sy3&VfD&<1N86`rXpj1|5n$@0$ej0X%(2eJouh5G(& zj8$!w;P%8HKef-@!IjPg)ZfkuOTnuy9}NL|c0Ng?fYV@Rrq=6>2VzdXHxCpyby<&r z%XNrdq=L#_0N2$5X*(XA-sI37#B5FY@(!!u7fQg5R~kuX=BH^7I0^m?A6>C&cS-(? zTno9Y=hy@h`TYTVR6HEKvF@oNZP&lhhk=t=H)N-(`zXSLyHySA5vhN>-va@9h~1#p zRB^HZFCe;$0c^R&J}oiUd$mA%rJURIZuC*9 z{+xm0E`tmB6UZI{13Y$+?fmjZygva~!AFBexBH}h=}=8E;8lIPalaFt;Aq^?6r?-Y zuMYy~LZZxEZ(i~}p203ME_pZ*;|a2-O;8dfRxhp>(r>RDcL|3#U@&5^PXA7Xy;87Y zv~w1ESq9j=R4$cmL2(5lV5)9@?eg8u2$BC2-J`2znR-4^7&+fPd-inv-+dOG>|H&C z-&s5U2V_4^?c``YcOwCAR$FNnWp!F3XiF51NVP~wM>mDAu-o6G6~^Be_R9FX9WM+F zHcGB=;so0mV68omfxI98-hc^|DN%DU&mp&`Yg+ERw>4tBf&6$wTNtgI!d7ZWvKD!m z_i);N8?bOzYHz;gytC>vA-SLLF)0b__L-D~9v?4nYmpKvMEIL)!rtOXVb`zq9x1>n zL-QJ*8PE4qr+B0N%9sHL;1%c~`33+X=a^v2>Y$R(v6lN+u5{+0D68Gy6^lpyTXn@C zMNjv&SGT{N(*?%$!X-*0?w6jQ=_tA?r8#d24Jx+LI|pFV#;C%UY~b?ELe373p2gJ| zUh0nmvyPr)_-Z`}bn~;2V!}(*)e?n|$^F&32EfRd^DztrEOuJp8%KUWv-)X^(W~HZ z!1msZ?|Qp5pFW(xlo5lMMN}T|6ZU%Hr9Wq{RFy7cB0`DMCT^$xwL$T{cU6}Tv;N5Y z1kC3%u9;Gt4XLcpW8H*_11WTNvd*)sBuLB@&Trhs{v48eX|fp%gBX3g2+sk$#syUm zHn>RPisgK=Mkxe&Zo`QpqPEP|29*Y1d8SMAz1>pSd}gF9`)>aIhI8+prI>5Z&(glV ziY*ZxiIQrQ0YrVvMkWDI(Y|=4*;ji&99ZqTrWdi$X{isSjM~8rT+&!kms`K`6;X z-)ycF{1!1D{YvrJ{{>6!upD#`Q}LaGJxPs0~DVvt#u&4s3qe;bg96?^{~LDQ0#GZ+h`Xm9`|#^LR|LC0e%xg$wFWPL`qTg)Rin z^%5=Fql#JEAjoC;@@qYbv@;IHyT=8FJlG~oOH=^loD^DzeJWf;@ z!G_}!#u39yRdCV7j?zP!$7I@h;8txEG`-xTK9w9W^QMb)%C374V?B4om+h+92eT}= zCh|vJ-tw318Tpy`cN!I)cn`dVtDhxRtIf>cpTCW`w<8bo*JM~795vzve3cCfJogA> z_cOcg6StNQ&pzBdxuiU-F6y=_arkulMR_!cAsEWlvS-E{{~!oq6LGvhUq@I>g0HyF zjW4De`R?#HeLic5EH@d3+#U#lo@92hpY-kC9%1~e7o=D8sa>5Ju%qM|0b<;66eh6F zmWKOpP_7R(s%Bc*mo{#2OOc-A$yu-v&$&;JrXcru`Q+&gS3vIl8M^oA6_Bi)Yf#)< zvlne!aK0_k*mGw;;uFG5Ds8S-N~)95{s?!pb*{wThuv>J)aP>?KF)LjeLO!GS-*o+0{C)|a5thw&~UT0iRn@jPh14336?Xa(GG)Dikey} zN`xbAg@+4)W}?ujn~#zvlsL`T8=@b6q#R&$6AoJ)_)zs{*uNUHflaLz(kW)rqe-Al zbLF678Qmhf#~$5@|8lInney28>>fftK|fWxY?7>zgP!>UP6Jq6ODl>d)28-S4m?UZ zuPrtc8LuJA*ASd*h}$2Aax+?m0Kk(KSMZo%@U_}@HpKp>QuEuD?P6zK(WzLh3sVs1 z*;Y=3-@OgSh@ET0WO!^4KJ){$h8^tKBPQ(hhzZ}d`3qWdAiHCwK~?cLgsy z2jvb14|M)P&d4Ccq&|OO;4DlmV9(gN~A9nYuFy_(!E9lKbl#ozE~ZguI>)KgS*AC(pup_ z3=Z?R@BaiV8A&&TD3DPOHp|wXfIDdeK|zo6e-3RuAGrfmz&a3;`X%7hGilo3220z=z+i5zd0)K)xhVah=s=7xp>Gph zCSDlpU~RUpv`z4qx=F5Hzuc6cG`NNNF0i2)It;`#3Kt z@}qP^%3JWKO#p}ttb3!32lJ@6Cb0D=Yrm&CmBWVynvI&V!q>W?tLxG;74-}5`Ikir z)FYRhl#5H18^MUTutBx9SP#AS)kTx@fJ6Zx+rCkjWc}TF)1|QB^7l^PQ!xi|n4Rb8 z#TFGe|GV0^-Qv9zEq%r;zA4Y4jJ?^tTiyofvXLKi+ZXoTv2I)4)``{wd4 zD=&*ZpY9}OvggkBj>?z)wryV!CfFb}(ekNSMjvnem5VG-K9iY{@5>O~bBSi%6=?#~ zxh+Gxk(ickg|Vs_+ujP(Wi#d#sa&DuzyHo%ZC5GziI?IUa?&Q^jF!%A4gTK$-%r;Xu4X zuE9XWu4n@XQytgVFG~r}U;(dj%UI40nCdYy`V`OcMB$V8n(^XtN9~DP)74DS_u4MV zUv(H&-H9jI+=0Mw`5&;q<#7jZ*_L*>c6()Iy7804QozQ6o|BTR(z&ctz)|Z-EzGGy z!$HiPg@GyoLfpyNV8zwkxB~7Tc+GK4U8^2qZsYr!=5+9V&Yl<8*WWW3wrT!0EuNKx z3Y#t2kokLV?|QF+1od|XMoK#Ma4btA?As{8N4D>I7w>akq`oas6Jt(<=qZI=$Th zZp2m{od3MTw3qJ^L!RdnO}-I&izb1Fa5g=Ueel#`c-DcWue5=ETi`)#b(_uBYR&-~ z5BNrAdd{*i!NW>~Eo^@>PC#K_>t1nfb!*L*v-tf)?6U$d=n1{FerMb)%lc|K| z-z?~1$9$0%Qcs%oSHrHa$m}U7)^rE-J7b~#(+iKEEyh|&_X1ciyiw(19JO0eDWyQu z-5^T{UqvVTF+3ve5t;zl$>bY!r`Aq@52ghzCe)7~ZNQf$$P-*D#zpuqTJ9uh!JR*Y zmoD0LZ&}6HjhB3m;X@-pOGtgiF^PAeQ$7JiL>X3v4kq3~P$d9#!?xjbyuJXugc~C) zeTNA_JR9Q^--T@W@VKQ>2-3ipxuYbe4a9H6MTnSxmUaDzjin!>qYm4$Vm4Qzc~lRz^BPuxgs}> zTe-GguG51q96qkNqqM5-z_v%^jncD=0Nx}R5_FDHp zkd>16`&iDpc~=+#I{S#8(8F8?-#@I<=NNNh8fW#q{$@{?UW9o~_=PFvd8}_#|5rw+ zYOfE&3mn zy#-Jt;g%(gYvJxL4K(iBK;!Q2?(Wt=;qLD4(73x>U#xcEl8UlX}Izg_vSyZ*VUfv$0&VOrQ5?CG%NGz_Oy9O`OZF zrMeStR>`29r|S6@q|J^d82&p(&BroA@DGfdTKWGl)ac~)zsIKklO60P(Ey!dx0!;$wXorH(9}a{u8(s4-{w=?BUBsbGzFs`>T*|gWo-S{d3o&$JUiwcl+yx zkDc3P`)kBFyE-~#U1Bii2h@+~>QguNccD}c@U#-AX6$c5lDnU* zBTe@Zja6y@R#Ou9=0R$+JV#d=vy!(+-CPv|)&$9tIq&pcQl02X)~wlZxdMJ~A0OCO ztP@$|LTOvt5gFk~D>)M>R3_&X_P;`-L&_L^GI@ub?#Kzo#uDmrrQ2;dt1@&_i%02nZv(b*8P}w{1-2! zZSV8t@2%XGBI0CCH@5Fb#e?75+(dOjc!ynGrz@;)FX_=1$TK_ahZXseUq6K341}8W z`3d_@x4B{sKiY?x%=MD=wVCvFyUckdlLbe2Se7f=2M^;WHyXwa?1n7S*ITc2QXO9+A}7rZN7ma!k5p$Kg(McFShnJ0n!Tq3-t z_+?4H#O&`^-##ot)yL27UuJ3JLtQGGpKY(K64zE|S${g$r&%R{y3nVRvEeT-UvWDR z!FntG@$;VDV_xiCP_E~*C79jg!Cl#|RJRHt$Pye^`-SzsB&sX4jqliw25!OYt=ER+ z%JzFX6raK;;UvK#uL6RIGl0!}$DTU!wDARIT_oSYPMC!f^n0k~n;;RKK77E)-n}Kl zOjwGl=l~U+8sq5g7+x-`9X0lRM?!4%JTE``&?hC`%U&&!rc2F-->wfTj0o%g!l#_9 zyHRZ(%1cc((<%H#)=#f9$uYbF^>JWOGc@?ew(Y#Qc#qzm%TJ+bFML`BiIpLt=C-lA z**b2Aivi)@{3F&8OwX)0Be(EkA6p6EtDm;_W;@Nt7~v~#AJ&y*vcm+gABImoO)zv{2f`9aMdxe_-c^VOtRVH`lxV*7Krnj%Tzdn({trkcHg`C*gAAQ{`S5l`&_{AIg+Bi-vA*m0@Q{OX|=)G zQK35s^tQmf;cz9DEvjw{wFIXJGm;uFf2&OQp6!o5WbAOG@j*NG*LO#CGun|8<~;K4 zpT&ldAPIgT-V*QIk@$f>kGjnG#U`T4RI<{je4c^}v9q z%$!+mG4jDK^tzk&U9O=-q5b>u{Zo;eEP_$H&2hhh;a_q5Gah)(1-5{DR2|xo+Rdc! zdi#p4E{hc`fn`=PjgwW+5+Af|bt<&3aJBC+F-tGZ3~@vQGo&OBG$ z*>k@uC&SO*pK#A6K|8a)j|mnpm7Q&12|zsM>_TXPr3MgUL-1u4GAs)8r;Ibx`{l-r zxcz$5y4hJNXS+Pi$q725uZ_98AGvWn3vEZ6yo}20*yLB<)Y9+V( z49(88qDW&E_?x(y#(YH|b0p>mk=}CN@tbS3Knc?08hD_>9~&``z@S`?(v%yNL=-nQ zbpcnSG)vjT1hm49U)}KI>bZd0d;K8Y5FZDsVJ}p793-#H-E1Om!E+Vl`C$`=!3J>a zs~>r)JTycDE~O2+5L#b7$}^m77dJ^xQOLD;4azCir( z}3d_<_q_}Da4G2c3+tE8Q!cHMi+UY#%q+%@o30 zQ@xqD@7lcZsXN|0O7jue^%|k_W_rQv<*?$`_xR)F=gau)LOmCIUlZ`|`1^|#h8*0f zxF;2&BefF$61{6$o+lOhCl&vDtLrjaTdMmqwjU19?)aQRAM|m{cT3HoBRFDAbRS~L4b74Z(dIg zNsrY~q%<2Hn$S2L{{ht+Wj9SPp#d%?q2UxdeSH68F1gVr&~y7Swvyfse_>15W;x}A zv&6(_A9JlW!0HHG?DO%$TEMbWpyJgkzD>_3Y@RQrsr~}$LVL{bv%~mYt}AORA#p)+ zd<=7SCEx*RMS8XMlw!lpZn@eGd`lxw$L3EpSA)();f1CKpXT$2fY2$)shi`=G(Jv_ zuWz;O?$+lXb%AZBNsl%gIW3tRzDXewlV1pzfo?PW-&Unrs&}0Zze)bki`tv3&+7e5 z8>~aBw60+K=eK>yO0|);>V}9)o|SZ^rm6kMtHqTQsBDz^=JQD8jUJW&XP%g?0yNfm z1WwR_b}Pluix!IJnZ*^U26F=^Wm=dJzR5w*DqVO{GAJmYf~Yk3?XrFMTYs~U`#KL-Fu4VnSpn}2t8a2NMT-C9WA@X_(BV5>bkHEsTQ*Qm zJyHY`pi*sFsV7Q$$gkEA{!L4-hQP)8Yf z#}$DynlDI8R~s<+PHCv2J?ie*$=|?>2|Zz`g6dE*x{dnA68E#6v1=V?$TQQ(73Lsj zK*9&AEYHDn`VQgG>(a^JtK;`CI^pN!T{$wcuVRZ|;O3*!OVjlmYo~zliH77>(H(x# z5o9a;-3OW^L)~BKQlfANMGD(TZZF%>daiARp*Fk3&@i&sG%me6Ps9|)AA_&E5O+MX%jbG zu$4_|7s6(7+w$-uUHems(!Cw_BLMb8GM)G1BOdlsKApGA&!ml4x0_w3x`az-6S13l zN5C?mJDWac>2noGbigLs=K<;`qg%C&+_W3DiH)H2-a z8kGr41iG#EHKz2t95XUFW2V4BuCw?B_v|b~5ZJEd&tj>cC6CaMi?mi#jz<&08S}RBK;Oi)c z5u57KrK<$D!9j=^ryQ|&HL8H*t+21Q%`1fXD>a_$ZXar=GGdevUobj<8)4QDbPD{5 z!sIp zm5{utak^{}`6GF9kkO@!5TExRLnw&Pyb4H;<}S`-6@P;g+5imu@CcZGAKTs^bQ;k7F4`*X&rR$H zZlypuy(kjd1alC6Bzi#h8`JF8`hDP7;ss=_)c)3b<6Ox2VrqYdJ7T7Cpf8*J#;O}V zu8}>#?2Jit3HCt?B7AxeXJ>zH;5-aW4_CcIUrF`4et6xHA%$RDQdd z=2%(3YIw#NN@rJf%PD%)bq~IFD@m`L8{Y1=`h^2E{~S9fj}4a^?Hx?$nBP533f;1N zq)Wocps~Yzr2S89+RoO@(Zq?t z$;i>bhQa7Rd?FcS?QD%qlw9oXzur3j(_xM0-foE>3JQu0O4b$1)fEa+6zcG99#s?y z1wkgKa^UyR_soF~=lAXS{D}@{D^aNG?YG(dedXqfOl46hlJ2*T{rTBopXKRFe zfC*@0`|6?s;2mbr1~})FS^bMWIk5MaTuu!%M3aKU;`1h#k)wY;Q`AvsR^!6yn1$cqCwRHApz7CI3c9v*!#RVTan1p zQX1?ai-pv@Z{Bi~KI)@#P@F8xn@}ON=k5++I$^TIR6m?1;p(yb@orb(cciuL`92}A zveU52ls#dT_~l7Ig>wrGIDw4G5jI3mzy{a?b~0+5DN8V=%N}}Ilh^ll6a^KK%)8)DtWx)Q%qIs) z7lgvyY;Qyddff?8O4LK#SwheNvmQ&f*Qh@`bTjn#~n5>PPUBL{1YP zxD`N9uL$myltXIm9^6>1w47T5ZtR|!BBG%P3gzC5`6Bjk9VRN#Jk!7Iu8a8! zo1d`OoT1^|-Q@tPNC|mK*xgLjPx^#9>FP^)9E{_E2SfNl;J^ws=Me(WNfEYsW}fd* zgUl5W=!Tsx6=nQXlwI+C^rRmL3@&gpq+UMkwaCA zqhkO$(@7N}IN4*49n&cGN;^*x|wjzf6oI;#Q1g( zkz%8g9uskjxK6mIpBdPXFKy4*swF^&AvBtM(iS)QAQu^Rle&OjxAP?YAu;8bC;G9G z(UEEISZ$lh=3!;|9o0Uxp6O1-Atk^UKpm>D?jNpz$X|F=dE1$}O9nZeuO>+3N#R|& zjpkjx&Eh@PivSvD9N{*YaRI+7Gp==BfZQFZDH%+VH3j(`xSkJyNJUsOt zWt3ORAZ{zS)aWG+M)wY?!I0Kh>~-Q4(&-NVb06b0cMQDJM4OVBHSJvkTKX5S` zJ+;3`k~yibH<~58=UkATsi}^13loumW%hpjd?=UfETZqr(>zJfG}B~4t>P(+`Anwv z9Q$KO&$%fy^&2}Hqq{am)fT%=?IFkq7)qMW+R>7A&pM_#lT1^ma!OFI(skJmr{IS5 zJJm5u>n&*VmG(pd+B#-nTpO*Xvyq;O{f=C~u${AM%#X8tO2u+<<1P*Y_-6=@!@#D) zZ4Q6?LT_UJWMgxrUCz=PCIn$&CGzdcc%mGuTWEj$0dr8QfMD} zrbWeA?GQT^vx}YO(D_m95_?!?p3xCDWJQDbOz7y0HpT}mAj>c(MY!7O>BH1aUegrg zs6A>n)b5lEAa~v&P9Mal7@mhcP#G!oM*6lDVY(RNx)?*x9vNs2!e@=Fzz#&g>{Y=0 zjy)GBD!s!gfsL}_$ z6KmgwViuaHwIyVPZ03WMSwP#8qd9NBrnDchb#ur45U;Z)82ik`6HUoZc4s}EfaPq7 z;%`Q=OZKIg_R+wgtANzdXlF=-bT7MdL|pG4XI(_B)$1WythnOPaZH6FBKc%!2ydIV zj-+xb*TBe>xA|m;K{*>7Sb;_py72kKWfeM-dE6nkj`J;?f;6Y#5fm4J#7=rUk5Kx& zvrrG5nnVM{^-nufZav-XsN|+8H3)AlGj@Vu10a039@0}`>?d~?V72> z#&XjrS=;((Gni`M4WH3gtWE#usAua4UPw(bW;oXG;4JoV%n0SAj_5cJu7?yj6;3lQ zRS(@?id3){iU>rq3CbQz`L2-8v`5$nl5xhv{VAq#{r6*^OA4 zG|#OScTU-ughrsSOV82wQtCibLy4aK0~d0@k0g5}CfLqnv^qKi zNT2gohCBitR95zOkH)bILg$&J4)r_`y+wM?L=))7D>u5W zPG%TlSHmlFf?D}#ca}lNICmmmtqvfQ8w;%=X5oqv{)_zlT%x4E@LFI&n@8G&S^Rp1 zVRHW1gH3z=hFCAIn~55P5!l|v76^h`!UK4aoq=L-)jW}k0B3Kk|2J)X7R;jT(fqt27u!owE*=DVR}2Dy;Ix6wKM+^3l#8N1I>$ zi^%LhO0*7zl(V3(y1(=5nPdAubZ-Az_sct){AcO^pZ4Ze$~IPLg2=w?5?Aq7)^nwG zT~>P5>E<*47U`PNVTB;X3Z#qOTI=|a*f|AOHKPt2e3s%cxb)Z#BBv~ zyj`29jwxOg!HR|T?Lwi?KqB{_{*f}{^Pe5EE(H_eIbqWvxtuGR^LlbQk(t8c%o z#|BJ2S_-fuL!jC1Xa<)QW(7NPkQTzlnTl$S>H}YI0ya&Q& zJ?qw9RVm5f1@A_I_eT0J5q)Q}4|_xR$L=B4KE5#C^%hCH3PB|L{%>qyG-NEw_GxM#ydNOhW=WDibuuZp}L+%!?J|4MOEOFUCpN3EaFSkr*(EC*_ z7D2lx%LYWd705S|YXyO&aVEU$OQkeQ2AgvR`v4QT-{i5PgjAPVMb>`@h((fl6I~@h zjpMujt#`*u5*KXzYCXWexCa04_cilB7m`7>H6=V1>`wyJWn@fA;k+jGb{h+Shzv!q z`uV0`%5~_}dCH}jDU+a08|OnC2qGO(enMv6H-pf_i{nZz=Yy(eHlk)PNXHorQ>94U z(JZ>z_}%sGz+a=%<^(}+yQ62!=*iSm4cKb~z){Yl zb|Ih&u={G4xiq2(u;XIG^;yGlGf~g#U}VLv3xQ$Oi@VYg(2#RVsM*om*62~G=y2I# z+o8FtWU1x;!OjrceGNdI;KpdHv%`tn$@=oDwl)*ybG$#5(zDEF)|cc2ld3Edt0U^B zvs6>44$O`5H4z2{7HOUJKg~(=8**n&=mMO_#G4Mn`btXA{2Y!Odj{u5IU% z(2&RrbF6+39IZMT(FkmG>p1<9k)A~T(UDyZoc2H8`k^#xUB1P?2ltvO7p!HEnuwe7 zXU^llzbVdQx}ncGVo;?_YBotZDZxrAq}}c)F+XdgH2v9z<7<}+qn@0yw|7on(^fb! z)07l-XVrNSd33yHvqAW zJ3>>iA09J|y^<9p#=3rurt98r{&j`)28^n>&Z#&#(_3wmHdNFw1z(sP@b<6xRRE0WQ#_nAyfo=7TtY%z92uF1m|6HDUXE`Vfx)Mh zl@0P*uMkat65Lt%x`oxLY$4Kv1_^e2w7vv1X$Iaw%V9K&!kB+<6}t!Mh>2wCh=>Dr z+=o?^yTqt4#6z8S!8b)QHVYr0DdzVGJpH>P5LZ>aVcn4>dNO7jg>MI?m*xG{esUnN zet?F#{)(V;fOXt`IE(GGBf$?>+4zNyL}5!zYW)PVa7E^c6BSvUH(uHqlzx-yP0*M# z(9f^1OjQma+86QD3PPc_KC@FdbG>iXp;w|?(t#Rg^l=#jiG9Z!Ujf$+6-Z=&#!uO7 zyJz4XOz0i0;O$@kgi6`f$9w4x!upJO0NN7Txh!^hS>gea zKj`8XlsW^sA)ffS1yOBOggvX5Ieh>%75~6Hphkh7E?}#n0LVZEx`6IeD5i$=beD%slI0}sG|g)Q|S3DkS6ap7iNWR zHFS}q+jeCSD;?rqSoE2`RIAp(!7g6*e2ZLs3XOvNyLQr_vxD+fzHokqAH%#jF?o}F zmE>N-GoH@i3(K6Y`RQ-i!@_rbG(Q)_N^gglB2K$O|JR-ZuV!E7@vF8ONBx?d`k&P| z|IGadYG-a}BIuto3C^>%GHdd+J0vQEHgk*O-}v1nzKPIK5bqcW4%+-Kh99+E-T;Bz zg6rCP0)rF*6$sFTb3}Yu@f+~#mD|l4Ww(iMD#q{jkY#4^I@;uM@_S@r@q2qevjNe0 zV*2G3hnS0#hKq}XUrdw*>K=Dbb~=nAp!!^=IiZnXC$bkxNtIrJKMckhjS`IpI=@Fg z3=hgmiq;e1F2Tw$-An79w8tipjgnb2-HXSG@dLYrYZI{jy<_qQ@ypaqvfIF1)lRd~ zX7bQI#@}x2_@!E8Ej|8=EkeCQCP)LUm%*r4btoi1%oxd?;SS z30|~d8;szTP_1kHIW_BACOS(#DgqudUtp<>>S9KYo5L!#-WY5_-r!E3LD5bZoNQ4Q zBV$TF+Byzwr>isas<*8Ww)if=d1Y3rTY}eC?=RDN;Wv1D`J)0oH~iW3SCvrY>I1X8 z*JR<4JV!2`CS3~7Y~=>nx8Og&(&Xp7RHU%B=x5FVXYBo7>V9Ncbi_v(fgInAFD0Zo zll9;|M^% z(2X}h%$Wf?ecD(mH6|_VwL-WA>(M&{9|#3>$wu@vkpnB($>x9#^AVbeg#ky zD%Yawz^UeG^;*W}&1fX!Mo(jS`!nFQnG)Ib71op@OYh6Xn3R!`dT>tBaE8=icnAJX zw1cDH){>l-L>2CJYZ1R!?S15ASbXv~uz+meYbo4ju8z&1%&av!j!m{dJ};#P!Cs}^ zahl0sTSw2@a7)Nl&ZZgX<$f)e>%{pHim~N-nbT7vkhQ32*)}YBz&xPAnS9Kws!e}# z$H^Fx&u{0rF~K82>151};YiX)ZlHKR8W?BkV5lyIADt#kmm(W6SF3%bywDmMwzKkC zzACF$s7V71t_~9$WXpsisIsXSOq}y4RANys!qr+U=2X~LNEo&FRkCJr!I|unR>`6W zR$O6Z%1DKopT(G2{^aPJ5~516Mz()OS$g|Tq&cL}^ej1<4&A)%iHl21_3gbSCfi~1 z4rcd`+)5Zi8SS_NjsPaCO=>Tey7PC*DXkYx&+igkz&uA-!LP1&a*<(h3w8L~gzH$@ zZEa(Kia@UuCdr~NPGj>n0pNK^{yjtL9GmJEtS-z&cSsxaAzJPkUg_t3l#&&tQpIo? zs9;n>jG=6y5xOMMMHlR<159t3Cwx_WnIl}ET$?Yv&8mS9X>l~9R;WsFS~o#|Bz{Hg z4-y{q4snPPry#>p3R3`*xib`%115t$pM>>fMkspqcG-=V*O+ythp17vq#Jycgi{cbC;I1T!_bL^8fPH~3*jt|EbK zguiB8;TZE2nv7%%f%Q$cHpbvm<;2{;uW_IAyN%-QdiCF&-0s*d(N9q8X`U2oqxf;G zXGqB~+~mx{p(CMw}V zj0l~%-g@H@9;{c*UUr6gd0!U?@A+7k0GV15j$zufP^QU_nOJSChIw9B0+-{;bD=lM z_bzyc-G_o8%uSg)zRTp>#Lhd4^@Y%K9`j!*MnuC(cTob;XmP-njogPHEKQOe-k)kxrgokk@I1k z-JHRB2=>`IWvaEJ_|RdvzZi4Eyo0>S#H$x9wVi-s+8?q;hUG8~6mMg~15z5PMrMmi zR`UTiHl&*8Az6W!ozWC#y`5^?_iq5XXIFL!Dz$HTC!68IjxUUtCHzABufTXufn-I0 zO;M)W%omLLC8aGPpU{`Zs2#t5>!Pj>X(EchR?XwDlkWevdMcSXIa%1*{x<|F^A89# zXzM9O6Y>l}8$AW8Gl04U8H-OaQdmX;&AdFsX$O=yF?DyS$j;pk+x>6nW(?IY1WGU= zeQ9xcKP%R&D3iX9KT+lIh`sL3~`WQ43oGYk5aIqpz!A_n+8yqnejG`Vz(`0^I~N z0CWjN2$wBbUAsqQfC|@xI*uk7sz7k=n30FRpq<6p^@mMHS4Q#GBiTb5C6fiA3Tv&h zk+se2D!I)p<;iPW)5+dh&U?Myn$sl!yf41;_CAo$>2Td^`YO|Dn#<{m<&*0#`7g>h z;a={JsL{2E&<^2V&-KxD9+M8*$S63tn@dLapqa7RM@A2ZghwWi?f|x@Ujgmcf~pQ2 zPDF;c282(c0WrHqZ!Zpn?+`Uld$N!@y=MJS_}$*wVqHD)3^XmEkG1F6 z2@E&84C7C5RxdOOH8;Q-78Ik$;5hkfg!PhbU*4YmmPqL5=hy)3uF>`Wj!P7rnBbe# z08?+NAy`N%Ceppc$T?Ivy0uvZ*tiSmMuYFk^OZjY+0fuN7mM4 z0~)M&M73eUXMAy1%Pfd_TdxA#}X2 zz4)Vg*=-oqD&B_8!i$|7gq?jm>5L$@SD3GT8gDPtSF5hypmBpJL&UgRe5fy2W#$#P zX{UKJnO-qNf0i)wC9iiqU_H8(IVi@H^t(!ZObhQUH7`2(n^yGkQ0|BiPC+7nqei0| zSFmkrzi170zLX42O;&4wPgr5Sbg~lK`WYTCTBXQPYGh=j1FYMppBq~&B+u-K zF=PTIC2bljiv|S=2aiM&a3C}M$Wa>6E|;lB3Ujd#AY{T9^2j>-J=%ze_hgMmvsQ3WbiLFNEkTvi%wBZ}jgD)$-gX!E z$USl-fs01^8?Ou-m%cB)GmR7E)CsaqzbcyC~Tuu|yqu8Q|MFs;8_VY@~lh=N;3fOVA zx&yZ_&(enFJ;7n@yXN)~^~u*?O&vqk4{Q7V3OZ8l5@d@tMNtcrb*?wL{p#y~24Txd z*RaB~I5X>))J)x*_%~c6o>ZNlY;&BRirwg_E@XZ8oGzUbD#(=yU5_E^=QeHHz#n40 zl-evR@&*xT7K_tn?r`nLCkg@uet6{}AmU;Y#GKY&44$7+?#_=mXy!O&{>C?$2Qn>0 zysWMiq~&4*((ClutFrwpI7{7D=1J```20+dbFcm$a1y#+gmtN%K4UvO!d9gyRMi*y z)|Je=k!#b+Zt?zM63gibw034E5Ux&(RERom!r*v6R1z9Cc>jaAwh@o(eB#^0E)~6x z%G(8w=ooS7e4Yrb(onj9lg)CrW}DlE|1K-#%mPqihV_r^o;%qfTD!*OVrzfFt!pz$ zj*yG4;5r;Mo~Q3;LQ2it&eN>RI_Rh4;=W*H9EW5(LeG~ercRU{8=Q>iwpka?a6Ujp z3~*L*4l&oiNb(Fmt3^Bm9SOZwh;M<(p&WEd__W5D=H({?Gl757mYinhFN^O;6+MoG z9fLs@C;E*r$VgC3S?_`76Y!R}Lp59#Jd_Pgw{jRd8QG z9nBso6r~y@s(@NWgFUE1re8{*FQxGF&LBTVpM+3^g|I)v9*kp;+|>}m%O394A>Ei* z4Ct^NOz>-a8CJsn+&6oh6XZEy4;ctCEJ#h9)zdig$pDHmb{uzOiqkxDeE;Ep>xdGS zrOV3r!yXd9-(1H>c!N_CZ%9EEV@!WDG?Y4{2Iddbgs^Dp@_7}EbR-0&C>R=S>=e=72t2DAlc~IQ{np>WqBv*%Zw=WS1V2FJ}&9nh5r*?z8EL>;g?td2DQSYqm zsdGnjn98r|2n3r@fg52d<^@&@7`zcuxI-Q|gO(TJ4OwDjAav9PdS9~psAzB2;rwY8FN1yeBMPA6*2^43v?{Rx2w=f3h zKIOFd+HtVZXGq=(oUISNM_Ehl4gZ@!s5eNM&|-m48{=?fei>0YrhorzkwJbSm@Fh; z1ZK$`q)r~>z&F?tmTgsJ816KR{>cOO$rGEqo==9jC@+}N_1U2IIYf#Bof1k-ZG2BM zQ0jTlEYDT=rp~!f7NUKCD33wIFhXo+toid2tyZhk1GExuT+Tg-W>v}^Bha_6!o4Er zn#SN9BdCxR0V@d1Z)8~D2bs2bc!;0Gvz*A|m<;TnBoH0gKNv!fZP7xcC8j!w@1R+JT~+Bl)9p!?e5wpnOf zhc=pv4B#5Jg;^_VLI#*?;e`SlaOs46)@*J2lP7J>+>~zMyS#6aetp0Q97q0%oZ|F- z5M#=0$BPH(1XIXTnc2xsd0aYuxgnl>JYLuMflL_jgjr~(68{xM6}vG&l~Ttvr3j0u zrSUBdT@W##mnaQC8iqwrXo*Z0@1mY4B9Cv0@3GjamQokjS7=!zuatTMl3X~N#qePC zJ9N^nyEI~&sh6I(YBg3R_v}|^Qe-UkdlROvqewVWe zWk48Xw3af?Z|h zQF_d>X)R44Ofn5TX0ykAEx24^yKAM4VYvgg*L2Oku?ey2%y9ZQQOJ4nw#bl|LCia+0fh3e+mqQ5kD}0Mw2wPN+T}S6Ks-) z04o45Bhb{iRq=j*44WhR5`k%Ep-of=ih6ji!!sU($W+%O*V82sWH`guZIL(~l&U!r z%drj!IpZzSc&O|qU;7Rw9RX@46M}JZV*WelBLQPiaN)oj6K`<8tM546>4t*^yTN)n z^FOv4s|c#+dUd>48Fyl0JV83Dx#+Km{DN0Nl^0k&q*ziiRZC=k1_%6};ojB*Sn5+s za=J*(i3p|{#lYRPE z8u8gd?o4sXy6y=H0QIqZXBQN zRuhw`Uk?+79}$xYk-#`T@&`T>f+NM(=sbV~lIawF4oU^xDc2HXG9al- z?;)?W59|`wJq68wBqet7%tu-02x6AhZCk|-l2$=&P#66S**tU5DBzvZlNiN%=!LRD z8d!hmO(HHtqTi9OSwNk7slu#qqDEWJJz>gxoY@@K>H-=m_n=A$qa|gR96wisNKp{} z+vc$!<%MJ2SLO-*lHH>DAGU-4+&!*RwNd&aF8bPjA%|)~=nyaYDxf64NYHBo8iRhI z!A={l#lNERrbMd^~_(8gI9FQe_Io^82JI!^p z>2>+>_bSH^H1%f@xQ{x@WV!j`&wBcFJJjRhe$Hxg`5rRJtsw`MUQzs|pzS*OXZq+~ zh_>3Y?Xcr+x!CJ6?DyPl4g7l8JAJ9%7&unQHNfd_69+1*uP0jvl3Unqk+tRE03gM( zM4)w4ZN)=QZ~v8oxV};l)D5JXTf;5fk{j!|{WzfCV}riLrefco<2%+IIrW-q+ja0E zzHrJJSFnnvo4be;>vZk+;I!n!F2|t6xu67B2+WGM%r}Wcw?@A2HkPVo#iCX=$u=jM znD?6I=>2ezxk=)j3-NX56@~ROs=$?_#lH#(FW!I)H^BJyCG#6DH;!3E8`q-g=m^vS zr4`n<*$9vR-HL@Q<*vr zw=hb-p-F|-;lHQ<-MR{@WEPk{C)e>C>)r!nt^0%{$@Z}kx!P| zKw3VoyfX36bb4zjN=izcTR{sXP5?tshyftNX7AV4Hdl@t@Dr*aE|irqy+}{a75Fy=?NkY0MivU6&pqH zUomm1gYd_{u%&Yg?=5CTox87}pGs&Con0vOAhYw++Nu3~q&S9oYnx(3**|#VcW39Q zztQ|UKS3Pxm484{AT$=BJ38t)wk<3rC|a=#&5wF1ns!ya*3AeD zM=nw^7G{8;YlWz5iZ+_&MttSeJV8$bMVhi+_t4KJ=w=Bi{qLyB+b7;p*)prOQVm$= z$emR7>VCpB+%bHY19Tq4j8yleErAT&d;41{Y;s2 z;N`(IbKf8RXPLKtWQ4L}55?3?hLG%uaI;Ph&Daldaa&9d#n}%%*5T_<^x+7=M7D~Y zZZa0%*O+7si`}A%oFKuzFzH;$i8qJ5jO%~?OX5rUVg=26y~JRCG4c4I|98Y~I~yB2 zTZaE&1qnJkJ6agJIGd;%Si6|~GyfGSYbnkBK>tYARTMI>3)l|IC~eqL6lvA?kr$AE zV2WevEaeZiW>md zW+pNYB4;wv^-~zoBrjfg_cgH-=t`rzh>cT;$2C{|6s0THSz`K4k%EEwm73m| zHWE9#Dm}D>{q~J#7>CrNe>bAYJDI0KbCFzz)#fa{wU{edT`keqZJe4Jpgnt%Zkp^K zpQp>S$T+|tlS)!c3j&csa|xK`8Mc2epNx%BxtLC5XKzV(%h{jrGcKhy#aXqyf`&_1 zB43?b=!j22_~dkn!cm)Z!)y>L0=qr;%EHp_Zz@G}9HQsq&S4plUE=}??CS=a!DSnz z=bhMb!)Y@1|8awq-5o)I)Di#Y?ymvq^wagnV+U!Wgpzhy-$oN07mzVq(x4X!OEuGDj}{f1JH@aOK^$F5F4SNyqM} zW81cE+jht5m1M=XZQD*dwr$(&oA>N}?tS;U`+jxKSM{5 z%hWYiDNE&@{P?N8fE=WZtxc;IT&KEMW@76h(ALYEH}j?*fHMaJZo7X3!roM8H5WT2 zROy{>XdbEZJyvAY9k^Hf7|WLY+k_8zMt?V?sOD~b5=Jr&iPwT2+L#L2dR${0^yH@czAB50S&o>@7`-05t^~#q-1$V_f-U0%TAY6Bixa9OVPLuuWudprn6=-R3 z+#}*skJ{tP?jowIZ6UCQ*Ox~m<Q~~6mGb-TZHp`+YAi%Gc2<@&u@nc$z*&n(lx&3`#+`WzmzOm zEcN&CXN%JNXIw+`Z(kSxPRX49pj$xq0J(B^U<4Rk1QhH;epphH zGJjn%*W!dDf(wEsMbU0;t#4GddbG6iJSs@SL)DslDY;+E^gJ(s`~xnx@)*Pb9H#Jl81i6XK=eaQ&fpnYC9$>HBXT3ypGGoz<}yD1Km4zd|rn|djU zqU>rhHqv*}7*XwVF{WZ|CQSFbN%kIpSy3RP3WsA2tS=k zhovo;Q>2N(3s0lgMPBa9{eaP7#__UN(--gC53Y+MBCCG9<-s?R3GnBO!9evE)BEMt zxXDz|kdQVSBTLPuS3zrKHXNqaw>1H~!)i6>z*Ww?RQ~rI3ga?sb-Baw^zPKwE#-@6 zq7>b@yn1V1If2ZJ_D4hsvw9isJLBl&(dyDRhzH51d9i91m} zfu#o6ELG}5x=KDN_n19tXJ1=vj14{G+^$xdIhp<#QobEV+e~Ph={O^g`~~U+!)+C* zA?q6!diLiw;@W{ zICZMJwLwjS2vZokHEQznX8h&6)B7AQOzu(z!Ele>z|T2olvCN=*SGn6wqbEI>q;XX zd+o0z9uU%fIht&d_yBRu$^F!@@jYP}XFJ;(ke$wq$zKX*6&~o959JodXS$=`p$3lF zB8aZTQ6`IKL1kRzYXA7=1|p8O#Ok~qOu@;zDT5crNQpI_t?}N1HSi;m30OujdYk{Q z_XNid7#Yj z2Di@*U0)YmZvuG3!1Tuy8RmJaj3KRF+jx#J4paM@@bRKW-U0cCW%1+b z_EntHsAwwa{eoA9UZQad9A8A{?L94r)XqC$#kL6I?CNKJzXwfmfJvH_KA#M(rsEh8bQtd6J^R(ht|G-Mk zb2S$=oxRd9srm9UT8H^m#(Desg34BDMW@QvH5IkrrTe8+IxY#Ch43vN6=jPhv7Bco z0%}!iCiBks^Onzc^*i5t1Znp1dkAS%I0HyDORd4A8seD)_BAE(dL(HIW)x{aD!`%5 z9U5G}?tCWENWa_aztEJgtNAt!G*x(PBdBZZb@0ljSYwI+W0&o}(>>X5S%*AbPxCFp zVy(+UgN}=VyBrywR72cNq24K&&c@g0VRq9eT+5^vRlddT={5VkHUl962o5Fk{;$a) zLUUhun?Pq3ZV-K?uAr~KNELq{)I3FNKiRSR1NyH%!?utH`Q$SqMTh%;6=eVBGeli% zjhsI#vj21$1uCnmI3lR)JWZKWOl!nYmISHM2F-AL0mIVa{z#yX2_VebKgOk*X6a`m z)_H{AV7%`Uw5brV7ZtC1%#!rBFp5X%u7>wZN(-?dpnh~JXH;^UU3$xAlzyCVeg>xY zU-!vZq9eAyhSwPo1}t9DOZE|eFI>9%p_OL30OyoqvY-uis}9^Dq85$mL)OxYGz7IPhU!XQe#x`>nN-I-kWww%7C!duZ4Np-Ur7A6`v-`=g74NJiXh>?Os#vH{&&*|V zNYfCT8yISl?|5dEYq^KJ&U_XQXs$@at*Fjkc~F|A6nFEGy(&+nD+#hyV>EkNjx6{- zfGf2svESUnUuanp&csw#a8X)PYl*r(KDM%?Ojjnh#v9~oi!CNe%)ELpj4Y}vlMT3v zREtQAb1WGtH$^6F&BJw+P^#B1Ep~?%qNDM&v9<{}qg7*GRSk3Y`>?TzioP|`VM@0! zMbP~c`Afuld}W>*4~M+ORYK5SjYf^7aX&dxbxSKEfT#%L+kA;;{p%K}G}&lxi;?9# z#W)@*3JNN0qJ^!Z3W{!LgrMQKpG@8-X`ag~e$%jMH>e_?otYq9DwbDk3I{d;RBBb* zgkD8147;$KdFcc15eH+X35%r8t_)gHdhG(}mDyi27Y2*2Ds&X0 zd!qvumsjZP7OsVJep-n`fZGw!qAcu8DAYruz&{$K68v%@gsjjzkd4v|% z)3=UM06<}$@gZAdeY=yc^*C-OUt4k2lQaOvL!nMWh;f(`o1o#k@b34! zgj|hWj^sD!nMdv|8Ehf1Ys!sW1tj?9aN1O&^7XZ?p?Yj%yy4Cd|Hf_*F99#L;FxX9 zCIJ4%AlH|s${p-YwW(jHs6FLi(05K{7!qK>u$R?+4{yv)i}En3gO;> zhaZc(HjBzc7uy3Jmi_wSjS3Rlxzg#QS6Al_|LB$|3&!1Dy#YVpU#RE z=f4r;{BPm^r^ix**47@t`h(!vK6K+)4G}wTa1~nZZyg|^OsqfF%NO_{JMF)Ha$qY z>^xYd<9-b>`f?)TO|gb~zYT&jM_;@xfY0e5?gMXyc`ML|guCnLEiN_^EVor0BzN)@ zA8CaAVjtXAme zJ3k|!83pO9pjl1jTqWA>oG7%n(o_3srS)1seB3;PU}T!&I|JATn+xK~mS4 zQvWmU+CVB>G1j%w^^T?Kr>({1+6u<&Au*1R_F!^U(tfADc0 z4vX!=O4=EuSQIwvp`D!Sl)~~Eacg>ul|HPI<7A&zcBQ7checBhQ9|DfW)x#RUSreX z)SX`?(qnjz`URd9G4NCz<_OS0*N`~+JaG0~lB9ezyGRnqVlX5+l&RU2WMOQisfo4q zxtg+sPWXq3AK4q;Gi@6FD<`QfQ!QGGUlW~8s4ZOJ$zCePWb623frXeCOGMQr9)+g| zu~r|E%5&kDtV|5U%LbRSly+|4jfRsuH1x%gew>R4x-yC!TqBP97QYYlw zYW9wpjtd|s+_Bb4%(yVxr6d?1RXa1(rL<`<*=l{&F=h31p=8R=W!1tnPB=aePjGFY z8mLHNNSI2YJ+ZM>3y_4Y$QLPB7S$guAA42m8$J@B8(VRpioe+8sxIQ4n_pWI`G6j6 zWL&Orr>$kqUjkFgF_3*bI)e7uQ_Q5P7u4T{to6mI!h zXn~WA8_S5hD_33_>aNr>D#a)Bol66hLXVgY2H=9QFLsEMPOW7$7U=t;tEwn;d<7ci z5qx{4C+9po@UbNhJz@p}1k8S{V!Ub}MNBu(uBaEDVN6rNX~p%0402R+J!d}?mTXJU zS$+Z_wH5o#Vwd>)^EjSiGXoGwK+Ur9(IIwvO$cb#;M8)gQiF}IL8$ty)+YCqnFKR_ zaQBu$k0Z8{o5*4yL%W?g3W39I_W}Kr44V9TeS}l!;j}?0SLqBC;4rK8Ee$h&9E5>G z=ti7^t7d42p{R3Gw0W{y3?VPXOKpOQpdF@_8jn;OuA5fm>!3-g#{3kurQ5(wT%bc$ zr%2I32{jd+aixs^#CMnP4>hGu`$p6oCrq^n(6jUiB}K<-R#2`+?UkWXiOW?V3o1qp z`&J_iRxE7$&;t0Gs!l19gylw}YXaOi4D^T6HQdsC5l^R7W&F|>JK<#TO?jWZ>>;0V zuFFOi*U3}LSSY_!d~r@V;fE|rk(AcNRDVhkyHq)2|8njMA`2n8{RZrLevmqimgJjFD?WUYIB+nCbXc;@ECB}|$6Q)(QfvloRUU=z{qgz&p z>#HfXT*12zregQftC?CafUnM633dpT0-hE1<-egw4>L_>%lOj28#c1{$zzd~x!$)C zN!nGVtv~I+6-$UPV0$<-6y@%)!4|m$RpaESj#Ii(Zh%it2Pd>?p`Os%f=^UkxMjjS z_eg_GV5)I4sB$}EWbDYNT8tP=Px#q>bebcnGsyG-Yi9t7&0GB>XT2}3Ed z49SX1eDK;IHWJ^Oj~XhmS$CHM%sG~cArEg4XNnzbvZ{NswK+bDX?rcIJRXiMTy5)5 z)|QL*4zuI1=HGT8_2C^$Cl7-kGD>u~Rwu0RYWAZbo9l^MoK;@<*$oCFjP`qazin#&RrEAOh`+uu!H zc`+(}ea}e$T=>y_zQnEs3VHevU< z;KYmL&9QrXgU$@6!Le7ts>|shJx^7t7lSq-4to-oJWP(5LuYvQSbIO~lAs?`GO~|l zB(7W6r{knD=E;E==j}e8CWp6+iyeN_p;;_}SLr(L4V!~HKc1H4#$-PUr{DCYIKEog z{{DvO3L;AIlmm2Kj}t;Kqstm+&|z%1Q?TvV)bnHSu3q;pCOV#|JN?$fs}p&!gJkvR zf6S4geZ_DP?H>crVI(~;=k%aGFza2)I&_|XpgNMnDw1w&2@%<`IqGtdY_sJbaZHUp4cYe6&Idt+Ax&`UhJ}y>EWQjZ7 ze{ri}E>w|}(VWJ%`}8+a+HAcLQ31ieOr-8lMYB^BF5k@Q^4Ipwlfu1-ndEYjEsWSy3`sXl|dt=C^ zSuVBW*gWUUh$(C`MLI?5d;db80?l-=CMaUChBJ@7#GK%Xyv4rrlp z1K4IGI4wL9cH2iP+=tGKJnd8>SEHJ0(c+8OSC4wrUpFUIw+i8_2Dt3M>m;eXC&}dC z>8fmADzo@3qDR^#CD7~X06y8o9P*oS@T#eJ`D@P?)%FPG_I%?Y`Nd}fsZnwz!m-s@9?AQfm zQ8v^rHg_sdl#&S94B2W=C*MaBAx6|ke;OuekA6*s*;(O|*LcN5pTp~Agw}KYvca$M z1d-MJ*x$$I_O!0Y#W|g`Sl#ItT(U$owj}1jiYG*aH>Bzn`Tl(CCD|#w$TNX{2bI>d znBbp=6*v-2cbH}$(68(9VT%^o zw(RBr>O!6dqsXwcKw_8GBZ`-qC~$|W$SV>p_aQsR0lCflunwC5oF%+qP>spEX zxgSRx-I}*At5cyb5Nw;x4BD9Xe1I_R<~<0E^;=_mWfq&`Ov!=0)$kP*^^i;X&mt&% zXVIFxgaVbu#p4utiUrHqzHaZOlOq9SOL|fH2xO@aNK+63#{qXB+QjRPf$6iDeOH`I zusQIp?U;Ox=Yuq+o&FQKFrgQug9=$0E_KD7w=B^}+ z<;1Y<=T7grwzGNGPQ)pJCK1oYuO;l`>uLpIkK|z77|0)kNIr<)5D574s8w>-`}yrm zojMTDn}G>yzY&|JL(^&S2ZrWeuKx~i|5r`t-Ndg)|8v|h<+G;q?_t#b7HcYf)=h2A zMC}}H44j?+H+o5e%BCHv3hKwj#oLljk%^6lBt>ATc#}!eKy7)02~w*~&Jub)DuB|N zlgk>?)NJI8TGLmgKmi3M0vn&0R5@1w#i$g42Be(#$#~~i2m*Fic+?9dIm1><-RewY zK=X2n=Vi<0`$fy4*Wtt?Tjdz2xxfzq=NXJZx9!JCbj-F*QF!H-R-x!>GQSQ+4?!pc zwJ)!3uk60}5K}{|A78MAmZH8gt_Zn-LO$yg0EIC3q=SXje-U}@NMMPX;21@_VkT~1 z7+;B{!81W&ag{NZAF)t(bS2|YX9%4DB@#<@wUoyDN{y}@mdTs*ME!qEmn}a7Z1!?n!O z1!PLPYNTRJsZ8fYnoRC}KS_rCdE&HX0@~}41JZV6?$OlqtIKqG%XXUztz4ud;0JfX zmIaO(6y5$V5C!hL?Xst|(qzejEt%TbX(E>|dQc%=7^toBcWk4GZ`grS^V;hcn0eMH z)jieNF#AXL3)_LPGk@vYg z&hrCsL`^VZWOHPCERq>-V5pa12JJ#u5MMwd$Y_z7rKWkDEkC2&(yv;Xc9u zPmXyP4?a|iQOUbq|fSpHWn0>?;j|EYtpK0*&Dej~} z3DYL~i(W-gs5*VpIQHT(std`p^{k~FlW&XC{TEDfe@3Z|;wEej_+Nlim2qlZR!-@_1hTso zzY0^K8H9{6o&i)-rQ-#--#FIKF@L)BR)uX~9VL8H5QpL;OnuXV{D|vz!Z6Vs-`R1?R#N_S^_|LP?3C5u+C-$Le|vOFC7MF@xpiGmp`KbQj4}<{eXpUTyGZG zPp`W+f)(^>$nO*sgd+W6=H+OFii{+|Mo8|+J!F(mdnb9gSLFkV zEw7*=G-C=!^%3r0ry>Q;x{=NTBG)lRAaw;G?6OfVb7Apwzh@yi!gxA>^E|=7UJ-d* zQ*Hb7fzZ7{A`whra|<6wTii2LVeA=*5#`PWL2m*~B_+{(dQ4BAq5hy40^_PUb^Fjy zpzB{bZkkdQTM|@VgcO!!l!X$n>5UjQk0#0I|LA{fi`>#f{KY20)Dt*+8+~401Nb4= z7(?KdNx&LwPwXd>1QRftGuc(g%j$__H*gZSy+lk|DaffwGD&dtttp?(Aco*%V0)=N z`n{POms$q4Z`dA|CS=-~F}=l4dbrVMW5FE+x^st8P|VC;FM)B~42mg25<$Rb9)?kt zXpDpGEncl?Vpb#kl-g6~?6IhMgitVjjT=vPh|tgxIb$yVu_~wXu$wsEO&DrOoa%IR zc5h_l#+l3_O|A%%O!yCpvSOCfG*AYr{#;C3_FBZ!v6xh#WnXVm5~nCVlOMpWiV$&= zQP7@2%(Fiws&NMJ_j&n}5f~B%c#c=~jRfuNW=ig1FFE3P^ESyNY^;{nz9uK=zMR{AUwF;Af7G{r{s0 z!O-rrnB;C`;N)y=LT6~;Wb(<-BKRLa|45W(sAwr^eR?g{mh?Mfko@>W#g#9OLGsx7 z7+RqfG9WVF3E*9HrFjY+OQ^DVV<{P&!<-0m2 zhktzQLDGBJFgtg7U1(b1^?kd)<@7UHTbzyvkMvHCAB~T+(4M@dc7$%x_twGL}7xa10>>IAtqi=_MWIn4WmVJEe{ zwN{OirO}b;s^bKcD}|mm;t_CD{NBtK>t}><4>>I{E(goIQ;-c5^SU_nS&ky-y8O7= z_#`ZlSpjWqC!j+in zmGQotbuvM6@asqt6>A)Q1WBownKjW*&lz=9mYHaMrf6?}+MwI=ET$8=(Y1ot$Uzv; z)+7ZDA>C}P{mzEAt@PvUbD&*ie85_xM&)*5H~-gP6}w09B}SoH{L8G8!bsTTXls=- zX62F;X0m%GZ2;WXC~-Ta{wb6mDNLX~R3Emjm^^>_?~jJ=neb5`oGJPE#6vJw)-4(R zJKr&(i06wJ!hFi-fYf^3x>7VHnt`_DT~bxmRH7OvYHBfi$O5Pl$B>@L?0`0;eB;5@ z5u35{NgLk+a!)E#Er#F&OD_&mB8C~v9;CIn9#SwvEeo|eH1>w~XWS}Y?!MI~H1qZ1 z3+IQ#l)5tN*vC8PZ*vPC*kF+#MSi2pt4_Cll}MY#M_$94H=3chIC7(p7hN2lol@*N zgEzGrdwGmY=B=zDYYQ<(?fNTmrY+Xg_BboM-}GvtZB%kd8`DKdTH4iXFC=W`q{t0; ziyEHh;%`;t@`Af^Y(FZ%d~wrpG6}hzKAInHsD^dy5r|cP;N4CEcq;`+&U(TsLD1|G zgPSk6)&_NU4W8z7$hW1+`2=S3IA7f&yrJI3n;*VbzPqfv7Kr9rZK6CCLS%J!Z3`X3 zN45kdC1e5ePG4e*`Y@F{O-2zEwTu!aHeN7IfU4i>?&i%nR_LX8r7PdF?y&bVmob{L zsLjL777&xqbw%v^{}3@3ZXElD%70nx9LkC5#=cu-0hp;FS%g()w=h))pkGj#pTm{! z1e#@hpw;u_Ub43`bw{U8^ z<~vCZt;h-_qeRBfvb2Z7)8%A+=Ui4>bSgnWDZZH-%Rg?3oAVtxZ>4+y4At zDlvbIENg;3!;*W{|JNAJKSGoLx1|@cHM0A}d;X`vSA+eelE(Uo#D9EQk#)rOh%1y` zxdUOA4P9+@+5BenLO|k8TAv??JmiYp6uHhR`@I#O5lY-VJVY{16x?P$2Rx#-M|hP1 z(MWn$e^xg&dWqS_C{2GQsL;aPa5u*LPyhvBPx_zNiBHUwsIF&5KNEIS z0|-vkwF5Dd2MVjMEc-V64EF5uUoaQ+4n+vTZ`Jlmls})5#F_#Cl%(F`DMt*`R=IN7 z)Cn?svB%bSV(naU$o9Bv#QJy|ijv;QQdfZv6`-TPLw^a#wFy6-?{tY%E+P=g|=i@~XgkM9v z+WC4zKeSnAGQN+IUdZ-C!lWqYbMZ!p(nML$WYJi{mb_`UuIK{EBF}*MG_tnkN}aaZ zIZeZdwQpP1U-Lbg+5li5q!9e^GX*CXjbIKX$KtZ`so~jb6Pg+qUtDhYzv|INaJ~j2FkH z$#>FlWtiz$*3P8$L~mfm+4@29wAkx`3y)TMu}|$FGSOF{v`ievvv&1`$DtsRT%NZm z{*i+7V!SX2W-YH|lK;HXA!gT-H1j-SN+!th{LW12d3b^po@pjh%m!|}P@2|3IOC?l z%wn6*djxu4U63PDo-B1swzO(HY`36`hb>tyzp;=dgmmDIl!X|mQT;2qL?6TyQX%k! zz>+>K7`q?II6ysuMZkK1)&F!5*J@pb)5d?`_{@QkQzPpr>~J?kkdjZnikvCAAVqSa zsO}zq|3qbLj`3Y!EtK_w4@mMGBBoEFp%>48|BpeXoBx2Zccs}*JZRY;yB*lyWn@id zulAGz$fAFejwMmX+f|oH$1jD0KH1^qFqpZt5{}NTgyrUMCH29+xuAZBmAynC+vQP) z9t5=&jd0inKU7fI{aFY@+J$a~Dfj?Wb4T*veBCzFL5u2xx3do$ee&JWB^-)@^Py7d z($G7hRLzwf+hfkc`;Y_PB`=X3lGNcFsJa-&f_;rCgcFg`QaGlj{Lq3&hdSEp#Qsek z$3#st_v*nlSC%hwCc-xIAHe$$FuorT>hu@YZYa7eg6YtD{#?{{KEsR0iQl<6c^s9* ziqsmNov|IA#EK}IoSk3x79wRWe%lBuZ3x~CtLBn4p}gOy8uB+H{c?n?k-i{K9M$QE zX-OmB$J>ExNm8d+4Otw9-;s9zKArdqRB`01(cF+tC*cZVx%uMI7>*)To2E{M($ASf zJP|{&qrEItp48FrUK_=(R~Q1jXRssa4sh!jL$r&2@BeO+*erek{B}dmKplnj-6V5~ z7!nv};_nuRLoB-Iu!HO#(5wuPlr-EHqTn9etWEo)GFmExp(VUoQ8c7%&vD1HC7@Y! z5NNe8xx?8K+N@hiY8xHVZ;Ex?45p@D*##!&1`(upqeI9;+gHZEJ(HgN?N@UGAdL*K zU-6pWa0j-X3a^hQ6+wV3c3=sXy8j+$n7qvjb00=^|0Fz*!7k%mW-xpudGld$MRXAy zj%DTJ2rhgbg~`Ib6=zj!Rja-NJ1V!-#zSuSz%w_=AY3h3sBw~;g}Y_p5Vw}bLb{?c zbO5Q#)A`989 z$Ik6QX%l5v<2BRo+EN#z-c9>>ViNGj6)Oohy*}Rt6RU3WA=CdDFL3CrRXz5W2bJ^_ z@MK9&0)Ok9Bjhh||0^nQyBKsI|E zyP8FO20+)g?Hg_uGHp6C@*@y?jmoyaT0P*kpL31Qwg-6B{dGr{J0Ia5ZNum`+0-_h zj#RA^mTl(7;oX%w*CZ$1rFfJSJG{)hlnQSDd|SKpcYbNYkdPCQANp~n~$U!5dXU4Vt zeHQ?NLM45pm#j_!DC8QvvPf1s5voL}e*b!RhH7-iTrfY-rSc++vDP7Fvbn?K10)go z&GF-y50Z;`bRvh4xWcJgu=ayn8sY0%C$^rDUR&1Uq4s__&L&+&LwkSV!-k({;;Sid zbaf~31fmiBukS|=L**;2v^1k+3|!^;$>Euupts?MH7q;$-*G)xAF})xy{BbjUyKB} zeplYRc5@d&f>ps|LIYz6Am2!(2O+Dvhd@BM+(7hH+>55+tA&`cZylAhmv~Ehk}G@C zD|^g5ZH$&!gKajicF8@FRLu(hz<_R+UN7nDLIt@ys*eUPAlk)V$5MRT_)$u4*g_`F z%h@QF^j4}YS~oVkk2<13j!&mtEzh7E-H29sU2S#8+(uq3PcUBs)@GP!qZ6@gp&Q-p zo=8g%Di^D)XZo&WyfPa;zWDp}@b}T-@U)b1uHhfpz1y&*h@_G|JEf{k0lH2p6(5AY zxnZIw5WGGFh7qds(5W{xzgcu1=@1hB6XrJR~~z@y_!~Gb(Zl zYPOZLV(k*+9K%OzJBV#?7iFdpUKJQ}5T&$M#5oM*8v05z9rC7edlb(Z4A*J( z!WwP-Z-G`T2dLYO+O~z*VUCm-5GMeH`%lDSVQ}mLIBImJ8sQ~%+S2JUK!XzCDa{Q2 zAP_fk<^_RRiOTTz1{5PQ-1PK|cUt z5EhZEYmFTCjPf&LiMlbQf{-TtaS>xU1ckjU@U$@L(Q4b{3ht%ezQZj7<2MA2sbdlG z8r<_@X<*tkp^Jl=1&wyxtCV@nOLLk_Y6kjay=2`i-N|&J2zK`4xMsdU%_kPiLht&Z zm35eGSLndGWIj4|Mcw(V#NDh2nq3y*6dKA&Q4E={Dd&xSL*2wAFRd0|#Dr1WxyoP* zVN?E2Vy=G02-DjFL&Xw=($Fr7C-Vx#u^H#xt+w+4dlascSZUR{0`%|XbZ=e`sk~c# z7xA+W_H*f#E76j!o%qK4&502%eu+NCMu&uY_dr9oudNsfUP<$z@9N~XVsY%S3Ob|Th^JYtB@WJ8I(Moq5C^~B5u7}7C*xk=&-)$M@kA_}>wr1#79 zQye6DUPodMdhRfJ8LsIO?h7i`3d~l9#KWHAI0E|}PCTAY98Ts|%Sw{fv`IW#nJEGr zUFk8J>l@-etzVnDdwoM%ViMLJzr%r9N>O@>9zjn=iXKTu0vNT-2n1#W{`Fz_6XXb= zYEzdR{*MIsw^SPxa&{7wGYZoHe?!t@g_LenQhVCjYvrrMk`jJy0M<@jF?v>7G>oNW zNw%qWX#Jp)z<9i}{J=xU3#8QR-$8Hxsy-~$rI6cwcDVsR0i6Z^hshjalmB?!i?|t? z*#Ffu{Et_Dfx@U{A3rKjTw#Rw(o1PnLMSxH<_6m;3LUT4+Q5ORs z32&a<=@!^>zZa7V8B9jKIcN3g{24Sas=;?3kKu`c|K*)cCtkmBL*%l8&_>D2#u8ML zm`Hd8Tw=SXwhpn}*)=I`iRe;sE9%Hhb`=P`90HH`rxyT3Jy6mD!;N z1EJi0r&?T1aF!z`S2tU2y_`Y8RF_+Ikb^K4j9j$R6e_u90G>t~f-$S%R4 zD!zo>WEvQDyh}KW$ND0nv`=og+Za)Hq``JODs52j#o8W`Q1@d%xSIvPd-?9m{7ND* zzscw`pP6dqeb8l@=G65~-I)52#-R3H(j%*$UyjvRd2?S?umNFgt}7`{iOh+x1Cs)?o=Y_V4;s9#Bg@*^~n1jtfMOz~{n^7^-E zMcH2{DW*(VYHH>Ux`eXP3rvpyBVkDWQB@R(7{boJ1Ye;R4&9{NYK^ua*kAAhZY^eH zz^RCO)uUBoYfU%*%NT0BGH|N@)0P!~PCWd#lhgKwR>r1`bOMf!2JZhkET<$RhoXSW zQ-#aQK;15+t)y4v@;lJ>j&)V z=#q$dlwlC%MW5JNce>t|JlX+s*Tj;k>+T{cgs32^%B!LmZ53R3LGKf zrnHRn6Q=P}g^KLjBs$bsPj^bKY3+!f!|hTdHcWMYuSHWRjlr^9gZVY@*fZ8txDFDv zS%fT08M%0%0pUE{BSMK-PAPYriYX>7o;e*$gDlN_>}j$p&1R+Qx8ON|ltM(FtSvOSE%DRiu;~V8~0uQ2fmVcytU9q;6F#*#f&PIM&-_ltP3Uz4xRT9_M;Mz<6#&yXsRn{2(np|GIW=nGHZhzH z%NYS2lY@-~c}J8HiS~-#B>F?hwqzgS_+s=42Lk}d3Yk9d_S)`Q=9>FKf7`vJ%jJX2}Ut9redFwb2z8~P=ayFr^FA`P(@lQNi zWr4xQa!q~|aut)am|tE&0`+=y>>eKfPS^IAoeNyUI|=@D2^pX3zwPP&sTo2R_U0yz z@&=!zbtcXxj{nq=|HH%gNy4Y<3c>ncsP+^N#{$CVa{c;q``6}T=W-1@{vziSg-H85 z-=1-HKCe6h8=o8>MHe$&3nNEOGclP;7Xbwq$+$TFI@~7(Uo^!FM~M6J%Rh+t_&u?( zk}(PVV*Ihh85yd-{0)!suWjOt=(KTtnsb&~MlP+fj%$6+ILIpPTWqAQU=_?w1j!X%f5%sS;cUh!BY|uraT41bV$_4k zKnBKfekb&(xxIv&H+ zuz=9By_1x%ImrqSFwOHVe;x*GCba1s7DW*rjNekii8aOISD&0iymKwvJDRQRTwUt; zEhPA*@=jYQ?5}33pcuXm&Ep9PA(+V)miI}}XM$M1JsHS|N$}Hs$6!=Fn&)GF?Wl`V zK$r3_p3Sugqf5_DNH0B9<_nm#73iIa){ZGxau!Wh)C!D;IwSkk9NR+@|Llz=kQmOn>IRx-A*46Pe zRFujTir``5>(!1pM%u`2k~qZd*s$>3Ify72CAv?`d5>miS({aMUpOjJs8O^Ts2gq` zBV04CtIqSx(fVXkZCrPBu0++xr8cq3E-}%Kc`++I^it(!WM|6tfx+H1+&X#A2{u@< zckU{v+sbVXHMu{`$|G*-l{#*INcNUH3z5yQFr#MSYi>sV!g4&;yeKEldaOmEDH1%T zu3FRI4@T{0y1|?|+Xs`fqab|9QXvLxQ3PM$UGQ?*GimEAUAD^;U_q zn>06^n;ab!f52CyP`W{6rA8mEJ4a=*&$zD71Pqu`Qx zmmr^-@(8MM(4g?Nb6(=OK(DKMf^#ff2f3caU!;v)WNE?U?T3};0vNZS_;z5GU}<`X zM<$8qlwb*?r-j#^qBKd^h5h-6BXG#?2i3P_?MWvF-Z_qFxO9!EP4@7(2Tu&YoND{a zu~oNd+uk^1Cm`%y9Q^Kbl<9g%3vZCF`}iC6`>j0T3* zCV#)rI^i|&0rZ%FOEEB)>7L-J0n&0?Q5{^&49RDk?ip-NX)hK?{O(}JfIK#BT0Pp$ z*IO@;-}Evug~^BqseL_^YK|$8SjmW0pQ%TK#I{NmuX5?h#I7)ExJ#;WUTaJDBtV5@ zguQChS)f{lwJ-v0V7x~`_b z;1aw6|JU;WO6GZR>F1uWKNtW1bnkA?Cbq^V#(&>>LKF{7FFz{aki_y$0I?mwN}FGg ziU!uxi(<_>$-=OlV2sw08VGqMzXL%f6^0d5^`x(RIfTL=E v=mK~RikE3FBAcx1 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 z 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%0D>%(Y>5 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

0KW%?;sg93DrG` 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

Wp^>3L;;=Z=%W3 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�Iqx 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

3=R%0_(~dw zMe%v#hiWqo#~s)DNOBA)Iu1DG@3>$$2Mlu$K#Yl$l}z)N+u^#h)BTftY20z)RYLxO z+QO57Z!?)UdH(M)>)jEE$RtqwgB+KA%kj4dNfJIi{92mWarLRP|Soh^ravi z6hlm~=PZJ~P``I9H}iwkAEbgm(F^asi}|*gf*ZIcfY9mc)i!>{h3Gw_m+r%TK{H!( zOYr`I)$z6C0kd%sUqr82_m^jH-|g%Pd+ah*)uNeSf#;5*VQA(g>a)_T6jk^-1d zY7KlfUAY?UgJ|aVYU7t4y+yaVuVQbU*x(h@<5xkSK1VrdmOr>>~F=Ae1#07I4iGk=FUol=^GDSp%eINJQ z5JNNb&XG;n&PCKUf*smx-jZvaW48F(t?!|0Q(Jn!eBx&W1c-UkPjT(;x|4OX`3O)# zyRM8^7{ zo3Frf@xbW3?fXBC>MBQvk^kJFc97ZX@(|%Nl|G*vh-!c^Y95>FIBvgi1|@eqseEp=7f>={`$?q6~x* zIQu*(uX?Qik2p_(n|GEpzTkt_`|5po4EfILr|SJs^lBDD2lyY)?{ ze{P}&%}M!h8U_Zf^)cUMKneeXz*?UU6>WPrch2>6$!&#-AJ=%prI50<&IzqnVW#PC zbryLBO_lh7G)+Frb91wsRZ$Pu0?6HvuZEaN-H8l~$Xv9XpX&9@I8J&S-v z{d?TGn3onx>0UkO_8Pt#+2nrt(VTo_PX?Nm&ogNSl%2;s_I@cty78>xJ+sP-;g?;B zoy-Mj`SYMsr~Q`ndlqYf7qnueQ|Lps#$|*`NpEVId^FH zIrO7}1K~p%wzjokrLF#q^5@%g68l{pZrSk7=V{Y1!WIN#LE=zg0k}!Zkt8{5hIBXfjmMq@swLE3aXzWYvzNW8QB~P3Je7=h9`Nq1mCeCj8db#1bQw3*GV5xnR26`?6Nr)?>l%9ci@EW z=q*pg2uujf^oR~9+I}F<;fE9*zV&9FD_*U^9Rw@(h|)lO4$61Gs+|CvDafyZ&g}C z3z{AlIbP~vn#njIvd3ET^(|pUJ*dQv-xK~Kd=~HsS86;M z-e=vOef!G?N^13_LXCInS;sZE5*u^}u29=ks*90(nTdZEfVh0UGYvn|7qKsWt}~+nwK3Dc z=tEDb>U=GCv6{?k_CLakti%COi36VVcrdU&ecA`<$w+&_PHR6a3iU#&T;)jf674>+ zmyhrJCE#YyOU3LA8Vi&TSX!)YAfrQTIH>Mpfof3lX|s;y(~KNq}VGp6;qF#SZi-M(Sh zqHY{%Slt95a;r*#`Dg!v(5DAORjc#mIyP;PTyv>r5a;wGN`yshdO>X^Pj#J-Bw~E< z^;CBp*(f<(i>a>sF)HDc^_)NaWA6B&u)LJ6%+s98&ZIXx_QqW}oCq>g%^xT97nWA* zeq+LAvWgWKQ#IH|9A+`breKZDO;N!qwWhPlkv)1r1+ve}2 ze#919+DmPk4^$~LEal6JcTK6zpxk0hP;02R!=D9@(9i%JI2zc(M36#E4em9n&N{gO zOL9vsAM&BC=?C5*V{p%Btuvynj(fx~ug*`F9_*j~{Av9WYpw30`4iDlzd83`n=6p7 zBXE!FWD0Ffl+BlXh#f`%VC+uJxL(BEl-17lQ5ZOV=I!$9*Zl~2-v)8pe=NVO{Z2in zXRAi~z(I_;6 zknz@n7ea@rCG|&0)+M`i77%6=9GL#%BRn6q_`mFh zvEsdM7Cx>)rK&j|XcRQ{(}2ZAUh9{Oz&(xrB+vNcy?mY|%6sYQ0L#<%GIij{!~1rh zRzUSQWB~G8j9dJUCShH9{U+jhPildJTmh)QCy)hR#PTAZ&IgL+h1>!DYmLch)&9kq zn^XDsb09siDyqXhBwP!459;~z0Sy;iw2E#^-`4`wOA};j|G?|}^(gb4iKK@9gXNgh z-fqu$D?9l$rZdlYrudiI*XUg16V7tE;sfP?BWCI)%vvz%jLkg1>(A=?5!R3`dJ5Ww zM~9R0aCnQ@b64#UDmd8L}|LZ{!x_1#Qr&`o-)y* zJ%DTMe}$dNe@Aoy)t?8p*Z$D>!O7Uk_VyM;1qhldz9_rb%L!D+uH>9W@HWgAw5)lu zpFbIMaqOM3lsbuu?0=jf3ry4CDt4~-umS;SK_Z-(vCfm324vZY3!gMjGqnS1^Qs1MWCIlcB%cW(H>Zv2sQlz=R*{xXJ>D=V@`xgQ| zx6APkcAw5aRm0a`mNE-893w@*Msz4pm!6gK$p0ICg_3K|2)PNw|0>+p>BoOhJ~p{E z7mI?`9S^)we?ULeKg|n0b^qL2t2|;Sh)JHyZ*RS(q|#YzV6uC z_-)O5KiBOpP#&3Q(RCZW&<2;F6x_4*?K&Z7d=>-N9+&s*wzBk3Z?BZ!MS4b6ds5fl zNROz4y3o?0ZLZGf(3V=umzS^&$4cI#tlhyQ)0hIq{ws$nK-r_^?JgQ64CPv$Vfjw_ zInAi_Qj4AV1=N+47$Wdm3)D5`aM_PMIt^rhVacN9xedNXld*2BOZ^ z)9Y`UA_`_!iQCCSh{dR?*;1O~sQsvGr9Us`z8yUY4dpy{-#*Sm+mgCC5CyiAJe%zlQ!YLyg=C}zQ)0m(bc%y zAypfUFgH!|z_1$U&ai}CZBNka@cn|$$m0Tg$d1ii_b*#ij~67S0a-Z`$}!;mlNtdi zKlZ6bg~(#N)1RZlu|L}w@Y)gx#||B+w?qWK<7eoOG}qQRaX@#w8hT^)6Vc##?fJ^C zW?DB(f$Hwrt3wKjUjq#_yokNml6l5wE~q}!Z?&a4E`llt0L^a{OG{iG&tSidSZxRi z9$Y%-M6AZ9I!X1of__~~@*(^sp;LyT576(=lcl{5kadzYP9E}h=;nUNe+ah;m4Lv1 z>h&VHg`e1%(0Y-X4|D1CF(89VGYO%;^a!_9r{A7MGN4~El6-VD{b`QfE1>uPo$&@t z-q3pMVW`w0M-*RYM7RNA9yE3X`t|OBm-)Lk=$Gg)l~9=EVmNBD-}atDtMG0}`&*}X z(&)XOeSBGZ!R|$k-i)e=$rWi@IT==e#7PiAtS0NPiAJ#@R{Iv1Z!YCYhg7V8Gpa`k8y3X1 zksD@t88Vs(YsIz)WR(y@ncMYmLd&76_p-x8tXe<|b{@Y(Qpa0{AOdxhDaSQdyB_y& zxvYkZ7%dqe(K9pG7qWZZ(b+{>}SG9ivOa|I3OX5$4vpmp#&b(*Q8Q#QR?N|=fD zS26inP;`M1Q>j%yL<)ght+NuOA%B3$K*_VJB6NW-EvotRwtJY~y>jI%$L?WsdE2(U zs_tPQ`?9E)v_YtOdVs!>x&ASoge8NH+WvZ0QXd<%29B$nj5OyNa0 zCIfmmTUmabOe%BxTo7o`WYK7?V`*~@Bd}DX*;CS(!{rq1cc(+4V@a(uh-1X6Tn(_YCk^d)D%Nj z)@M2EhWYSpuv;8-m>ispz$UA|7GqOeaJz=@MN3dCzt91NzfbAhPeX?PwJqsQ`1|7} zB%5&)0>P+Z?HGF(lzwCNiR7*hC;G6b6{5cpHeIO6y9)W&gAI$+Y+;uFWJy?{&(_53 zvb25+r)B93iWxr50Cb(Az^xu%ChA+uXe{43SM>x<_+}$Q}ea00NMt z8CpAZ`0J4Q78lIcfYK3-1R$zmNU@vn0R-fv(a+Ow{wLyifEW41VHOdbi{k3`?MF0w z;lI8Qc@OUBc6vg$e|qsJ0uIyVaDfaW$glYSz7K(cG1|KyWlnz2BFZ~PjdYy`5loJU zwp@9Q;4mc&`~ou?!5P@3{|yPk@bdfQ%TYj>;ww@sb+tbbzYER{Ncm3?)x?IMG8@~o z2+V0G@jaOd0d|8m=l*3w?6fQ>3iT*p5a@9nlIDy7$2T(OI3ry#1<+=s($){e&Qi8L zGpP#*WT%2|Qk>t?HUAI_mc_lx(N23rj<*3)87=d5oO zgQZsTK$XoE^U5RMAWWkS8)F~7Iu(rKpZ1A7bffKN?yev3qsh$pN;J(TK`;WUTmma zPkR87psH2ILbE2kAH0d;e(Q=+3T6)IId24$tk9n)+K}Cj^P?iL|zak;TX=d)IN)-JpP?jM0LY>OpaA2p36|Z35C>gM#jeU!@tLX-9mcMuN&{|b z?vF?y6hq5F-AyBiAKO@=wE{Nr=A9@ak|8N1V>Sp9ZIaJHvISudIlVhMPQBtm9WKqj zss|M>fy5JK(Y=U^An!WyvV?KG*${}=M(QlRFW?`JtEvs{bl!!GTuMn!6FLvu?#DBx zBO32K#n>VeGnyJlFm5T%Yy4?DM~?Obn- z#_xoWtv4X*|EXZkiQEh2G>_t8rmHP>%(pJz+Ytic-F89*P{i;_Su?Yv-sV@Pd)hzm z%(w3JF}FG*0{&(%=GN7Cs#7_(9<=``MQrdo7C3^%Dp5DC8tJUpH}f)W$|z z;YUbAzCh`58x8F956v@<^^mipnv1zkeXaHRy}SwkUy;S2&pn=8KIjihR6R8jpa~SV zb7ob$ar%H`ha`Ux5IUw6RhZ8r8$oGbJvR?g&!wn7J0bq?4;rm$D>FwQR=Ni%Ii{j@ zcU9k;t7k%|-E&9*j3PlwyHd{z&MmDJ6ct>scjsrHfwuG9MT4m8%IW) z^|sF?v|&preu#nheyrWOst1wLFBr>_YM#H^nW+7&<^7zgwoKNkPJX|!En-z5h2jdC9Cj0EYa25I|~^6BYbcg*|q%E)1C`Rq{z{dFg!s770$Gv zW=&na1qu}1@A(f+*KpmMzd>qj_I*pRp<@B+_-ca0f6SCq+Jx)eS; z2X1$08tCkuKJj_m!_?;NJ*by}`Ajp?_$Ixf`~wNqkn{J$R;y{%5UpNkk7PggYBF*4 z$521gye?>kOB0(mADr59vR*VZHHJ1P{mo zvCR%BJ3YxGT>o?sc?!?m<*VOx(ofMpJk!*u3;I6P5|E~GuMsgC5%qltPd{oqzCt?s z&Po((U$1twNt+u?oMW#oCxtaX-aO?gmX;;a4>LwKteb9m9>~2zr0!Xxu<*RL8f+qRLa&c=P?BG#}nDCZb@DC%j>8XV=l`qt+McZm&Oa z_f`|7slj8*wM$>5YujvpUngFnRoa{6+pE&J=45Xcb_v$F2EmrMxfHk$<9#+}SR$N< zgT41((N2V|U!#%7H5Z%46JHvw{qwAjM|hk*LU0Q!_;POpAWRAn)*UJ6>Bo3 z@#XtO=5;4TIE5m&j2Ew8>$c)CXNFt_B6TN@WtL#lc;C7zfF;baV=8C2V$hPmF^moG@l^CAM>4ZEyYL+C^@P~X$d^e&_?3k)zrV_ z(H*V@V0LXud9jget_kfB@&8eD-SKRGU%0=vs->vXs@>`!W?QvKilSnNQk$y1YDI}i z6;-<`s6As8wW*n+_G*beQmaZ3D?%did%u4rpHJTR=G=47J@+}!IrrWfmc+)>f5*Q} z(In0_QQYd!@qGsZy-@8bysQhe+CF9Cdg3wzo&vRw7EbT4SAvzl9%rKk1}kp?C#Pm} zh#}{j*4{2QhOTK=;QxI+oX;BCAEpwQQ8)$O`u@HxGw!H$Ql@<2eP$Hds`d}c7+gxp zyN{!MYQO-?f=y3CA=QC;V+Og_(jx=#gJ-XT3z7la6#4b6JQ?WT8Rppc#c!KxD()LW zf*ih`^U3A!dFB~fKeto%MKAZW$rodoWkLcYeJ4*+cO7Ffd}6^fS1(P0Th9>^J%X z8?%ihoP5&SWtl_1|Gh%{$2~)vkO^3fLr6DZ{%TNvF9(HgA=e|^*cH2u8nae>d5I1b zmhyf1bA0v`i((RAXkgkl@)yBJz^CI#<~!2ky5f(cGg8%``>n%A`e1%BnzFe~vawGlN>;z&Y+X0Y{daLSRRJu8iwa5D2Jh~D<=YjT!)VS$X9FUhjhx8mJRGf| z;!l5{#Q+Zw*6V~g5$toAY>Fxzo49=zGRJ-6(9r#Cl&MiSjAe#)$L%j~mwz>NMW;Z+ zp3jNmggD0PSrU?{EKSn#5z67);2<{&B7d}>R;Ka5g8jtuHw`0V(rU70K}P{UXMh{j z#D8kU;5#09KuGIrTbMzgZL_A3b}Ws9u}xzDBbfJ-rc|JKm;Kbn9r$mC_w1A-0SbS> z#Iy!(kZl_SH_8xKl=wjlpnof790U#r6}@*Pi9N;bf~tojy)^sOKPBrtce9u?5|Ds zji3P6+yw6xvks5!b#Uy3QHD(=eWp(D>>DP}>c27A?3GsyDOL%7UpDLby1eQKB(Sn? z_y{`aeMo(4a{L!z$J9Dp+qtE0+7mt6|Ev7kta9JY1F2C4du}+zu5GmTJuxcTyN_;^ zp=c^>bUFB~$#k&alGAFIQ-pacZ6+VLVz#9Bt8ixb$|!?V5RdXz=0KBM%G3c1Y^oF8 z@P?VqF3)-3T^z>i=kY=LFQ*ogOs3!{!+EZ<_BB1TYvg_rGp`obBO*OS9g)c;$+UFl);rtq1)N z(>Rl~?vPe;zK7)+vo z-8sNeI2I?5!hqFFcPZ0tE~h6Nsu2Y@{3gQvM^}xVjnnOJ<}@Z6<{eG>_e^hlT)8nR z<~}i-XUc2*4^}p-9<|tDbf-kUAG*<+6vvRH%7*zob0To#ynV|K3X^cxV5#?ez~9f_ z|10jy%ot|=P5PP0K*id`8A*~Y5dEY!Qn7IPU8|FUANh<7q(n0pV5bc`h9un1U#P<< zbWYv;VUZ4FkC0f=H@E}$ramNQzLDgqs-)$@dUp6!O;iRFv-@CTvVc}xXFJ2&3Upu0 zn)5{hj<2}x3pj z_naS$%v)RT2R$lMbE)1jiHMqJ28nsRzA}e=Kc3$`S`z>wrV8<^PduY4g3e%F5b=* zFPm3jblq-Ka~ux%{8D$4tZ>}=1g&n}6U$=2Vql($@bMJ_^c378F2cBd5fTG&6ZG%d zyN&MNjnLfm(baU`D~GFy>>*&BVz5P*wjT{4iKv?de&^{q&ogc3-`jgR{0iAQ0lx%7 z%A`#@Srx=abiOvIyPnNCvt}EciNX1_3e~Bb+roo6cdt7q_B$d~2?}?`b~0sNf6@>1 zH6N;M4oEx*(9^b9n9W>xwuC6b^U`N7aBT971aFduj4Zt@gY_Y40=bp!pw3(9=gw%j{@%m|VBdc@w9xn1CdCM$(0bwPjC#T+_2dO`9Fa zrUmk8>RW$sWCTe}Sg$mT35tTQS{m0{3kjm1w}1h>-|e?! zzc8cw97ZEg;ru8877AFb6Q&2+ucD#yoEwdzjn9^1S-U{$=6{(h!eFB4zATLH!Y2$$ z;7%y3R{>uE`v!Rr-)10T7=3DXy2XCP2ua*XicfnJ{0#K?&WR3vIR_*$*JK#8j(a4? zzK09?d#&-{in{oR$;rzkiB!=y=j^jmBf@W!0>`txhwb zb6K^FNUnsS4CwkmKgSR-CH>C}JOFnbX_VGFX-!;qZ$!!4G&DWolT$BEIvS~bcEiHIYq! zBPMi8ecNV!cHGK=u19hvpOD5u{)=SS5qBO=f?yDZp+xhir=kGlxQZ$9Xbh$e*B^lxWzM z*)x>9|Am8?-`RQCw8h)&a4a`UeupnK&QKq^>E1qba(VJDdZc_AUteWousJjrTySoi z4U(ncHrfQZM(m6gG1e?9+HNv+hE^!|in%LXM6Cxhh%x9wE3G-8JAtJ{VA zr9I0tB7)vQi%lErOJ$XT8UuS;de~d!Cus5R&_m=ZGkRpgzx{!`DM~)jrug+P;RD;| zMUzDwE0G1QH|NV4Q^gD2WZ#}RS|KrC_Wv3oJ$z#^!hiwBX8cd5+~tY1ojaT**NP%aYkx;6rYIWj*jUaX5==;fVbBMmwI=*DaK9z)$2XAP*?)#%J z`-{WMj<2odVL|;-TM1KW?8crqFO3%%h9lpvn)Xy+)I-2anp+$wc{8aGIo*dK|Ic&n zK8z>YrEDaVKM5sZkpF|qpp8o-IOyifcFRM_BO6E-_nfKMPvFr>O{Cj1J;Tj9t^*YW z77W-QZN&WD5nx@ETD2g+k@~-%>#pn|=VJr=F)q5Rm(lSq)P7Cb1eMa-y}^$*zm*HI zGiRR0HwUyzR~pf-QWwGK_}Mo|DW6CvP(G-~X2@c+=^VzC<_vreRp3asCK=Hqy#b$@ z%c`l@Hbu#UWg?sOkgN>k)b~)ueC$ji63Ou2Bm3a@rglJ4eTtvUR}E{U&5KIpT7F>$ zNEWBIaBvj$J#?KwQJ5;AEf@&kv))rGN2@9{@1XVi#EHf6{&755myr6|r~R!dS@J}d_GY7I<_~f5l$?bS zZRxWIP$#o-$KuSu{~z!x~1e$Pmkh7jm`9pw6;(lY0Cm1aFA*9GGGaIc=V4hYE=A-msDh-^0&I zAc3&imW#dJC}`>|Deb)v6jHA{FV82Z3c7Ksf_(!_LgO35D+2&dLK};ed8pB#kO~D! zp&Nra(9MEMX^+nRJXG^i8E*{iF&b+_Ju1rQD?oj%r-j_W3ZkIkQ&@#OVCtotizi;* zlu(1OE~L^M24EuyT|hR+2qBdfa$~~v1 zFrf5!`O)ShNU2NZ3rsk$Y)?>E$8pC8Y2i>aOi@V8b{urzaC0Q*(+UczJib^CKshL# z(iD#>JOeuLa%oH&Yl?yv?_lL3GSR5n-^~XMJQ7BbwwDsQoRbP@;|ZBd^-q;FK*Yao zy@^6BXspu$M_Xvn2k54WgD>;QnE}KD`C2}5I~pq7iR^z-cK|{MHEhaU2W&?eHbIMU z#u!4xMvgn#P5_n3BK6gbT~JVda!HDSJ_!9FX?zdIIV-@HJx6bj=sO5cmj3Gs?y0>!y~;CDg`?HlNgjXgaQ9< zJtf~Ba%C`S%s9Z#8w5dKmYV+k4l=WVY)E{cr7+x!`kWF?c_b|x+ zNMQyTCewmDL=n4op*CrKWWbXKen@4uVdM$r1Ijw#1A!}S-yn#%x!iV{;ARjcC6!|y zxd&=9L0rRL;=YGA4Z!axyu_fa5!MuMiA^;~>$(q1Zd^kJ3x-@l5Z=?Rt+;f`JZNZ@GTS`Ux8$@_Xqr%w;d!8w}VPo;7C(8PU zHR*3q!kCEnSb?p(Aj(>uf*0=!G=x+xW{vI>p9;0@fN!NItZ8gaydu4qp5_O&T^C5WU}yYO+c)$>Z=9B7#UW+!$2Z#gRk*F51l#%Zuv&^Ys9vB37Nf;uB>I*NM0u^;?PxLs}vc{N287D$Y~&Pwmwa>Mk-qBgd}* zAZNAddcXq!3s@ZY(3g1X$FZG-wj1%bn1VWdAo?!@HU|YO?!ABSu8q+4%dwVIr2t4v z2=eEf+W0ZgM2912ogirY$rMNS&!D`zgA-zfZ5_YRwh42bY%Do)%yX}CCm7)cX?cA% zaeDFu(oz>6=4nqx!JKwl57<(;(N^S@%~Lo73RXccRu(ooXEfVwjUZZVVNkHW4xp%! zM`%0PA|Chd=n{G%HS$AN*Iqf>cJtXwjyXAW7ChtYDX?XCq2tRYyxLl5Tlv-k3h9(K z_HE4~hq-g_JlZOWU;5}ru;DC|ydnAW+zqrIZN+GI z+aq|{$k-PJi)pbYiCO+bM{uYdNj5Z8$wq3xzdfNH-JLhvc>y+Tm5%%Eh5|l6=l@ z=Qk9bpSDbIv$gvMS+hD9b17Cvbovq!RS0yOnPGSCilw`ozGX?BSuA@|blZM_J={A~ zfG$tz8p9EfY|&#NRI-ghm>wKcZB#pMav$xI9E9ko7DQqPO&cV;)%#53gAv2dW$Ln` zupgu&(>G1GItR)SB<^DIapgRuqit}6-KQnpz+ij>51F*?vb(gT6UKH#+6F z=d-)NElpzq+8D`bDtiP_6dgIKCS+@-CDeP~jI5w{E0&Osy&24C#|aapBmI8Q)$&J> z4o4|R9kn)H(7#9PKe=B@px&QM;f;Ysmp%9_D}%I0V?^89&H_ico<0YCk@`x1mVFs* zTM(tmpO=YxpUNRc2whVHId5CzmE65h@4>BSfllQ%kdA*tnI!Ld70~p_X;YE2K9r$o zJuBm5P#E+LzGLJ@VlnD{+`bo2&nc9l$4jmg!>A8>`zPY7g&`8kplsnk7`q(~-E9o6 z=UmSL(N)?|?C;L5quz&&PI*KefKl(;WUR=HftsLW{77;V0Ji8x<6qkL9D?Y2U(0aD z17>aehJr1fmJp&#=y}#;M=4|v4*U@=T4xWUGiod9EdW%-lbo^0LKH^-p=PLQ{~9S| zcRwIE?+Ag>fAWjhMG6-5KqXmn`QbR+J@(AGO-kG;4V3pM*K?+&3K$aUie{zDgK5yJ zz)zIRz|!;{!&@5srLy>$&~Z0;M&#r;#$b0)&i+X!RYH!AzJ6=c#!_2Tqk{pHvuz8{ zF@%;mnOD|zy(bU|9s&&2st^{%eDRS z>4I;c{AlL;FkGfw<~}3n?US;N3&n)+^K@_}@mph|A1=@#_~I8U>)OMm5yKqOIJ4|F zPtJh?9nBupM&Fmmyi1z@{?!K}FJ$6!{kG&W1glndw0){7l?i~~@#~VE(zd`BONx@e zW_2crm*9MMdYO0~ZI51aJE82O;$0eD57j7{V|y)NWP3O@e#~2Em#ic^lJB?0@m7Kf zSd**OHe6_Y{6HI_`so0%A%D~dhjR?*Z@eubZt?+ZVSI#XG-m@6(rd^`iChVOj9zJf zf8WMdq1eyTceft8s*EmxQnj_I2*{aT(McGSFuhr)|q!9K-90Vc%$s60Zw#1zDf`S&I3!+fFNY5Q*{!xASU zUgR$R`a4Cm-+cRbzdIj{@jaM>^JBtAoq)53DY-Qtq>RoJ1pxpCom3G9r)64Vt>HIUaOMT62s=%9S67Bb+796E(+#6`@Jrm7(cO7<|IE_;5rV@X+eHI&+mk@ zRz&8F$$vw0w^uBkD)ZK2oGNs5dj@hJ7!^IJ<5$&f9HDI5B8#y@d?{7eSBzYHNM2uJ z$#GCg%G*89x-O7Z*+Rl*!X8L!t}&YH!B0ZB)1e2& zUXArX$!M%)?bj&!BK^`p&&qEPHZ35!2l1HW01Y82xXjLxz@#$T@wp7a&pii~zCEkH zPs$LIGJVl>cqfGg{WpyP@%0V~Bn37{e7!QDR(j&pzg$`(2$E`PZI-$os9Son+Q+T# zoM7lG&cl1~xThF9FOA#}#;&8%i$fUg`ZOWK;`Wg`DwJsG!9fgo7Y}un=51fs-6}?< z8wwVM=PnjtueKnMFU=aFfJ>ae@x^Z#xtjbQMP2}`{clZ$S6duU9=2RLaNZ8!ant!p zEL-mmSWxMn#4c=~5o9mw(%Z$pT?4@5~cKzX*=xiJ+-TQ@wxW%ZW z(=Bz0l50CZUW|4Bd-D+og%$mGlnFoD6I6^14qpFv1E7=A;TZhLIvOMupnDoI8fNG! z?ddih4KyX`JD1?gA-x%`#E5>!OyggYP()8MoIDE zNDr)2p$*?kcjQIsAu|?ps+GHh(dz>mqUC=7MXn|*6QW6@>udubCKB**Fa`9MlM%O+ zI^sFV!ub|^D8MAZ#^(7SCn}(7tj0LX*9Z#N1{PiR-muwBr5iK|Nu4sSN}#ux4%Sbb zm?1M7xQWNMAs`2M@%Gd!WFe}eEnh>xCk5KzL9Lv%3xp07u}ej(k3a`#AwC_9vYu!Z z)o0n57R-ot&#Np_h>rm|=wp%l3;;CTQuLst8n74*c(yBsVfZycEqU#lY}hkYP2z`@ z1;AtmCYzP=ST~sF4cq90XSoaNAj&{8BB>e>gS#AK+kFg3u8%yvMd3rc z|8Qa%v4iKLh7t0QxO&Y{HRF^o_+@{Pg9sJYBnK$!XmokX{B9-4frWY)V!8^*6(PtE z)<9^3<{F=I$52twhUM{~HUJjXWUEBEJyJ$*rKp72^t^%0@L|?sdxHv5{-Y-%4EPx6 zk=9XfFqHu^!_S3y#CD(#vJhM?W0JK|0dc3Z4Pa6=K^DZYQz>U8bimUnuKZ)r7bvWA zG(xxzFXT`rYT?ZdkQNko@-!8IIyH0BJ2~M8K<6cjLw;b+^gtP;-_f=sAk`U}hE|Sy z<>U8@w-%&G%^wN6eL^j?KZp7rD+(ZomF#xdR7j4o>dX(DMev{RHXFHHb1sH%_YRt2 z1CzJfnxhWo__-Yfm6)PaEAjUY8oY~#40tf z4w>a-4PwZziaLWN)QudoE4L4MBpeIt13v?|(sYydk~apwJVtOD6-oH!6J%B-GYS?9 z4znh|;SvC!gCI>t5uYhN-Dp97gIla}pb3>m^1b$$f_$cKG+G|=u&G=;ksvTc;=n+d!8RXZ6jl{7k&fCvw00&z~?xh z8IY|pV>EWap?mS4@pl4gHL~8u?w;nYoUs76)ajZ36r-yPrvVUmW3ImB7o!w2+G|d| z>xA?agup!3JW_9oA8YhC+|ze1HYA69UhM`lID`O&_12h`0Ei9lj#8t&Lh<4DqFs*( z_5jtsz|aM=1I9(Hc}JSQ3xrUjfXD1x(1*I*=69GVQfLB8drZhW4srJoF?-*e4xprP za#!5qZ58qkD|`a2+qnjleg$kA5Qu%=5S;SlV$MF{MvELr$)%rJ=3wim~o^M(O_uKmK_!vpv<1kC+aQjjX zr9l9ZFuWLOBF4nAk-?fOnKPfWcF4Qmd8Z&pF>`!s)?@df&Gq=h`i64OmkA#(Am&VJ zq+!fX<9aO#35KUTItjUyY3Ah8p)Ze<0Xuzcj~XC+uz~!116kWb3AHOrqxXLYYCQt* zwNF|0@9I+pNcaGTSGf-(@~pJ=9((0}Y&&C>XVD{S1S!hP89Jvr$U9xTv>E}_!Jl)S$ca2c?E?J%rH?MfpqCW?}9~K zXHcOrU-e#624LU=l_ur9@uVzJveHe1Lf=$pnL^SlIk<1jCznE(* zK5LlNXaQNPpOY!dRW3IEcKvOG2r?nr;KV(W4T{5QV91dJ4>??!RQ)C6$1x=Wf;i*8szZ^P=nQu<@$>c15 z4};E}84)V}BhYyyZC^Wn$TOz>3-i|~mw>Ek7kx+qX1ws(spt5bY>s{@kGJh1XGl(}!OTBu znf2R{mwIb@j9mO|>;4YL?WBp4$Oh62w6W)L*O5p(rGi-)hiEy%UALYooe!=EN;ssI z#|?B{XxvV26SxZv^fK4fpMgIWNS+%~SXbFO^AQHa?P2}{W`#bfa|M#kpWhVjXQrw- z8l#ttj%BJ$&*esW_R>Fz_ z1aBr~F1>~u6{u6DlrOUbAa1hqCG`MEN}2~O>=$3^-9Sy6fwM$Ad!SGF3C0{S=4IbHrjf5ZX7 zn^^glz*A7_h2K+j6kCFTi9^>So6=0=&I>fa`n%=jQ()_)2ieTEuqTShH@% zcT82gPzBi8tb(^e1cIN98+CaT@_CFr8M<%^zlfULyJLlUN(mpEB`vM+_5uHrNOa`U z1UhpzZ8!K9fU1*l<+9!>_2Rnr9N1*|iU|a-tAd$YKf03VKgR;+0oZ@@V%poJN+(qp zUT~*T`vv@`Lk}gSghtE9F>`9OLXLiJohR9Eu7JbJzjeT# zyC`X*t)r-^V?n*$-6EejP?Ozsc~VtCp#@TLWmMPM)WBTAQo2bJAoTtFsc8zwAd;!dn#vqdxC zpYEp{%CAxU$g}h@#Me>E1pr>{SfygV^8m@1odUHMB@L?925n$65}9Y6@24LOn|e22 z><131U1elPjkPVeO=?ytf)-5MIA}~M^k{f}O65ZDk=jN`TgUfjnZ;;77H}008b2S^ZJW4rK`kCXv$ZOZL&SQ$S-G66(0{{N5enBYlUAjqjn-DEI2;_as(DI z@2@w576ke6qf_^b{3I5*&u(>r7U+XbZ^gkF(Ub=;&@~DOO>t7*G6LY~PGv||9HVx;_(kTUrqF(8uQoWncrZrIQ`D`$2AMLseoh<| z>c^niG3vG)^%$Rr+R<-rh0=`|`?2V>Ke_@?58&gUZk#|swX@QzKM!OBnh96kpPV0z z8$%rK%~2C2P&+EUi{)`^fQFw04fMXXf{;@2$m1&mS{uqP%ch1U`a%o13@Y&fV4XYd z<8F&TV9z&brtV#&U*h?GEXu8o@;*6Z3$w^b4xi|;Hs1;f?&a?v#;6BlZf%Av2F;or zGC)Q_eC1&E?hGur{_^m9}dYErwI1o3HM*H^lDvK8Ewx z#-*bDyzqaO)jh(J!*{^e{}g{bYKQ%5>sVvOK_)Y5#@oi0Kwxb%mjcS?Pu#q(@pCbL z7w~2L=Z>g7w2*) zGeo|sK$oNn5j6v?R)#a7$f5GFq!NB1B0=0bSKZoRlLKdF5KE1Rf?fSr!em48uo&t; zNf}fQ6bV~@7N8Re2w@Q!S#l>63KsT2*oz_|RIOU_eD59yy8VtPmU)#GO^cEt2rhqr z2R-YO?!A8Eiw!4dseWsXI=Fx$zX(3`1l%$8of<8est=)xrBPaJThLg3IloTl@&E|+ z{p`Y&U7NvXFRkt9HsIQ+Yjpg3fguot?rbc1x)Mb6ZOuOF1xORGhBw=8(*z-+LYo)OHgHQ;`XqrB`~TP-ME5;&>G$ zjnW+MIhY85xO`}f03?&zgzSxWhSmHBubH#B04$#lgck5`FEIOpk zVtaUc1VlV*-bIM|e1d{q%!$nagx|zTI!3&bGuV_Vg%P=s39$wkKWa0>e~qbqp2aS) z6@-)Tq%cv#DYHJCrVnXc0wXMaB}hfMi5vG)A@p%4BT+R{KfcsRotwWi`D2k% zdC<#JDrLK{tLdYiR znW;|RUS2HM<*2fK##wbNSBdRzS;BU-`32weH%UD(^@>o*0OnO&C8*n!Qj25x^~1rig^EWnrPRNml62v;WT@dI0>2Ba&K zsCe@`S5 zbmZBOFu!o8H!?V4JJb9^y)by|JrR)ULRqEhAG`r8AkbKJXSXJFZ(#ts+!J#VmM%+m&hl`9XW!Y5wF73Nhwb zeh$lZ{PzQl?mY4%O#Y3qIy1lyj1Gi7V@v;kVO5Z{e3B9Zr0O^(26i{ z+|Qum$#VzDrP~8Qvk$x?cjq#IRvL!;2B!H+q&{URq=478DnjWchR8RFm+CJmE}ZTZ zC>KvY9k!dZ?t(q92n|4f`OZ8CuD>LWRg|OemB4a2x8l(|C8NMlUj0gu+kD~5^pmgM z@FR@3{?ca#jw$t)kLDLv(x=M8S^-_9vEB&j^8R1_rAy-Syb(bk%rAg^d&-~g7`gr7 zCDOQL^$I6{%(s&CfHITGr&~=Zwh~;4RFyX=`ZfyJ&vm@ubUuZp{*tn@+@?T-j4M;{ zv_QM$Y&Dkadk)6!{s$ws+hEG;bCW=~zY%r8!WJwgu#kX77L6E`<(~1 zmo~5Bs)vrKw@alS`tO|&qlSe3?J$=hhjAj~4yhNEBid6e<9|@M_n)kczN^+MKMLR9yN=3CI z^hX{_o3D+=ie_;B;h${4JesrpGr@Q9O!yt;s-;8w)F-J346U3OVAbxdQ5BeX9)5S* zVqO*g=)aOzT_Zbe+)y!XVGnQlJf2GvE2?g0ccTwemb))wno&;p2ujc z;pXG|9>1_}i0GN2bhq&z)qlNbWrh5t+_JmRW5vu%GG24{a_X|hy7HNN>6mismdX=l z+aA?NF-}!m6{wZJaKkz|Y0P{}`=9AwiU*APf{Q4J2$5HQh;-}JfeQspv#;5HvclMg znxF6~KFugy;a2)gjG8^xYBOh{|rKx9Wz1dv7aw)kC+6KEwfZ=a7JEO^ZlUSgRF4H z0x318iQ;K_Ccpb05A;=U3ZSIH>UVi9JLFhvxK67T-;b3BV>T6I9V zQ*F5(wDML6H?HFS>Z6h#i*^vKXvBFfv_|N6lVb&|MavV`t(L>HY;YPuYb9#BP3bTaqb4lh4JWa|Ewq?`jUd^ z6P}=|SX-rVd|jH}Qqkj1;s`xY{;ROq^SuYJ>z~Hxk8{<$-7b1e3GL8uK7Ma~Exoz} zmF)3*hQ#(~h+QPSP}TmY-Ve2i4_D|MSjpnnvfcSI7J;8i!j7d&N{y8U3Z!-sc~b|v zvi-naeW?T$!7%MEy72KjGu1cmL-I#Zj$R7ODq)|d&n;Zs(cHNDOE26_O^`#v1K)o7 zI;x%B0abd(=gDMAW6y>AdWC7Z)o(vbt5I>7W_!pvzII1RY?eLiO`x6cwQJA&zBUBBn;Tf0ZRb!cbu&R~y;AVvU@N2_^=dNvr!M zRr7qC58p2Q`OL11Vf&evj%1>eyOF9vG)U9!w_BV^y*mAHUrB@Gxugjbwx1*K8Zu^? z6+Wpbb>vHhnZK~m`4tqm++TAmsD#aVg&d`t@|xB6@TSP2oz}8OQgxQEbC9$Uqf}~N zHb;!EQ%Uu?b4e+ROYcqtq=$UD;?Eio+db5Ue2o5KjQZJ^e;irYPV4i%cz47zC3aXY zUmZJ);-0S6%+!#4%69A4R}S~9Ep}|Tg#M>>c(4+g%XEGC<@d-p2*bs<-Z;@6j+pjs z(_b_7!P~NiA?>a0-j8flLZeG!Z?0AMbB~*edoj#DD~YMvM|(W#7^o>PJv#mA=Pd?4 zNnJbHYZe$yAl%?MU~`l#$amPM_#287@ZtmO0qWxXBFTg6Mw_k*3~#>h{$@Ubv7OY- zm?YJ;arocpWUFMDk`p4|nfgiQpwj2_(`tQM`p#x1V64!aLj~wH`Jyt*otIDjzsXx> z(dF)Xb;r?O+B5%)GOm}tub!Gb@%@T6UCaglB=809Ty@4vX9Bk0FDH)06+NlP{QCX` zbdFa#0?p8nTg7;Rn`h3?mRDffS(-~P#&+Qkm@&b2X=#^V@zz;gjBUl;mo2bz?~86% z2Q(jw-C65T;yevgTQIMcF4w*2Hh!r=W#i517Zni0l*>rE+Si3Y$cs;$47`_#wX$co z@7NU}C`VPpM0a7&+lfz4oSg7Rx-RajkPnmj)itZ{oKtvi4Zq>g(~;SPP6R8=2`vl` zJTxnhe`uG=GE-xR{eWcpBz>9d7W?0ijx14+H6(eqzt|Q2IZl4|eX>3BLsM#*KA)d= zKs6$=?}STi>aNIL6eX`I!_7x|2il&gZe@j%9CCcpM|}2L#^L0&x#a81IsjlQ;~H&up_ymVD{>6Uv-(--o%OrsGnIQv;Wo-V^T3A#)#iO_qvm z*8JCS*vhMrqVANO9A1Rgu)gNwqC`?7lhW#m){uSF!;-q1XD1BS>Pl8g7QCcPn9>jR zrZCk(z9sGNN=3z%G{>l@hdX^WU%53);CQjB(91vXT-OV@-}U86$>j%ZIaWsNyZsS8 zpXo;#f|{l!eg<1|Aks&7L%;o%H1NLE(NDwQ9~FF@z#{UT5*_8EOM7nEK6fE`Eg>f0 z1?^MK1C`gXXj7EWS;$s?>t4R1w*+X=;_!3XK1|ft^MSbl!Be2p3$x^YbZ zywNXCkh#5fnR%~Z*FE*xyo4C4Sm~+Hm0QcMO&4X0Ufc_M*qG3&_&`M+BU*|%zBRRa zl@l26kS<_63?8qq{Arcf5O+$KV;zDaZn{_1$wszXSAXlbkSz}m^o?v8Ld;y`+}6DR z%(EiJB~C}-oeSGb$OG-+SEX{IQc)W^Ix?R&dTRZ6wHqIY#dFqtxf9A+E^0LT*xsxt z)S>55L42Cd&}+LQl_7WAzp{?~uTyA4pSwk`jD@UEOx62*QEWZ++2vaKYUP=MOCmMa zRu7QjjWPR=JWlpK^k6RtbRhlkByT-W8;8KiBVXM`kN&kmi*ny4jJ#vyed+|phEvhc zu-(3Se~nQ)z)ZQ9r}|m@^5azt&h_-*rH!@00Hv;pBj*fCN@H)Vtiwqs88GYZ*!{JZ z;s7h@GH_bupj{2lpJOdJSHfoGySMl#W1k>V3pq1s)1=6F>AQ1IoQTbc(ItSn zT{(&7^!Vmuk~6_+VR_Jf#YL~RAaEgGRM zhMoUtc=T!V@CyPHWIJ z{cK6b?Iwu5W?@f_>`_*K5^qMlnAYq958ZfA_1ec@MRE7OA!=I?Wli?l(0dE_GCqrH z`X!NaBEl@)5)6$7y%HA3E&n#}-{pCx-^~K`%yFGPW3x=cIhmjA+q`)}`w_qDeK`=b zuVs+ZqQxclLVOFgPqygWpl3>#{M&EX#MB=#98%`3&5+$jK36?W*YW7T+CFE%nkgO+I z)_qvh9HuF-l!yPEm@}8EkPb^ns7?uBB&EvhO<4ARKF3?#Ng@80MZMd(+vw zYV1(r&4Vc}-JVt*BjC97cG1DBb?y$Mny1cF`%A=TMg9!jr@2HY+?!;PtbsrS>~HH} zjijSj$x6}#0S=?l@)6-HU0fa$ik5GGbmdQ2)V_Tq^JqRh_uAK;2f7-;<#qFZt4?2N zdz?WW`rfOSDK2TbIu9-;*}O}%S-r(UNW~b2P?Svm)hyga)J*p8>~R&$kBT=7IcY8V z?r65I)hyuOmfO4{dEVWR`}F|dQdMGIXBkrmxSX?!^&xn(u$MvZa&3=sLfr2$S~$~l zG3AgypTNp9QYROpvyB$ZtR~!!G|3J@x>=Szt$?qXu+cr7;L5L@{612@e~4{=O{aAK zg;v8ze}K*yZ<~FBW@C39od|597bJc(C$)ddQIWikoHI8);D_WKrcR8vvqzk2uP%HN z4kuizTqk||qkoeclTX0t?GEEngaCr|`s2|x65=`dVX<&y+1o6)HS$LD`ZN`9H5oZ( zDw=tim-8*w+crJsh!)h8IWFCYM=o75C2GGL6Ss3YWqYodR zNZeMF#XLm~rc_2Ow~N_`bW@u$2L44_SWa>uDm_eFe5-TNopaxDlV>gi?ixd_Zv#Bb z$@kQySKx(x9%T>zWc{Nl*0mrBHF0FTR?fg@-3J%Ox$m>kuf%s;99ZD%B<&{5%2{59 zbglE72_tjVKY~2no}6A&ewNAbd;rU(s^)I-`NyBzDS1+bd%a)6!k(D4v)&T+3=j1} zR&nQ8d)@!%zL)q~mf^+!c%P>ZVn3P7V?e|CI!DE|X4t1Ur9#!$YE*u^+dfG;Gl}>2 zwk98}&zml+`rc#L}n1H8I2tR%`LPKqV;9J(?32aeu9C^v^2=IpdJP zNPgIi_@}lM?d|vH!ydCder%N_xxeds{9@~CW>%(kK#H>0txu(*#i@qV64xt@M9HM+ zwe24S5km~Wp(lNWCg7TMgtJypavrbFIr=4*X=eMLEtd>#8 zM}goZANaJ`fXv_UPaz-v8J!HhI<8|I*e1fF%6J+vViGHFL(RE}SFbFIc@;@IYJZ6R-%SnzCQ}&0 z8+$VH;u{@EBID_f*F1Nn<<9;5)>2%u&5m#P%866*AmX42`3BS1{xqzhHAd9u)EsI;O`aP5pZY0T?4lk+y~&M+^ zU9foB$~WFxy>|VkE!(z#^zo;ke{rbz=-1zzI&=Pqi&w7QxDB#@#L`tCG2!0~)qMN5 zT|ZsXiub$iQgx7$g#+isrje(pZxA7i$y zT29Ao|Js8Kau0Ry;vNNC1Kfw&kBo%#)A*Jd&Y$R>&sVB#!gj%L#xC3M!>duuH^LWw z-SLla4{*Kkg;4U(l^^}0L$G2j{NdbI3`>UcoCKxG*fJivk?m$*va{?Od%&uw>Z;nP zx~f9O?l*=nW387gX8o3Zd!t)3X(ttbF-{9m4^vo@8h;t??!+EbzUXJi(y}I|FUWz^e|j)YbR>~ zXZBTn3$7EmzN!bTf~vNvttyG7vsc-29@ZJkf4BYLJ;}DK{~k!TAG3E-KZ@Y@MY}xWy%YH2-zmk?M&#|zu@50LYjSLGLdXB}?UkSKV_Prl3Gge3C{I5Xt zJIO*9Da2f*V#f+f3i$67K$Z*AKwdyw&|MDLO+M23LVV{QM z8i2TdpZ#5>X%{=?9q7@kjyii2Cb=cZ1$sG53Vmo)OJ^nKq~TdlrkIEV$QQ@S8;n z{xHFhTp;)b2LylYWA0DOZ{Gv`k{T)8&p)$*`?}-D(N}AV+hGFB7H(Wg#zzgS}$E)J8&251Mc04VBlOvfzD2!9Pgz#!J1 zrSf&?80(|6Cgf#Vb(x9!OkKQ1m!i+o^~mb2H|Q_`^XyZ-Mor&Zwd-g!xXK(~Fh-+I z8K14U=vebCb($99rs85UVxT%R+p5czAF}8SI&GHikTfOnh&+0-#iUK;t3Ajrn#`AD zaQWxMrYR}wxYjBjenIqYzh~mFptfMYhKN2ru5_uGslt~oHiLT)+z{BW_=+dnp6|)B zj9RlfZ>%;)+dkDG+>hOm4QBfUxI`{v2lD`*Spa-+1r`u%JTz7#B$>h3NN{b(g6h{p zlZ5RJ;}}~Cgo%MT-e$%;OpN6Y1JgPk&IeZtZW}o7QH=RQ{CjB-25v4?q!0KpDUA7n ziwEZgZa2j90Jm8KZ5sBEjevB(2Md!8O~G|BVVIr_a*P3aVLJevKe$s6Zw&a6;5H1y zThI^(t{Vcjr&mXSczbXSp?`oY#3{{Ia9%A)16+M@8+-*983xG!vXfa?KCN45YTju)vx?!l11 zL@2MJfL=@&uDcZ6V{q}{a82YLzJiMfD={tzhD@-13S2R`-M)_Fn|&QJd(?(+e>eDH7zbPrI2HhIH-vu!?niL@)Q}GNkI@HL0PZa0-8UUy z2LsttpduPw3uT!B?kTj763ANslwSzA&EO7#t2EP-bq1FWZauiG;A+nD zWQpL`gZm3y#{y4g1h)p<-{3T_d9vl;egl^@+mkH<_Y=5)Ii9RHxMXlIgIfh|FSzsI z{svcft|toxHyT_4xXs{7z&!xxH_wxWgVTbW3GO{`-++4ruEBgy76on`xW(Z1fV%|F zYk?>00B$(ASHW!qcLAK&LQmEV+;nhT!Igk}0Itp=PZkDF3+`2L8^9HVyAIB4F_Zzg zB5+@Vy9KW55>M6(+yroI!94&MwG_HNxN6Iw+`x?hHyhkeaF4-tS?`v z*AZMla2vt77kaYx;0A-63~mj$BjEl7SNly*76>j4+yZcWz}*8knfU|;|1FjI-xOFS2^9K5M`lf@)E-#xN9Z%9?>u z-h#DcxSlDlQPh^T;|m@I@WpC_SqSUMLRlvk#yZ2Gu`3H_xcpIf7Rh?Bo~##(V$rNO z>jNfkEbGhqf$`g)4PXOVJbQ@^VhJpf4TfR-5H^$zW5d}9Hj<5EqnU<{VOkh|rU06C zFu+e|8BEW{vT=avOhC5@2BzZy;#thfvRMwBz;an0n+Su|$zVE7VN=;OHl4k~X0UuP zmS?hAtbo17X0thLE(~YqvjuD+TLeb^61EhEw#(THwvxThRCt9=IDWHQ~r}IOHcc+ zXWBXO|8BOk?djXv73TdvKJ`EEH)W@$&}B5k0|Sy#$7oVOSH$I0FM5Q~;4u^5O?1Sc5g1 zz`!8sdkwKE0}_HDQ1T{3Y)W)A26nc;34tNe(Pbt+AVCwFV9K_n==gR>g5Eez7CUf| z1I&UfDO_vXBLqd^jn@9UOtk8v<1sIJ34t0}oZwytoz}u5T6C#mr1%V3ltEG!idQNx zf>d%@#E!@k;q765I3!-D8y77X+9^)LIK4T#+$d22(K+QF4}8w?Ao=l5wo=8%Q)34v z=~5umkSU;14s4fG=fO&K9$apncZ#J}tE>QJQ3Yyqi3S0#bQYxoREXtVgwBy@AxdKm zK>%6;gA*-zy|r1^9%i%7n93VMUc9`970wC~qGMSm=nQGmE}Ro8xdMqCCPa?X*_xZl z64=SH*TY~))TU>}LJ8W^3Q-fFVL)2CR3S}%sm|gd z=<+>mO$Qs!zqy=KR2Yx&mM13eLeiZF>C*H(NqJl8+~0YOByVp@8R{gge`5iI3M=|~ z(Zj?oU9?^jH7LL#U{3%-N`?WpV&i$wg7L3GRz^MB-wwJCP7S45R`F-E@hl9)xjb-Bd{YBzi?$? z$Q3O|ZCU391qmnhFs3GI$LR)6FzPH>8KCszp?-Vk2pudMtPfYx3MMiniJwitqNUBH zj5I>asNOQ76ZVuDEzq@Sq^yIT2rHH?l`hoL@OxzS&rZqckri(OJ&AdLt~nOsO8tfW zr2WRmKf zuwMUD7Putk=hb%@f9BGtH3S9^F&jx3_Hky=*NvdSee2zpG6HY+1h=qB+z z*ZqVB6DmA(9$T)}(K$+s-yAWejDxl#Z8~7qL)!@o&}jG@EgFL`aR$RE(DykCmx)gy z2?Rbbfdp${kTew94Ah=*1XC{KTp><^H7Lw>I9Z!2Oz&%qI$LDCLZTz@v{Itwhn=fJ z9-%Bxx# zdAUw-Dc1?kxlT~Zb%H{!6O?kDP+qPRXs#1zu9M2ob<*>4o#axklbmy%qLKt=${n*+oJ!s=vUh!_$@@gr|1vg zA}_E1Yp4I$PVx7@y`3`rMx!AGv~;S@tWDP;u2O{1%w$bUwuK`>48+fFnUWoQ{7Yq^ z*V8OIope7_z&wUzW~FO%xq7P*A1J^d9@Ql4(g8*MJBqqoehlmgBY%mR-{U~);x>{J z{cNMSWqbTI#dZk>+|AC);9KTwe3p*;6NF=eU@UEd83%l6!ZxB1x6*Z1osqwgs?Rc* zCg?1Di!b2Cx3clmk9=!F3ck)S#LP|ArwjSvAAr=Qn1nR!nP!>E7ORO1kg3Z|$>2+3 z<5s5Gwq?!}w=zvRI$F z_-vgq1)Ihotv*XO7C3VTVy*GPpxJS)MV)0u6)eT_%kTn-3;$0q2lDH(|-p&;?BL|MHiTJp+n zOn9`6rXmW1s|biMfr=r#uyB8fR&VWXvVirTZqN-BmvQ9b<8;u-oaANVF{J~xYDzTO z>yBk+h z=CxuskJ2lXSiGN(O;ZWSguihORO}gRuBxLhaogw4^4-06yQ_}5dzZSa&bs?L-pjz> zc^2<~m_@n`fa_c<_V6mTZ(O;;(|M-q#+JGR7~H)Nda@$-5U?HGy+8G2*WGv_kqws5_9EM9HJa{l^Sab>Sk(G&9w*K88zU*N&a0gv4w(rp!N7rT4hb62hO z@Y?L5Dx#NUec+lAD1Yx_506seuXs%#b^)SZP9C653gNZ>{+2y_-ng%n75fl#W5BLahhYCBgI~LY5Xh3sbuh8t75srhkLq#jDcmz zi20riBFt5JpH;DysxhG5C2e>soVyInv(x9HwfR;nwfRE+I;vX5_~%yu8R}1~z%HtM z3M#Ndx7#WRD)jJr?4c^G;IX5Es;EMJX*O>{nujpW3y@ar7fNlukY=o^ONf7|Co|VS zI=wU`f-Wiwlu zcr!n+E4{**I)uN5;#ZkPs;YuJx&M@^l>fPM#S8K-ZeFPh(QMm$nA-2;G2Z9gD)MrP z^jin{E}4y`F8r;)nAdmO(kta%w~8eFUm?vnN0L{bvPl2m*)%uDbsSsmS)@;G$RDPQ z?p27J3;Mu*z9gaUAX_N5@h`7k^Dh6-q#4Z?`gMRh zk3@aIYh3s%^r;5W$xEPbl&CzOs#K>Smb9m!uBoSVEmmDsVX{|&O67<=5Uvvh*XXNw zomQ%PpgLicr}9|qrn;_z24Cogn?-K*<(;!Fi}z_JY0tv>wN##kDz6RF3&O9vsOO~Z z*{-_^AZmds9#r>PRkQN@e0j%0fUhl}KV7Hl|^096(eCl=3T5(Wn@Tm z^KZ^ggL4zgJNKEYRx{u0Zfs23$8Kz)n|G-j6zODst`5!}^xSjdgpq9@xUsoz-WT22 z%KyT-nQ-p#^3R3l%~+&wzB`-T7OaxZZr;<}*>3TC1Drq1rSsvW+_nqd*#;mWwu$$``h_LF-_js=TJTu~RC)dn$HY75A^t-3T^gA?Q9) z&)U@O6`O8``cOl+b^}23BR0P&==1udf7;IR7dh6L9RF{Hj{})B3i`S?ghwcZHvw6x zF7W|&d9!^Csk#;YNl0_lGp2N&i=~X+AGPn)M~={u>>rfomrz2U5UO{DkmsYziveKp&-{l1-X>UBpAZlk~C|8 z{M97#{}WxWhI8vlbaX37zX{0`t=m9|^CHOu$mG*pl1?_n$s}>8oLb2DP{r|;Je~#O z=@rVy);~Z`sCz54wPqkggEIP5Yq2jhCCC3;;nP5-@e1ucmiH;w`hRsOhpLit=mT-O zlQIPz?KgcM#pBvN#b%LPNJ)4!HgLWp^Fp|C!1Y!Q94Jn0%LRbfq z=e`iuljJ7@%50QEI~fIW6G+^S5Z0cg83|#XN!UNJOkK58h-rr=sg%2cT@(mLzH zSamp`wFd{|Gq58Z$3}?qOY4K`qS27|M1}T3^!i5Cv>9m9J<_htj8&1+e77SB}|J-nrP85WPE5v_pI7#Q< z*zA?Xaqj=w?*G~O()pABzwCHh9oE7$L|JT%@bdDAQw4ZLNhwj&DIVCOUOx3zeqLZ? zc?YOMA7-Gpk6rsT9^8=d|LA zD_7*U?leDNV0=5m`H$H?brayS0o-ilbIG-9#g!|S+I+C_{lGR$E>MPFcojiuu7ygcewAw;g8cA!mWInGS#AyV_dy_a-*g_vS$Xi88{%pMQ_VDmg zc|iy8^=Kw-Gyj{<@dCTe!zq4sm4}D7pEMrYrF7o+|CNj|e)92^)an1Wvhjs@RTXSs zFCVWMm0y_5;BN_W)lP9?9O>h+RB9$ygm~^s*Y@)8mDfwWUv*M1_Ungvj8uhtrAp&> zhIHFGUB9`iHd_g?R;oNssZ?OHUr?#mlF>e6wfViLGOiWi5u*z6ikDuiE9h2nXkw37 ziJ2KQdz4D^+7Rld4&?Pk#j^G=OVjKF@<&SAf~^j#u+4abPUW%GO*YtQ2=RTL@(Xny z>5-v|@-nO9+RAcS8RB~?%b|9yZFu~zX&cp`-&B^wQ{%lELET>Yr|rf|a$o2FWgDsi zJi+mwk0c-e*RB|Qjrqv#g9-75srutucm@xvDqrPY;K2^6Jn}tYldcJcx4z8+;Tdd<0^XGNL!soqEWK`w3gO+aQ?R!U_?bI8j>_;D#MONu|*Nr#wvr25_o}7Lo z??l@080j*dr4_~Un>~9DUcPTfTOQ9|C0ne$OX>bsr#ZjGP^Bf9ZQwl8`zxjIa3obF@}|>oA^k@y*;toi&#FpHNtI`~i1dL<>2XF= zD$eLlrvG205AB!!C}oXcv&G9fttnlab4oKA>KDlK`Pa&m(-f>AYtGXz0`A@NUjGwl zmeVo2L?iEd<*=-3kFHQUHG5_sH8|6oP%Wsx!l`eZYKC@i`;JVz^)pQZF@KF^$5`P!i7b_Mm|A**HE z+KqPT&o@cAK4)vx+xMt^Z};nWqI@#Vr188}(DdxpS83Q>{Ln>3|QLnZIe9A?Rew>?YPv`j__-=<9yn2vZWpGGp+5M_%*pFGvALrinw*? z<~vL_c4SGPt@i@u=W8o1pRZMu)=SEp3*|{Zjm`< zc}-dRT=y{1$;!BMMXD<85EH9*>83WJ20VR?^JjE9)>O|fzgf=rF_E(gUiR!dv1^56 zdYxEY(VAZ;Vk_Oe&)V&i>qPRP9V(ZT4*S$PG47BP=nubP5o(`on~ijJLtpYLGE#fm_2CG z_~rJRrDw#f`_ESudxNco)&EQg z;ht_O-N9}41)JE$u8hCik>eWq%w&GaAojg0r9VlGGc%5_w8vMAiIogUmwjuDw+Go1 zs}bp>yaBq(v3s@HwJN0x_Att%jp~z!>jgPxm)|V6p+-zpp+r^olwC~9r>7Gu9Z5Tt zNbRa)ukJzrPuOpsS);7*Y)zZ@^;gl?Pae3hYwA6_HKwK7n8pNSsIE9gb-v?N#iwlL z^(Zg=n{u$~Q`Yiw^Ey$j_}ri)x7t3nM&wtslNHx94qvMLe4(RuUSXTtr7lukBlBg0 zwI8o4t2~nm>#TWs%UEn@E%gaG22bdccQ|JEy(^_ZqTMmBi5*IYA}3X6iaoM%&e5B( zVJ|*mGi@_}ezP=39%J%x=J)Fl5dTKfo8J$ZK3_M-KWTZU_dxmoe|aA^_4Cch@n2p; zF2|J1wJhD68KXDS##U4RLd-pvG8bNDxliIJUfy>((-MER2)j?mcCV`N{L%mG`NdOu zR?BSP!j@Tola^8bnOBC_1HAIQ=6U@_tMI%AYa!M{6+f5SDKf5_(tW3!_j@+acy4UT zXUOLo&#mC&Z!-rH&W7cJ|)jg)(|soXz8*!50}%>K|aPNwb0QHJ%|rHk-Y z=a4R7O50yyZTnWN3o7;FF=V|zN)s*>H%KqiP(K0I8!cC<; z#T@gUi#3h4 zZPx3R#@TAO);yPz=Uhu3`7HEiOP@bM+$9#-TIFvo+gkS@W9|P&WH3Nnx1~RuOV2nj z<@-EouGIS{zhP+nUs{{W=bt}sx%M=6`h@h)oiAkVD`!j4zsu!3)wI6-Q|?Wy@;;BS z-xQY57jLo1AxhlMmhV@tUwVGo!%TfUf$}$*!q&c5$|IkdKD~n9*|22y zraCVq?mWv_%4cjYGnLm+dWLx^%o@bG?KO1reT3g_3Nv@RU#Kw8o<`lLSmg45v-kTk zBPQ z5?^Ue@K)?$m;A+2Tdn%~dcNupz5aUP_t4Kxmi_2^i93$)Nv60HiCa(DV~RTi*~ztF zgGF|iQ^!_Q9oUxhD}-+_#eJQ)>j~d%iaUdRrkH=vrgF9^ zKF_gA<@x<(`t*Wj?frWC%l^Xctl*0-EPXHKyw_Qi%kTSGzq|5!`=6!##8MwmA^e{5 zu{OScWb(_;Ae%=?^VDm|hP8rA-hVmY(w@sm7kr&Dw92KDepuTbApDWn$%Ef@UR+^q zXHL^bn$McbJ(;lA;$J^d@~`H6KcuWLSjOjE`gR6+&ob5dU*&T=c|UV~nJ$L)J=Rf{ zu|B#KZ(R>CH|pQ_d9S4}$B2x}UP^zoCC^Uu`-lpky=;~Dvh+JY@;R2UYi)&l4=-VB zg9lhkA1m{(Fz%N8jB$8qzwhCceUGnf&H8Cu*gGIH>Y28TI^(+75Z~%q(_49uBj9va zdM?Ug_nU77zKgM4XSuJpbno!s8fQ{bLe4JB_mTdXWv|okV`s$L^6wUv*}qZ7$;$C) zoM?1RD5Ax|qB4Ze$CPT`WfaGvqD(1H`BNL!i{>gkrRUJf%aYIHVa>G;np00Pt<}8g zkl)WTw`~)7&FjK_c}cm^5mgi~d7G$rBU{yRo;!z#~ct`RFm z&0LkZ;KIfW&t3Dq_Y8E-cQ!ROx&w`8ob9YRrmRMZ7vf_ErZ~s;Pb1>(uQ#YwzCW^>Nm3}aC49dfkPZP%| z@-XEqM4uuLM1Dxb^uvQMCoB&S{-TI0@&Mr@iJvS{9+dnou|biCA%70a!;;Th(Wl5m zos*Osa|@A%@?hm6)DLtXtp*$qoe|wdF2z4`*2Q;_IFl>kNu;~bt2UCAf z_U}v~?ze5$^-vyI?St}Q?V;drPQ5S^rQSQxr=84`u;v?-54*led2kknVbd=92_4@OA_1r1 z1oYl2L>8uRmESkope)=f_epW3<=fOld`B004>$fj_52I{`v>ZQ8+Qxgg>BFW_rf;V z@sG^k(ET0k0ycj~{*K!*N)*NjZ@G>BKwFIdzy9 zp3n!qFp|J-plc9&mDgbloQ55+W5|&EB-}-~Z5aKM`A4W%a*Y1L-6`Y!o;cwtB*a{Oc1oy&DIQcOCL|*?1 z^}($<`U7hp5n>(|q3tg8=uz|mc0ES9ux%Ru0UI8t{jmB8#skj6G#r1Da^Q}k{NOa4fsq2^2OZDR&%3KcbPxT6)z2eO zxbX$X3)cM%{e+EkLhOJuFEUQh_H*K6Wfwtcu7wCdpU=(hJGq4rb{}%rUcfc?#z)o0K z6ru}8U|gn$Dd_zV#zm%wS(t~@(Dys$A=nJ(WjkO|{$M7w-CHFx&?FMVe+$u#pKf3^B>i*_#)%)-6fp^tHbu<9 zEh`i;4`-?ru@|Q8iWt-e)to~S&L3m9hbZDirB6v5st6C^+!{sH!M%qm;zjg*cC8{B z@54`2DVa)A00T!-4@|%bxBzpo_zv>J&|fHG;}r8ljUu){8++Rwuofm^5H>!9T#u$axMMx- zg*6)#F%9cBDq;aP9iX5k*i*VCsh53T{53Xl^+zV@oPn@WTCYkAQ$!R_z%J-Nnel*=Fa;OhM?c{B`xTLg^`|N<8IDnQz>A>!1B#d>ei{~Gy1}S7 z4+pu8ED54E+yi^e} zC_aunW&CBdAMW_1A{JrIrzrn1>S$YJB za4WPuLI2@p$kVYM`4Dc|Zj48IyOiGs#rFm5g7`UjFLvVlq9VG9XWt^~h_8ir$nm*G z>Q78Ge1-ank6f#;9^0U7y$<;j-hI8oJh4G(+kqVsZoEMeEpYkL$cmI(7!S?&GBN)snq8S!vXotN15>>&DmlbgX z>qhYkdQZ6Nm*_p*^=tHA@;B%`T>LHd!-fA)#A*fo{T=#6xOOk&0$UYT6yaV~6}CKj zw?;*u<4S6+Dyj)P4p)U629H!lE!b_LRkXpd zM-^e2|9Dj#h1|B47=_Z#Ql;=ziE~h{i}#kU*K9Vz^_z|BTS^Q;x!&FdZ)e<^PEbWB z^>m(Kq|d^bY)7q3cZ|{j#|anU6l^|G6$Ll}i*O$9q@3pWs3JFme%7nP@ig}Pe)V?)sG<($;PJ#48&u&V+;N&JnxO52stCeP_;-}M@k6ROSxKltpHWWh z>Bx!e3orz?ouP_Hh;M9EMF-(5e2DO_533?V*n5sDcERy;jQo@5(m%rPzf?sE#^Ifm z-yBfI1mRhjg{|kSVj9lFg6z))s+fn1un5~PWZa)&{Na_%Yb_V4!bx}z*1)!ljdDFf z`b{_)H0qzY)Zo;|kOT37j~n6Utx_HdHF6p9Al~r_2F2&+G-VpkiKREbT^s(6|7 z^`Al>T%Y)qA+If;MlOW6Tw#>k@)_hpcpgSz=(ETJ7GVsATUC*S_A6D9h6`7z;wkn) z+0UusYW#D32zkiz;WTW#8hOCNU#sFg>aX3diUq>s+l~60zMzV|gs0()><1^>RbhXY zd|#y9>SnF*W$c4+ONXlaCEGRV3E>E=g^sUaCvX@19{V@{SB-KDCANnRIRgoY(-NQH+D8E+~4U*r* zj$uOvxx?^}R1t^b9_*7hx-G_!)A85txGB zB6b7|&@s#YO3{QDPT4eZa@BFFSfvR+;S}5o{SHlp;2himJ63C=3l+p18bn)Mforf8{y(RC>OT>g(lkIbd4s$aNALu*af}oHIafjn1OA_ zXkr>VHfUlFCgENF-&_wJ7 z`8km$#$o%3n#jV1lQb~{x4n!0z(u$hhP|3_{0w_KMH9_%5{6)~9=X8csmKM!KcI;O zY&lI66R;Cb%J7Gf6P!6i6AO}OYHSQyANe)mgNv{YhR@MN2TY%3rG?sCfvp!JpBLrlO_~Tm-^KI;)?GqBV9lk- z2kwSZ*zqyyg^p%Tq@lQ66H_qtDcb#W^yLaoRKtePQa+q-rF^(}CGv-XtB^m;w^2Ua z`#DWSelFKzn%E6@hv*ONx|;sLZC^sZFOd$`z{r<1Q46a(C>QR6P0)P}<-!^t&}-dl`9u zhk9Y`Hcf1V-Wc`D_-^_MXL{);oaje>aAAP)k?9lI3G5owL>zVwF+MWg2;(F3kD(WE zeq0kpnLdqNe}SCtK&~(eYhmLA_6VbQQV*>8A@YP77>0qn&;wY2F}RpPo^bYV`UhKn zME~UVd$CLCyN~*y>wfg^73zIJ6K>f0peE|z9BhQ`Q^*r`K7>4B?qN-|!|+d#CtS!O zPdNSv^}&|Ms1G(wYa%D}Jx+bE$j>RzbC`dM`W9%{zahT`x$dMtaOxTC5pH`HdxVQH z149K({8ZY@Ptga$wa=jsa2y`R`ZTvk6L+%y>YUZY>C8t{&m+HoN1x_2u|n-rLO<8U zuSr+`GUG;k_80g!So;e40`tGo#Pgz0nfR?HS_pR)HP#m~QTsc_k#PJ~O`OKM)34aX z4#K-&6na&gct7izR?Q}2gcqxA!u?C+wazB|u$*01MUIOKyaXWpmiWL&^{0zhzvvrx(4P376zh;u0$-6OXL%U zM1HU^7#eCH3J(>B#ISwXIqV&-ANCFVheN~d!{On`aMy5bI5C_W&JE{>3&RV;#bJ@O zCtXQ*(v$QieMx^ZkPIf_f2@5hJQf+tjAh4iW5qG#>$QoXYL>GhWxp=xh%R3#-3-#rmn19YDy8Z} zs=@A7>52BldQv^w4!O37~gNS{Fg@q}HWI(jyskFF#UP*1a?ul^-jN&5bQc zz4F;aoiOyuu)5Sh8i{3fnH6+Pl5(@_l5;1pA0YzFK_H~-XmqS=EM3yn1w&VxZK6gm z)9?p|mUv#90%((sXy zG9Q`Iy`PLK7Ub+4l{@$>*a{cj*`bPtJd#OQ7no}5^8(k=QenWRcCEqXYDmIoFOJQ9l-3e6b zzak@IqQ~B29s6ic7h|8%J$4?SJ*RtZsRjPt03N$t_t#O~V<+(0QV*oJcE;Vhzplq) z8+y=;CK#iiiDz|>UBG8Alyt$+0z(JFy3g*?y>_Z^PWRXc)(GjZbGpZ#Tb{!W?I@qU zW4fLgno-G57}~MqD;7-NA}|=lTZb!X%Yk(zrEAOnn&Q#DbbFbOWJ~JIf|wj z+Of|s%k_X)*AqiOGNqNkK7VXSCxWBRqf0(Czt3AVvwzTih2cT>t)}+*3S$+uZv|D) zZ130Sd&8UOy7MJpA!m9+YowQG?g=r^hxM7htK>7%C4C81(3PUDE0r`w>PfnSo;XY1 zVt+kJ_lbUEUN6@YxynoRr_mFumdKT!;X@1$Qa(Q!`VrFS@^b%S=!R3DrOU_Om?5%d zbF?w`hKJbSKV*lEx!LR)md4)j4AwbWj=kX-_W6aS897(-4Q9_EwLq>3jhV&l8JuIr z3}ehH`~1Q_jS(UCeyEBuqwHH5?$eocX>Dj|OwqLRHf9$?U*yU#yR0>aZ!z?xwM=6S zAG7})<1gvWl7}(RG=|+dAORHeAn99GYwzw(2+sUx&Uf$k-Fx$W(EG6-Rkf;WRn@As_QYv5 z29v>HFvGt{#9-KH;D4hG|NPGj{{{`;G|2E~zmKloC=`5jb@9CW7N;&;^w57Sy6b_| zd+vJh!H3+bci)@3$n#+8eGjJQ-CmUXz(aHHy>8&Z{x+?RLYKi%AoT0j?qS2A5d#Ec zisAkK2E%6q42DF5VeO>``ZYAcGsA}YbZz8t3mW_!a4X&9-)SYh42D!*5C2Q#Md)Yk z07FV&Y-)hv!vQ~m^utB(Zz3bffE^))J_r3lcAjH+& zz07Pw;q2??+~vLtt_ubmIPRCgZ+-u6I z7ZX~8;J=#Q5%*$y_wx3LMnEfr1%4mwUVfAzbJTVB@p42%prrxGZz#W@T-|lKcNF7w zCjM79fX2?Ss+V%^1q2^E3cr;XlpE74g8%a7Ol&1(t1c7dLIzMbhdbyrRPigL9I)HcS(1EgYR|yhFlcJrE|cZ^mb#@z4an z=Osh);X#e!zSe-yB-U-75A9m;hnmDX>hIPIhEN8S(`ou7KDZJeKpiu$V}KuZ-g+Gt z#4FS{9^R5E?3283@{nL;}JsP@N!>h;R_5r;<{>ORhHgupX){;?sw_mHWEws5yA9!s%P(J(A z{GPK7iXjMu`wF?hmL})fQq_rFM6;N@0GC?T%YLM?*6{ussE-9THe}GL`p)0EoY&xA z3HwGmp8VptBb#t|omj2~hGIx62pEWxzitz@>K=;V4uUt#Y>Ny@qn8#|@89k22UW0k zWH(&QPTDYEWk9PP`uIWnGk8z@4}h`MTMRWd+IzT90#FlKB3xPPlMMO`4S!TWNwOf9 z*-~Y<&Bjt}%xyDA3N6q-)X0E4KK1|?2&=R;Y5L6i#8~@h8oIY9kGALvZj08xS)Ocx z?nj&J%?5NwF$*{{Q)+!otn?xi)=M9FZ;AZI zV5ly(U0MDcRv$Q)K#wBB@li_o5_~j>KZ=O(=&JG(c%-HTjt!~Kvkg~(XW=cp7#1E7 zP!r%;3Ou`N6BK`J^F_2f_VSa6c^k25_tmcv^ki(%+!*r#9cYZ5c>f`BrFN%?6dQ31!t0Tr2|l zSQ8LX<08O44S3K>JP5pv!iIy8l}f7JzI!@rg2GY#ip|@g=}hP%3t_}c$kN!+Nhsi} zb6*Lp;RJ%FY@|;6FTO(BYMVZ@f%Mf@n>O7v(D*@r*;;jMNqzp8)I>8p$JxutjP|;4 zU5tN1_v2VX#n^Zf3LJDIrH%rcol*--a4BMKoz4cle7AB3Zj3Ki)BO+7FmL+XtFOMw zwx2s1IA&Dx2B$W}^3zJp6YQ>Gdn2g>u|l~H>&NPD$KnQDSpBjJ@vdo@IR zwN9C8hF6JV?I<$~1dgQi`#@?H%N2Va(l{z_pnz6(ps!Kkgx^sBWz{l(W@QIBO@{Jm z%7n;9)b)g`_}-2^hgpy{YbZ}k6efT$nJZjzk&5-`4*uS zWHjH(W+rN4YBsQDYI6%(!n{4-v{bkbH@t(kIcv7>K6i>*RD4rY;V1lRO>DezyaeoG z&r(fdd+JxNj|u?2Hbkpp;>tEcDO(B&n~?z#o3E6lE9HFDQL#x48h!dDQZ+V~3@>$M zwHY04NLopr?|BdZ~2~^pGT0KGg># zYng4fl9zCbbu#4Tu>$;LC}UdTCruf19)6sPOOQ+YfU$xK$R)5nP}{}=aGQ$!pWXrk zDL(O61h!@F$UNI@dxR|jd0A%5WM8mP=4u5qSwN~o>BUjb@b3`ccH2@#*P;9Ny!Y}= z!-S6m#|Domwk4a2Z41P=jdR%zCTJ=rS@aDD9L3j8TBLvwIAL)B6MNo6fdq^)(EZ8C=-73i2@$ANGSM)<=6b^9*kYSb$L0#G39zK;r6P1)T*c*FTsJ>jr`-01j!Y7C* zvI~%9p6oHpGhm1k037c$c$*eg0 zr`NNlz+sEjks$u(Zd73HkpyVUTrE~@fZM<^)5@cVvGKgbQ&4LjGtw+1z;HR1*;2&H z^Kf_H*a&h9=RcrBGK|Oqr6>|m2VdPXmn8|PPwv}A9Cd8))u*GPa|N=Y!y@{BFp$Na zh_vT4uX++}Sq(k^H89U3%=Uv)z$`V;m^{hNTOey_e$-4x5GBC=9l|ZofKYce2@WPV^PwI~=A5v342sIzdoU-ZF4bnO8k5G^Z15Ym#jf zU+cn&KO^+34&Gbfuu)kgR2xGdVDr{k%|WuqAkQ!(*AuwFGY?qVeFND?IBzP;ZV}jw zKEN(SoQVQ4J#bEFEmG;3E*#8Bb?`C+l@JOI+ZhP=RSKq?K+d@!BBBnwAyeEF4t&)Y zE;C3u9yoVEDHyah^moK-fo*o^I0rZ}R1AQE-irUz>?h4!2RzY#wxn`OlaVujEw~?% z)QSW?!!<~asZs-qf0|ax1|X*Lm!Vsra5sPG0(%?{5pZ?Lf3O7cks;o`z;{@NVGM)H zu*8PA`4Q(MoB^F^P~T~BG>g95NRBOM118b`cPQd*J1JJKL)mCErZ*@{8yy{@gtDTP z4k6`+%_rG_z{#re0!)a5+~lSQP6OLKuzfLf(kLGPD*P9gC;J15o=~vsQSB`9c*NEDphT|&IMGe9 zgq8xk%|-vTv`BHaO2=mhT_3Lf^QQShS5xK&a70~u71x_VSMxI?Hq2-DevanIC+A?m zUDlurN5{aKL3UXb&kr*C+44k-JPO_tc#$T#0+#^aQqja{ zQL%Q$dfBr9Q6;PN>9ycCh_&^eD_~M#r}iA~X9P>q#ZF0q1gUKVo4CPK)d)~P=Q4$W z;+r&3lK?z62T-$f$ZxI<%Dt`AXU=GVdP2BS+Gdem?}Df^*9N(7?@biSt_{!t++*lO zJ<`leB8j3&mb0pcj*!lBkiA314K^|oZx}L$dB2D1S zF;|UP`7|hh*;B(>r0w37%WKf5E1!%P;K_-VLqX}%4ft@bL##!t+z;i!UxU)suEVSa z+%391f|o<+@+e-WRJ*=XTwgQ)GN>EAj4CUhuhG+U9afC4A{XkZ?JU}Zadmh(}`Jw3a$fJRep5dHgjWi*2%?JY8kTZNBF;?dBVQfN% z{;-7^)u{Wrun&(9m?pi2HOMf{S8IVQY^KnHBjNEvLnA$pLlt2SqAt&<0mMCzLjy2O zC`O*gk#Wy5k5}~N3L1~^?Z)HJXgrRsnVGA4BYGPvyYPQ8zftx86&`mqGEa>tg;1}% zT5yzI9A<#Zj9S>NZhKB3_VCoiT2G9&PBgw~*Ar{x5(E?wPXEABvRBM6*(-buMmizQ zRSMXIcWYe$x`e2XCDtr?+)+}q=#MhMRkAnes^KG89dZK5ATl*DUce*oljeF0X$6cV zn`ov#seHDA!PcOZ4yU#JjKY#orh72ZMYyUYGnMe;zne>;IR~Ke8=KH8Hn3;A}U4 z9prmTsp3+LRvv$sh_Oy_`GT(JxtOnYZor>c#@>Vi{u;Kp`84uqB6v0a4%7%Faikty zUQIuOM&%Fo@}JM~r_ps73KwdHnd?Iq2og1@lAw6D;*jHbSL^C@D_5s?qdJ}VVYT0l z%q!>`75S!GSEp;}9SzxqO7&{esMI%T)w`s|1gUETA76JLXgTbaU7t4s_;4)`Mrj;_ zZR>i~r|DJuY0|4+<=!9oOh*cY@W)H=_CYyx67$FDKOGxa(>v(qf^+GgO*Qti`t;LM zyIH(_S9%kOj;mReb`PKlN1l-w^e@n8qnMkSe;!t$ia-qJFOJ%q{Gn7QF#jBSOYc~{ zbkrpJO3k?70T)Bi(|P-OLmg0r*N{gEEXe!?*pT^C8j=9>kE13UbRcOS*mL-7Ak}TO z*PUw;w;a5>mDRJB^k#Vt!Y4E-g%QVRqVywbji->p>7P0FiB;d=y~iq-n>n3Fdc6KR zc1rZs^oJKStd178rVO5!kC30jUv@^12OYD> z>MRbTbNM`+gkcmGS>!vcnwXb(<@ZQ=y1b5{m=B~|h>tPM^^}`i>SlQj6$QQgoW9RXU+0`j60X;_yj_O(q)79GF-5sIS^4=!30H{7_>n z=4w*qAAzgu+!g?r{$Rzxg5uZaWZ?np_8O&y*d&kiSJ=WV6W5cOEJGmXq2fZQ-Wf> z6l_@VQmdXKGxSHtdstqqx}q=iO4sZuvJ8}kv^b{uV~O%OGrNr4ZWay+2cdrX37HDW zyf9UCv{mHFgjjlsSK$0WMu6}X5+nU7gbyGO-P(x*po}A8qU`NawZX_jD$P9QI3QMS z#$Z*ZyhP`x8`-1avL?z4E%Fj8TinVXJ?}VBK1^PiC@)FU$}CP~k0!|rljS8TY;iJs zG)3mq!pu}&G*w<=(~G9EM{V-LG``av5_k-Z!Ri&RL&`L63yf5dOQcAm_;iD2Wqk=l*p?*zp~2Ve{tua$Vk9w$ z)FGCaO3S@s`3y}V5ftgmy~2CMj8g@9TpzixpFCJfO}o${=%dHQy`~W8tJAjt!WG zMb-HluFhYHj@I0Z=<^vgR*N;8OGQWppA&C- zhH$Po0stSpVH!he{fs!$;!JVnA2Q-SA%vrq?A zAb-INaTVBJk*=x08D8#Zu%}1`lDMa@nWL#dE9#nuPdQGDRZp9AMaKzkXG_f(SLKTC z;a0ZvyyJtYqT^*APGn1UMfY$rTdFI%NvXUjDLSoaDqE^6x`)%)QeDwa%5;1nR^A>{ zbXxIDwp3Si4`;KbPD*~@bsVR}$}5rT#BuBpOp0Rd)QHq5RL_h!KK7hs@8OHkxi%y| zSEpd%AQc>k7MHOOjlF{GDdZ42L7svtT?!_$+!j{!gFLoXo^qb$wz8u04ysmhP;ciX zXFQo|rgunRwLndnjG8&&xtezD6s1R?bLo4FmcXLrC)(PK_rX825@_$XHIHweVOc7In@=`ZF4l?x?$rM-p9q0Bf=}JT9;@G0YKL_6U&x-!+h>nMeFo?6Lj-Lhm z|9X}b7`F_$J_80B^Kh5+Z41-{ZPKFgFc-3YqV!G&;2yF#J}xiP=2FhT zpAi3!BmSKfahyi}#n++gj%fAMV&x-v#}V#PW1r___(P6*ou!+;u{b{9##)6Ey1647 zh}ZpN>G(V)&o(=lXUig=IM0?nW&{0>y64y670K4gPW27sCJfQGnlPLsuS(%+XLN z+u9wKc~Hd1FBiaNHNTt<3fbP;C2B}h)oRdvR43K zFk}FB(a$tm82Ilz?RSBJSE=T=#XU$gl}42lqYOKG;~2p{HAal$7%{#%NEnvseXDQA z5oO~MB#L|bjE1=w&;n32NYU&9fc$lF!y)om0WVWhdfn#i^U-4nx*3wf1P`rY|=y`Qz-_tG318JFi_5c3aJRwLsHnT^njzOVmQtu z7*af-rgT^gJasFDC$-q?!nIU0kEa%lYT1N|ip7|hv*ma{LvQO#skl-qFQX)yZ2xZ2 z=f?pWYgUT)o9zcp$vE@Wd(LT@6B-hiA`(&LPN{dF1awLf9eW*+*(moVMDnzJGN+AF z>Bu9p0mS(LW+p@0{z zp=D9B1kVr31U5S89tA!I4srS+EnO19%SdmgkTtZJ!PBTR4haUfE$2b2;=ELpZZ&Hy zVrwqUz{p0umcatj5tHak!j<_pxOh4~UgZ)3M@*EIF)9|25^KZJm=vpL>eZ*yn*p3m zpNKwY7Vht>i zDlf9JS*fhTCQnO~7iF+nX{;hc8JkI+RIW#yre(^Dve>LlR*@x-$(HYMva#80iZk>( zd%1$H44BBq9yPoBIv%x%tLvn#3ni_A_pi_1xgPbWud&BJS0~7DZH&u zZ>LZLqET$ike1mpM6tFQAizh+W=>zd==&qNyNP1e?>(@r zkxelRUkHcv!3$YB68VmC9c{99fY3mME_OlfMK~A93%FT;|o!$FcAY}h^zK<&d5e$g;S&J zPnahu-v)9G!=I7f?l>l{dL1)@7l2GcXJPD2IH^ut*<+QJFP#>{gdDd5yueoGKfxYM z6nzh19&o2wNlGKu7AJkgN-f~Fhgqq$LPoizrF=IZ2^9QRM}t^(10T(7T-rTEi!z|c zm5gEPN8UJezda8C&NIURHmDyS=Cag^dhw#N6vAw0o}U<%!ry5%-~Z{FN(YxHfRi{J z^+<+TRSmUJ(|a+8q77tfSNe947P0d8TqrSJ(0JvgFa(@?>2`a6L&W{n4>stZEl11;H5`|I6iv%_O!ld2eUP^_6Ro ztB@gKX1VteC)QIKugSOIln|%#LE(okZAZP(;s~ zjZ~i~)g`j=Eo|Bk^0-!c>UlQ4l}$VE*k5r7lv$qQItf6I1Kun^7D;cF4!1xBfUrIX zwW9Pqb=K+#ij@-)BcL_qua+C6da&BZM5LhL=%^kW0XrYwVI!e=?KF^1s3euObFIM| zdXxt%|6^3C_Jfj|!x{sJO)L;MX}B5$;LdYRBU}P7dmdLN+3DLtHRmbEhM-`FLJxAL z$q4Tjho4*|b)+=)7YWPy)FK3QOwX zI0^(%9gCF|IHQIwj$rv>y>BT1=#1_S{ZBe#=r?pk(eGZK&_{hP1ubk=E2}uqd&|Jk zK)prpCG<4PDRMNF0}qIeZDmumqW=MHhaQON>q~t7e@3gc)yrI~SxF6>u~nI|F6erf zuMpN1(+c5siwjo>Kg7k4XZN9ET^)2CCQI4%HUBw|KaH*yxLivnlk0O92)dpjE*2C| zv%dcKioX8W%-8?QX#MZ=YS#}R88Ki4z9gG(pIGAY)&tW!GAA-(Mm3-P5eu&w4)eQM3s2cn&zrqnx8u^&!4HBR(Ig zH~(&$=I#v6ztG(|zc=dVfcBr=tD72iCd%S`J9InH*+3ryT^sdiXPmeC&Brl!rQfGf zZ*@rzZ}t6;FLWIq+2757BZE9e&u9m2lC31&=-9J(saQKexnE%0rNfW;b}X%M94ntI z)=m)EN76Ts1-?n>r^3^Fl?g`22jvsR+WU^ z(OzAzOfbW%%b+OQ@hDu}kg$dy=yV>iw{tg1Bt~~x4wl`y)GQ+1uS||`5TZ^B~*Wx!$ z;A`<9Y1i-31N0YPa_6h^7p}L@*xGZQKwob!)7RT6G;@*lc6ztm8qAO>Bl&l>T8PXFahFMizdpgjtDKbHSuz0%oMEZ+|Kna$L>IBLZsx z&_(H2l)`tZvRKfTgPWwo;HDJAV<-H+j3(0Ct1qb|8q_J)ZHSRrdzvqPQy`Jzhv2fD zl_v=2_K90|Uww*)4b%52#rBA!#9LmWtzT1QOIYreXLxglRorEwfuMDSKOx_ATmF4~ zKgAWDoE+Sx`+$9%Ua!sV`>k&jY@7Gm^h`7;F##G$k5hsWsjG~jB$Y2 zVzcN&wsqV{tGE-8gK_?+5<-a=20tgKVk?3r-51yX#J!`Q^b$U}Ksa&LU7bCb_h0)o5(!%{ zg8W~fauaS6K^QmM`dAaY&u9*%bjHHh@xg0kzH|FVEEWWc!7D2SEr$AX*FO(9!+hn9 z3pa1u)os2?Rrp2@+GUM$g}-WQhc;cs>$_g&tGU{IwW;93`KsXK`1z_VJ|?O4HCy}b zEjEdPNcGuv9zCRq%DFu@QO*9imx*c)O;kg+UpP_iYQlWTDQsJ55!=Vr%<%c`dS8sK=#|6=|Y$Z31>-q-1FxMad-hb)n6F*6oriM7o=bA3jjv-DZ|Y1Sq*VR&rhc$;IpShXA-(nm7I z$`a6|=p0RiU)Cjbptso=^>YuQ4E1E;9?MAMNH$ zeVd7=je2w^4l~)~vsbL$G3FE${hKhH(jKR8#M%PDEl&%mWQLwVXSf9s0EZoSfdQc~ z3-%OTSNM+EOsI47JzY{gm=0n&%3xqw4}u4PuB%P2Jp@@PQ{^g-91 zwT+xW1RmK3==vxS*aC!bw1}(l6bBfDE+lXuO5k%iWvLH7%(rF&dx)z(Lt4CuvJ8NN zz8nlKv7I?Ue^DBR*QfRPL1+bv6W_0}A`NK4H@vFDn{eN-#aD;C>kA;`OoZt%F&(Wj zJ#aA5fRTeTiX5cGlCI1A2ic57(I*R(PM{Mf=@kxT+K-MyV%57w z%JI*L#%C_{hjFkRT@?xJT<9UxuVYR*8pWy~e$uIL{As7Y@uyw-#`51^%$Wxuj-8L& zAJ4_0@e`UC^M6_dLVeF`eqa2c9s4A1(EN&Cq;2FRTexox{hB7FVn}vHn!ExXicD~2 zf#pQs>p(nv9a{j!x9Ri)mX*hv0{{{IrqzHdB6TPJT*UJWq=sWyzy5ci&j{ z4+48_SH@tB1A1Lt$XYSV0i9&9oj{Orpbrb=OXUe>@YJP-L{`|s#{D1{waOFDv%*$3 z?z|%iUOg7VYEVHLbF!Of-z8T5fhJ#zW4~A_19fZS9P}>k(4Py1+GF|(>)aC;U+hud zb27BKo#!MyVx-Z@Qmnt0r)M}0ppPL|;qEEco*s<~H7f~89pRv(cK>Lp|*;C z?32*e4$7AS%43)-AXZ(Y7sp_5;Qufb9Qf%#aG+edSO^$EaR4YF1$7_t$zWV3&!H_b z$4{y#0I#<~!Pd}ooiTe8v;iNdTq-8t07wy-c$yu~B+MsFnwx#)a3DZIvhK{L?^Dp-gQ*c8|zVy`v3yL0bSoIpndSd*eb}ZF)>71E^+d$IL^qGL!EQ z%i#7{_re}39BOWh#e1}15AaNyQ_SE4c~{-=z160DU0Zd z;;*3NIy-VE5m;47Y206umApkS`;7_4wLu@?3EuVPJZAL-hPX-7lJH0DW)DYVVy z4m`Uf^hg)q{XhvYT5b)&51@#WD!7f}0A=D<_5K~gPmER}Pwzobhn|wN)4Vku!d*~JGyBRx=n1cML2KPNj(lsIe`m7}Q|YTZR>U2h_^jzmcG z{f^9NE=IF{T8!v5<=m4wpk(`9AzqJTHs2x3b)r> zbj)Pe@sTbS05IVOupSJU;m{b6-(Cf`e1Pz7R$Vlwo=antfp~9PYrRSJL{vEHu%KY* zjbmP_H)scd*z3BVf7SE8NIITOuFZNpHKQSVdXrJm1s0c%vY6I9fcrB!JUGdt#w! z(*iK%PdoNk{GD}4-?lo=l^3vWIE#quzc&FS@IDP3Md&IP@AcOyDQL_dbN>=-&~kK^ zp`&U+XmjlGoMtNY* zB#5|0f0-=_>J{R#3nXmC+s(3hI}GeT@wKLez_A2-v;8y+t~~mx;Z?)R@9=+COh>Dv z;F%Q|bFg=?bN2n>y848`;RJgFYXUuIZn^N(O6$1}rPTZGk_)HH`(4vi5V(P)gu%3N~bK#y$9qpJ7zI5yL@v zssXf^Bz!>no}H<_LO6zd)dMFjpq4$~gT<>;&he4xf1evbSvb^u<8a(CAFug87+?EO zkMC4~Y&Mt-k3jiijPq#i;qgOd;`&A{Z=(=?ZJ4*kA7Srh_Jg?L9%L{L^vZBL6Dh+c zH6R|~_p68R5)8oWDd6*#d5%aJniAanfGwn>0OWT-gPu33t=-TtO8?Xz8>RL0Rx-$w zsSg}8y^`QTfyeZQMD)fiF#=?1h-V_=$*7OFX3#QGJn>@Zr8t2(rULxMK!dWg4ZzJ? zv8`sr5!br_0e>9}ioW*@6l*Gs(wiSm#1G(rk`Hv?GWwGHE_lyrqW=9ny}vCG#$A-w zDAagpzyivOQt|8sbkr~=RBTIAkIoh_UX@0xqdG~V`hw?Cq1%|IZk$cgk2EA|FU(R; z_(!7mZ*<4MP;paGjt&th=|@4bViv?FT#JUTOC0V>KmTs&F74ZwG5 zFlQ>}6Ld+AIA{UN?IJU`KE2(Kn=kUf;e`h^`^b6OxP@)M_}adNz{v!AqkaF%Z%Of@!s}wOJDkO6HnWqe ziz(qoP;ISfGj&tK?Wll3`Q8W`7ixeC{+5(2YCQP2@+jRElQJ|@lZoscLj|2=-xsHT z?Jan!3!dXax&~AWSG}OyTdpB(3$p@i!E;flm1M1zlsL`13B?K;YGbJ8vw=Ek@NZ5{ zwM9_H*A7?$VT*K3@U&pGLjbbrq!X(?LdJx#!7+E{peeGdN^?R{2NzsyxZ}?A#JL6o zi%w7_p5;+B(o)9Ni2ISKcGA@Yyfsn=&XVg%d+E=eJZrGFlk0>=wnyC!tpKq<(=sBt z0!X1K{o7@v0FsdwdctH3(2sk_|NB2B|9$?c{P&5I|2`Ly|2`L&|2@6S|HdD6`1tv2 z|Bv7Q@V|Q>lH2&gp?+T6&dzT4I36pHI|W+hnJRGY2A9SB60@ht2=B=5ue_U=A=`)A}1I&EMYQMXKU|VlIE8y*SH%Kp{QPdjsY%*mpw{yiuIoMc*QP z7_pzQ@4%Cq=GH(t?12@4)N#n>bcZam+Eyq~94Z-{r*X~VxYI&#@TXwa)FH($QAYk48Fc>9<|kQ9Tu*~LOhMSTj6#iF)tpmltMC>WTUl&U)(7e^fJFP@`K=n*1^YCZpG2j zr(u4_PP6UwgvbQsishrl(W{uJuk=o+)8e@8NT|?R6pW*-o;R_b&}q2axL)U>&|{Gv z=a&}Y;h4~dl@8|`lK@Js8tq6;$2pojEz`Ttul7i35uNBD9kunuv3^SN(@&jhn=FyJ7C1aaLtOW<3JBjh;*Y97_OwAIQ}6AI|OAPXHARh=XN zD1l=ZsWsv`eFo`OT4b*S&1j`_csH4-2kTIPT3o*~@Rdc_F11HI$MG;m?!V}a4Fk6c znV49ccv>7&-!Qj^+k>M3iM6vg%qL45Ey6rHizqwJ8l+TuQl`(I=jNccUK_1H=U=RU zr(Rz>Z+03KNE-5;3{!LZ|8p&p)n$3vx8ZpBnX?1NaC$>GC#`Dghz+<5$e^-sNTR6g+;&qh1XAPTxhYNpZC~dS0bozSqLOY630BpZ{9>t9dnwZ(@WZ zG3c_^o!&HGUiCbP#*WD0n7^5!ow|vH8>bO&ls4gIqcAP~kY>{qoJ}+8Qw_cNBe*0u z4%nm++X5z?N+wU-NuJmIUCZg!?)!X33r2%w+A5G?-;K-&ZP&;Nl`*>e&v2 z?GjAb4$3A_G12F4jS@=;V=Gv-+uRmB9tO_<^GDo2lLsKj=*w%A0>I&kJh{xoVLss= z#xbK3vGI@mPAdWAaC7Rq|HtH@;Wo#SW67J^aMNI?;8vv+RzRn!P89;IfD~{c?dB}7 z6$ov(LwfZN7$`zWLnI1y6e0Oi=r;}ty+jNd&dhqRwekKs*lXmoFSE_L82uZ&(|=hH z`k(Da|Fb}U_R*bQ7j*XNztq`!eSE@C#(l3K#(&Fz|4bLvCqNpEc(6wO)NL(Ti1U7d(1H|y z=r1s9Z;R6)?jC~0LI8@$-e~*Guru(n|j@Rl*nttuQtNs5{SFh^| zEd2W@{g9u?h~XK~7Z^ij>&S4ia$TP`{n`5De~)3}=X7J-B=!&bDnT0AEYOE;uhDu- z83kg~dgFKZFcWIqVhSpeGc|rcicK5U(Zc#GoN*XR=wG2V;D zb9wX=2cwLiosD@BY~KL4EyF!jXwnk1)oq{RAmDl6ssDRJ5D%g6ZwO%$nSiMm*^f{_ zL9RTYWx>B=|NTw3{}7Mtp7vkCPum~v3+#_#K3e|+O>wc&TJkE5mNpHdO{XQSj1tn`P0P)u*En>xuG7;_STwviIg)jNbnPd#~U^d+(pn`vQ9p z;|9%0P|STy?ndu(8okf|G`)*^(%bS^q_=kJE;2YjZz6tyYtFOhmXSq=4J;5;O~%W( zjDL3$jV^7$YO01=Hv{~4-3{<%7d623g%tE9(M*WOce#ZCZs|qMv2neaW23+v3%GB_ zc?jJ+6YdCHM(aR?-LvN+Xo(eYBTXHC5~UpDxKTIxe}mu`_A3PdGf7$Y9!@I*Ww6churA!q4)eO1r%UMe8PrdJ z68<{RJMb>C4a3{Z(*(`3chP zUD7w5Y`?T^SU4v(e>zLucIO1oR4LagNV%DP*)jVLEdtA$)j^b>#rnEODhthWt`%B# zF7oWe!tiT>3jJ7n_#5K#naNAUO~e!G;p`;?ICR# z9aOv+pdI9GyTfhuw%zVdAWApX;DeC>t7%gzw%aJ^$OhPAD`1>L%RpFE+nYM0?Pq&13OMUTK_}G~St$pt3>ibv}XMc2ep22Udgon+oVF!Sl0Bp7f zpHvqQG&s7dpTe&nxbyk9X~f#0o&&NU(-a&1lnzC)?doFNa1<4M!VmwjM4qzXa)%#x z<_Pv3xSe8n_|KY~qrn60E?dO+2YcHebmuD5n!FwTDyG=aDoX|XL1IhmA6d2(6qK^@ zP2&4gBFgwCZ(F}|l{KGh_Ma79&8&HP{P&QQhoK_N6yKjL@S+u8vQrfP5C6@6FuY4H zOv))tUjEA>d0e8Ba)(qeu)-uIB;%$p zvDWCEgP@>pv zp(gRX94K1Euub(v5{4zelycKx$dYmehBn`<#E=3ld1tGkak+vZ*> zb@f|;YKpQma2V4Jo9AP8M#^t+4cC(_){eC}uM<}XoU_E$^_E?pQm4&*2k>K2Qch9w zGON9gGD}8K;Hn!inl_TOX+>A z-z3kga&9IxEY%H7Z-LfXZszhAE^PF1-e7Q)*$%)4M_Goz9i`^l>nOF5pGSnbSLkDm zvU;<}c+xPhI~OH!cb9g0_ofM48Q~#~K&D(Q=WYgP0Chn_k9=nqpoWUveKC`-oa_Z< zs(@Xjusf~ZC4xcp{Q()V(8wlR#rF#ZWlWQ^UwJ=o`z+DFAD05_@X~i03vq_OC8jTx zlscvCxh6+*g-ad{9YJf)Q)>dXmPl3qKmhZ~Dv4%j?D+>h56 zYm>A0xNni_Qf`@J-8|oOGQ7sVn>B|X(&!D^Bj?W4#ntlY6lpZ@vH6)E{T~b;k{2d{ z==wI}^g207zAss~p&ZASUneg~mhZ%DFstIE;hvnNI5z|TB;kGp%ppohHfZir1*(1v zp6m#SfCRhcsaAPmqVRC0y$;&CT3(u{WJDWT4~-1cYR@vWR;)f5q;ZVsZ$@6IXWQ9M z71yURw$p$)5JjmuMK)1+2d^ijF!Phdf2pBY@WFk_0Dahp-wy?b{w)jxjBLl{V&%2C z5$h?w-^;%nInXndxW?e=!{xOQ)dP&C)IJYr*@tnoY6kIs=v6{v$BRGFu8*QVF8(Nz$qov9`=M0&^N3Sk3#>Cp(>6%=57RbmrIgzN|KjvmM6kYNU~g#q*z}E4u2&m&An?q{!dv4iMl)n)uCsbAOyp7NUNMkO!s=AJhv(P}&P6lP%8gH9WK0s0z zIR&w59koNWwGNEYHuM5-{}nt3zAX;FKeW(>jnKYM0?WRGYf_h0M^IJWP$V?2LkAmp z^~>`lG9Ww|^w=1uRQlpJ!}oBTp||}Z&k!gEvie~=6+@&)!X?O^8;n4==>JE%E_{E5 zE6`N!Zuc*`H~3bYE`6CCp07_5rDt>yM%P;PAtZYfkM#||-);SLAqf9aQt{6jH5LCN zT`UIg#aGE^9=DxrQ?bh2hb-VjLs7lEr-K{A8fn5=ZscpCExNz$T_J$@;3s*Y{BM$I zI@sn;r^&#*h$e#1Fw4uuCxOE>3E+no_57x@am`Uaaz42FqAv@II2U?el^Tt#8C+%c z#t7|wi|4my^~>*x3-Ht4`u7bEJ!#)n)xjJLN`o@lCn_T0o`0E}p9E;!so< zA3}a@RN>S^Xog{BynkMiaQMi>;wEn!OIQ5$=c8Sue!r zqGt6TUhgDrXmAgpdBi=~`G9+%{cNZ!YJY(K^L!7T$8_IOuKQq?$+d<))h78L>AMNh z$${^_z+7WB2j6H3&fO;m_u?KCLsIvNLG7N8&~;v*bN{McwWwg?=fvWXF0 zPuIljY4Z7J{(whhoTtX(9^?1jLZzLkqfvXWK<#}MRtDw*);QWtdz;|}6ajH-@${1(C#>U93;&x`VJTtp2SfxI|s1>Pvy3JBjf*fQ{rI}OGfg>*8O zJ092U;U3M(Nck&56FPPMg9eRs_>i-hwRo;kaTfDOJkKKQ1ffCC`pu~2LTSWuJMM4)viVa=dOs65f zip%#lvAVf~`hL7aXTSAGI?jIU$PO9{hBqFuOMZ7W-ww%YRr0Os&%PreV-Lb>`@zs} zJGkG=U-r>n;+MeStA#c8sR zQ1*r2uiy&;pfBfH#rItXu(ekQoTXqBuMV)&mJd7+Iw!d2E908HZR0EM5NmftY{~|- zrx$0jW=;L8FQ19G#mC?ezE*GlO4EiJ?#pQD!{8Q`@d7Au;1$t_haE)oSoLkKpik{P zpziN^-A4BpWT@n`W_PZN_BQJaBeq@6R;C=0+J*94`FDxkwQ_E1POfeFe`6pvX(d?$ zsdD@tQEFcegLJUI;mxu0VKU@GGaHAYJ*4H(@P8{M0?af;R`ru_6N{2gKj$1Rr)cel&iLBb^4c@? z+TZB;x_F8|jNfu}LlaRbT}HA{T!2l!GgGYUAhWP8V)K7)#2B&O{ym+1{CUbSw0(yb zc*if$p+-BkX(aD7bXeaOM8%VZZp_uZ@Vz<=q)cgXPVsrKM1-^a zsh4h^FDgbnOFuVJaq7!;=8cF>*hE7TG@v-Lg=Tq@8N5^IG4vJ23lKk$1T+T`k&&N3M)${R-5deFt8U*7!bQRfGQG872PzGwMAcPl@Fm%mjnzYT*W%TY6*G|?L$N>wAelqG~781l%t{t>8s z>$Ns-@6i3+U-I_8{}R737w4v~F>)ezTL~0>m3XWxQ5bamk|CStOSzer(5j9&|F-vv z6XPq+;T6rH+u|yY?7d=Ae8n_gv0o@LuHtE-*NO*)xQd0mV*k+o_E^Ptdaw9j@fDqV zkAI4*SVId%7gSsdkE0Xd3vmMR2nsa^@VEt4#m6y z*&t}ZLoh(bYfFsMu}lzJFm~s%aTc-iPdqX)19fFS9d#*>!jC8WcH(}~T&w!kAs%Ab z?aem02k{j%yjd)+#*JDTb6H{k(Au^b2DJWg!6NZPQIf6YBpV#MKU!(|-Y=?Kx#CD25$k3str2jC#g{E|-o%Amj! z>QA(B(_3T8=qiFPg;}50R!0AT06m(el$dniktF+G3@|*J1wL>aBD{|#5FW2&LGJO= z0;&5k9O)@Mu34KY`tY%&eok!?L04N+F(Ds`4;Zc zl<^~3*qQVu76^of3)^?K3V3_;PIpDe1+kTyUHf!J^2o~tJJlU+KAJD=L zx5)Qfm4z0)fjVda3~Ly!HcPXZ~GnYKHm1*J$=EXaJh#-^_zdBwd7Y~G)1lj zvVAWXTKu~`Au#Wxn}6;(BHv+_9!c!yX@-mRqD+urgd)7-g8h7G52sLsMKdMD%56mI z7rgD4iK4$`g@Ev_?$sqO=M4hE0Uoaa7{`zG4f&Mqhz?#r3S%v_czdC`*qJJy}{YR6n-bbv;j_B6yIv^pg$K_ju+)S}{u(v(e?e@0kxp&!5ggm%Ri@^nD zG@8fU!WWfKkm6+J6B+>LdgKE8=*r(fz>+``6Ly^jcYx^1k1z*gz=p7qd9&OVwkF*e16-n&JAnMY=7|3`ku|T z2=4o|bXL%j^}agLa+Z2<-330fzoIh~WTVt-7JW}3*;eIZNJ~w@Csn^jk-x(Xr1~8F zvuL84iIb^$4{gZjy0F|V4^_r|4fV>;NbN?};&I5O7HFEy_opcbZxmgkd}UT2hm$!Ir-#jPG{`5sxKzakb-vhNP<=!%QSpwf8;HxIQ6;uBXyw6TZIF!fkjgw8qnArTA) zolurUm@3u|@`0Ii0-x;mw%I(%p-PjUFM_8x_;z5I%t?oVN&+FP8wiQK)PG{N1P;QVzl$%B#0xx#1-|9$O>Z2JFEEG~n1}_? z+1)gcKd@>YuRpJKyt$j7Eb>xAvDy=Qk>>rp&ZGK+p!Q(C{-C^DBZGM(yFP(NZsWjx z(=C!UgcsO=1=4V}D|r+({S{X5)ufYgD&Nhgg#VH9c&zOYw`#M>TPtCLx5j|XZT z2Wmb7g-d|%qdgmb?tNUT3jbcpwHobpp&ikcyZHS>n1A8DwZJ_%y5Tl@EXpMOrVQGi z`4kbvu$#yRae2N^KgB-M(#aQLI(alc<=g~HWpzEwN2>#t4?HC>`%jJq79X;N zT`&yJS*+eY4O5nH1$vYAKNo25Lq`X5zp%|a9 zS02aj>VnnSy56z|`_#0(f$hEz-@|q90G5l5aC( z`YgH7-W9k)za2a$$zf+7i@rN zB~!7FLNldgUP9~j@u?~PWN-mx3A1i*pS}yvGf6gKVOCrq zlqgYGO#m^gP+5sIkSs_VpFKvZmPMJrYN+3#mqagg|8i!Zco%5k1MxL3-9kMR-7sd`GIffYI>4+-u0&CRGygd!1-_6-QTe z8_!_1p$fpWu>t<5AB1}mOe>ermWuO8^zDT`J*u;NIq z6U}qxOk=%{bU_(C*cjqQ4oU>CqWudRYhBb>&lqEk9~>U*p#N^H zRQHCa1OWD7_!G>Citl-DSpWU zu=n;ac>EH!|Jsjle_G1LZU1-Je%X(2|Ina|+kOGIfA5cPf6%~-)&6)qP0SYqosn34 zJPN3S!BA7xg}~MEaur^AGSuDO-O+SKiIbi(1`G&)uQ{LImV+1@`gmQ#{FopH-_#-n*z#L)RrUoK5^KKy4X&FWnp zwCSJA5@IUeab52$m?*ghWuKb}{rw%vUZn1h<= zHNEY^=itTjX|(pDHTp2Gx67k&wb;^Y)7Ge_AML&A^TzlW5$-+;V;L z6K+nV23LB-$CFJ$AntNpRD9{WbcVT+=-|^>&q^eoI3$Lf~=R)l}qu0}=7YnuT z;+^f{&7cK7F{B5YymWOBs$-xOqdAj#b$(`#B0sshcX}c&Hr*olt3ikryDftM-!yp^ zeZHKT=p^+msKgO?bmAc(5f6(2Da*x-Fr+*p^g!N-#L-uoM1H)OKG%_t_KE9B703gD zwQrb+*)l0nFQTo)y4T?&)iav{6SBIiX)lwtdlD}*kT5=G9cu;DJZMDlJ2Rj!s=dujJdI z3-)aJAzlJ1^N>Y)*djkM^^|j|ZQqqLLjzI(hBnt^l`AU&$#jpSNdbZ%-h*|?xp#alsV-@@! z^hfO~?9h0NIOb*{a1TBgfF?Xv2;7d(**s9$s521A87H6?n=K|j3y@|krX3dtL0R@QCI&UA|o7QR20^->Dpx+?Ne(5>}P#oaz z>Fg14@1;oqkYvR=QnU0nY66)KS5!k^&Px;^&X^y($s z#g%8ji$4c}N{$-vz>7TKtvKK>nrb06& zN^uB&9z`)?`jP!b6jc`W5Lco^AQVkNB-2Hz&yguF0xUNDxXu;8kxB#zqf`tCu}W?d^;z=Iw@2#{x0ZvP4|tzEhc*IY3OD&Azg z5w@F`4*6=Ll&Sysb*w?E5?68O>$*)t@Y}+&n*Z^i#13pE8`wyBu|@pZM8WUqudCT7 z0mciU9_@~=nN|SA^)v=!2+K^Pzy5ye8pc=a*B6VrhRrk&qRDj@{0SWKIkfkazjwW~ z^uAuszkP-FRt{9KO?B@;b4pc-0>A2 z3+2Xo9iVRg4Irc){0gs&G|2Snv>qraUDCVit^F&e+$Jce{gsk*`nus2V7clW;rh-Y z-z_ejEXSXx=Fr8<&na*iC@6~M104wf`8xHEYcNT~Mpk@b$oD(O# zw?^5^TP_?UU(sHHZJ*dNxG1Utp(3#q@I$CS4JeGzOFU#Ux#gNvHNj zC-ui9bzc<4QbRpWl}&wn_eRj(iYZsuv)pgaRc=8{7nTpfxLcS+96eC!O_86~rEa{d zV2lF)b+SI07hSyIZ^j@5Y{LcX$S01@_GXNInGg1&ke$thh1@`heGvSoKPT~gj4qxZ z`8;|Es2XUyK9BC*ap2in9VYpBVRb*{E_5%Sf2BUeDfV;NyL`N}vSiV?P@1r!GNVrL z2R{Fi+R%*8FBZQxMkTMquWC9BWGp=jferwUi}n(PKyWWc8|h|U(f018z!l82I~vD+ zIT~~q^MNLb#b}AH_XQuEW(m_j>K8;SNyUUfg~V&u{0A;x9NWX*5~^=&l>OXpi|E@{lQN zKPGQ?6b%2X{XVAlZ`S&>Li_h8eoyx-rr^szy2GU@1-{N4F}OS zbPJk+=b742{vU|)|1M*mnWXvd2qb9h(vePLNawVojIoJ={|TNf5^2r`Wtt@@luJ9s zYRlLOogg0b+V!{;zO6I_$wihYe#n~+BCsXA+k+7b0p$#csDQ41>KDko}7=Oe|LhgWMv=RmBA~( z5wLeza!F2rmgoP6Vci>ZJmJo2`_X#{61IQHoS3u=iP9bnTq_SO-EWi|)uZR8t zMDe9&a(hMnbmO2z<2X(>FK5bb3>Keu;vc>w3{K^LR6u`(F@nF+M(5j88L{5@6O<4? zyqZ9mW`w`;=OnTOijrld2HxG*!vZu+=eSyAzdB}XQN7CEgGayJ=NyX7_MKsq(2;YQ z6WgN9i64K_>l(Qb69w^g-DDQ+azRSJ&fa%@hN~gW-rLy+Z*qjShwT$z_vta_KlhMJ zvJC5lo7a6ZBmN#_X^8gs_$4%~n=T@5AAabkD&`*mps@)cnxk8G8y!Ls z{7>U_C8G&bfMnOlzHeMRykBbO)9n0c?DSZBxXc>pd!J!Gn%UE0gcpDJDrxqEc5C?? zO$=uG2K|Jq=6YW3U0R4A3j4-J!|!`qo1BJd?XFjCaKopxMt zm-tsObF6rHg{%9nz%6)SX-eMTh@U>)7y0Qlt)w#)G5~(1H5TC4u@POT4aOJ-%^#q* z{@O=T6=_`swcmO!{cbZ!V}}m_z^0nS&1Z>YTC6xWmBg__rYdo7+;9-Uyid@j*19(u z?so?-?@ixveW%M~6Lmbb-{jkM;fVSwq7;$2wNJ(qbxp=m7V{d0CSvveh&tCYkwbGI zy?{cmAHRS?CF%tf+Pd2)B%PNih4`fHX}*9KA8xyVLZ>eTAYUJiF}xLR4SSxn#ca0p z=65og*Zod@-A88=$Ue4}_*L3GPiJ(`rAD(rkuc;L_ubxMX?s_7MEF zDAabDeO~!ai|Cpt_*2l{%IOF2ej#>)+L?d>;LzVA4xOc}%p5HEkKyh~!MChmxGM6# z#fxbJ=x!|-^U{wlQB^!mgE;x-0?h^4(Ds1P1$}cKg=%9Q zrx*jkdW69GUHbW0t+eX`dXc&70t)T;`T`2gIF83D$0_q)lv=a6$NDPsm*Io3bm+%A zl7s%x(;U;^!f<5~d_G(Bu}EEj5KzvPY%+a-hm6-=#su5tFQCzuzT+(IPl|Q?xiaDV zj+sik~`zs)9ANa^pN3hh5nEKsEvBcx!#NI|Rn~h?&R@)={DobzKeJs0A`}0RS zy05)~wK)mfEX6CN=kgnu089HIL6_lQkKQd%MT-G^h4H=qSTOD&1@K4#jZq7=TmZgY z_U#1}ntJd&3PJvb?S`Wms!uO(At9(_%s3&iVoNOaUh5TQ(hdJdA1_a}X!rLhgdz36 zhrAbm8=JlG`?Cj6oZsO7(WZw5)&l1vOhC!5t>>5j(euo|I2esU69Ba0BB13FVlVj1 zb|MmO(ftE6yvY%c9C1ysq`=_p4fC^JThSbCrDq`fC` z3?S!It?)e6BHo-KxHn6iwMDJbGJiMJ#71@>TfNGk0Dd*~=h?mU#IVtw=aauln{Zy> zYSP|3ul_V?ecNIT<#RePOs=zCYuux|u?zlo&_%T7b{%CV>-*mWm_36K;e;KEN_9V` z<+C-hf1Er&2yUr8zx)r@>c}FJEh-|VHp2(kF=0uc(_w{dY3Nialy$!l=r|QkXQUk{ zkp0LeBO_#lNjfea4HKs_Yh0O3CtPw4T^P8Ew#QOHjFEdb1vC^%B(eWKFO;j)HgsHA z&%8fMnmW5&-wQ0){-aR+>~g0%F!s3+=(`#4y8q@2tK=%c+7B?g%G#eY>T%~YP+MTr zh1E8;`vQkjb7AGK?Lhx)3YL;0mypd1Z;H)zSb>yU!d9^Rs%hz1Spr_HT+{RXJd0Nf z3RIlfIc)yukRvc1INfo}AmrHXnm!stO( z^m%pNaCtj4DD9L!4m!wS!K@Xapq1JCd{CHV*wwC{&af#mt*_a{!sgGb^l+rpN{R1{K4`6AG9B1%)Eo| z-I%H4V@X^r#k_`nz9x)gkM*eU#&guS;d&ge^M}TpedeN%S3JNA0rhl`-GRy;0~^Nr zIZWFS&Z%{FN6uepV?%oUCw=~I!13JtL*toq`u_@l#$x;KA8Nn#)J1Qf8T`||SH~*U z+&KuBv4gQ;B6j$;Bsw9?$X9+82^+XRnuL9?e^_L6{V&$&^j=QJn?`%<-GUF#?wvmH zX45&8eP5ViV+aX$X6wiG%~@%P^4c3eiskiCR_{1{5n6uyd<0IT<@WRGu3_LPIduVr zUO1mZM)&$*%wHDICZ9s7*yY)d2fU9+|B=g3;FW3v4PI;T7xJGdv`Uk&P|mRgDt))g zllZ_9ne$ncg0Ij>`BQm{RqV{D%V7uQHjrKLPx#lH0UX}z7CX(}UjiKMQmcxRltfwN zA%We#zZ=(T(G|~jvC4vb6Rqldc*z81>zRRP8Mc|v%J8Oseh!+cTN3v8y^U9I?I2%S zJ1?;;OAtG~GjyEAdj}9_|HN=MVPx$R=6jpN%hN3~2q_bNeKoqJ^D(@S7gF?aYt&W? zbmr@JV^BtC*5f`Nh8GQ{(ak&(wJC1q%2Efer5(JNNWwVey+vQMGx3Q25}Ly$v2!?z z&EcPD4wpnveDHM{n$Ye>e}8IV{iEO0Y|+JS7O>&$t)*-6D#bt7)4>UP{&hV%Zpq6C zD_BYkkczUBv5VzOS2+U69n^ zE7;ZbPa0qudRBv_X98ikc*hxyo)=j3_Vn3k!O&(uwy3cfi_V1O z@mt5YuE_1=rc*sOvjeR^ielrj+uCrvrWh5T2%rUR(|Eru^+4Me9j_4PNsIKLsH^98 zI>wcao{caA9d;qSFYZDLU2`F9Yf>nTzaIns?qoWi*HM5Q|1v^lB1SU^lwdur>{gH& zusjEr9PB3qFkU92v-bfx56?IK9Cx6SL~XEmvj6Qy1ld-t63Qs3x>L;)l+q%M8RrDo_9c2J$x8PX4q(LSQCZ7}&e0u3Pe2hNmqr3-F7~axv4jjVxXxI*m)t?^IAB*<#}Uk)rFw=xX=X@ z+HfHwd+bbX{6O9Oktw>I-W$Val(TWh{&uVpBh$FwcswsJu*h@p)R7i;G zsz&J%Z*2n^dxHo6);ZVEUrgr+exa|E7Jbk=;&Ap%(sKpKPn7&_v^tjs3NZ$>e+Ve>A5b9a&o`!TNl79 zStuN-G8>nuH9$D_q8GEQFQF`p;4k4f@2U%w=`VGG^6=A&@YD0*tbzWNurmDVW&Np2 z<*WAd>OuIPu?gl$s8Y>RAP*b2Q{&3`{(7D&$|H7j(sK*C$>ZEA1^fh#G`#ooNsQM^ zp+9cL>(mzZxnG&oM^e0$1Fy@Lp3B8?SRImrP*f|{<7r!&US#@K)IU(kM#zzTFcIw} z>k%~024|DlZPtmU@LaXjDOTsGmpuVR-zV_U%z((J{t~L?TBQIryxQakE+`>FzK9tD zy9NJ3d|O{Yx9jXzrf!#7>fEnlwYBcoO?B?~2tw`(8vXlp7w+OW`aTELb zkp0xtEG>Sk&ixTReN*RdWM8(kpJw*6hyCowAN5xYaTjd6Jb8be`zspMzv~r#bN}$9 zNR#)glP{rp;XlS?rO;v3=VCOaOH)6RT5uj%2-_DQz`nYhWp}+4zzax~086O{mFdPe zpgBr~ciH`_bXuPJR;@oC$A`=ZgC1G{e4(jt$WuRbR?@`}%5T2aZ(Ybq%F6X7JKM8v z69Qw;&@HaheNt8?BD?kY_u}g+(aI%TTO9i|% z9Tjbc>ud9=ICfi|F&}Y1g1~HG{_B7$X%mo_1rRuD;8`PsY~VHBKwYxXdan?81)Vo_ zDE4(Wg+aLd?{vv=HL58DCCR#;Cy`^lN&hEpmH72Y$XI#pPp6}ss60(qx=mm=^O}`= z&B~m=Nykf04xVq<QoXQN3Cl)F13y9{o=|j5mFv>zW_tiLe2hCEAlEcZsJ|I`13C7+K z(N9;Um#>2syoo2+{MN-|0!~wK1@=$JmsQzctUYVWZ@J^^>~&tDqw$qo_!@>fgJ5Vt z<~!?ViHCVWG24wZ9QM!vDt-eKrb^k(D^vNpc*nDB zREBgvfPZ@3tXDc=tgnoKPqN$c%3*k+aZ2viRk`&0ZD@d>^$N*DDJb9b7(mjKRr$HL50`TL;sx)GJ@W|f}8zus>=<#HVK z!W?Q8Yj~FEI})9{94bx6Q4#5f^+)}JKA}A__&=UQ^8QsCDm$?^`GI z%#=qz50eP0_OgB0hg(*{n{&4^%~~!eyQ=2*lb_(@?zFh-g(oW*jTEcxt`oikSZj^i zoIuyS*9rd5v74!@<C9c$TeyeV3Za+o0dn#jntpj5-Flq4^S!S}%`Cs5!u->Zo5>jAYfJ;{MiGu>Fds zq;<2d!#{Yh#rftWZR}Q%yLpMlRr zf1q<#Mq>z{OWvmSUgMpB)J?BUiX*?k9G>-YmEJ{(`fB9Kv9LBl#=usAzgFN%41ODy zAFw^@1F*d`=!XEg@D3h>|HlGifZhrq!ywu0s_`WU$H^8~i#J`WmM7q5)A62TMe!yj zQXhIA-%ecPk8c5m-U_8&!AhmZ;GwX*Kn#cz{L7)h-0P4}qyR(mrRc!&3hGppY%Bmj z^*)}wRv1U9Dc7?I0aQNe1#0qrPT+x(m&hbXt9{=>aY<_S9jl9fS*Hng@vj{E`>ZEMn9N4?h| zgCGmXB08$2n%_h$_I-|(@6xOHl;fpiP4`KShWzVni1Z^)s;{|c3hTk9ZtB79)B_m4 zRViofmtbE?gY0E)0s;b7;FV7OnmL5Wwz)by`bWW|L8=FcluK3g8=hZhWmNko!sBPH zAJfNQk^nzU{=CQ89xgBiBx$R+FW!d~k)Nr20xN%z%E$CvSaUDy^KNgQv&mE5o_%ea zH!;xQ9VlwR^{KnNe44YJYW0*$we%3_Z&Nh98f#d4f1tJ~lwpu1+lU^4+jM#0(}6KE$Paf{UHyT$dXuoU&zKu9{{>!TZ@ zJ36GzQa${Bhry7fPvN%)S5C9k6=UyoeKP+MVSTsQF_fA5*QMc-J1K3>IJNC-sb$*{ z>EyQkNk^p?6keszfV@~J?ErjJld7dg=}36C2$RF&3Dl;&4&FD=)$v%4R4=swY#JHez_wg%QseyFh4qKT?}qvc#)4cT zJh=l~wmO6*A2Sgjed@zp_iQ+~5}fPde`D|;IG#2n3PhjeQI3rSQZ3`yw*3Iuwrz(b z4FK0H*&Xn50FqD?0;0T4l{Be#+n12ih|fvQ(l+SqD2KFT+m`@d-nD}!eXCS6*W$ax z1>Kt0XE@ONAy5+}LLC-pJY(13PoRocXidYmwjE7syiaP=!J2V$@D4is3ZT)h3`I#U zVf_uo2c3)611nMoe@6BsVll7S8&Mfe4daiVzje^tC^T%s{4LvvP!CvTCuM$tH9CJ? zJf<>(MrsY>cXHU}q^1Lbn9M{UU2F2~7Jc%c4v7`08BO#+vprUA^Xp{*cod&dFu z@nrx3Li2y$0p~c_}+!eMyy9|W&>Sr_$JDyn?_V%^#+>Zd!q5K{^Iqp zq7|{nv+mjCOk+S}VRQrKOQq2tp?o_b4L2`mrO6LiLSG9+>5>Z3Y_P5dOP?j9ZUT`6wLs)#pcpd7M{Q2*zQ4kJM65y54cBRpsL z5}q&*>Dw$T$)5{yp~@kv5N6V4^f!*g$B6u8Opdr6`V_}rXRtx+->y3_tJfGE2)@y7Ikn5nuKCCe+98;xYRB7P9`k&KA)pcYK$)&|_k>RP_QbYCyGLI$5+37W8 ze~7V%(03qhtc;WoWzPOiUKo{}E)QCm5jb44RsTxzN3ZqUuoT`nG=Z<_F@B@|RJ~Zw z^5^@`>=|qZ7df)=s=)V69 zyihI2N+)b`Y*4+*n(|&DZc4u|(!s4;frf2S|A;;$RAcZx1&{Rq{8W@Z7s2U>X)w=d zFjJmn#VeiJPQTO!5{#fO>SAqK)nB~=*!g>?D|iePUH+7@!lC79*m9L>i?saz41A{X zp0Sr z<4HACeo~+ev~7d;Q7C;uZwhtOX#uwI=pg0;k|=g1%)d6|c}Vucb7f?zAu23p7~VlwSjlr4w(ayY4%SgS#U6W53~j!A6}ZiYiZ| z$2+!Jb--TwMJRMEl(Yp&c<|4Lz8=Y)g+0>nQrOr^TZ=VMSP+RCe`aL-S-p;bV0irT z^M4ED{|Lsv7RFU9ZAB26N?x}J?ycCJ7H9}Z3i4Q?V@z;gl)oDEOL_WFdQYnk48l32W;Hp@8DT_=ZP;a)_74qiOTUnvwIuG=9r25p~Y2S1t?jdk& z$X5NAC+(K(yf(;k9o@w;pn&xL6k!dN23{AdJ(QOtI*$TG&IL&~A9t?Cax5YO8W4Ym z&k4+aiO zab&_Ig5nMk6pb20xZ@}uR1skur88~3-@O3VOd)g!!Q_$5_>l{L%myV?vZ0}86eN`8 zI|t<+&q-=OaKLtt5;53>+BD8FX=^J~z3|>S(A#s#BM|9PUY8pnYvK z(g+l6QyoHXo4)Ok3%tfkcIy<}NM+m!Yo9dLBrK5`kVlZDM|+fZl-=~v%qF$4GozXIF7GEJK=HbD;Z%c8o(NPPSobgd@5Mm1k8qMrzXce>deD z7qYHq{10uFxI*&S0(^HRvUQdJTX+U?1H0EY;tY5lb|H6{4*qQ1ltA#~1R{BP25-uN@EZu0#TNCe7toUt{dBS%W$tqIL3mfDo5jjB-HBr6tE#0n6w25nb)$>4 zxW83$uL$-D>rb_u)SA&LxnCAmC$R0ARWFeKbWnD`3X1?mK)Sza*-1RUzIcT)k&E-a z>ff#0$(0TD4Gs>`$6v__s|!MOO>Eg+AusQ$^#x`3idqgkm35uq{|PSSnJb*_S;IY& zZ<#WM6WrURsjte5Uqvb##{?(Sa6(C5{WWWSp>ls5evW6K`Qc2aRdaEC(|}MY?sq-_ zLTRdVQ$On5Yw-u*>1?WVZ@_1dG_~3zO@2>uKQF9tFY`$5cVst#Sav^;5Y8NJG7X=( zB5vl((#(~zd!?~0A(?^ohCAcz!m_OSk2L!w;e!S7r<-kko`s$%RPSmin7T+Glw+ZTSR!Z+LLXx=V5~-F-GzodNT+{1V zU<(wu1PfF`fxYsJm{ImUkB)GlA*&OwM^`++6mo5-%VGA091HugGPq8$k)eWjz}z&c zmqL-G#bu(qgcIGba`=s>!qhr;;A~QtXC`Ulsg59=(h)W6`hW z#bwU+@5e4*HHH~&=Lr#(twXd2lzZ>&)pWoKDtHMlc6Uj59L^?b=kUdTsAAb-fVD?l zyc#ccqg)$g-#dU3^5oTs1#Z9M-XyupWw&2)H^Ssjt_RG3X0}5ezD>?bm~z68ADnH% zjqv^6KLR`4XdQz-e~ktPG8 z!}vA`eyov!z@LH$$y&^~5zQP0!m^V6u-5UQHR*GLaP|phQ{<9nsx9awFjp&}6@}QeN!W zKVdD|QMH6iA5$pszh?{ zu3xo@em`PJ8605X6W1;Vt)<;)DlZ-!=|yS;Bs-n{DS&MkECJSma_m5720(2+ zHjbOZ&GJmY*U8mD@04|BU?nVP3BmU|B*uR20C~E4b@Hr@gBi$R1wud5C1+OP%rI8q zZFE@MFo_duI1Q}>Ksh#Gdmst`1u<(|PKD=iZKghlPoKFkcxK$d;2D4g?)N1+E43TR z-L9jVb`XjeNp%2S2JH}$ffDUm$kDN@v}^fcavwZJkXWXpI&$n@ksbMWPefmcSGG+q z!y_-3;=!kxuWDmDBj?+(W!{lCoVj2~wa~b_Ae}mlfCmYZ07-LI3G*(j8M`{PAdKUiZmEXShl2=ydDlxmGD|_iTq<+~kNB z=}@dLbWBIxGSK89^H8eimXK-wBOojnlySOWQoa#S0F_awJ}bJ(Xq`^)0vdK^poO1_ z%LUQOOK3m^=^<&Lhv3FS77&dW)l*N$XdBcd?RSy=Vg}pVfGUQ7g<%W#|VvA=LL^>`Y}G!Eij+F--mD8B)?mL`~>f%DTP~Qz2hQL}?$!l=jGkUV^$3 zNU2G}hFk|8Nzgqez6x_8Vj$wR*i88-8dxXAR0AF*KQ{ekS=(KgJkM9d{ zlb!9o8~l{tn>zwc&2~a#wjOdFqi9VOI>w+u1Ipi|Ob_Y%JT~3zP9p%-Shd_?GP!Dm zJDY3y%S~)OM9z~$m(l5uURG_KY%=v&KFq#mL*u(V&!*(q73*8UeqtqGmwg(`xT+qz z39vUmvSHd2nQF85tKTWxwCvXAGWt(x>PkbGp23G0+> zv?yGILtlbP%&(>cNaoryh~y^lzZqRRQEf&N_R ztPC6x{8f;@J;!eLO~Lr6h0J?_e~Nr?HVc0A%qMMEUlPL>Fa;Zt4&6<)Vd$|HIp0%t zGG5M??ZPWn^WO248}+>hdbzYYx}F2`+0l+!-4r&wMm#W72z-u`UXD#zpDWtL)}gLy z!GF6MO#;3I`FD2lAQ$$1gpx1MkMtzXM7kwHKtuac_&yK4{ZX<$p1@zZ@OYd@s3+6s zM|@_<@O~%nsw$o--)V7GEnbY25!6*Q2G*HgLA)|4QEt^F_|)atjKaZuge=1K3XXiK z0}rE^b|l;YR$laqv;`~7sCMmG{3y1d*AS@|8LU)KArBLYA|s+RM@zLsqPAwh8nP#4 zR_O3R+O3{mOrPxG!$tWt%?;kq#bPVxYu1LKPkga05b~8NPlTYKE2;vaB8wmRi%C`M@cIc{H*{;JC==o0`W1R_v>JZ^TT>mGM<0A+R z!9SMC1tc$MBjKe2XDXvns@Ck#lX8#-#`o~=4r55Aj{$_R?AP6NUPFK|OgmZ=iXnL zQOJb6t+c)+zoQbTc{P`Hov`$2I`!2Uay<72PGP zUYo3^tfUlj@k8(b+X1S>;5m~#u2GirJLmu^jPw++b(!@MU#$!26&owvgv0FNk0Cxq z-z>p5*!&oMQSRcT75YHNb7*zOLmOGxA~M@C#Jl`kv2!01kc18O%3Y1Ha>TAAK*B}B z(q=owxy?3q2b@QoyJ3~)i*;P^#;|-@_%A40smv~Dls;tbZ4iK0N?l4Zr##vy)r;Mr zkK-Pqc*;`LD4r6Ecfh(%$3phiN-mUx`h(SmKLYfhTuR2W^LvOoPeo10l0P6$Z^_CG z13h{`f$Q1H6fSGJ;7{mJ=AWzug8vj=62{J3Y}LU+hM@@n5$|DV6T-)h73Z_cs0V0w zDo4|?G}}=iY)Eib3H}3kY;7Mvq8+m3Q-$^7{(WMnTL=uq8SG3_`#=SP|0*+0TqVPc zR-Jt7_`njFEn~RgPrMXu7}p8@my!trg#_90jbbN&ZW#1kJelcB)oY7XBW$qXVbhbD z-lNK0pE@hizj*00tfxQm~NoLhTAxR*9@3wnC1E7P|}9EegI~5hFEQ;WyP21 znenCyPRSkLC~UYr1TzWq_}CW!ju}v52H?d5PnKV7L_U zpcS;{pi^Uzx!rV{Vka)bj?e5ziyG^b=h|SxzsMB#cLGQMj~S%%J8J?B5^K#nK&;Q! zpVhSigL~>#YhU7a>&e>$f4}}=x0bW%iJn`ZW9>~Sl+g-s&(rhhTk847u(MG%A0zIM zld3X~i=Aee@7dlI4uDsK!iN$pI7MwG-!>`qrJ^A?U|#6<+q}g77~Qz<2Vw{@`2oV zpjlyAzJ>50U+f$xEMJCqY}f-O*FhV8stu>r(jP59Cxj2{D@H?7Mm@0Q{Jrcu2g_o# z@KWU->&Mxd>t-ozV%YFdRJKCi*(ie=>N^46YWt0DhnK zh5U`;e!)9H2gx4mW(0*kVDUh!5b(ysT(Gas_F&T9mSFte7Mv!(1COBWB@x65Zy&N5 zwWt$7vWk0;-T_t>Y%OF;IxA|E*eB_ejH7|}qN{aNuzGrSxRmq;m6Eh@W`)0GIC8mK zsHH4wrG^)xt5#SZZ;krEyK3RnLxM6A)||8>qgL#O5o_@go~XB52vR!t9&3<&fhDpC zH`D^{z%V`}_V!_4Dp$s+CeZKYbMQ*crzpjs^Qf%RE*H888M~8gdmHa*Q14w#0GcCK zT7e+s!{Y*C-Ca;+2kusRiM-v`DBM;D3=&GyCK=4IxF4tVDO|3~=qfCXH{3ro?Iue*w43wBRj;*_~pjP;P##9pTO*rH| zeOrMN!qWpSmCaXw1HOO601gM%NDEj#^ipa7SIB zvM3>=HlsQNZD@GD_-1`!rAsLBpnv3C6JD-BvCMF%el*S(EtW#{FMnWaB1uP^Gd@QW zv^*EjAo&a7Z^!4D5f>%yoSptHTcMikG|8(~UA)*O2+RHoq-SsZ15OZEwmOeQ`M3BT z7!yF$Y*OvjP-O|^YyDa2*W@9@zEvHyizfx0cq{LX=Ah>02I)JUycd56JobQ~S0q(Y zEu~*z1yom+W)C#!RVnZFm1-o4-`o3qDbTU;>kl& zz3|kI&QM4nW=Hd$QN$G$MxgX@MA?L`x-)}CYl+yik*0iMLFQ4Bq^}sAI^GS`u_b;# zEJ;|7Puk;fIpV>=T|Ct~o#ZG`m$+h-K*pd!eqAzA$XK$7q8IJ17?e@_qAOyrSNkB( z%Cp5%CnQPpY>S8VN|J_D{z&8C0BUA=?UM{h40^@VK3^+!+H{vfT=h?BR!IMTj zQJtDhWGweXMzTpnjzgNVXm*6A%$XgbDG##eIruz%Hlr^Ev!jJ`tje{(A}G&bG_z>o zH64Uk5L^ZS5esg`#0mcI=z$abt#L8haQE+eiu+OOyv~U((It$;NJf(XEXw$yRh{vQ zeW}#x+BwgNR}isxRL^e{zZmMZG7C<F`J>3+I<9cW;O(^`V9JC zwZtRS5>Ii1EB7>r`+*f8DkI*5etL=%o~dl9l4=p{_r|NZmJSI^(4gDW(DI=JckP8W ze)@gS>VbkQSfjIB-k`_bKxyF-zeD$T!@}C50f{PfJRtbLiK8RvLSTUzm*(DBmV>s&>)}wb4OBjn;yRC!FX3QFJO()IA-WFuWOW>vX zx;+M~ZXmY2WNs%x4eLo_bEW+Y)kuAQ{7eB^4RSVP zb&GH+ehNIMEsWZf(dF6- zLdEh@z^)3x6dqtkr><{jROvPd?Rn^|u5fj(T zx{2%WbC@k;*AW^U{|ZY7PJ%f(^-22fvxp4+I311kWfNzLF?``FxdbYzKogzzi^CN7 zD)1|_F0w=^al-PG2>A%x5&SBf3X}^17>^Kmy8&4BqlfgZ>ad)2=wa&jGV~CQVp-wN z01L^`%?@m3=mv0u5B~2r5uWl0w)_;~Sj7PNgKp$D6L6}AjCxIl@erdSHgk!-Qni~q zSX8gKb#o)aaJ)HU)Oe4zv_+X{uj&GEpxo6sZ>U&g4=EE&zij>oDk^j!h3-rfvY7sXg_p>I|HI`A({%%eh%8p^k9<0mvEJ?Gu}aB9jDwG z5>HwlJ1mB5#fOzqtGV{zK`4Q){?nlZ8W9R0gYq~hEXyYAoUOPY&K$+om_RlICZ{`( zXum%aW?WH*l84UbR0bB;fXq+fm9%dUhlOxWITC{e+Kb=e9hn`?J?4D%z3^=}I`|?s zGKcjj*rD?0$_Merii$gWMEp-zgs)DpzYaxmzGFB&hSPCc@MBC=kX@qMmnPV?pP+Km zu6@{s#@LYX)Tc2lCp>f6Y)Z3fO0~cB7{{y-wO`4=Qh+oAv^<34cm%UH@^I`L3VdVg z$=GmUXp<2FWgrlX3+xCsIxWtYs+IA$?~_kKJptVm&_AS;+RQUO55PwJV;JU7vbpkX zixYsp7SK*+fitArAU?`K!;-ITndzj?aCxO#*kF<>~ans=^UZ(rSOx6 z=jT%8nI^G{7dP`D8K&~GO;~fHDhPk^{#CA(+s1WD)gEd5X=I|DN!n3$)TY>Ply-Wg zyShui!L+JlHo(uc`EOGn(fK0VHXK_?6~}>s*P)e z+PkGXtmQxRn*t&4)iMrZh9iCKbc>fB=mM{1+`AZWtIPe1U0;w6V;@|qMKItUZ_GR6 z+nMnF9-CAX>z#2=#5?1!v)PvF|Ng>+E(ripGKB=6?g4*cP31jPobArtVs$_9utP%s zUl^gX$dTp&@^Ymz+hGq5GW1uF@{gItLuQYZ2xKWsSTn)w2~>Jj;orPNSaZLbeHGTU z;nnO&!(yRK zp{}GI&ZcmAL98=NAA72fSdtETq-ovKmZ}35*FG4J!;vVbIs&`Bw<-l#4ADYZQ-Bsg zUOd2IEdUQe`V7Vfa-87)%(GQP2lRLkFya!AgjI7*u2a4iafE~O)p(FJ4O6>xbp+J*fCpCoFu)|oNOS;HX7m>|`l(@xcXTSl`o z!!d?*Ft<%&cUBDpQUdtp2ArFm0C~9jvG843y2V6+9J~%YHVj`Yr5348oeMIOP7)Tm zO&(WPju3d)L{=^&3>v}B*#O|0ir|_O0oT-MaKR@KJ$MJAp$8Zto~*8f0yb9_p+_4~ zFx~<1aN8i4t40X?oE;~$U|dD`2)NN_Lbq#+?>jt`@m!^|Nm!F#cnyGeDmoR2T}i&9 z;--9IHCyV0U=`@N?7{V=;T=-Kk~_)w8Ahk~8pISFY(n`D&2}sVd};dVk6>j91TXDG z^m&=bzV?W-9lTj@=LhT8-tUf$e>{zya70Udz9Ua5bc_<#kelX}m?o^rCe(4jd|pH6 z*LMRnJ<{}USEKKQGTyBGyq~ijCOUYJaee?0%+tr~xBn^pZWx`61p%J#9ViXBKNwQea9+HB}iF0q#xtE>F;U!+ZD~f3BAT(>{Ya?!g!NC zR|6n!0qA*zHMd6I9#?=M01>$cjaj(!^3F*XO%N^3cpoLql*3M3$1}DNP~$fqF>4}p z>5rHqX63+Ru|X~@z5{r?bqvwY+moe6L|SnHQ2e=o5N**7`<5zqCQF^+40pNeeQk7R zjqDp9v5OlVayE(I0ETfWKX~l}Y38h#dR(9Qt{1!d`3`|lrH_~LW7Fb(^L?=D>A3nB zI>AbAxOi*;$_cmDX)~}5B0R9F15Ms|O~9KzE6=*m41^GY)sQ=qL&FJF?;wGMKjW^CoV0i(Nm>bTpBf!Al6u@ythdy0^-uN zV61Y7&B^Rp$orVA*Mzd(S?8Zlf~<$0;tv!j5Ev_^X3Z9L-yrbkO5@Bport}mLicDN zX=1-u>c56N+%OU|8Ntg`t?1qg%6vwx*jZ3yE$!|uM*G`A6K!Fa{hl-So4pG`3!afJ z_>;}-{E&@RXG>(iRtqcgQZ?o)07jNpT~_Ew1b)ZS7KVjG53U(^3Tw>5GIV(@*W0RdRU1G$252uviHDx?MHC z6Lg|CD*jcVo#Lzud95UD>0hJlgE?mQlfZtG*-t*t=P8+QICw9Lj zJcay2YLlAPM@~?jHk?r*HJrlEEMjP-x^s2G7^EsU0uZQo!H$gNlKCg_k++j5hVQL?ohFEtJ&)$;VrKlluDHEZ)aRGa(*HvHsjmTRh%NT4znP66)urdA$^OT9>==7b?Zls7-(BedDabk3f zAU~wx(cHBLz`XN>jh|H=8tN%s0gkDTc1_{U`79sQ#0K^~)9Syz~`Tj(*p*;!#3 z@pBAH`u&~?tVa-GC!mxAa=ZFbD_vqip#UmdQOfb6$Xw{i1!Y^>>bn!8(SV?v9TbQ@ zhv9e`$|=2_=hl9X^oU$oQdB(2hkeP#>sc~tQGTiR1R6lhzZ=mHDxc^b7#tPlZ*J6Y zcU6OG{F1XtTgee>^ur;?%{1dKUZsjTRSCqBamE3>dy zR&{45(~c&feCHt_hAap3Vbv9-3F}}chks&O?Duo$}?_dhL*fT+Bao;$6_mHqsg^3 z8-XsCd&y+{0gt097t0GtY)p7%Q)?o^E1yDa2$t>wf9~ zh==nDeGr-1ft2uhJu)HyTD*%_yw5||zf{)_L21$j7*zh{9E+<~cqyn( zlTz@fqCyd>H!B!YDVOdQ0zE3b+i-WBR*P)7=z7H)Z<3CQb)2x_){wMI4FQI@IzT<2 z?MUTYEkejDKWq&gSy1fyZ1F-I@#aN029D_CRThU>m>}spaWnMZjlCal z+-R4f0_$z{9Sn~2lxL`V_q;a;jzBTr$E=58`=s7K{_OEt8D;w{SZWlBg2(nVlwYcb zZ-FNG>N`mF3xS96_~aVsDC#W1iXP`#F*u{NLp*H9aJ3`X%@T5(5jNqvZwM`Fv|?Y>xWwX!)7qiv}v|##<3m-f{B7JP^#jcE#bs2h3n`dSI9@lD?$}IsV-CR5!;Pwf6%5}x zHY1(#rr^i4@W&S-^d95w)CK<-?w@{Nlz2ExTwpsR_!U~b1$Ge7yuU&_`){_3m4Y6` zzUZGAiAHgMrC<324G=-0MFO;RSq&lbIAv6#5uYZE%r~3{WbXDIm4CB6DtL!ZJM60cz}W1Z~D~X_7_GvAXI71sx|cssINu)2F!C zs&T-`CRvJ-0g-J&;9q#Eu%T!u9>TbjW8WL#ySHx#u(1T(kG>nTfb94v9j4@gVhaH~ zRP}nc5SW2Gy;CfKrlL#X)74nu7Cg2m_~Xn(VV30*^y$iG27 z1LcDM5>J|h<<+PZDe)L-yIo(_A5h4HWq6K{2J62RwON$#!uUj8fesYn1}DbwW1s}x z;_n!7soi_6))0Ljwb$McVukg^ZY|zrAiSp>fb!2u>{;LySP1Q#5^%NxAK;?UH~@2a z{h#bXFK|AVBa7cvaUEuO7cywipv;1B5&U#T*hKSM1FRi~5H18Ku?qm1jwi+&gk?Ec zM|}ncV+kgE%F$)f#HJYp7DN=S`%IL+1aN}>ox#HGEPy=MD&<%s=W%z@@Kp!icT>yx zj!{^Q82UV%=pT0XOZ0#{#Nmw>J_*X|{xAqt76eVX8-*34`hi3?Sdg$R13SHVk>XE}S{e=<{BjfJ67b3^V^a ziaH}$enwkzC z_=Ec+sa}{|EmmHxlhom_5=mvZfwa4uOCF zu9X_4ok^|oLSIp`xKwi`1P_`~O*c8~7-ybANm%*}wt| zv&aHbg9KgLq@X5>%1YE|5`v00m8euvxz$Ul(w53BV8sxeU12&7=C<0}U*EL0_tMth zt5zw3NY>0N7Ri!ix zx-|Gi+oDU&P@8^?(AHo=TXRqHjdm=(<@22eO9nRR+-?{UhB}d3ofKbVG%^zEI%G65 z`cbyWK1gN(r2!NhU1}ImK=`s@P;N}?AAhVh?b3*hNc8JfT@ANXr9F)wYET-c)A}}q zPD&&n%T8~vYoET;)wMrXgL8dbTkM->`sX7R@er(UC*J(-ym|AGby`G&ofGiU;7yIa zVEjgFUGMm=7;OGB@^^8}buIgC)Sx+@8n4$YT}SGAGV-?(M|i}Xo~L&wv{0~By{(ma zWNTJNuxa_-(dj%q5YPmzZ0>LLP)$1s)HglPnC=Bzy-9D&U9kIcT(la~%8xfmU3fSCd3fFP#)c_xPQnH8S1{23#x=?l@eX;hz6T zw9DiE&T;lI#kdm~w;FB(JS9#qdjzynbooQ#?ql+R2KIk$f$1TEVTo5=wZ-L1h7veM zTNEN39#;kZ$H&Eg;vA?tF$!}lPLKD2K0?>yQgt#r@z6G{Um?0(PPaCsQPE^`l%nP z&(#h&p{}j9+*<%bYIr7S*iUm;l^rx%SKZcT-qvK?*A$=NtnaGX3H7gM3Y%Mwb=Kvo zWnF4nkI_4%L(5Uu-g%I~f5Hjto`UM$;Nl(nrfY`Y*|w@85&yuvuPIoshC4vtKGBL` zanFI~+hm-|-<`i5R8$0_z#<%c3@(5{AlAD(zcpC) zQPq#l&`0?V`V*i0kfv-b^w7Ph$mt7${DxrfqqoH8$xfrijDOVd ze9^Jd1B<1)6`#61sKep8jGfwOb?t4RL^`b>XEfZT6s#JmK7&*{!QMqh294p2vERJU z1IqlJL3CqWb_@*tqsM4?ROS9e)mR#!al#p*J>nQlL=(jOIWgVzqZyITs(^W0Yh>$V z;~*;mwqMaBc!ZaE=Cn8OaSFrrs|av}i!{sax2^J*Hch?n<-r~30Q<8F7X5BCP| z(txo>?%|xg*Px$r0)U;NlNgIO+*#7tnllK?i5uyiRD2L8e>B8i3wPBLw#s9{mkfqS zgt|YAwcdomcC7du@-8(pgE|}#G*1mHS&(KPNGvzDtKq9Mq*EzjLF-QnqPR5>79*Oj zdjuPCtb860rOiu67%}w^U5e5fNj%nRy#FSY5R+yG-0OruOMUr_vi(@yry1%WH?_3U zkJ+Id>mG$ zl2e^gYYlKbpi*d1W|j4j4fC-3>0VR*GMiBWLqm595q7_ zvpthZS`LWsQ&%6u4sS$u7xyG^mpjZ^h$lv<(()qLXSVvyIwlxa9N?R}M>)UQTHqT* z%xR37Qz8b8?fG?T_y^SRJGgH)qBz}mOfPIvx{eX$;*bo7)Qz3E-GjEe`c^RPb{8UV zf!U5kGvu|#_%%rsie-r$Mc6+q zEpy-+0#nhiVm0!Vl43=_eTehy8M_He^~Txu&HS5SqiPb})*0GFDT7?wkN-V1a6crF zE&evl`7q`9*J(WJ-%D~>gA41K^I)~(h%RnA1b!lTOv@7lx!!%5_HTOkWbHjdv|D0y zTYo0#3-0grSbq`27pW0f*uRJ|o#{~)d5m4O;egR!+9P3cy?IW5eG0L+TMtv)E7gr# z-jQL&J+b$pQowTlzK^@X--SnMd+XtxP;p5j=I#0W;VBG^vk;D7B^;xkWOTEc(`gW*-f2p$?M7h((G z=fXWJ4#VNze3{+c&9~Si-u~W=^fv;cmIh!N0yV%~`9!v_1QdX9ms#L)$p`@90MeMl z0&pR{*Ia@#<jB&jmBxO1W{iuvVxz?RqpUL}r;e8C)R`Hm6iLbV)5TG2!DoFE z!Abn>^!Q%0^~T&a0M6NJ_IWO>Mh8iv&#H0MC`RT4LozWw8WwN`DawL40&Fi_I}ZKR(m6fqmSkG32(4JfK2MmR99YrjqS}~(WhG4 z8XLzS=#>8=L#&1~`A9GBLxQ)Zc#Crfxfgv{ke=U%zRym6SNQwP0pF)4zkB%ms+;nVE8ZdNMe=O9Z_82I*yz1N{F3DLgVcMuMSm zPG+=el}>Lmk;iBd=io5Muk!(&FL86q4Jg7knm)-a&O=gMk zcTcWW1`pBIBd~)rYG-q7nD;_BHZw4pi~AUQi&4gI3-aaTbyQozGX{wyuE$Z>^(!d0 zATp{N3P$I87-lcz)q#s>EQXXu)sJONQNwT0px0mRIvW?wry{F-Km;2xlJ8|u^$Zls zN-I>-|5G}O$b)(Xxw7=A$HCOGhkDNO^3PZoT0^-Cb9od@D8+E4#`blKZPAYw2zW6H zV%xfT0#~fR59ZIp}4Tw_%PY(=2HOs(1Xq~ z>zWgo!*~>7dy7-GZ-mir3pHNXJKmV>j@^hZ){54gww9jiH{JAQf3+(KPK;st9fxPT z*t9Z$Beo6>!1jmxsL06}d|n;-T=$!+v#W2C)WouaP2F`;k5hm25rWRI3%j6%rXZnj%X#NRwCpB$r8b4H(TyIT$z zGu%c62ce9;kmu;vXTpqyWBgV43Tvm`?Ngs=5Pa}Mdad7xf?Bk0N)&>sE2wMBu%-+) zIzaEi(Zsw^Z}2Pa(41&YoEMq!hxTkl&E3pSK2R?6^w%9lf4v$JrjYRZI0;r zZlAMLnN)2QagBw0;Mu|vx3VYA3}jz8Cy+x=A3gng0{}M9X^F7R?R|Qi5?sa z_vl;PRC>En)~A1}1mTkR!J_w&Ko#MnE&t!mj7V+hTI;61V02NQ`EVbxuM;4rjSqM3 z*MB+QDUM}Jnt$aoBKtX$^nxgTtuk9a5=~6LuOi(sJS&V`hfB`k~8^pu8%?A+;xG0pw;g)<()Fp!%y(|FF!^W}hz;7-W5y0)4 zoONhf(%&Ol4S%4?fVgzg&4YB3j%ZYR0e$Xynolx{V{dr zL=VEQ7>!Oar@A)3(j-mde0ukoC12a?7LhDyXimtK+cH_YlqAqGsBY&X&u@gJ1JP7h zy)l@vj}K?dqQ4cv_E$I*zy21pvP8)2$w>anQdhTTa10*&Lgsq$p12!x2(0F71|`e7 zoxrndcx!qKktYYSQ;;w7X=bKrO)ClKMz+G*R$aYs7~+(UK%7nW=bI*MG8$J^vhK&m z-O0F5oEEd#D<+et!SyVUbwC7^H`nQ(d5k*#FpP=P{6_q!rt?Z;IU(e#zF~-o7C9(> z&D<-PRA%(|5}u3HY9n^p*o3f(O+b_zBol0{ZOuB2J)a|WQo=BC%B3z>ai-jwT+nvc zWbh<&_X<100(nz#Y=T#YA@0?e)JzfvkR-wB|C1^2Po+(L-D};$mYH)tc?jDp;UgRH zfeSi&518=Uf_<@FTUTZ5p`jw1?XJ4kOWV*g=Vl=o@``Xj9IX*&SY5pt!GW?4Qla=| zh(|M^#;IXv)p%Zn6WX>5*YYRZ_PtAg{{}*D4VBL@?25SZQ{P7?)92p`) z?jGIfa{zQozz$8|m@qH9l9&Vzn+=)3R|VP-dB}}yiC2ff&#=fj+tD(<=L!V{&qOg{ zrPt0EGm$t?H3wfDjj&*nYWluCcXqhwu)x ziD-puX_Rq4f(*q+aHyfy_#gqJj>f>D1kgB;7aZGh(lJx>*W&!p!cQyltIt5@V>C!q zA|+gP_IQMA9U+heAo`h%!F&-%uA$Cbho^?eL(&ncMQ_M(K%EmdA1y>k_ae>?Zp~I2 zT!q+`r^kyhA2D$zh`WkL_}}l9;K3X(WP?ot5y!>;>Fy#Mz})6StO)c48&=V&2@>G z=d>h|+Ny~nc3joCV58AsG^)2Z6Bu$5=)aBC4_|CSVyQODY?z%r#MWEJ$~HB0`H^F3E{X> z_)0Kc#F&s{xcFkNLj2>)7fD<=j1qq;jm<|IqOR6tOgr#qNKFK?LL5Zk*LR7z(ia4L zO02F+$a9L3PBnQn2}EO+r_<#}d@D^AS7El&O}M~O(eCPoJN9rI>W6aj~tjgkK7~#5JbRhD4w5YFM5u(?>?V5ZGl4A zQH%{{Q_bzd_OB!{jgZQ6#H|h#f^^6Od?MH{$F%$ie^mKs?mvY-b?qz|{S?JVOLz`O z)$oNZoU2F}_0>H=t0bWvA|8tGp;bO0BVulC_xVhr6-2hemqs)j*{Y40M(;F_;SJaa zvK?fi@X5S`2vENBl2n@}s5VS}S8eMFBH8X&Qp9{3K4HaLMFEJURbyJW5tWq6p0^MY zqJx#Rrr{ftq#0<(xKHL2SrDZA>k@@iEI^4$Z$8;dbX&(i>t_1%4ksGn_n4(;9j z<8`66l2mZxUuRxNnU(g%9_wULO@Rbndk3H(8P2!Bo_D^uUmEQ9#?pN}2WpTEPy$aF&f}d_D#s^JD%mc^Hhaa81U3M(C{p znCpLoV^4Mf$0C*&Oq=iHfUhafPGH~_fNc%S{M7yo40FQ{Jf-mxpf-?JJFU&k~z6qFe@@7<-9KjA7_Sr zvEQM_y}OCv6I{Zk);h6^OTN4B01&MzBP)vwgh)zfg1k!oYW)($xJ#|BLIBAXW=sLe5h6eSAfs_w z5?T)t8?Qh9K2qKfwbTYavVSpJBC%`-H-`@MpmJ%Efme*3rsGjZ*m%_iK#a=` zkje1hHN-%&_3oe=zMkXP30OhZw6Ou~fkSXaVlVYNSXD$w1d>T)r;bsBJ>deNFc;&S zXG*AeXjmt;MU>gq5LD2zFd?vfL~KxIGF}nku*VYxKw>9j#UjF8@g#|Jo%_77Hio1N z4N3v;3yp^NH+GMpuag+;XM91)@LrdUqCRGLje4`(N9fM-M_A(AjacI{i;f+gkQVYW zCtzQm%^jA;T!`0N3)bX)AipH>@w?Lkz|g(m?+C_X3s3X04+IB-gfP+M6~#Kzs`4_^ zc;)Ky%HG_=(_qH>?0}pSarA;Wj7xun0aFFflzo|^3SxgHm=u&rLq{60!;g=*JC2KMSRuuY-0P|i@ zY&GC_hlqWb;$Nmo{^jXnD4r4(?!&!Ui3zC!2N9|bkn{B_LM%2hp8FX)RA+&ohlOkiM zZdW5$fFf(A%Uhh^Yjeh`k(C)TKhm7hE@MY{Pbj9GQP*C?3EJ2G4ec4bjgByJy(?H@ zPhp4r|FDyDnz@=ge}e>*~0 z%ILNJ>L(O|U&9X#LTm)b9+Z}SS(f4ofuqk3?pO6Y1a}p${j49jCXC9#Y@lq_@LG zzz-tUy5Bts@`f>Wy&1*>zPit{@;MKuSrF_{pLw4ai2V)Jr#}{)QzbIpO`G9SpZR6l z3uIuaQ>_uubl2y<8{DTp^F253Y^8a(SMQ1!* zIB}Zw%|#quGATbt*qx%Ze4r-QW2@ogncth>9FU`RIUaE%IKtH_*K$R;2fPmwtSXt}QgmJw3RJOYEq$0pX zKjbq$P}kn9=naY}_$ou}acHy(JM|cyr0gZP5jH}SmC1yS0swX97rT&`yqmo#EdNi{ zvg3RJRIBpNc6IHaxS5z}VDU$o3sufztA7O3q-`TSyj_6~zgD|R+G`-1sNe9!r{TAa zqZ&ixe_KPD=JOfhT>=CCB|8v1LtG1%U8fwTGRzJqP_ z_Ve$B?gErmMJ9G_RP0W{{fQ_Di!x{?#!_`X;Tp8PAyKo1! z=eKgeIk!{ka$oYe=Fef*^FT}y2AclD&e*oJfC2F*rG5@8vO=y%_`CdvqD90>GCK6n z$Jg~{5shx_*Y`vJ*}c768%!u-dw1v*FvPN<3{!Ionj7nK2^9^iA}B zW2Q@fl(DNP&$Jfo*J-0m=4*hHt^O`JZ={IJ<@kEDVTNK% zMS9>?-Y<160eq}fkV!BOi69+!%mS&BupS|5WDR@xYUlBAqzvK?kQGrQW*kaRlIGUZ zW}MQuW?+hGV^_;g{J8_ zMSNL^U~;CF6W)az=!OZ{+V@3Jr@6@70K+I=3aH-^&two@Kr-lDkg@+1ENnpBCfs%G zl|>h9WEM7q3vS~9iqkzTdaf{k~6KI|2t!k_!f1 zs>5+1cJO^WEcrTgEcW|uM4tyTi+zXokRdJh5KUntTfV*t`_?E&vIrj+lv!ZdRQ(GY z4}v6c5^>N4K%ueEiCLvfCh|7u$}`IHM*ua^a>g_CXCOM5TmOYfa55J#{8K6#Z>0-i zZe)+v6w^=fQdMr?v;bqF_THgJ9>*!~5O!n7>BP1ixWxZF%;fiUwdnO1$L*z4L0! z3+O&+aO<1gEuX1ty@4UE#`He(rashIa$piny{R0AW8K|bcPPWE{FysaYh-Bitef2V ztx&6%N&Qo_jOi?WvoGyF4n`NZ(Oqm-^y&5PVAPn^x1=3I>uOTE>+B569l_m9&A>y~ zr)_X*C*w^tiB8&#-SL%#_7NP>W6tnd6@Dw{C&Ar|^2`~2PS`svJ{tO|p^>d2FB<^l z23wZ2-&>F9?n>jm^@X+f*4Na$IjCU6!|O3#wmYv`RRcgoPE*ijbxOE4bok8#aZ&3p zK$(A|f6iH?J6YsLY)kS!I#=P2`m^Y9Ns6oCA(;}L09m_?O@xB$2 zcALc5?}Yt{^>APGCeFJZADW^M)wLChv7G=_?-{@N7%2Gg+d=}U6z+*M3!#p@>)DIg zTB-mH)bM{Zsq+(z82OBA*!3ehaWeO^PcDlc=+q|m})+Q&7ioQkdX{ph-EIPpo$>KgDrSgLdXoIP0XmqSpN!hmq zZ8bav>wd&--sy@oYe!*%?Q)3P8VJUar5?#{FT@~>ZuO}zKxj zENT_gi$n`mpucCQ{oVHJs}I|EedkOf%5`whS?6A&>RR8{I{!Q60M->Y9eD1CGGy-ECg_g#gxd?67@ZtsV{;>?ic zmzzazxG=$l_Cx(T?%Nz|`1xJvCa2xeGsVE;1;%j()0WRH_irx5jS=W=PY+KO- z24Klb%m1M<8WrNdNyd|pznbnZ&&x3xU<^Vp0ptFpGUgS6yPfG@mK9X8T$4w-+MI zx^BFu7nX}dcmGdo*FyoHvK#)32E8my&=nITKHJ!_e7Dhq`a@1=<6y)+t-|xf#ZXlP zwHn%!en>%Y@)=Fi+1}xonT++xDE}kC-qjlQ+O^gUPFRZ3C55A=u$uKiL<;ff8n1ju zHD5o&Y*2ChXzi}>uaB@7g{|mSfEZZ7Wy2+Oxlqz2gJK#`7lKNt$G`A>PUbFIgd@ppu)Va?PoaKY8b)O zI_s6tg{l6w_iC4#*F-wCtBo%Dq#bj@@|6hCY0w^pChVmB5@GS}y`dJvc7g@*eZ=U| z{yBIxwDL`P#zL=33}ker@W$^z&$%NxM6snSq5*oaMuPRPh!71Skm!R)Qxve@5TMXt z4Au^aEsj4Yy1o!y%Nc4H%kI_4=mg6rW~ZOsm`l9mdL2F7VpO{@TI@&Y7YV{Ip()wL ztI;g{5_l#yA3j!2zL8Q+^H)hkM}-@Qs+X7urPW%$cmxAegPSpI@stD)$Qb0+oMuyi};=k>#k;obC&j`_#zY z5a;=sB(%OMS{~y^{HS1^s)OH6YyYsS&l3bGqpU8YK_<9u>z3P-XKYf#H>1pKuUYQ1 z9`IYY`>lul11-=QtGIP+C=EoUjLAVJmwLBZ(r5mtuP{;AoZo(a&m^jNAp)apaVP8U zgc0`_0^1|3TXe}580-djExsF+Hgq<|A&&HtLloC!80!LG5$`nvM&ZZL@1?abOwh%0 zOCJK&!}9RxlKr&SIkdq6<3kg*T8S}h0%Nuy;)dxukhMTOTZ|^OXDeo9q>l*IlZFU@ zna4#ce9qQGh~rWX`1^3AJxA*IS{I}Li7Ba{E1l4F?&m$R-*WuV`2W<1c=)U)+2pFZk-?1yN4RV<=4MCj8{u`n_t&*Y{iGLWCm&|Ob{cJWj@~B za?F}By5+!-9y(@w-2tYpIG!1Ozg@S7Q4#H%Oxh;fG2S=oS`HX7VHeH*|2-{-jO}oY z9c>Bp z_*!Bi+%!P$_P=*>lKF5mAK?|B(*at(;xjhgK4I*tJLDIc&4_I(+eO=WbKzFG>>?{? zq}lpWt})xs5FL6zeY^5`WNDeY;^-Ab64!l}#nRUzSi`p%< zckl`sd-IRC{KGgtpm7Jen`1k;3m#dw>3VeQ@<>Qw51NhsZ0K zQ!ERVTDN*QR6*CF?LGP1pk`QI>ykld3b&^EC;Uqk)h5Ef-hiDDs{EOHVn~W$saj^; zK14Z#^iRh7H5^X!&P1AuP(M__nXS*GEef6t?V}M?AToeec}`Qvix2pp48WT zW&LJEuZoBE4WQQuky#6_AF^=>UpR$ZW3&3jr^Ccc(Ip(&k>!d_1g8*w?&BPi95@?7 za}ho>m&49h285NsGolQuuuKtKHIES0q!I*?oLtwIMR=)5nl*l{uFao`P*Q}<_EJM= zdoK+9iJMQ0cLXI6m89cC2N$-zXup5Ce*Q$9{{rZ2CJkY1e3bf5hBbeqwJ=vdeZD%q zfiAgma8Y{a+YmSsWwhTIo5~DC%W!XDZNK}6+tb*%0_3&dx+`IR(}zTTT8-PfTMCh` zH0qrFp!@0JKElbt7UO$;OWN~$tyyu%y-I7`!G^^n((c=aB`4B0Cb|A5q6btG@|_JV zMLh+ZtSS1kENjZomQM(FEShdk@3ZdeBUI>(Ur|H%42!Jtf-R3ClMq}3s3Z~uwwPm# zrWU)U&8Xuk2DgRw#ov*$1yR=o|1nN~MDRj<^~CCHT}Df2WIQJY5A;eK1{0j7{MKOO zqwS6y%=wSSX)_V)K)VXMeCEk#Kt6NjGepKKb;@r$;_r^4a~Gc(%*uLHYbhKAYrovwYU_)8sf4 z+Sq8ZFf}N4r??VYXcnlX^G8xV%p9v4{;jy6P}Tkhgm#(K)*P6M-|7i&(=N6|Bz4&J zWH{w|6waz9Sn3)x)7VKog*#xJsXLQV_jxAgLRrhiymqtFU}ReUsm3Bt{Pm>1(Crqz z0{7eQ1k*s7+Bj=fH4s<{LgL)&iC2sAJc0OsIGsNM(yB2LuTIGqcs`KQ%OcR5o7b2R zxTED_Ny^2N40feW_9`fJI<<>*q6YUZQF-1S^dr#}+_(5R@ZGH(m)FM$()z=@n-E!M zRx2$(y??QqD1OtGq(5-i%IMP67i)Z86uJ`kWdc9j$X$UTLPP`c$$}oADVZFiADB>~ zn$?A1Bm#nwpux=$_Om}PWTB3ERUUmw>_DbD!UHd9P3s?Kav;%$QhzSw)U1ge#wIH9 z5{4LQUgxTR_2JM*>wNS`uh8Egl+G7@N64QYnIXCL<;n# z1WwHVdyLj!8Xwjr#uMw>qxZO$O{~fxW-Q4gtrObQ$qxR#4wT4}y{Ox@t6j+^J{Bsz zoZ!0-|EAvlu2dH$M$hF&yf^^qjRHJHi)_E$wTBw&*Xfw_P6znI8V!IbEaL)K%3okk zpCFhJYA)*9_}6{4@~F|iI7d&=>cuQ{GOz1~h)hb%F?LKW4K#SMcT!JA$wU9Lm^teq zE;*lIW)2RPRpK|VgJclPu+u7;L9>#7PImr;Sgu6GpD3BjBy;BJSJ&4X7vb#Un&bG) zep;4x8md_`UqG6dR~E0(P)@+Uk?5`{r#GRB>xPNT(pfgV@;a{w%^;fBJG{IM#!Cs9 z>^0Ep?$HJpcIwj-+BoO+_Aw%?c01ih>G5|SgD9vW-YWRh!_xak8~sukM~z5@msUX< z3AxW=*Nb5xDE-0_td3p?aa~J4{E+)1YQV6b+9~G4UT!Y+m<5T^ep*9w6eK1DzFuw( znnV_J&tw6N2fI-(&Yk_s85nbJDyzmhTR@F_Og>v&z%^iD|;=U=YxV490ZSv*KgpMQu|(lT+Y!aJ0-+%cfO6Qf^Y?B-*^{&;Bco*Yj9UWaQ{4PT2tGhm1u3BtPKCt|XB4zA%-|2nte zVa`xt^T^5!^|{(`tv13wk;hgYSsMlNEMkZL`|9=Hgn23IiHJ<%?~UNigZt?oRm*$9 zI43@)X5~nRD9%X2AGm~$d#ylzIcPfAs|~Ru+*#;nrU>@&T&);NcqCPWYaQCKU&v>E zCWmDJMmO`{_N}7kwU`&yp2m>sTr1{|wOwo}8onB)l<3nQohJrTkeqcGHZt~g)CHG_ z4Haw>TNlJXOu}!{9Oe%3J-=6toRsf>BA#M-Prs-v5aX0 zUm^y6F>UVoM3)r7q;t%@Mz_o~lePvM&)uyWnZXoIQDMTVMo`7OK3}RDc-|4*Kz13e zN9>u?(wZXviZH5pPZ%OsX7G~GuEY-DO=3*wnb;xv%l_bNVi^?(Z(2?#<(HGq>p&C` zaEtK4mF&Wo0~%$gpcG2m^*rE-Qu8WY(qkr_R zv&CsJawIf{8^9H2C((g8uhf-GiMNUKiSfz%id8DKKUXo~l1(?(Bm!;;)+O_;N9J0O z&nRr>p!sYBR1~nsC8X4PD0PCH4BeFYnH0j(zK|r~7Mmr$V2MXv{S(ogaf&dUh;+BE zQ#2y%piA3Lr?w-=eksl0R$QL%ps4*#RVYyOsWi;jQeW-Gs>}&q)2}B{>t^aMc3UE8 z&sJ=l5}qcE;80<5zz)EprQ{*=QV;?d%*TR2;6Jft3j+PT6UNadXn8B9fp%f+sg2i>b6MbD`jcNe zzlp8=)LP^R+%p}D(2TtP(>SuPwj6d2wH$K4#LJ}^+)9YPa$C1f*6T}!kq*%c+)M02 zj`NMJt17W(&81Zk0KoFP8ALvbJ@m7}AXGv{=`q(6!n9+4ozWPN8X_Wga%lk$u_1E51U(}c=we==94ye+(--I>heTNnVnwdc1Jd3# ze&C$z6Eq+9L=xH}rCWyn|El#ddc@+OhuGYg2iN;&bxgyz&Khx+BsI4l9sT*ZpM5{6!t1?oo3c-*gCN|pbZ_|$c>6nN) z=nwtFyaL|( z8*g8n%hcjz10p%ZR7+H{PQ@QnIY|6N)~r&!elnfAU(7K&2qub);z7hu(HouSvyr5?nz+mG`us|edpqy0CxAQ;TM zh#qxtFhRg|gaB^P#^4l|_|lt=H_WRcR)!EQ?L7_o25}VYShY=P$;&CocsBMQPH|ra z)LwpxM??@RnGb0pu-7~>lJg`C5r`%E3xHBupENi|w;8c}7@larml97K6<~Nhok| zxv#ikHaJS6Kj-jlGp=_#vGU$i{v0ly(XAe`vWL6>%UHJ_$^_*C~ zc!R&yr!dJh$iz+oIx9H>8v$lZmsqg)(`UtpazvC4Q4_oSOuGMdzwb<^APkt4UkH53 z2MsrBK?;F@g!X+sEq}(Q!dmI{wzIG~%T-E~q(P%MxM(#G;!b?9= z3|cBTjS)`DZ#USP!dS{^?Yhid?52u!>-BvXmKg1IXU2COGMehT&&zNBC3N|8YYnis zx%;knP?nKAlr`UU3$?@1b!fJ(=R9La*X8*i7##>WwqI$$%tr1^pIc!wJ5Gp@Ed6Kr zZsFFnd0_y~eBL0W8|+y;lIDa2%_;tNk;=SMyU`=38*E>)+j$j_v%M3fKVbGj^xN@6 zEc&}!?>%kQNuKFiB=kL_K3i+t=r&rTHwxC}Mj`XK5l21IuD&`#`x=xc&4?U4NLVY) ztKqmbbSHKu`Oo-4x+L2M+9SZF%4gk@Nn<&cx%i@YgsOGrv`8X!gL$hvvNbd@rRBG$ z3$m>~w3A*r@(bn{1wT)Si9QsHjOpeq;)p{tIOMVRL-RUN<{~t3`$~usUI5&QBkYla z7nJ;zDfab159>hlsb!mDkE7HhKG8{VOXx2~J579={?V`e3YHpTC4c~<`=ugRUSVf)~okQKOM|*mAmdFZAgZex@ zAFOj9l(MHA$l;m5(z!0auIE&-Io1>hXiyMSaeDBK3iDds8K|8E(Q{uaMHF7`7X+I`A`*An+W4c+6 zRbD7KB@uzJbtUZd-h>F6zDmjyrT%gDUc`ST`1f*zmdcSkLVtz+%V?!Vyj)+N+!I(` z>*cg34+_ue|Jx0@+aqEs_uG)tuilU|Y5C8 z<9EDi?;(#`_;LY64x(2OP-1E zg{7V9+`H1$P+IOPBZpt)6M(6ga?s@z)kqn}&1 zD8Y9Z9TEz~6uucG8FlCPXl|)?+K=6#9rv0Usr23b?q>+uCMg^b>NODJwM#4m_uy+D6qTg7$UYL8|DNtFZ%LNt*AqOqPkc{ z$6sE2h1FQvLgRUk3OWwIogs81B$dNIU&_FDL=A^9=(2=)9Rm#KGcfAnqk>Ip7_6){ zBN5!LKKV`j=^nY=o~A|J+Jr~jtO_Omd78Zx_hgKF9miue=WhybS#pJtyT63K)X1=e z$fP}WKizN)Jv^DLHS#Y`nVY}GSycBCxji1sJ=Wkr*JIgU|CN16vDF`6<2*X^EP%Nb zkA&ds7J@=m(3HGt+Eu2GrJ+%wgmzbyf4U@;qkdDTbC^@-i_inB#Mh;vvYLI;O1;7U zE30+2^F<#-Mntn-k+X{bmg8>`bGpaA9wUFA;hheJ0FlkrnA2Nu6zo>C5z$QcsXbgx z+eBzAyY1~sGmC(J z?cE*#MXkgi@s9@FhZ0}u*Kr9g%f6RZ=|vz`rk|cq%EvtpgxfLj8uc&c*5X8{;o~lj z>KBe-2TP=qSI~V$=OV@x*8pPND9N@;rs7U5VM&V(Uvl#*5BzFM9^z^xY)hKhVQfi^ z_Mz!$Vuv*g_O~3J+_9l`>~Z0d#0H$pq#c5brvaz=+sqO_znaP;T%fKk$z?_Sd_MMV zAL@<1RVBG%1?I@=zjoAa+6bdH)*m+7Fy! zb6LDH>g_s&-fI;OBm?w~(EHf0GL8@R*VkIJry5&WsilaRHE}2c?#zQL@}FI)!1IMf zLx_0T%Csl)7X831E2u7->e7yxWs}V*>u3~V4D9`jU9K0O1{N<`r_iS;A4C_GZg5X^ zExrUjY^5H!3`D&Cb$GS7Q@9t)y+l*gk$w3@my3FP^rt9;&}^oNl@SgmIA~vv43EN+ zCzSaCR2|s#BtCEqfde%2OPr{AJ6%k)OVhYb-ZXzqR;F@%#qP||9^N)2v)tYvdI^_o z>@3bLP{VIwcGY}c)T$AfT@XOf#!h0Z9k2_D9cD?kgn6{GgTW&^4GygmsDJDg9mr-k z)i&U4{4>UV&EnSQVf0hnN(fpf{Mr0G3Es~afBhSAjCd7L^dZ1~)~_X&11qW|Qv9Y_ zJU>!P0}S0YkjF6@MJ7i&Uy*YJKiydpaBI_OrqRq}@BDQiYf_#59ENwiBVX;;s%%eA zdG!e~W%zf*9zG-D$GUU(zMAx#8-1ATd0xTRATeO&WCO#sG1L1a9;dJ`)F~0B)usY?v*HT2r z&yL}oA0&RCJ})=#a6?+rWYj0WALd?++3qBGb8G_p&xn;U1#HR_2cv_r{TNiK9Nb$F zP$#sJn8Z51utQn)FFNHNa25>TaR)2XH&kN^VUhpH{nGQa0g?=U@p(ZgeXpM)>^@Tl z+uVySTIzRxet@6S%Ezd8-mdFmN^=UkK|oMDN5t!*sV>H?R~hizYXXj;Pe;A9@evk2 zo-~2aBUiAEkJtV&m5w(Fey%^gPPjHP+9NLe9C68etV%X4qRW1=W531$TePnul^(G} z;|pt({_ETIPZgzc`=QWDSxPNyG#UwK*GvBfKJ!9ocPTnDmj#N6{x9t=>`Z+8&wJHw z00J%C16`{VFMm(4t7_;PMH{5Qi}*9!?a*Nd=O;c+-dIZozDX&)`^#g~<%i$brzzTf zbPgvFoLckUB07F4q`X%WPkX<9M$sk?7L3{}y!>4NkUqk+957xA!-q@Ze!z!_6?lKJn<0 z$X0E#c^$ej2jdjO{oN{e7dFR7%&SQ&|18RH4;@)?2Cg7#7y;6)D#d7j8^4uWwKRGi zf4SYZ+<)cHz>+;JS+dufdHL?Q{I4)?V&}IzN2jhW195FDS^Md+Ynl^IEI_ytWgFLF zO^i$5;-j86)8X9ql|}}u!+Cw3x%)4RM$f@ldaWne9@^!%v^pv!Nidn33gZ}HW{hgKIAxU@@&KQ(h+!M7jcPJxzMlSUe?Nk7Ll z{^;Yg{oNQ;Wq$wrhZ(t~>4j4A zImi}+h?>H3ym~2L4S71`d5it(%YONy3D4TyY!0CL#l;D6Qo225|KBLzD9R5eN&p`V zYvbK1dr8)HaWtvp9b9a9yXo+GF|T=*>7+zCt;lmo~Eq zO4{>E`L}(=2^Ih@Oy2*YfA1{GEeMU$>lda6xqM)pBv6wia-{YSB9Jcw5u=67g>Ffr zoJHt>ij?$V$d@Eg?3-zx@n@67WwLyQzTuTLs#z=jDv~1px2Ov>2X=T@vH|YXT;vYD zMfcPxIyLdX$@}cZMqyt(Sgr@wGmotcj7``fAA)I%O%(R7H|1t($2xBcD2%tXgYkm{ z=mD>7x66&I3=pEIqARD^r${hp*XPT>llq@*`|s@>!6MhF*AH~)+uW-vavfR5%g~+b zmtvHPd9RnQ7u96ZW@40iuP3r6blmZud{Q_gVC@pBaAaPC<2!l&ueOR#mEb ztwk{Ju?vtphWO<*nKX%6fzC||t?;eB$kwV6_R|Fx6oKOum&hB=_6-s zUz|vjgrv@A_n9Sc5%cY)R)*{|qM;4;sgx6|AjSzJ+6U9!OY9v-3FLN2c~i1b{8!Q+ z1UHxc+EIwWwabhK`@bN-n2urHbk?v;Av+fesKqY(@pJV)FRf6&9&3UBR~$YJU!d0m zu1q#qvsa4k8%`v2vEQnor8>QM3`Yi8u^C0v-Po2f>SvqZ(b-A4Mzi$@8|K_b3vJs+ z1iG(Q99}utpgoubHGqH`{v*9!lNq{FZ|l<=724%?Jxf42@3uExD~Xm{4zSeZkpy3P z_GbD?=*g=_Dp?o9Y=rfA z8XzgU`xKWV@XyoCdL@sHKe;zK*lh4Ukwp(fl^h-G?u$rgw5$@!G|!v_6W zhA_iTj9&640d=mR&|(WxnY8&ngZ>S7@Ff{Z{{|0JcwNnr%79nP=m4ANzQi{S@;Tqx z`a$q{!bL~q+HySRgcHxX%e!1>6_jm!rGB%kG~gx1IH8ST&1FA-3!%Sc{bn!gH#5$q z-_+aOU!mW0l=((Se~G@;&SHLy8SKhQM{E+8Y%YR~ge^syN4v41_@WB+WtzH^Ni z-z#{_csHE#Muj`6pEfHz=lJg7@8bSg8w2g(7~>74!RA7tul2t_+V_a)emKf>d=Zs^ zwc31?&kO_EL~mJ)WxG#tkZAkY`#4y@-yQx{^f&$N{!X9WU-h~A%aHw@?%&_D-J-wA z1NxKnw*BSj0w-=#I4)VS5hV`HE3hM?@EC{@KhwMl0&S57^->NeRnBtdXgN~@(Q*## zX_RBVXBg$4e`hnL+JeHQ<`hls@auz%h ze%McwFqdRU2M=$5b$zsaffyQ#*b(%#UchfDM6S<@NNC{sN==vfBhMO-Q65kuw>j^L zMK4FLA9uR&ozrG66N-vgY?ca&ku`!-X|ReDKrWNa@&$VL3H9kG`9e;pPY-4R?g;gn z;rvI&n;Z`Ewz~Lyal7{uNm}JBi_8!>Zy3xv%7xIg+%G{Ia*d&QN}Ks#2GOHFy+G>bs%CqTOOwudVXJ>i9t(C|QxZDDHwM|Krl@8d4G+sZY z&s*Y8uO5Hb{xLSCcmb_u?5}ia*b*l8eTP0|e}Z#)E#D~uz1yGf|KBak1gGZ2-Lw;8i2{O9bJk~3K>ysWC3T{Gy8ulo z9|!v{2j!Bz!b`?EDE^Bp;)*Re7qKBou+g-tIC+Twp4MN9U#uXn+Bp|-%2|szg%^?K zt-Hk%{^LMu3AJ)(@HgyY(knYnzu@3@?6$_dxxm>g?am2DR35r3;Tr|!73FQKb*o^QlE%% z?zqQ6fRh+KgM|Ua{t2a&c8x_vfy>>leuk7Vl!7yDV)Pv0(iocqr2vcfK*tyEiQSs= zhmq4oh`|6&cLJEZlY}IoMajAQzjW^tT5$cBWjaebUX<9jF0>d~+8= ze72d%-@&3mIXP*?)FX5OYoncV-`$l)niDm~#+Nj${l;Knm{QmoZ;|o<7{6pY6_2)Z z2j4I=H^>e=vhA-sMTYH48eL#NxLo`|8b6%SJbJNPDclo(j|rFfmUMdlu36SXKl;SA zWnU&_#zQ5U1$j$-HiQbJn?aBj*3w`;L&1N1#0)I9vA@1Wu9se$t=IeEGY@^wN34q? z#`(WLVs2v?OT&Z+cu1F8*5Cw)TrBBTpLFK$+HF*L3!CGAO4A=3^~Mfy2k`vg#T}3- zRwZh>yO&tcB#~h|+M1MTRr=%D z&x$>=KUy#3vrO3-O(;MnHyzVnLiKRk#1%oLH&Sp-?6<5 zdjo|&iT`z8jW{3u{rO*dFQwmPa;xCQ_e8t`(3#)lzV9}dy8Fc|D0NV)qn%3zdRxY! z3vyYDR?3Ddpd4!mn(SuequX4N=C+dFB5OC@fhVsNT1|Egd4X!g-|K(h01d?S)2v?^ zXiqHFvP70Rd-7-6H@=J8?aO=9SAIJ{X;0{SxG&S8yqaj|qry+{TC?02EcY%S%r^d2 zh<=#EHsl*PC(v7>#re}z)ad$_5s(nf7;j zGVRy)_a!AU={neeXx!jTRO^XHo$*k^J|+H-6uh4`{#$xz{Lh_Z{519-^nK;}{_MlA zTHmc7^dC9$UkzN}E$^nU?=L?1C+qv?Q(v*Z*#F+I9AAf6+52RN2S1Pq^#*gghvUc7 z$D61(g6~_++r6?scmNx>d+Fu0!e;9HQltSCrPb0+#-=!r_X}QmwRB7RG{18S_BG~o zZ@ex#oo%$~;%bxUQ4DuH`x1ukHLo=9f;05R?XbJ%jy89TMH7c9Hu{tk|GO$109HV$ zzdb&;O{hFVdwD~7+}b7ha_{@7NSC@34<@(2JiLKLB@;KX2`MA;{PzWlCuXa(DgJbS z{wgirslBjA&~C{LJ(|o%L)hA`?-EY)YNQrm1?O%x0uq~jjMddFY?$SByofg$O~x!Q zJ|HB6HN2NeTRNqGXnv`!@uL68gBiupyQqSL_H5N z#uKYK$P*jjkqej958@Xk{c{eA_~(WvTH+Na1YVs;{dB_qEnE8b%STk=jZIJEpPcoX z6R03s2(A*9k*%TOGNO?Tp4w_(CER0=&`y^IDsk9LMVQ?j-bgjlDsXwF*k6v`r)+an zt!f0+1jC3L`K36uSh}tF^Bl1HSlW7OH1p{`>jybD;z_12=8rz(i@?quieJ=QED3AH?so88!Hx$(b@LL2gI&$ArEg~rEnRg0mpxvrk@??zw`fhyqj;w|w@=7+r1roR{{$q&}B8r95*GtEFfAkk*lq z)Q2N*BO9%u!^rQEP;98QSfOucRQ-BvtqDLWWLE^mox{S!&^h%x&s+qyW{WIi2PEoBoaz9 z{eD~c$27-ZAHWYa%rZWN%W1Bu7~9!5JR?!z2@8o_4ntgyIS3>NsA;K|Hjc9(pu(pg z_J$!o0i7^bVyk}k%JBUztTjG{mqh|mN{GLulYZqePPmd|g%l%GU3;gix+kHAVJo7p zJ!JG4wmktcfoCBOfImPWXxmLNp>0st4zlh-Y@eK>#H#6j?TNxf;nuYH#)`W39uSai z%Ujy?y1_%D;XO-Zn2EB}Sn9QIqVMOSHma?j##%96*JgT!Bg`QKQN? zAgmeZIx2U^7AKPNK5``CAAd>Acc_*Ea^3R?EC0o(eiF}F2s}un2*a+g|6iA>cI|dCic4 zEU@J3?fUm>mC%LejUQRx&L!Y?8@m!sLfw>oZ|vAg4+rG0H*fp|=iwP7+UWnEy#I?T z*#3K)8fH7`I{j0%`jl5)d4%C%Ya(EkcC3FG^u!g`J#IQ{qfusI^(miPMirGE;o8SC z%&S?DRgk>HK|fG=PyB-?H8nl8iT4FLKdF^)HsUe1W|=6Ruqv zGmhz}#v5CV?j^eZk770aW7__W5TLevG2{$Onf@=^vt!q={jU0VjE934iSv5vUy-{h z6Eo2d^zn4lXOvohx**KiO-rt{Dw?oKEfEi4??+xxLOEv1>t}7nLr-~JBEAc@qvS1Y z2j74C;n{=(p;Vpn!b{9RPd)ewKa1b+)BW=h^D#x1h@oTmWu@}D5iXx=|LSF-v=Mm` zI4VN6Fb5!{Yb)A?>M&Er6lz=H0aumFQ5+w9IhCBvek$z2O_0r&PEnalnW|`6_OCpN zggx&`kIR8~FLmp)wQIy1f*qJ4MXEd;@UbR6_AtY%@hz(jkyajGVj-vex%R`g zUhKy&$DF+%3*3oB^>wY=*FQ`wwDU6R#(|x^F7WC4hwp=c1mEpX=`_-=>`oI5qJXoT z_Q=i5O>)_g;lX#`U+C|fPoGZ2|A0M~Upa={ECMJ~1VwOm%RV-!zpyQB{{DZb`S1Vp zAYT8S%hKkLFR?B3C4K$hSoRg`FTX$cRo?|ZnS&t?T*kgv#WK#%e(mAp5@I>QA7=90 zy)9xr*sbOGJA$-3475MoN1rg?$X07=U)BKivX$~@$y3_jRy|}ZE>CMNS9X*+W z9i77{AX@w-W18zQr1+N1e2%AlqucmFyD|Ms`TD<=m@zcIhA!T1@9>LNMic*GY>NST zLAuK4HvP0su`i|LZO`^GZ~#c`K3eFgYsNewN-LiD8jI43uMwiOiwI2YtyP{BR=*R= zUvaMG_r4~UzvKL~m;XPNvzPzTx5e`Rf9$;tcofyu0KA(lVS$BNU@bvbiLz=^P>H5B zLxLud4N(&fk|0WAsg;x>T7G7UR*>LkCDUPTs`!d6uf`TzYOzv9f{42LF$szqeuO{( zqoQtHumMsGf7$Pxb7yvEXE#42_I=;)`97aVvNLn%-gD32J?G9n=U`DRoFUt*XmfhZ z&W?dgjaa#EtnB6J zF#U;l6chCc^Q*pX^_I((X&CX9x zH~an=K|gFj{op@)f%IeLBP#uXPg=i%Ckp)d@of-#Sgk9dokjsL`ClfL+A5H5wzKlg zYixMh*y&A^lOM4{%?TZo@r(B327cFy!Oq%cat22Esk>O8*nI6u9er$>z-<{Qr)S6V z>KNvLnlGNxWc(Y~JFarG&eOJSei0Ux1^cfhy6U?qm&d*ACsZ$X*#NL(ZsA;b{>Z)H zCsDYg$W<7&@t*Az0Fa&FoxYi`P5m@>o&gyQM?jhD%d0iO>^2 z!H~6P_v2uBpO=fXQzx*(Qb&!^rL1Q>e;(b5KA)Kor9UX!SK=A>f&qF4cpRBA;L696 zqp0L7wUuzL`_Ps*T&f1Np2}|Eh!*BAPmh*CZWGTYH0e9IGR)+da4LE`z2rQ{ajVAa zS@0sIA0dU%k#GnG8pXUuTro@T~Ebk6#;?+;3X z*&r2|;T5x#Z9Xq8Ft>>d+r?QO;=DF7>pWlYIE)m>f^(RoKe0KQrRF!cz9Ppzp@u>p zk!KdbpiGA4QJthz#IrOrd~+e&E=Rz;ca#_@@aN}%Hws26r?0ioe}4wulGm!7Rr<1( z9JF+vF*}YbZ#97()q0(us_(@*|D|tDV`c7RTPGq^#cAI+;|!(ju?8t`tkGF-mNLe| z?Wp@uXz6x$S=BqMPW*sa0lX;#Y19F!UvQ zU#Vix1Nf9%M!p7qjwx|m8Jz?!DQLKpkBsGOgfaRfG6H<1Xa^Ltao|2~>D{fh{+ohCjzSuR$rf)qqa2?^jG;x^@f0v63GZgPBAI_I!i0 z+9=L6il4bHv2TH);Q#(J=ee83OdFT^i8ynDm>IACK%6;InrTUy8OxRaP2Norqu`E| z8Skt%@K}gqriFVF!%VQKH1Vv#hKazvKd->eocIK21LV)s7ua(3P11c<=y!akEjlw! zUoB?F@dvq8FQO8y*{TDdZRI)qmz&x|_V5xT?slcjG>I&~?gY+70RgOF3@x|g4#w!% zd5CyQ6`^cfX4>3$&{xJ0&8$IYJVMK@$|rvbkwt}@SUpMFIN$W5->-i>9t#L6r6;P5 zI;9?5Dsz~t*+QCsccO=#z?qIXrCKE7p7HnCqVI`wJN*2SC67pptO-Z>&c(k@@Bwdr z?6}ESs5+mOVH+#Xj2BM?j_3mb*WmHrW5!aCG&5dE#uAbL(hKnt%;PXuSyOe~%+H)4 znf}IYG3d+SePLT!6gH~Hc8(_KPL4C3paL{xeU#G8N)m)WE&|+6RnC-nS1$@Im5P0g ztC1V`-te=P31e~@WpQ(pDC~b4^HyMHW7(-!%fIY@U>*mx^=6cPkfGzktvB!YOvy<) z#keASY75y{!xj7LhK^2jO2{7}%jl)W-C0I8k9TPqm7VSMduIrQr+g|KD}F`W^4?)5 zJN*f@FLi+7<1VmW!_E$~qi%BCxl*#sB-zbiJyJRaI(qNDvSpwy#cnFTHlaqW!+Qc# z5%m)1l=mXuE>|Un#iy!)il71;0i3b;OQy`|) zBg{pq$HYIWSBYRxaa-=tmz-H5Tv~GGH^RM%o{}?HaceyKI^PcU{%5LWc4ry5Em5T& zM~u$`uEc!CO=VO4?CvpV9jMP3pkXRp{jn}uCpL}84Fy?gmpmTj5UV-Yul=;!Lx_Qd_fF^NGp_s|p6sM5UlOnp%oI7gvP-UNiHz zzj;_?&*78S_nT#ZTWOz!?O&7ISE}3Nlh$Xo?U8M~E9Ca8)a~&}>s+OM{##U!5<`>S z?<|7}ynE>Mw)rcM(PEu%8lP`G^|E`4UUUhlgPy<-Z_buB@B9Di^uLAWgcEArZ{lmf zPGgW?K0EcYlw;&7V~WIq+?LF!vT0H7sSi?8db#HMm45^*QFnD2(ev4SP7l-t2e;4*RQI;6hVb{IiZ=3I3 z^apYy3zVek!Y`F^&bUUxRsT` z4e4@-Yr}^y;vBM{52D}uYaH(ni)iCSz0Kv_@^8|h7U#EE_LFmAifr#cfvZ7>SNZQU z2Gi18lnpdA#r?bGA&oaR6hrksiVg%$?$W4IX+=E(9wR!zsM+ z4;uqB_BP|~9|z1vMIH-K9{;tU$>aC)Rq}{WT0h+%++Pdm{{^W3<7EBcVq^M0UeW)L zkbYOSUqtN-SpoDK# zTXiAlW9U1{oeVN{{u0T4RLU|+dJ$f9m_+C#Emm&lZ&CH1Dmh}Me6wUXi8)O; z)^dyJ*ef}#sC4rWiS`!Jaa3}|d2f%CCnn_|5)vhQi>p}#Ti)=<+(eK59A9`8W`fhe z#B+1oWn0!7s8^n{{HSodWN%_XIpQS8QE|CNTHXSniTMDdRdVbVmzzWYC(RmwH2A&j zT&Lr&^_fHi-wR-0+xJR2O$Z?%{k5?w*!}>piJ8U_AaK4P1Tkuo92PK_0IB>D(SB68 zQo4jAF@$kWb}5Wq^CK%r=Ya z9x%n0OHKjqf1j6Wh(^v#Tp*_zH{gzjg>!jWKm^7_&ywbu+=ACgnzscjzs9!WK9Sf| z)nTNfE#PQG50rG#IMy)tG7!Vznz8(M#mXZI_kx5^Fgk`hztqF4F}Q0)@i;bTNA%+y zE?TY~paxnl$QvKCq*)kWx`KY{Qg9E+HABxbfxM}sPmNfi-Zp5O!FgQo{LYA3%7!xV zEz*4kH_+U9#>hfJo#%|g z;~-dN_{HY_%M?{;<+i{L9It+wA&NO^fsSNwY=hDbRKsI~UU*I(Hi~m$E+^kADHAPo zOKVam?SagarePx0XRGnRhS(^JY~XwCEZroc}UPa(FHX87MHbgyA3AGRx%3fAi$O zvt$-R)35+@Ya35j>!o!BpTJ402@|-UMC&Eom!A;LkmEWnaC{s0T-Bs(8_$&*^@(g>KO&4eczujEV!z~Gx{>y~PhFnm%CDU>)X zI#~He7<|@{JX>BF^7{$r=jX&dV!qLNCWtBy)-OVxdmV$J|y9lj9esGw^VG0W1uycZAgMkQg>ayH4f_ z(Qc6E4`7!aj|w!2W_NkUqA|E4qdSiXY;$4u%@pcpcz+a>k;?yTBk3I{&6nDcXuFO4X=6BP`WFDvZbJ09zLhWA3je;RoA-i0^y^SePNNc z;qpg^ao8~6FefFlSei^8RRnKktrO9@eg$( zE3usloO}ULqYNM{1tqEO80ln!d*y6hF~}p~PAlA{POVC(HDYz^!t+c!iQ!~-3Gi&I z?0Ci_Ip4*9TGyQ;0sGw`l(yXSln)N1AO<<1El7K3TTJU+=jc>@TMY2Zip|b1V}OG$ zfj7vW`Vg(R1-6Wo1-5LtKGPCdeomQudD7U^HBrJeGKs*j!D{A$2@BI*5N?RJ<8iw? z&!f)MdqJTW&S7wp@e~Ced)i(`f7?$pK)Q|v_Z{5%y@_`fVZ`{Gm?+|l5_4Y%w#bR%%z)$~n z?@h_C&lmHLy7OzrxySJH%ynOa-);9emz$#8xkfo6y)MlNntHovX0d&b{~R7i3%A0* z1_x$lF%4scFuv9vOphY(|4TS(1MO6NaVSRTw%5urGf8Zu9o6JYn?}lAoPaKTZ$sC5 z$0c|_R=)o(-v6^)uVAQrbHKmh=2LiQw0vhjG;4hnO|kcll6|LW-wI=ZEotA*c84FH zZG;7XEBpkg$bHZLsx#z+&(=Ai_+#8a86B~MOUkfzq(Eg=#bI6wS)^(>so^Q2;w%_W}JokoP&ya=_D*@ja z`Gdtnq$%xg!xX-Td(JbPzHf*6omb4o)j^xyC~&S;efL`%Gs)SoN{^Gxqjh& zvC(%x=^utge;VW{w_Rk3<)|7s#)_2q$&GQ=nu0*hkOtAnTqWv}>FuuF4imZH%J-8g z7)58|GT|T0KL!I9r4&q$5)O)u&JMrhUmAa1gP)IF7mXhRhm|Qn2MN!j6i@)l%~FDt z-_Gv=L0fWz0w1C$yAaKRvx1rMV-&_ZJyFhY0YAaP08UH!##HVly>m*;((C0#WBuWEBYer*tz$b zqk;Wf4Zi-nw6FLAM; zM1!@9#TP&~oL&%MvA?aIZ&-3^QA*Mj@su#ccM0-0Z=K>W;fM{3Psut%Jw@U_a=+>2 zL7=>l_Y7zQ?{^B5s*)%rko_4;e_>P1ceh)Y8AO?Rs&*|NUbRk~e_K0&^#wZnd`6rY}Kb8N_ zRU!%Eim*bN{75znDE;KdD=63BM4ZtgFU&~Nhkk+7@XO?tec%^Zh-gYU9hb*pO@YoB zQ%}vn8oc$F%K2Y$pYH|re7fUDa|C|8dnR>=GE-o);0YtMG!vBYVyugRU&T%LB^-3^ z5KhSSD&l#Nk1D2rS#kJ%2`9vc*}FQZJ(YB6kVc5Zncf8cNo!ZH=NkHjT}OJKs@~K@ zY_FyNivFxeg90nk^mZ}T#_wNh4z4Q9-$^)|f{_c2sL-tL3F$tQ^LP|fsu^OVWU`6h z0=9PW{}$eN9p|2{f%WUzs^kwH2PBMv!1LRD5kJZC0je0lqEGKQt{MXCMH#shR*L%L3^hEzKN9OKzw&mp-C zI`a3ec+85c99G10AitQx9)%d>h*X6rWH`?*|7e;Q}H*O?QohcCiYnd&epx{ z{1I-|bI8x9a7X6yBI3`3>EtT6(;}{R;ND<6~X;f z#D{?R;EMQR3O?#1;=>fg2dx2eA({77YrsQa3=HKbWqv5SX)suZgnNbQ?R-7A3ag+b zbnqanfJ3pGut>AI*KK+Q`LqR{)F3^4#J$VH=kwp6Yvv>8e@m3V;n`3bHx|#q{q=-u{vbDPk2FZ! zBR$&A@8>cDYG!2zeC=Cs=T>~ zPjQS!VW?xX1B5gvM6k#c{1*k(M_?!`OpqpD5dKUD&wA2lL3`{jP-M&zFzNzJ5cDkf zMhnqDKGUER^%JV}wD$4voLE(>f2FhzwLgolNB8;|YyTQ@Wk98LLr4Q|i@w`yjel&6 zz6(h!JICc=>+L0v^vT|`0)sE02>E2`zIL!14KBX}v*?DbeYC&p(}T&C#7%>Ld_#)L zUCr*Pe&JKG2BnF6*Kj!tS~Ylm#S{trSs?UDvCrvzn`ZsAh1%!V2i!bz--|f*~KJWM6(v83T{obzpEcGhmyAdK7bdF{(kDS5$Uk4crO8V$fd$xD}ve_T-mqXu= z)`1>#hT5LvKV{ysFX2-jniYSE8~tD`aa(ZA4EHQ_m(%n|uo^ko0N^gyVA%`aTbw`X z4!`>`KSsm5c9&(_MhQ34ISkxQNK%RyfZkt3%r^=Qoh{G^6A1X;R^CM$d7b_myER0v}b@W;|ws;7F(1QUuXa*`X!-S-$Wpvh2FV$&*E8F?=1}G zPZFB&l{)1mqSybf|7>5_AAO69dNQ3x0HtwwX(WA{;0vnTIE)|1QeN`;;JAf^7Bkbe zmw>K4?lxTRIMj{0?UsK1*0*eZPwsAg@2h_db`_DR*Z%OA?{@7EA3hsY0k?nJgFhUq zpA>!1mdfIG%+`_iu;0(Ofr-_|W!3;eE~j(ea>kX%9u7&l15-fqv?VmjSLLDqv3wV3 zl*UO5+kr1np!0c(%ly!_L%5Q(aGrb)nsq#kaakb#5Bw<$b}o0Vz>7hw?8JN___D>uQzgpS}wi}HP+F?+HeGb<9a|KTBm<6{-`s+`eJ zRNA&>&p^38!yw{8B%olMz?6KJtmOG4;z9B}9Txi9h2A=zQB&+S#<21F22m~re<>S( zH^YNDMAxfFzkd%BTJ{%%0E7%qr;^ z0e`Zq!N1zAoR^pBF$fQU0uNyXLn;Dsuy`rrRZ5nowexkwISG4sA2;oA0)|$lp?Ib7 zHQ?wWgCR^v9k1-N=|9kS63YoJD9*^BI;c>@!k9k-MeYEw2;{u*XEzYYTKVgh|Ay}q zZ+y3_-~Jn#!rkf%Fp>>HIog`h5&HcSwZ(LU6eZ09v08a<;>OqKI|j4E)3hH9T(rx- z2lGeMJsdxN^2EEL)j+Uaq_m_OOo`A)1v6y$Y?IT1&nJdHC;cQ>K$q^atUNn$7Bo$8 z=h?>6afdW`g${^MeaoPH(TzuEQQ>cc&A(eNeG@-BTtBe>DN0JVD5*;_g4(u*cB#M{ zH+jyi0K5}w=p3yY-^R%c@wpM6b6e7ehcu9J5PCf^cpW-l>&mkw;q#?0-7~iKW4=oN zu`ADR3h$o+IZjpfsehcmX>yBd{v$%>-vz#jge8>`@Xc_n#uwqVhyDmf6C?E3MSGgE zF7o&^hsgLduRQCS8HPV%o;SAi8GrGU=iJ-9yez!8*YYxFc4T=O**EyQlNZmMUCB%N z?C#~IV)hRvFPp;WOUy9t%^yZyTEhD$=Be4-4|y>c^hI8BH~+BmqKnX9cki^dKa9Mjh4)X)b7SB7XY#V}{=UeIXV4ET zFAF2|*PXniMIOIk^{oYK!jTLhCfLLUHjDR)>*;uq zSz5qK)L~dCdgBXhM(6j+9dE0okQ=x={Lo6fi|fJbxWWG?gMLZk5W0k&T=n{vyl z-ead@UXkzP4#Jbyu^4JBBnf}#)KOv%GNL|wlckxcHg}ai;?}L5ey`;Qd4E=+_XL^V z6BYhRQurrX;h$86f6^5G$>^GY;^h8pUGVDz^7DDhcng&A7AoTj%6N|`<1JHIr9{Ol zr7Bh_Q?bfw6|0m-V3q%09{(5R@sKQ!N9KjgCcqR8O3SJrUAaKguW1{`2+g^)!U9_pw|5iuKw)x(hZin8gMf-LPzSe<( z;x?3HEC^N=vU`Lv@(Y_b$uTH~;P)FmUW|Y24ODdUZ~_oAM~Q@~*R?Nsdwytz#=0~! z{AAe!(pX}}G*&kwEsj06!T(pm{}1Spm8#@;7}37jd%YnBdf$%b0R}|bHv?1vvK*Tt z8ND|@6oc_9cz_pP@U%`Jkdjn;!_v(ck@t-TWAut=9*ec}woXwKnpKE~5D8KBu zpJM0>J)Q@Tec!+XlB7$oQywTWG0Cq7V`3uUzx+MI|MLqp_&@Ov!2fx~f90*c!vDnA zBI1983jc-iMqT2L#N9Fhio~p|ksLaMaIthK0=BCwSx+KsvMEHULNX)|>VXWE4~CK< zwRdFD{WzQq>yiRw_&h;PhG!;d$?#8L&q(;6!1#aK!&?4-74Wb74EaB+cl`fqMEqx{ z`Ty!r{-5B8g!j6%;qd>6Zt-8A#)9(G;@O`G?B$8@e{{;U3Dg1vE z{695}TECsp1GNUt52e&|5`(@ zs=ouh3`nn4nZ2TyZex%1y7sD2dZqp!px2E((CeOgeWKT&t`4Wy&4~eeIj>gJ>n90X zdd+yXD|#(p`t9$FH1rz&3ed}l^xB`%D|+R=5|LhcDtav+r`2y3(r?)j=>|G%MDK}J zpEi-bsHIUd{LjPxli>dp`2Vi3h3UyjJ<#msqEMO*?j6m(vxU>_x7P<~_K8hRvz6Cq zY4+mZJGJ?=BiRRxeh)6u&~N$%pq~lpH)?9H=vTg>NBX^UMP&LF{O{6lUwRMp`|5!{ z(eJu(;q?39+5r8yaccTiU8SYpXMYQ$U#nybseyoJufY7T1LImwH3&wt{FZ2n8N^IzYW`46}(Fn^dUOxiu&C=QqMTcAsQ zHI=J`LXR*^38b0w3P=*KkpxxFF;KXk4VlX7C*(?uia zAH#YpMtRSMsPUXbWG06qC$2(`91qtYxsUo7wz-AYTuK- zn8L)wvOJ(KZhPT}6_CNhE?$%D+u5@w8Sz3;lLVz@*^3v+5D!*_FhrN~VrBAje&Ha;?&BHHBUfvvWaq=>^>-Lyl zYZj*M!aRu&po78QjgzoUVxA52sAiB%;5I#j7gMfg$#zT{8;7DxyoF!j`RLSO&e0#Z z|A$(-?_cO=|Ns5@f42WuKkL5#NBi0T;U4hQ-~Nvu3G3eq&lI`#x|v=Mey`U&FARSk z0$*`|=idW<``iEV!`=7)P(S;>tOxk}+yAvaz~5i_T;7BH^tXR^5BTY?e7^G^)-NB0 z%g+xgpBMha`ekSj^8f1a?&W`Z`12oBJ}>lu-~RSL^gk^BlY4-_zy0SN()3UEaz5D0 zl+3^$E9R7l`Rm>JrSlcoGPF-kG$WNWZYu?9=g8vNpEv<9(jGMVF8d_BFwl~TQF`ysH--8nmP&N;Q< zyc%q{)0-C*dBl-YeuH$oQJi6r z@^^|ejKY0jF^f4n<&Doe9I7_OUc!~$&OYgTPY*WgT5qPDMzpmo|62k`gk>cZ&8B-yalDVDU4usk<6(YfRlT#nde!Q@4yv z-Jh>v-xF6JLrWN#fXH87Z{NrWzbOq|05N~FJAX~Ree0XQMMq$@ICneJ{*vFzwBH+` z{oZbA4{!EJ`0^0KuO-5-RtUeB5q@GM!mm{bzXp-pTCNZtsZQDBghg)q9(PWYsP!UeseB}&e zBHy2$Mo$H!(em5{l1k59i8A~xZ zbRpIzgPZf6$jG`MW(?~h7V*Wb!v#7A@?Q57kthIq66kQAOIrz5jh4ipu?o+sx zuwHaMg2D~5amIbIdU0W7z4$B+MFEqnZ`?0t;H9hNq=Xna=`hO4CJH{FFhL7QQKa+Q%k2r6_2sL)?WR-s%e7Up4U6y8hRE$h-E z(abk-rMJjH{$l{>QLK&@_#UUyr!*z+n5KX}-O`0VrPS4m8Xfs&O$^{#*<7D zl*SU0M$7Nmz5(get&Eo_%Wf&~QoVgWZ9?U5bmy;zr8F58D`A@IUzC8ZO(;h$+AP}3 zkcGBL7pq=NBJs~Mg@2$|WF7!U%{k>npo52yb6{Pq744l-Nv! zlatpI@#OUV%xrr^Hrp1;W?Mkd-Oy}6x~FoL@DJQc9<&FoLO}EwC3W_2XYD-k;B25k zKpvX09^e{Eh~GRZ@c4fN{->M%6YvM@7vg=eU)Bb4VzTW_ zp!=O=AZGTXQjS&mS_CGc-6~Bt0GCTTvIx~*H2kY#bO*izTM(L?S5?k;+YdD_qw*^8 z+`GVR!Tn;8$O=M)#>82xGI6}QNKv?DZ->RE>ut@^Whh%~rTld}s$&DYnQOb+&0H%6 zcQYUVt(ITA!`EQ8TqF;n!l0vt9b|-w1v*KVT(wlZwV6qU3EnHwNJZtv zlY4&eq$1kYXL8S56>^@nOMDraJS0EY6~4IAuI1sGPou-+A#GKdJoEuUXL=_OUpV`W zplMHr$wOs-`E_dd^3d=8Z;UJtTUVXZ0pi9c2 zf=3uIH$i044|s0H1$eV2Q z4FJBCarHUY6iAXlXo5FsHlxiXqwH= zBuVM!9|&J&=~h!H{AM-$vECEC;aL^FLKsuVpIOGArN{A%-rol)qv7E&e3?V>WeVbJ z!In^bDfz|*Va74^oc{vDC+>DWZtx4^q#=0c1-#>NK8AOa8$me)GD6{gWx6pX-Lxd0 z+oBUQ4T-ybAIf)rig%_O5RgZ;WbX3jB_g}&M|N62#8^_vUnK{m} zjpVQ%kFV-N`l45)WEjCtjBZ_4ja^9Uy5iSD9|05r?SiVTa)BN(H7tMGD$v9Gxl;#h-K+4mEtg(#c2_*!M{i{I-YwdVgQ6td%^S_0! zx-D$g1rQTDeuf%Q%dZ9vzk+^ja2~UPDWe!Q0$cBc7LA!K8iB$pL#>(@|88Iro!MBu zQyj_G2gl%)8@J)KIeWFU)<*V6h<#&`?lCb8*uZvSR!zKS@u0=ajn%(j`3rIpDMP^m z!y<1{HQWVRzPkFjs;xq5H$oSm4{_3|c#{QP|D_F<|R6tn48G&3t7)8l3aW4E^!?(dI zSpa&}S9LB5Wavf`nzP=W>zR`LC8~`T(2x{H@dVKhE*c`v1brI$Hb=EsM`fi`#T$qW zKMv|%=Q;h-@nSV97jWyUzLoXMw`t%`dbrBnqW!#>-{E_m)<;3n2XBx*Ah{k0a^riZ zJn)=!#51b-sXPEoiX1O1h=6((?5)qBF})P#0{Zfgs2HXh++{kO-w#F=tYO7@RbLE# z2RnAJG3#s<=lOk$(`oSeBu~OG+^Mf&hDxSK$4jH!ztzPnZ!g{8eggZNOc#Ureed8D zmb|xBuE#zR)top@*3oA@V*9^Z!ne(Ay9UHy{Q-tE0Vro^PH{4(YU z1l+QK42H@b(xX@28QHtacyXcQu{^NM5ujazJeU&$Vik6F}8g+SjqDSK&Yy1Z-KDF%w@@58kGj%I(sZ8E>ofDE|Vf)!jOxWh5ussnF zHn0Fu+M-m_R@=R_U8_i&K`m|2O=ppqf1W-pDfUW0-u@Ysx94CT_5EHWZ@&+fH**wI zp^@b+GfdvN%4t!(6Sy-Z4Z{8I)L)~(?dkw|o4{3u3fy1&BydILG{UqON#0&!6K@20 z+ZifvUHePc7ee`o;`bh5hmpm(JA<2X1^*15;%<2CmDlIv9@kR~17|#Rlzu1QC|Ydp z{1#Xc>CP1^js%srOAg)cLyA-_=&^ciT^4 z!)e)cj=@(?Q{FDxH$j)d{zgD2G+hG7J9=@a-}ynHlP}~>qM(yp-`-I1rhK$u|KDa1 z1^^gT|J}$(f#W5gd{*)&7f^2DI4KuXuwu^Fs}nu^?FNBUl5)%TD1T$XV>P0Dh)HsO zr8;pJa-sNv6p~+7wtow#p1X}dw`8jLvCkTmUvCO--_+>Kruv~5{xfjWW4L!miYI`h zfE1G}02bk(zfsl1aTrq!cd(r1Gsxw+HJ00Q&^;yYwBa88Y%Zhv2N@q(VRGE77cqVd zj2{&`e*WF!M>A(6dR898O6YEYqs$QP^ynw+;L>qQvg_RWmq}^X$t|w|((|Qg_wp;m zBhGKmi}uST=XrFDo}hml6FNZsz)J~rRjpB{UaqrSG2@C6Z&7rE)#klrBqcI7z_X~8 zwKyQ^jT-lMO3Z?57A}Ek`?X?DbePpKT(+#f*H!vofj5=GJ24F2XD`EI&}o31O|Q@A zTvVPn+WpQII0QlNq6Xap@45^WT^Rf;MiBfX*khPNsxk!_R~gZ9EAC5AEX%N6U$V@0 zyTYU*33ktfhEa)koB zSz2zCuu$|-ZcDl~RWFPv^@tw|*Mpy{&@)MF!%-7D*hl%JD5p;khk@s|Q&N7+{_Q<* z!S4^gBkYv&k7E7l1LAU{m~V!r*igyo2IFH%T*+bdz9hdFJK2nAxx_uU13N7Y*-sHq ziU+uNPl^sBJcfrM$@7%;0)-#<@5q@*s3!M8E~-PQXOl=s&M-!})} z4@O-m`zHmm=d{2!kw3NAq)y2%e!^8A57u)WDGe0QV2&ZAQLYg*FD!+hIBT#3;^&&` zJi-12mOY&RZpk%nyWV|YR6^4(uX|Z$lrI`y>KN6I?tN9(l+Rz_y+iG;7ZXx zDxMC%_3U&f{EFgSxVKtwuqENCkl`yjWpImDp4CCKJ@9bp&3F+2a6pg0CHxZpn4%nu zpz%G}_~_%Ee&4R5a_Gj$m9AwSnjF*N`3!tsi_iZ_&*Qk#Kd|R%jzoBVB|cw|&wpQ3 z4%d_LdJSH$r0Yz)E`{sXhe75OJqUn-bN!qhVEGw7EyAa{xZwqNuA}&EymK>al8rZ} z;*D$BjWoP*1KzN*8}WGK3cN9d-LT>fGu}Ac=?{tjy4$_-AE4Znf=g*B1#E+UNw)i~ zkE3W?%bIvPU@vf$cKQm*RYoHVEFa1=e9;g`3s}_r1;-KG<-_V^SS5~!&Wgl|#oMHi zGAZSu{Nny6Lg0S>sVFSFVa1}H6S+#@R-dt)_&`V~a-|6ET;Hv@julH$ zdyCmNt9R>TGzu8iRv4))+P6!iPxDx9J>bw4T;=ZK7@Upc5BC}Ak)$KU4FBaX23n$pCdQs zZ)Z1rH!P0KxCL2u=rtHE!sRmmSN-i7^)jv}2< zf_4JJ%*xS^dpt(>Qf|`Q^XYrN$P!pwJs1x@Zbu_|#rPRm?_kwa(JVI{%VeSI;E5G6 zI%tcA`RxWN8enl&>3Oh}b70K(5cU~HKHtNwdK7;bZk2L8VBXgmVke`Con^p-7O{Gr z6os2vv0|YI@%8c`Jd7#>Fr5Gx-4y`(6;xv$4=&);?AxVWgZo}R9to|MbO=e|R<5)e zZK1mWlC9jT-{J54%?Qj;oO+$XoPxm2B4Eq_Ouk353>WjaB1%UO3PZ-jQ3@1A{P5FZd75QsX1adL2Yu!5upe9SqTfgY^tMl!sJ9-s5l5crm3jS6eKQ&idzeGOo?K~!k zIU8kfT+H9=&IdQVv7-U?Ra413sITyRjQ83($RZo-b#37I%GrTHMXg5_#g)E{k_;EK z46bIb)P`5)dON1Y416DR+BX3QuLqBr^wS1KKOGx@`e_sBrwv;DbV#q#Pa74-{+a3E z*k7V3s1aiRChW#FfcO-;!AofFmC|toU?XMn!BTDa>QiQQfO0J!C}o{@?RY$nIq#~T z`RVc-26_XO07&6RNjDki%(>e2beNfDF3}ltpwdufTy1BjbOTdDo0t;X7y`uxfMV8p zS2IGfA@s#Ja~%j^mO`yoD_=f2mx}s z+!GowN4qEVJ>VQ{@L*vzW_4)2Bjlw^VhkCLVxKz*+F>TkkG zkM&|Yh3Tc6+MH?7r+#4(^qJ#nErveH|Cy)i&#msS@5xlbXvBP~^5nfYse5hs4UAt! z!B?9BHW?cL06qsR%`3(ME^@Ylt%JCj4scH~=%I1FJ{QqJ85F2u7@kQ~61|lkFwmL_ z$a>*|-yb3WBF*pBJt|24hm$W7QlcPKK#L+4*aRld`UGGKg@p z(c3T+ak4Q2PO>861ZU^1`GVFL#K}YF2q$Veb?pk3Qv>qmGPeGGhWaz9`WxDa zAbJ8_njeFvSw;oTvO3%z{^H(GLSJkQd9iFBd(j#G;vY3H>XxZr^vW;Z#$L=*y?Fm8 zTEbfXNApUO=-d@xg*_juC^1h~Cna5p&M;z$3h(5(C^{7pM5knaB$gP8Lp8M<=nEU* z<%W(hyxjJ21ibtY=1bM! z)T~3)jQT!|*RKC4l-H6&m^4Y|wIip)UOc@s^hIyTi(BOvUk-oq9nFieA>1ANEB4}o z(_~0Gmp5?C1>{yuA}^!CZ*x6heH&|7CRs_isn_T7NDHD3xBWw{d-#WZ^5T7;!*VQT znY_1|&~GaDK5-eg-0Itb7eBc^M&~;L)`@rg_2}2G_q~oT88jb5%~yM)3uw*q{Q)mx zSaUFOp~aaY*rLp+P&j&KmFQ z*WtixT7OEsP=PPKNH3LmfB8#d@YXT(Qi*q!-19nY^c!sCMh^1c`E#On>nSj$+_H@bgi1u`a+MX^~+tV9bRQB|y7L`4{wMAu5 zm$s5>+eJ-t?KPp?B5HpGxqfEdi4VMU@z_IV?T-M!k#|bjXmAmojrYP{r?$z`rSJ9;`d-L z?dcBGj1leWW!>1*d%Clye^M9Op3eC)CXzjUzH58h_x^v-o_^|mwK@B65BBuJ<1t;> z)7!hYr-yvhojpBN4S??95PLfDnl9|=+OF;CcWOh||8)y*eiSbYGzMg9ki#X-5Ri`7kISx^li6=+S6xs%$}a&jS1S*UyW1j>E>~v_VkB3 zW>4Rk6ceU#P=>pVwDtmgtIK`g6e_WV7eW#Au z)6d-!6Jk%_G)`qt;}*DVJg?wmwDz=VT&O+0RX!h?ZovFP&JMj}sHFGLF(}`6PHE!< z0{L{&{#GT^nn2&ex1Rp=bvdV&oJs3LJEFTBKXvM);d~?5x^$e)jK&0gW%@e;e4AMs zF6NZEc5|h8`d7{$?0wnS>4!Ehj98N3gr zxGnZ_bOrEj-#3AHq5KAy2X5)b{MEv%qMQrH!VYnaWzes&m;0Vp+Jm`3pZi@Yezb4# zRp0Zf1X>kjWMLYu(SejMYN-DB&On`W`D%YivMgbMcgeI)zxU=U?e{>rp7Z|h>z`Nb z@2dX!ObY13@YXoFK<%a`Xv><}1eU1!CKQA-Y2DGQ zhkEPU@gksjx@J7FyYaOBML?lm(;wdh{2}$)HS{vCJgeIupjQOuUh{S6U^{QQczVT8 zE@|#w-piYNFYgtHx|8>#UxmVJy-0X_A@3_SL%el!kMiDjsC#+W9sc3u-F&z^d9OVh z3jF!W{gwAQhr5&aJk5BkFLFF4@0$+yL*93N84AK6EeINU>94&1Tr=MDsr{4p;hO$# z?XJI`<-P4-ck;gei_pOirSwJK+dk{Q{=BZGD}4|y?-M_Vwpj#kEQ7a`!8-)u-S~N@ z-)+bY08Gh~yr<_Q)Fu_wfqW?4gU`;#E;6z*0%d{m@(TIUeHV z#CklpTYMQ9slqIm$03MQ!MBOQvI6oMYUmt`&MH2WcmNHiOJ^~RMq?O)IKxO0;0u^} zxfFVqFk8oszSr6QCATGCS2n}w`?GT1&0tF%_x5~md+I>S#~`+;g3ZeneN*zeN}op1 zH|3uP>&1@<*Eh);eUsFkzNrY(CqA4$rj|(bnfa@}(kER1v<1hH3m<>=XOYI=H?Obb zGkuiyMG$|MZuL>buDvI zM*=eUMp3z%{uAW>6d7FOUK)@;fe*-EFnFpwp#P5cp#Q$Q2>thUxBBl;MEy7SKdS!@ z^-KTF=tln?>b3s6sayT`br1UQ>mN}6eci48YmTV@9{2(E-`Cyhzk?C=-!J;9|Gw#u z{yPv+|7k%|;lH2yFXDK6?(ehyi`btta(}(je_!^b{|@w5|J~V*{yWeo{g)J3|ILtw zvlKc7HY0zq*cd(C!0+Ln^URhp0_f!Rs)T$>zODjW9L8T<)zs+^WHLE{F`2k;HA;tp zN+u=jSUsK+|8@`NT$+d>aIR*-;5zO25k@MZWh=)(Dd)p|`V@?nOW>x#AKxHXvwNyv z*dx|pdIRp=jLURlDjW3de%ve*j)aE9$@QLCT`HCW0t3P+`UtZm6PVT@kTYix5C9)$ z|1!Cn9Yfh1WO!h7KEr0_GT|TJu%dD)(LKvQ$r2+R019;Y9sknI81NUe1FFH_SNkp+ ze*~Wrj+O-&Oan}202Wgupxu59qg^slN|50d3kXerVN(+;g>8=dpwWmHMUK`4|ag104416#ohEvhc z8m{gZpK~JMa|RHVI=~$NM%Qk~u-Pn-U&-e_#h-$4ID@!p@W&S=HYQv3j%Js~o$Gg; zWJ9Y_puykVy?vKoIe8L)aLIM9(^7(Plei!Bk)ZG!%X2glC-$?wgsw}0=lIVSACfsv z!M51wJ1KVfzEk+4OZ=2Xzz={UVfw=92F#AfH!iVCgTzzf_mix8VX)6qE}lbtn4BIx z-?;dsLWFt9!tqSYx);aVE*&WKX- z^=Y3|eBnKmK?^6tHx;KR)PRPab`T_X42*Y9FI*<$Do$j{M7?A8bOwXCxhwDFHOWHl-t6gy22PqSi{^u)9a7;20Lr?&N@Bs zEuKE<4!`>`zu4qB=GtABZ5t(Ak4qhqBMCVnmf#(@oA_y@*u-stMgUo??`>v(s?`_e zcSC3>Nn?=SUGbMWGJm~I?0U@1_{0X_1FtL|f=MNs7%xeQ3DpGSS?=AldP*UH{mt7& zVD3w3!?ra_>k#^2z7MfM8X*p6dNMqpt~P(J<~scSkOaCt@Wb53e(Fz*VFw+`A6cr> zp9!bb>hm(nL?q)RyOD4*oN3M0WC1y-E>3raM27Tk%A(pa!K0Hp-MhKnlEx6rq%?d zew(b+`6J>%E^{B~$sdttk@5IH@d22u!B!Co^zaP>b#mp6uxEGOfB47dYI|CpgDL#YFdd~S(gznOwS0Wp*n1@l^%L2^uN znUvS_Z}mKO(uf|H#ck2~MoOdI3;kTBb)@s#s3QI|p%HWlXlieS)wM_e>#`kvU;of~ zKoP`zI#!ooxEb~O9$?}nu=FYG3!*Q(5Y(J_RxpDaC`vI3W1XHTn3v-e*gd?}R@^Kb z#D>7~X9zBZ-QaU!1bm|ZRVn*la|U$jf8ElJ|MloKz4yNk*Y_2FD22;_2?fC2ZpT1H zag#fv@E+jHby_&;@-r4}7SD<&d`8B7!biZ03JV&51wWllJ!?#ci^X5i->U4Tzg5Ir z(;Wwy!*wFe;ZpXG&}u1O=4xKQLtHcb(6JhC$rIeIa zEPpY7sW3*7H(H0~hIJd>b54P)0WWnDLd#U*rG#we+|2EDKH3WNEfFkfk0k*JU89)1!}hZ{E|#OVle5B|W= z+CKS*Mm8lItnZhD=^w`=2)x5MOxiAsHtBP|z-D6};#cG0CtSuAHzS*HmB}>UTs`2+ zl#91OO~SmvJ*?I{t1#V_y@-Fb6C_aF=kNhH+nmSs!VA2~COq#VGgc| zus9eJ9hW=nqM)6l6>b|SMLlx~e*ynsKE!>#3iW)t(--Cl`r_`H)ZGlso&>b!DsdNL z&tfB6jKH7Z6ArpfKXdI6j?40#2=Y|L^gq4o+naDkY?!^PgSnFbyZ+$N>i(>U(*sK) zzaQj%>4@N(rtoXR*%aK;ZbbEIm4>?~O!1kV$D^1UpCUF&CY$&zVC#MU-$Iq^IQJ|# zh}^SP$salnNSFhgtK^ILNsgVUA^?j%z2kUr5X}FoRtdD<)-^rT`e2VR{cl0=BUvNo zgx#UmNKgKvOt0Gv(g?TZHZoB|+IQ_g{)GHT{v>#iuo&%Q9f z5%-JVif58P5Jo#YF`;qo1ZPXsY_Koo?;e=%7n6`Lv&C|i!-{y$5$A-pDhfpw9>m2(h~4K$OA(<3v;C5(ik$zgnR~Bb0}nELE$1~ z#!$%A^%V@jlU!v=5zjlWa2jk;n7j?3YbANcy&dE1;CvW-J`H>d_JD#JFxxC}&{jQ< z(r^lQl$mSm{r$Tjdk1;&Xd7j;-Y@0o+?GYOsUIuku?hIu1opuMPQU~%clyInYYM3s zfyoU4zg!VNOu=t`MEsh9_*HwvU#QlQ3pR~MtjsSRML!L*w83cEd_A`c^Nc2RkkiE1 zA+zk0XH_5#a+@Aa$+l$)(_K4oE}yc!MTIWsk`D@_oPegViJ29C$>J)<7V)EDK2`PykG~2*`#;wA#90@1E+03j?I0x=}rjPfE-xB``zoK@7q%rQKMZgJG zcj{yO_u@G~VyuuuIvGUi6Zj*3ES?chB_AM?#fHt+f&<24?mdzhS&(SHHS&DD%6u)s z`4&W`*YYa|G8GnqH-CO5+BZGu(_Z-h*ctQxuk5Y=Kd@W>|CSK{A0Y&TPzH>721@NP zN*mg`4fH^D)!EBo;if7u+!oKEMtNY$&t>med29`CZeeL$3ZM|}n=#a2?)G~7CaZ@c zDQ+G321O?S)`CR~8!@QC-hlOVDV-8pluD)S4I^W8ZaXIU#)t@e3oEtm99i9157=SUd%72D2CN6_Y(GqVJeNCxLzAw9^rWk zbx?;j)UL+xiw1X2Bj3R8yuLaRe)0WC7DIyRq0BnDcCGJSVh1T>Gg zoAe%0scuLCFQPOM;~RZrXnoFK4MfBARv20mOneA$P@=zen6OPMTmz6vIY#dVB9V!= zuPvSecafIR5}>w7N=Ow9gAv@`EAdXwS{Mln`e09#uG4_sY+>CFhP!o28bhQi zOHxn4(brrHQ_Ek6Q?uB-zpw1{N88u&_A+6SdzK#IE?g&N8Qk~i#hle*6(-Xw1*Q}- zB@o{Ha_-4dewMT^a^k<$p@aRF!m=t@;y=vYM~VM@Ta^5WYutriB=?oSrGOy5i80Q& z-v)B#&l^q@Bz836361;4V(b~~{@f)41H~xUN%jrE?MWEOa~b|K7ylWE=SecSA#!m_ zulPG{K!tW%Rz&qYD;Ayyx)AdexPHE^}M66B%G!tI;9b)WKg(eZ7oZrDt8Bu#F%_v`%Q~vct53C6${@@aG zIrr}1D$hU=dwm1H$8ln|R=<+<8%vwr*hy0WrcP5hl{#gmUnA*M+s(30H8Gtkw~U}z&rX&V zt4XXTU9;0|m?CS}YEpwo=|-vVF09Ya^y}QsK)sxDu=kNab4bBXXZQG=G7wsLh3VME zvW{I!I(9kf*eLX@BkS1h0Ui5nn2w#Zis{(=M&-^Os{%UqnPH@3)e5!>&mYP9^-Ya_ zeYp$$dj3hRem!XJrGCBjjh^-EI<0<<-$D8{p9|>Mdxw%>B<>E;utj37QKeyJaz;?I z<5OidYZ7ayoGegpYCzXc*6B)a5$zS+s$I}p?@_7U5l=F;I~u5$xI-#jS0tKpkubL# z5}S*}g4`&Hir*ShX_B5?Lo_pby^7MUD83W!lG3d}E_u;KdVmJyR?Se2NNE!)@Ns?x zYT!K9ZBPTRQ8e(nZM0p?G;oVX1FuuG)=%z64ZK#?!1ezG6y~o59z-R)%snd#RZ8L7 zNJ{t)MF|h+g%S>o_wp=?Ol3+Kvxg}A3)|2X^Zg^}{{-~$)1@K$_?gmxK5iO96c6g- zqH#fe{Ggfiv2*!`0i=_Gbk9(~8~ircGS-mRv+AcwixMrju-~MfzZJFWIhG(-PM~Mq7$R2z$sGi-wR~mYEKN(QZl}=R86qKvg&uQj<>gP(PpQBJe7x!O3<1U<} z3tHu1KZ_0Z>CB2r2P~?l4?8)ju$^0oevow z#>r_T025}I8j?A%e;&j{z&_74t~^VP2PAqTt|)lm(kN>h8Gq)Fngt+bX^W97o}P*J($Z6rH$R zoMAu{%vl@94v|=b=NH1xj?TYIb9Pj9`l9Y1z*Xo$NBcG^=e0+b%`mbmsLz*UeW_6V zhs6tZLqBnN;_f1Gx>4Q34@bZ9krzQfYJ5@js~8!PelzeqF|s&OZ=w{%H2+R^14jQXQhdNKZs=9Kfi=9p9UCI`H!^a6Odi@sy%C7dh$IiX*x>W4!{nh-BM;a{ zO+Rh?Lhg^==steo&JF#HU-Pn~4XLdc#rA_!0lqn~zD~f6V6g4-B*8XIT4pP7 zdKMr}PUFepG%90>b<~)}U_$9G0639Y8Mb*MD^LG`$ja5vfxl+2)r_A86IR@f8PGgj_HdU^dWL1A(Ni(L{O-r)4EoR^Q=-+0V_)O!H z*hG)72I-x69Qu2Q>WlmSj?ZI6tlN2l)lA14o{qh&tl}D0KhmzF2Ccyc!rNkXYms~c zxOe#YI$4De^Tpu9#Qnb!9|h8OTM7GGBmg=V0%}qLC654lmbs@bfF9`7l<*A^LpWSOC-n?)Kbu^m7xjp&cyN^Wi+FMn z?!&rKfYsF9=?}Pez|BEe!qPqUyO*Ub{=tPYgG-|YK4Z=?oMNK41fGk8!G)h)eAr>u0icwK^kyfw^yCa$3 zuox{UT4>Q)#flXb2_n!WU=kGD2#8UzMjP#p0eJ`^`YqRl7_w#JjpMW9f!|nN)4fUg@`HKe#OAp-}lm=~lDC{&TivP$^2SVEl=&Vpi zLizkW+M%43@@V@abX&8?Rd(<;aDuTZfMy99i(_vi&x8Gr<)=oLkMyw)H_Bs+rWB~7 z7#2zi&N=)ZuV5fczGDhsIQL!w+VTuXMI78ucb|fnwpBq;q}Sm)sr^yaM1Fp)DH86kE;8TyQd6*?*;-#_42c9Z1)4F2LtA{XI7SU?p1lki}h z4&{)vvI#k`w9cQ5XBpz5_WkfU#NsAzXMbtVi>N4-ykZGd6gMe*q*vb=2Fq7^46Rhw zJvp!(r2rDes=Ld}%MX52+k0+pXWXED@^)pL`wT`PlJD;p3O-Us*(v$K2feUjTavA; zE%K!pX3k&M2&rUi=ioiihCwP18v*xEwc>qT5E-Dzi2lt^$5<4u&p^4*x(fF|8aqkG z{leffEl!ea@N(Bg;x(O01~L#Pf-_A1UfzOM-h#j3)?Fx^ESP6oj0X=6@gBO!{S@A; zoJ+$ct*g~Oz#Uj|JrMn7XlN2Af8Dx`$UjiLsBtvH((Je3m!?LZ_lEHfvv$s9ykZ&t znd_j_O%^$p;GY$={iT8@5&Io@mJKq?Kyd{|F9Tl;{t=^wkzu}rrm*ps^`mo9iVNUj zfm&Rs=AqJ92;Udu{XASrC3ID);QGQVTvg-g3Wdr9y2A60C(>0WTuq`YT+bDBg{yc9 zUF9NUhQZ3`oYzfv^WbVaUF9RgE+i(LN}H}8;s-^~2;|ercIl#9n4bfD1bIdPc?RPb zSZ7l3%hQk}IFt{7ch?bzc^^2p6FyyqV}v110~f4ZM7}7;1_#)LW4F0oXLSA zdtkidRDAW~UjS$L`yRk+{u=k0O#Ws-N7$Lg{AkcRhXpFzYu_PVsrepOMc=R?)GLm9e| z=TdpnJ*`Svt8ZqjRV~}m;M_sV)1!lN@4R?*CVV$X`3#%w{mYMRui2IVf+G{OG(8Y;C!f@x~E$pL2(`!I?xUH_jb7 z9g?pL`9YB#KXIErd7N=V)s-x7R-8%hv$8@!A2U;csSiS?-kDt|`TxwmRhqLltI(Y- zinFEd3>X3TO=w~N#+vi3YFn=Kn|dwo4(M!whRYiRxeL{P(0IdNR&%}$Lz;U%An=kAY@sNMu_XyYgm{-)cL5)*B;5UEQ;7q34 zsf^otsbCm9C|kY;erY%1t+G~WW!hyx?SRiD|7w)nTO|2hB#2`Buwoc_JXX|*=dH6U z#dc0I6wEBmS&fC^Sx~HVlJ6BZSJXimF8>FNF4_jN$(;H>CQ6dz#jF`L3D6Wtz8{MA zcEJ!njps`}V+<)W9^O+vM!0D>F%#`4SPCotW~7t#RQ9cS*J(%5cB9dy*|f)IvQitm zIYZ0DYkkxtc{I(NY2;2YkMxVYer;UHJf3*Qur?5G33;@J$)g=i9&KgvsENs=WTv`Qpb6__2`x@M5v>dy)9BGuX|Ka4ROP8m&n$Q%I2WXmW7?BPQ zlvbd_^%sNsS(p}?owYqU_@aK4W?vuNxS$suf(0DNWU~6^(u|=vAuV7HO&D+*gx2tI zDLr(bNxH-unhbdOV=Gf29)X|3##3Hl!PMz!qYMl=S6WvD+~oslrT=uHJe&@Hb1#tO zS;TlM&b0={TH*P{_*~KOje2~;DJVqpr{M1!B|o|^l`X#Dh}>*x&K?qSH6e$boc{J? z)_$lNTi~%_ilqT{R8EQWsXq)8(IlpeE~8ZpyS?oM8cTc)`HTM(WU+PZuxB4=&NdKb z+K1#4#rn9oWBPzGLY&eic?&Yzpm9DPfB)J6jO8+V2D!49T+lzDGCy!%WCfM;*^5nDHOV*Lp82dj*>!ru zF&aO>h9>yc6A2d077CM>7sEI;uu-*GOtc~Sr}qk_q`4=&A;0R6J@O>cI4WDT*LtyM z7xSLs;U5ZW)d0u#3WKMi3gv3M@r6&?YE?>u1O{ZUB4ZIp#q*guQAi6vl^6l)ASnA|H+tsNIqOo`*IGZWzljlX-;Y~H1f`X1IB|4;1f4^5Sl))h zrIt?Yt=kKFs!RQDo^XT!`xgeSa^j?U*p&`i1o~9FPJZuM* z-PpklwF1T`tdsIC01`}tD}<79OnpJCGBR1~-y`T(@Be-9-Yu!H`r2(H(86E z!@KV=l&f@37QUJ!KA`3y2_p*rU;3T zvYtzQl=vge5`TnQ;*T&({1Ik}Kf)~WN0=r42(!c=VV3wKOcI}ul^~o5#j}{N2sTE^ z(PKoT5p$fx?%$W}!!dG1jM0ux)A=c4bVxrh2K}7IC9hZv3hC!GBBYZ zdxy7$j}yLj`()bt9C`K&he9D9rY}Eph^VX>eM0jN8EiNNuX`U!vncOKeoq22?9taL zUuW03e=Oek)bz#__C^7|0WkScc!w*(nade{G8aWN*_qRi-1Upv*uv3pCGq|p zg0S!f?Tte^|24NJH@r15_>1=2E)%_r$`V**p>tVfZI2uABn5}*ZA|`U(}s2F{5RtJ zq@&<}cCD+kukX(|iu&!^+ve}7f7mhTUpw!g_9r19qve;`Wzo0%GEMgpgX>_&d{!E84~QM0c%}b#0008ktva z+b`_toAs{k1%;e-txoINFAOo6Gzc}Ow_uq({$VD zJ0{y`{f-_q&v&-i>$NgZPO@;z^T{yHJ%YvuCwu zg_Mt#E`;nebqk*4N9T&_+9Ypw{||jSvk`9Yw=gZ}1bmU18?THvzBvtUS30-I?d;90 z%?-}2G=4K%m9mz$6vH0n+-mjJS#$PH9itYt1Z)fNraH6LT01Of>KF0OX0QY)f`pKX;K@*6jO+jBfkXv^SJgG)LN&E7k|!%JFQ4@71yv_k+|h_duc3 zyk!w)Q(^yVuxcma-#V-IO9m6T3F>|_eoUtu3B+5}Bs&eWzk!hQ%H z(kP3zH_r1rs3c+7D4XX=6-LRT)D3o}=Qz`)(RHdTRf&rK3$#KV#U$o0YWXzIrQr=4qAN zfwCn3b5M`G9j1c2%dWKw?;f9ufbC794`-{d<{VDddp-uLb~O*$pmzrNBASB<_NOT z7I&NGww%9?3vq6@(24JdD=Ofx_-;J3ME9_o6A3I^&6L8dHYM!Yp-zEd!9ks0e0^!zh+${aE%aDp~K+rw4}HlN20 zA`QfGCI2^gyNmY4+y%NHuu5MSaDm5=>xA5Aa7S}4+`?=G@ z?f}w+H&zxp@+JT8;o1uYULg6Kt>mZ8lUAM%N>;nA81%~(z-$7ySaX=ZDEVy!Zf~$E z+uCgf>F!j}HSs|enz;A6`@^UBoo5fW4-b42@x0Vd9202g&-He?v$N|wMZCZ6lX-91 z@keJO&;QJ~VTKaqu?`M%JjodQurX-=i4&gZT;vY!H?ZO-;;2IRZ5W#?tz56(l#1H2 z8&)typ^T+e0=vA6w!j1M0{_q2B|{4z(EYl%k*fz^mwZ2^N>Yg>=;sx&M=9)4+X4(o z(SSPIUgGg7{CPb4vlAhnmM`n-|YKWqkevcOV_E^he?D{I<~ z_4$tb@ZP-vgoCi&L@?6~a{i_nP&QSJFH>8WSh&)iPvImC`~Lgz$p_s={)gHR@K`=d1|CR|i>NGLk`sG4_sj}uuXgM6jmuzFJYRQ1 zt)vye{A?j_y%hmkaWaS)X&tc!9AY&NMb8K9{#9_poeLi$JxTtP;#dLvOFMmeI;Wj{ z)7@;GD|vmqu|V#QV-m<|f1A6)v?S!EMt>!FZafaLTtUGFlWCqyRlE8?>a5;mtj|BZhtBuA04c6E zv<-#{M@`ExpLc709ps5V)32F&2Ad|L*14&8=womKniEIjQ#%p3ZvC$7-#ixh(gjmtUfd7f5 zpuA&V9*Txbp;nSr?9VQ(AI@}=L(lrcrr-?2Xla-CMpbiDcT_dWF{(+{tC>XdOIw29 zaVGZ}iV<6c7*Re0{$og)SdX=7F!suN?UjQllG;9i%Mj|!6mR_(jHpCSdprxF1W;4O z*yvD-e?t2Yb6}!hi!C|E?u)GC-0|vQCwP`bOy3{D^uHu}Dj2DBfB-2(8pq8Xln$Z< zn7SfdxS4Qq0~sv#($>NiWTir0Uup1qzrpLh2CqjuGmj3m1+Q!sEWcjz53mx$cRLY3 zQ`AOJ$bGHS6&`(wk(Yb;cu`ZJVK-32w0lBk`)i(k*l1WE`>8+4ZGTipCFP6)euZZ= zX4SO4NDL!4II)}hASs}4rHi!Ag$iJFt@~>vPmw_U`q&EyN7ed!(C>TgM-Z23vY9h$dNdRxr zB9viFT)HU|^Y2OI_IEeL8AS6}PBZ`z(k(zYxsv>dh4J_dn4fEKey$E6-o^~RG>0De z%p#trQwTo`DRnC>loTyd$-&dV5CpQG!C54be7W6yde$x$`COoA*|ik=>?Z0c$!@xO7H_b`9=W#Z7SBCiPrkiFr-Mt!SOky7I?-+lZ z92tN69m`Alp36&%ERW?Mq~F+g{(D-B|L~29V(8%2qM?5{YAw6M9e@y z@d_{FcCaLQDLjBh-GjJQG~RFrA=2q02ccZqh6{oM-am9xh`6%eU6{2QaOpWn)8)QH zA*IoMQ8@~-`8C;1=4kwKslTTb&uNk|o1|lGUNz5sHjQJ*x4WZ#Ru!^0AFy zw)EdWeidBkfhZ+2!y*=0v_`PbTtgt|EA@O(L;WbBH0lZSGy9f$_H@Jai zYP!;ti-2al#lrnUpI9mBps^e%r*Oo(nMv7)h z@?E(3gWn|YC`!)Jwpq*{NFjumWRxOosa<29!T<1l30kVOrW#P)K^ZMo12y0%4KYdU z1qnvpgyRT#6POWT-rp@90~aS+nIXL#J{=Nb7BC}$;uaqNbOV{)SBF9ti~GcKN}=e+ z@~c0hECs~NBGNxpoEa!aJ%BPO(0+~?6rg@ZBvEu(j3kQPmLnuloJ3~UxQHYQ_m8M4 za;7PR!hyPHbvAo|$q1OQz;X%{LWZoPtC{FNg()2A!l+zNowCp9R8@+v)F<7ApM&v44s@MMcT4Or(h zXsg$-bdAXTg$!+{$iE%!5n(L^skaK%Ec@e&nuHGv$EV|YG;o31j+^*Dy-Gt8i?Y!L@K zhEf`MdzoLbgjgvL4IM-7M$X&EP<{jI@6buktyxqCa%9HffmxTZ^VQLni)~EdK^pq% z4nCAdA(`c5-7ln=*aGE4WYWN&%b+!lSeqLIAe0AEBlvOlk@)cj3lG-BSt(cAln$LC z!~Csa&vkyBofV4BkMZP<(WpF49Tv@x&(irZ2pQfcrvJ9h5iIyK;on6MrcPhE+6`v@ z8zUb=v*1QGEl~*(AJkAnM3J34{gj3PZFCgOzLrOkxX-BSJ0IeUYti$OuGGsL-5+Od zR%Y(V+OB-0y3*Qyq_{BYK{vdi!?HZ5UUjvS&nKrWo%wvK?d3UpJ)1EPB5jqg!OEU_ zT9r<9rbvPCby}rIFGky|tCjlS&q#MjzQ>dbA=aNcA7c09=zIwDG`3oez)6j>IF<{s znrA|kE3TxRJ(91-$cC6^`slA##;?d%c?-EPlglv_d?RyKl(Te!3EWvxO}3C7S)0|e zR&tEBrRe^HHY+qa=MyDy>eYdvPpL&|YNBeJr53eF)iyg-4F$K7tJ!^$RP9V+m7=Yq zJjdDUS%==wPaa(F>#{0ktqCg<@yh*dvNz;T`n> zFli%0LZ1`i^qGP`S`}9_khbb-Zu^Vw%S^_)F&~20&Be$PBj*1)QNfSPSzd)dJg;IX zeB8E@B~hH(8xi4ODmOEcrb_Ss-m$7j9r=NK=iYgv;SGY0hK}_+4!D^kSXx?%*$y6DF)f z<-+0H_8Rr8?JwA=9jsG3NNKJz@XxHBo0z-_8uDfjlQ%6)-n1I>W@jvUQ{R=y<;{%l zMB?j9$tzd^LT0HcU!j7suSv*==tYt??d;kgS{;>RSBhcJfcE-Vy3ridhjF+6u+iTE*Hq#umoxeH50RbE!r zGVz<|E-V+ndG5jr{+kas6PKiU=qU`V#3xm3Zo))mk|8SBFi|<)5S0_Ss4NW=m4&B; ziOTU|qViT~Ne2^^r6?+s-D4?j`4S#0i)NJz3)@u~HJl7PqRhj>o}iVdNY#F-kMWppk~8&^|3}y+Mjkf) z8Hj8Qk?W5lll2n^VlZcsyr-N^o*XjRALN_YF7eqR|*2`KywR=~Q-;+~e_aC<*5Niu-uC=!K#Oems<7c%woRk zuIK3!XbLNFAZKP23z9=8hl(Dy4BkKdA%t0)_|1h` zy7lTpc$Ml`u^nmMTF5j3$O+!{WFTg^jw zNmp2WKWl@j)qR8eJzmvK#$Fq2eJJqRs}?)Xnf^ zYFfOh;nQ;D75j9DNO)SxMt@oO=r1#m{%aT}A9KvZG6{AcdDKlj##dwSyLkh4#)$Jb zHSc+I^G-Qp^OBCxJnJzw@18c%yoIcJi^7|?$lScC9Y<>3uzzOs4nww^^el-=*1Wml z&6{g(-qwRr^mqZI$8-OU^w_^$(4&_%*&p6yzq!fh9X!&A<{tZq_T9Fbn&1M{;l&vy z={7@e(!6%F|2=#-FJ{Ae!M|}hSML`Bc?x{vHZ|F;H+lO39Y4gx2g%(FK?bwRxiiE&C!60HY<@?QKRysO9PXoM)0BN{7LP|Bnu%Yrg|U}5-|-8rs{lu( zkT;>PyeHG3byy;2#?(BUxix*Z(VbOJF12TH=52$Yx+(&cuIU?;*8F=w>779_uFY&gEJAr#S#&W6RYwI+w9pVx*h9p%)yB&!AA! zp@7M6NrHQ&tY@@|B4wJ31m}65i{7kay;&39n>FU%JoydMz>&e{5y$$d^pS5{MANER z)8-pZQ&(`UgxN^tc0)0#*-bJhOfkVE|Ix|Xwq4kMJ{>DAIgCA`za&pFrcT)%OuQ)p z`oHVD65D`dB(~k3i7{Bt#$ZMG^sF#X&%vGKuZ^8=*9gUxE1s>viZ2r_inBQ?V3Fq6WQDTYvzsLOVGLz=wnCYK zG~6$wY?JaWhJRj8ZD($ya>cn#^8W%y(%DG%+zC{g2454+JLY1www)sUU(P1V-|L)u zqgvL=^Y;Qt@oHJiuz^!QkB332F53pM#F?gen$;`Rq03e0rt+M$M9KdwQigMfZ?{$T zH0N}xwpB_Z4gvhNKKNSB%qG>-g8N(fH(I!3%YBw;HtoI=;cuz8`kb5M(4#_Zh_ZY_5KUhr$(DSW~Hp?jqZ~{vL3^olW0O?FeA14g^^;X(DErdSdi+KMPSBvUu zj&=>V@N~e|K3&7`%!5Zu``eL1pt{cs6D$GSTGOHmJ&PV~Wo9ex@8|pb9_4RJSxeS- zAROg0)r0QOD%JM3YI_tH`{qJC^rS_xt%mY*WE_vzUh{szGk91TckYopi*2?9Oq++gXDjch+~|Nl9{3+_iIu5F zr1F&npKeLC3|qrkqbeI63`NE3oGD>SOplCacSKaOoYH7uyUmWuoGpA)I5U0`soP_w->52 z9N8F_lTQ&}2=^{nvN+- z)e_#uPjhwIg%8SyAyv|TprR#rTf=4ph?Tgvn2!=#EC4L-fSa^*O&)Mb&g%{zxU*Tm zv<%+f%JGgHvo>dK*Us$X`@2!z1N8Ph9#2>)a#?UzGik(0E|}xZB;Q*!zj0yX^->pa z5hhGv?#+$Bx=;}0i~Kq~iU^B0CDyT1y0gs*cBp5tB)fc`WS7U1>^@ZLF;7$b1yqCs zu6zOu-y&E8@q<(v?K42Igx@RASue>?8U#K2>0Y)i1`@-sP5Fy_7T&X%=zUNxSt*9{ zZ8UI6!t}9f5;4PscJ^Qs3iXhGH|qV=sP}oh+~Z)a3vxx~roG=K7U$H5L?fy{l;jkQ zS9rmgvcGhRJ~*_IV#P3-kF&M~g?_uXx<`KtzPTtwNrO1S8t&qX-@ugLs0TdUsC6GQ zeb6>5GQZe>8xhHT1Zxo=FIBCJQ0AfoLL;wrn2hvK`N z6H#j;&{3;eSXNV*B=v#}B8E_kvQqNDZsEc-7jNE1mw9+Oo~_y2F_r~`;;$=LdMWCq z!eNIs%0%lz#;=7~oo|TMDnqQIoDX(>YDm>>?&%cZ@)MAxy8wq{=F>wIQmluy@MwJB zhKj7sC`0#&5J*OEteIIGahZ@Dy-h2L%$GxcN_!x3{v;!P0TbBe{vFmu>))e@%+vp+ zH?uVl@pcQRZwyrJQuD)q(tiH zmDFpNu=cWeWNobAuTBew(@+{Gi3z2FLfWcK@nc5zq?^v@;5$Ria7;Jo3AgZ^p?spS zAbpVo$0Jn7Y~!%Y-xut{ku6Yy$b`}GjjT-B1EVgj+e1jT97g840A>YX@VK%iB31r~ z>62*QP2yPs!RGCpLa-nN#@Ow8gkbY541&2QQH~8pLuK%2sDg0RWu#SNDAXPv3Izin zgf<72J=k)j>k1@iH+CT3af5bMNbIIC^%jhOdbx__TSn*K$ZgMye8!ObF>FVe7@^3h zHx2m^o_~{}=ig*#&hY%3|KIZA^z*sVkl5f{#Ez0((p-y2$vz)&`Wu`}FIj+xjV?pd z*tM_+LtK$=<>|O?@C3+8l=H#!LA80yi%ubVBL05jGE6vDoL&rx&8txJk^;7citHx- z4cv#KyCwgwlVMWmS}jNqlx8c7$5SAdA%9lvQXNqUmuLuD{XNBSFjRE zua(g$?o?6BiO<=R(?n-rOHNlX=L2cZ`-!w$u~!Yyt2EQr$`rdw?<=^aQ%ik5Xi2=8 z8Ht7+Yll5zPb_?)U!vZRu=wb|+S#VYMYL`DMoIos53iRoC7VofY^azP19+A#fV_0n zKQjmDDMGCb_bEd_KX~hAXgpWF`lK*CU z2XDvWEK0Jq7kB4yHssnQ|44Y48}B*MyB4V!l$tEKfqRcww0-*iwR}kK8X$H`ySKki zYUlKiBDEG6fox7{`|YCgc&Hr89|5I`7C%*UzSCPt6X0FzruzLqhQ;7rOKVK!+{25T zOXoQhq6t6{4OAVjd~CppNupKdCs;%X`}7lN)#$YNOMJ8dYt5mCP3@oU^uqAr?ZtF^ zF>7xvDmF7)tCm`Ema4@bE;hx%g7vUasf{u7|NIZgPkjZT7*#?&GG3V!p% zpO7=zd57FNKxE$ROm`M5JPDoDNcPvk5Rc^fXrW7S)<;Z$~K6;wbS4$?c~H`{siJh z@lLq^0d!;qWlXbwg^`HN3j76 zCoOGR5AoLp#7I_Bld?yiEXkcj!EEWsyRgWSL!f!{Zf0bx((+=cz-piZAZWq`lKjP? zu>4CSZ$=FL!45M$^7cMSjF-0%kXb|(c`4r9RCxa0AsP!U#MXaw0ZStrH~Ucdeq#~uFErYxt?eQ6ES2zE(=D&jmY8`3l=|?ulvv14Fdks8i6yBacXh4V=A%@WrX$8pYbGr%qASr$zYiA$?UVD)}wZkNqu<9Bttbk*{PoNON$oV!yM3;nEK+tzRc|n>q~~w zmyxD&Z;Xr47cs57_X5kGxdF7xOWX0P-nt5#CduEx1MM6n(Y!Q~-;n2Ql-B8Z$n8=|zg8D8?slpqyYy8swIZw^N~6!9 zm2YwO7~MOJrl8uiPoLMR!)eBh@}cci1--%!N^`%=-hFU>6mM*s6Ggn9*K}S~q4Off zh<^JmsVrJ)Y>>6rNNVM6)m->RECKYS!Sl3KtY9YUQ#Zov+6f2x_-0~PgwUF}FJ?Q& znZRC=zW885H$nm0j;<(@ZR?J@^*jQ!ks)o@KH4!cpD8g3xcRH1;Q*{b4FnUIzO!gngU||FYoUrSR`E z_%{^(T@L@QfPYuQzfqX>2u;EkC~_gRCK#8PU{TA^$Dv+dp_X~kq^i;*lhJGDC^Q=3 zk{y%AQk_R%5pt?R#mTc5*p`rfgt&bdM- zsRX?*!xyx=PsacK690D_9)3PdIsx!pz!l7CV!FvKy@{l)0QBN_^6^fj3GduWp|{{G z=UMyVETO_5dEZD-<_A$JMy$b#*zF%~y8|U1Ft^>vAsxBP~^@%(dt2=>Nhi;vdcID7H`rM+=~`f+>XvDzC8GLG9DkJ}r6 z81}{$Hyx|J@%(4LtG&@X``GP`$PW*1Z(Kd|pRqUkegDz+#y3N~$7XMw-<}v@Z=4Nx zxV^Dq=5c%DaeL!`hP|=tspIy>{~UW`(UZsRjmPbcq0oPdy|JvL_XlooRH23cE%wGg zAM8DDZ#-^q{ExCXwzVZj+Z%I#0QSa_owg&}8&ACCKf>Pll@@7l+^WT}H@-U6Y;SyR zXQFOzbR9Ik9()R(#I!eFvpYtqKbhJSV?XXf9xsWT$`_d8B}M!sZT^9$Ipp;fh?!1- zlj)Y&`*DBA^6h<;?^3>;wG-o<1FjCxFqNVu4bC;pXj;>bMpM^@fb01NXXD$;-k7X7 z7b$mbQc@g2=lyu}Us_;f1r5wn8W`_OpfS3FigO|8(PrDEtHnEW5epD@rc(^5GmTp5 zOjcbf*iPyYsi=IL1Sr!=D|Cr_c<{onk$CKQu;9)##g!!2D9$CGp-2-&!JI}$0h|AU z`s(v|c?PzQO4|ti4Nm_MhqaLzQFwP3;*lIl+Ib*v>BCGysbac`W`6AGKp%GmR{ z$2_0^c*Q)Qo_l)$?BEhJ%^OXctL2}aw~4{~X-kGQeh+34<}Ntk+61`V5peFHm~bi> zI_h9Ui1wG@g=N@9^W+}*QlH$b?hTvV-)wdvHS%)-Zl9P z2Gr{Qf})B({RLmVkZ5_UlKcf|0}Sp{$G!f@O@NIiHvt;4m1bYf&CH3SQYGAD@HmuFCHw^$7rZ^0+5YhjKxZEsw*TRY zdeZ)`M3dB}?Jz46O*nm|Cy%Let79(QGmxGu;J(drd+x;c9zO7@F7$D12|g9Kgx6BB>zC@ zimxs%=UvYpbpf3Nl!Mlb3H{KrLo)^4?I-9+EzSgeX5JGzNMo~UHD;3`0?wZ>ZU0B2 zY46*^()MX{Y|t?d_HwN09?tvBaT7axSA2b2e^bXc_oI#h{uMLwRd1Mm?DKd$E|U;F zH9OCNRA1X)??)cmspLlH6By6I?I5#H;B~V17gI~-{2@+EIF|mD@CnSKcknj%3H+nS z@CiJi`vl6^Fiy~Y0?kaHcG|JDpj{`y>HT$mv%9}edz>mH|EG3?1U>yl)!ZX6m^=ck zz1$;!{J^_*3j4S*31^hnl*(%U__Ax7mM?#^r+3-ZoKPKrRX91E6d*!Hp8k)AVa} zGcIuJI+%KMYWXnRZJzOBG2WaIwF8G)fAr_X>7;{-I47O@_z2R$)N*nl5&t%~&EM1+ z(?9W6=aKyrmj{p0Ke7MQNdLqapX&aJ3-9XFKM}sY{LVxA_VPLd+hj7XSZyW-c84{B zf%#uKq?!~l zymhl_N0T|`Cb#N?sr|`(ercHgIHJS&y33q!PG>`~BOnaXFVBS6wZ}V-%|EdHSGs>7 zJ`~Gb{BZdBHnhaNzeN8*-XW5_DUy7}A!OQI@(#i&rIEvB^{YPp25bf*{RTTM;eG=l zqfL`w_ziC8FbqK4u+v`k%XJ`b1=Z;yGq8Qia%1bualc6kr^ z?O`@hSn2!Q^d4k*By7I=n=Ip_4s!Z1J>SrEY~Fz3kLcb2tyk114CPSX)7>UhxQX@U zrI!10OF&Sc6Ypq_A$fOMEm!&(|8ia(D6izi7%h3e0+G$Jholu%u`K<@dx6=I5W10Snt?x z@f=MZ+&?Ye|D}0Yrdy4LMJk>%nael&f4EFM?{j^0)*FLS;J_Aj?bl&)!4T}_*KkAo zv^Q!V)gEq+erkV&aqjK|%&7jqpZ9WNRL7>54+9kKHZV9^)g8L;*Z+;l{_l#5JrE1` z83-N$`vTJbv}^aW>drD%mqFG2C=^!R5Tm*iO-B6l^y=Og)p1HFSIUyK^Y;le{-46l z_~*d`?U{D7iw!rE>mjcUw`aa-ax-l*GeXpq!>}*zv4;3pwh0f1(&#>0e7oIpScoOx zxnDQYZ(t_+DNKtIilcnDsU^R+7+aPN=Zk5KiRhoS=tS?n)I{*77)8^}pSs^{Xvf={ zWxv6w@wnj_{zT3})AlnCdPPjxcv>im;EF;qcn;~+WV8Pp+UyS+`vXUOy)N3^{@b3Y zTeG`k)DepQbaOPTbM%shzQkf!=&#)>Ec96$vo@D21t}&=ePK*XeYsM6%F&zW8}c&Q zhmltKZ1|T0|E_|6!{Fb|VODyS62Zc@SXTOiP?)Ld?laJ8gEPym^yE!h8D*u{C<gE_9elsrITGyw&ZiCrgw|c8?uUlN&r@ijdUng4LnrqnWMtn?p)x7R&%({X#zsFwp*IL6~H+7TQUiW5gANIQO8)BH<9x8~m*Ll`O+UtI{F2;w~6hzwV z{tMz`$IjYGCzrcYQRyj5Qi|p`I9D*k;f# z$PU}Jgba$?FksfTRdIr_OjBJ873X}Ad|S)2HutYXMZ>iaLuji!58y191%-NsZ;0VdJ^r>z#NV=)zMVz!w`x%( zt`S#@YEcKW$j~YnLu(V385)a+FKS~#e04m}qK!=fpYOkobh^+q&M!N|NK%h?hPi}^ z3>0;M8q23sDOwXKS_G52pRCDqF@DyCGkW#MXi(k&Bc>!dg4d2@v9d+sv9d6gMMn`U zi$lbBK!oA^n3-k!hE^= z9^^@@BL{hOz8GYEJ?4x3f@uS9(}uygNRx0OMlJAET7aox3y_t!y~2@C{Bd?aMD#jlbSK*O7fqcg$zLq^OO+YfirDr8rw%?nE-UApW3sdHj_M8in5=JQx ze&Zd9PC5R3Kp7r*EJ0JKnpMds7ZA$;qmur2(w?Mx0je=@FjU2FTos#Pe!J%TWOhk zXU?Tf$fb48O14~5*t_9D>v5z=Rk?=;Kk1L5>IH3r*Rw zYjDaIs;))2mddMwzk!0<{%qLOFaV!Q55Cp}$U40B{*ffy{dz{gLUTp{Yts^z5s)R; z<1%X8QosWP5e39W=El6ck~Q+VvlEP=rB%8luO|fbdCS;<%O5D~n6?Gw)v|6E8jTt%iRFc;W#aqtRJvvmTjnRSh$>BC5930&7kl4W6 z=?!lEs5gX07KUz;g~P3q`<+Yc)>R_n#9I3h9idzs+Zf9H_qef!)(M`X7rf{~;O4GPgW=Z)gKBf?q}d=l@Yn+z)Mx6`$Xm>* zVW>JjayNH`7Bx!i@=i9rd-`qICe|7odr5AWD)EFRwRi|BU%wjc+{8?1*1b^YoZrGM z1MOp#B}U(FC-;CI34}Hhh<9xQGEr)0eU9e`wQq=10?e^-8kxbZO#o(yxxjRA;jEOk z5Tr82`<6iCJju{9-&*`S8DP5#Brv}&XFZZ6P015A=hX$A8!8u&N7U(+)-if#|8E@B z%yeLwcyG4tp@Be2A&0yJ*dJ>s9wzr=n8_+1G$r6c0?FCq`M|dpA6lmkV{h?+XjO?? zeP3IBwN@MqRBvc7TKHg4yKi#w!D!84OUvnz7y+v%1394tf)!@A!sMXYv_+C-Tone2y!Q1- zUExZ)lg#xr;1%~1ub_Qh7_+`Br$;3AlFK4+SI4;9%j#0#WqZ5r2D>DegHAb^=^IWj znlR$bZ+B>~#$J2ljU3g0HZG+Mz?om2u+Rp=*af`A1#H(&7x9x@UDqf!CUyr&m zqc)nYARvmFfzt!|JxI0-{h8_RPD2Fw*S(2wqjYS(^>h*U1G47`?HKC z4=j3!X2&y?*5&2s-(z8-Ne7#GNhU_{%2f##vD~2ypcrY+i)czj!fa&QUl}?ieKPsx z1dG|ikP{zuYGId+sl}(0OuVNfekRb(mFGv zY63>3twB0)nV0dPCXl-3MO=^r@8O;u^|Y|8+Wlj3Ce+B-z{$GWE z8vnKUr|@5Ze}?`G@Xt$8_~)e~;-Ad_6#R4DvEZK@jvoJ9_nq<2rQbjP$@tFrC+pbp z&$WHvpBH1`pC7`;BHEiriGRL6R{V4QQR1J>qrg8|-wFR@neb0mH2%pt4F1VB@Xt~c z{(0TNKTG?VKVmw)zP6+46Av>^}}` zpB+1ECmp#QZJ_PgNCsN#zP=2!H(V59pzX28FwiznL__C%W}tn~5ow@Z66}{4%XpgX zIGlm@)N@P*+ESB&wrpYWZbzhnc1iH}34PT;Ws}P&!a%$H?4vQzu0}f$+A7gTOW|{N zG=P>Zu{Hy1AeJ_A2)AB_ngaM*l5T{p?%N3K&R2`7f+KQpv-Tm5G_PTOSg8S z{xF5>4+Nyj6}BHHsu9E|(;UIh3wy+Vot5%KhWZe;gylQ+%|#F-1Q*mX^`Rn4eVCxD z4-5u9oXFG%2IDPK^|;*foK)JaHV)w^yFY5EIyD{P!zhRHCIfmE96sdPc!WifS3Nag z8$qtDA}<1D;BhE=l#kVsDZHhjCcs=U%ZlCpQfGJVgDRZa|;O7xwUNH(3ma z4t*%zJ>W5E8;YkftG!(DG?~QZSyK>dQzs}CAH~q38KEWDp029jwSqnM^q zJu1bdX=I+72#B;1lnv#B4?38xF+ZlRQ9i|hrJ!qM;(o2fv*=!+tZ8*W9L?&yQ_97D zq?_1Ico@4_FR*!IPBVoqZjuHtD4 zcv{L8SI|HK%HCl1eTKqPN(xJnP*`eFDV`Lju#|9xrJA4ygTYGkpvEwTrIaZw-9G|_ zg>`c@rot$D)M*(2^w=7Je(TF1a7!Gl1Q?q9ZHmjQY26|pLj;n_aX?JvOy6;lzEkIU z!nd}9>pS$?TR4P+i(1tMv>|=aib*1k0JUut1B;{r&_FLT|I-56IS>cup&{r0tzTyey>|xCB=|v1ec$#wdNd6nUS;UAB z?rI~uP09l9NyP|IElyJlQi&kAvamX)vcU5Lw0{`qhkI#1bdCcf^@Yb+9+XzydqjO< z>%E{a{2uj%5~eTsNR^p*^!mc`wYH>XgFA*6)Ap%N94NuG7}CU_>CoqE0#{|K&8p0sFtyrw zFd$KbXIk*-X!)+AeNZ1FJ?2)X$CUrbP&IZsqV<^fg!-~vTqs5Rbi9{x8B~ODF!T@L2GNjK}V{>)(UN`u{o>9{cu* z?~ccQH}Tl;Sm^Gf#$)*tzbhU)|N8G2k8K|LUGZ4)UEdcT8-3kBgU9yV`Muz=jo0># z$F6?7FFf||4y=#FV`GmJkB!^<&)~5O?m7xQR#k9hJU0HU?}Eq9IV%c}op4qZ9_u)> zZ#*{Rd>wdw@VJ4;Jd5<(s~_(JkKHjp5?TE!H4=}_oEM45?wJ?))wQW6Jhlo4a=l?M z^X(i0TsGOF<~xQ4N*t-iLKQLiDJqM}XMy_pjs|K)(+hKPP_O)4|dG^&wg4Bwc^_aq;a;5#^^r`AH_m2)EMB;{kt%V0}=oEtpb7 z<=UV$2bGKY6PZ|UO4xYA@T9`fIN*&T@J5EI{aCHi9Q^$YNndl+% zx0+9Vu`Af^G`LDpl4(B&UMt*98k|oPm7LQgjj4+mQR92|RpfZPd^<~_gT>I!p`;GL z;C8I0zj+hwpb$)?!OaaI(Exc@oYI5LJRO@EI<4mQw&Aa7av74{+I&I z@Q7w))vOO6pIedQhmgxM*yXWa_* zc{`=bFy&I9;BmMAv<&7wt0w0&z>jU8Lw!_3+eZ=Y&4uA3<>)a!> zH!O61B@{dnK=nJ)96S#W9U2u5yR{8F0lf<@SlJW8uZTkwI*JwRw3%4&w1+s?0UaYz z$t5>P&~gFwRe8tr66irf)+o?=2QL4QaxmRzQIbZKqh*<3M69h0xq0 z%e1SYdMcRtSAs7(*dT6edy%^ERE@92+O`Dc9UHF&di;4-ODr8%EIIHc`nj`!r6)qIZAqL<~Gq$f(0%-2^x{_xW69tN_Z(V z6yjcgzr!z>qu=4hORWE^IHD-HH5ZAZ(DWtoXpkHHlS=+cJ$yo(ld;wm^}7A2hgv^S zkUfXXuyQNlm3N@qDKLD=Sk71cZamz}sc@uv5_51$9wF{m zf*E0Jkdon^bY%Fnq*;er|F(Lv z=V~M{<0l(5XvRk;5?e|3ZJ3Ueg&zqgqW-pfJq{_pz47Zf)DptVa<33iUuI9+ey^Xu zkc`8xJs1-CV9Av3d?x}FC;|l|6oZZBMMXc-1yZ3VJ$B@cEbsiphTvzh{HTPa(lxRw&kB(4w~Bm<%< zTc|jnSIU;D&ZShGYZ>K+l|2u&szvsog8*()j&tclBjGO2I=l%jde4t|Y$>aiF#X4P z2Wo)wN?1wE!HUIvO60)y${`o3ioGV$8Jx8XTI*bfnKv+6<6i3t#XFbfI2XC^36xr) z)7UzTTD(7Sopo42hf=iUp?+#Xx4iL@ba9x5UexJ5Sk!WyEc~M0mW)4D%hfn+lK%{x z>#`*cdELY?O5uf6i)Ibs{wd6{d%%~7hhZ4Bd0N1^0w3g_Kodaj-Xsgm0NxxEWHh#& zkoX$K3B$MwNd6jx+h^nd9>)Lm!>Eqi0DU`G5dfZ`gjeD|iI;cqAB@nT9((lDkHynv zY|se==i`#0JHcxoMI25*IJm0{XNPWI`Y2wq^GTq0Z95o#u_6VkdC95^b4#yoNnSD8 zGXT4%od*R}DP>6tKIz^VYSG_U^X&X*)mQ{SSvA1HlX5Npj4g99OhX@Xq1g>fogCy-FW`ITj{wW`aZcai1X$A;44n{ZzfA0V4Kf#|<)-wKF zc4{<#?yw&de|{4C7F=3}~G3^Wr!Z8LlJobG@|F$6{$q1wYT)cr^}a zxsp^Y`RRN?*OIJ_f}I!d#|PRzcAh8Wco#fkuv((tQ#e1bNT3-qG4s_|GZOrpkY~S` zOC}cI%vA}*++i9P<4Ob0>yV#MLpuqZisHG%c!{_Bec=`A+_jyglsc)#B-L z6K|i?k7N!$zt?N<_LEhbIlO&~SLf}+W+HEwP7wNO1b?qN{X6paYR2E=kiS3l-TAw| zpX&2u6%>(h_Bu>cps+U#kZVjoA66Ege-uyqsRoKZV*zj?OlrZ+y&*a;3wOe3aC*^h zsOBa4TCVeTUuS~=>v>?UbGS?Js+WRJaGX_jOgeu^)QO7_=C@;!0WmSQ)pufhvxkFitBwr3CWNjw$I_U8#&Ppf_zMqI)pDW3?z^e1koCg!K zgnjmyMUruUJ87k}%2$(F$*je&w50kT@U4G$KU=f5J=VAa~i`c-iY<~Fejr}dSd!yvPiS}>x zL!I+$u5t#Z^;2D~@@99UcjiKi`fi{74)VhI)3A`zYc@-Ot0 z#P(Riq6gC~w4dxk>;&#`HHzU;KS<>HHQCO~6-n~h=tXce%)2BfHa#td_`40r=JLJI_`_xWtaT-Cvrjz(8-&$ z+ow1m6?d(DNw3T5nXexgn_wKN3iZ4Fbm}eVKeKv6I7G-8XeGfgpz5pLgJI!N4V_F4 z(||-G$BYD{=4oAA*gUxhninPlP+XY)yK!DvsXvQ180pYB3m-3bJo=d- zc04-kG@UEVsNer5+9T1gI$L2y(Qb&atoSa8eD_cCY||E%zoa&~{B-gm5g~1j$TC;- z{V7>{Fu;0Gmt=hm&e%?E;tid8q&u)8_@47|Im-YqYgoG96 z8$&$%G-Dq_{w^K!YV9;OBRkDBBZu@Vv^RSq_HT??*Qv&KakEGF@b*U6cd@axq1Mt9 zvq?Dr{1q7Ikk;NI>Ob7pqG4g|Th7q;6}_P+>O6FFW!Lvc?96x4p_q;Owl};{uXmaD zgUz?o3fB z`2_5%@Vv;AiL2;^$Q< zhsDnu_a_j3zT;nlpYOR($Ir_TbpP}C`PcFKjDpA>Si`0?-r!HTVO)8Yj-@LEmOc!E z{!;{k{;fdJFX#wbjfJ4kibT*G4~L+iHX*YU6Z@FePQU`rkQ%9FAV+e;V|@j0z?1Iz|i-bFmzr7hCV$U zL-#W<^yB~*fZJQZPr-gkV8&9|V6L@-W zS0tXUVR)KN8%`jfx)_-Hc>_}iBQW(}O_+LdB&L4bz|@x-m^ueB^~s2-2~U3-fu{#X z6eZQPbZu3^i_T1>GMr^`qQJs(_bAsp7tf_ zczWdF@$`+6c)GXasPOc2ecfv1bJrY=)=b-x(WEpO*W5;OSr8_XD;+e{t_|`}6l>f1cj|u=rWg z68?qu=fOYI@$;0gzXN_gZh!tE*`H6l=Lchdj+=Mf{(Rj2eBA#01Ghhqwf>jbpU>>E zMcAM1<;U&M-_ib@FfI}=|Go8acsVWtFQ1#w@bco%W8>v7GtGFJQdXlN^XXBLS$4+) zrq}*VN6n8(a+86YXP8j)evXYX}dZWWOEF)Po10@%PH^IGhcj+*D@^!#7~$tBgr6^A_*trUJy$MHn7mDZ=w}JjJYoXT zr}kxy{Bb0n@wTjO~{0U=*Q^b$+sAruM7v#m-X7rAlfybZL(>@O*Vn>^8dy_ z^jrkdlop2|dLDpi1h*VSdjP;<;$gB0Lq8UQp>+Ul%1ZmktvZGt@>v9iCIC$b*2-gO zW-2*;p7-G6gr8OK%x9s;zi0RvQ-DL|irwH#7<_5qWgSc3Z`hx8@*xB*h!k+zYbY&D zMEfiv=&^vH|H#z?$v=;_v!g|jeH$X^+WUSPs!SN1jU z#gX%_nsD@U7I%5J^EuBi`MMxx{S9KZ0Bw1AXn^t_0qJ?t>}v&(t|X#+Spezh1dyIb zK>8j5r`#{=wOBpRh~~70A?WAakD3tlmY*Vmo)?Xv$9J3O18dT*?Kbk4Q5ll|n!s20 zvkXY%>cIph=X0^(bb>V;PH&6_r>Af@{l;ttr=KS{J;e;C&C7E3SYS})(yPQg-a-a3 zs8*`}BUcl?rSn&Eq2CoBs!0Y`{@S5Yx z>aypQX5|xr*fZx^Fa^n#UarJxTe=wkG~w&d!}0YO^s{WC(#-Mo7i5oKkFy2yKlaWBJc=S|{JTjYL8B8jDk>^!Ku}aTKP~~h<7)whU=&tR3BrjH z6%{cHDC`-syJW{rWYyrU8X!Q_sHjo-QUSw<0X$D5L`69j6_1SI2^vYlCfR>gb}(Pcec$*0==0o>-JR*_>8`H+RaJL2bRj2iKc1ww6kjl3NAD^VdcQ27_j6|Seo9C0 zemZ&&LiGN=(J1dr?8;UXe=Chq{QX&DO#XhcH75S6z~7%+b7hr)Rw>r}UED7I{z*S< zHoseJ{ystA?|0hA->Z&d{l_l}Dt}+nI)4u}^Y@PS`K#xO{5?SD?_UnJ&fg79B7YYt zr?;{G;~?Yj9DV)A%?AD+Va?w;ZSwajT zlHeQk`-6vYD4{mTC*xRCdRnvha#Nd^sO;TX&)NGCVsCXGwd<^_yb&9}=Ur#U@5!GL zej|U6y|KtqJ9_SZ+=?eVRunmk<=fY8aV%#jUXi+y4u%_iJtOe5KH&uZp-SK(D)6>$ zNZ?-8W9>KMH~DR>oYsB;a#=y|jaBiREF{S{;dl)a&PvwjgXzbimJbG8UeJm`Y1L37 zaNnH~@>@?BAs>)@?<28idsPUhNGD$J45r@*6XpH!Q4l`z_}CE6>UYst4Z?3FgTTwv zDQuzHlsbmMfjhAMfZ}=Ff$jFo?z|%RPUP?!)`dH5vb$RH)pf$<16X-Lqlppr-xkU@ z0{=ano65c=l|bJjE5LmBluY?LSo$YfJ(Z1RX=1sc*k-xf!5>1uxxFllkId$ZRl^YR zeRtvC-t!aG1q=WnlQC^+1DCTc4&0Z7BvM8FXjA7>FGrCrXa=MY0~EOhmA~7|KBsY- zXIV`^vj-W9Oywxj;~|D3H^D_0vm%{^@`j=ThdqtJBU{;w1}`b)zYAP8GdY7QFXgXB zN~6Tu@FUz4pu|6NSbBA*TrIs?W#0tfSHZMa{~!5Nxk}#3&PKO?6I_aXY9!M zYUXj%6EZ%SnE)5!#OhC?3`_Q^lRouOPugV{bXOr4y`KfZ*&B;bTRO%7oFD+pb^@Fr zFmt>n(905afzIv71e!Ig;*rDt$jvBZ@gq;&3sP7pJ>>`{YNr5V=z;mfEd&VaU zz=LirHhlf933M#-8A%FgYyGfSQBWl(oE_K+u{h`jD2-qW+Co+44YE34|7|kRp z(H?Gh6`0RgAKy_Vv^>d+1(12dwAdA+!8~DY$z+aMDAUkF86MX8fj?QfBCO`epUK-# z&eHkYh!)-$x=Zg zNE;vPp0J&_z#QHJ-t0L2H4nxzH4@@Yy>)Ax-di{t{}jhYqi-mAW@_+T-eVYPt05L; z_E9Fw2Nz=bZ2pUWf@&?;<~0V}x_rR=1d~CV28yOJ@+hwCOU;NOw;GHq;pv(z2&9GG zc&Z}ZbHEzf6o7N>q}XP)3@ygfYrQxOod?DE=Z_yWagA7XdmT^5fbRvbhXJ@=5kZ3# zSEl=z1fqk0Dn!}l^VU&c=62_^5mXS2MQBa2nt2L#4wDCd6+SgLv3{p#yRH87fUB$A zQNA&Oj&UX*5i@B{R9!~Qq><=jc2F~Eu8WXKQ#5>=Qp=7#IJRmY1SyuL_iY1RFZq@= zYX;EXX59b^f&uh_j{BZx4F(YC^tYNd1E{ZV01bq(r8J7X%jH;kj@vglD(DK`{s|Th ze}NLf#jt-~;+Pq-vPlN$DmlNYNn^~Az~i+|I^CWWv9y0&jVAlY@>#h4Lw#1qMuYt$ zKJUK``tx3Hw5*cB{s~5us&H)kr`mYrt~xGv)N=c$T1jn;vVX*f4Kv$6zl1F-Ww3vs zQpxp#{WD3oe`fv?ZU2bnC=KFy=s1NcztpSmhwr1>KkP-G-oxyl|Nf%cKbdI%s7hLS zyTQ`_c@*A)MbBZ3A~Px#`U&MBW@8xbq4Uums%VTvnC_#2tn~UtZwz)5y+jAWByu-e zUJ`6Hwd;=!=I1NV*J1WCHl_TxPP1f;^9WXlCLxQ51WcXM{4-VGu5=F59}#8W&j`-O z`QFYA66JWZkvaz)B}GoIN>v-_Z-dZA@(ZLt;QgkEU>_~FwvWza_R;7G%svWlwYHB2 zcLw{2N5rj7B%A=-XCgg+t!5(4K#l1ep_@oaf{An=H<5^l3|7*u5y48@cAQF0@H-hw zry-%PQ}0T@6)5b~Xj`dwo3>KRHJYt78XrRMUqzJ$b7`v9N3MuyE>TPH;6=7yrW05! zji#?Uku&}&%w_BJs@4ys?qVqnsS?+0Y*J4TVv7ohf_Z#{ojvCJg;sCRutFPd5iO$u z&kqy>x}hwGGi>ajrsHr@lM1GTA%loBlMsh88WQeE>koMT+nXq7noc=$J0RsuCdzT~ zAP5H#=*NEvagYlWV^Gdt5>1rzVFx4SEbYK4XH^G*a%QNM^ChF4sZo^E?K=bI@D!#D zbcWJ!x%^!QI?rGrs%WYXI<9EY3AGM7Gb}*IEr3n~8=xEhqJd7ws%X$*`c%N33y?px z{He%0F5;c(8t(|1P9^W-;sPY5LWOlmH%3(dEVEL4U+DIXNshsuIYk{#+@wM8pgs!I zC%||*8Dl9Ez^YkCZNNr=m!@ptLe;QwkYR(OrW-b!6D=NYG;CfGEP}XLLUfKOZkJ z%3sxgDu?awy@PU^@%hY?rTh~7>wq+`7}*2fUk)cN#21Wr_)l>b^4@}>2jh;*&|14L zLnp?^kfCnztvEiOv2(}A?63yO?+KBeXDG50RF*(D^@%9RAsXN0t;4A*%D!-Sl@sN$ z3CcTR%yUe(#SKQ=Vl;hp1?2-mxCCZ9RK5vHvvv>&=Nrj}>zq z)_{H&JyumbuRPFL19_}IkqXYI5-HPnz!lULoj;PlpRL#{4+-m~ zsv2V2E3XLl%CHto`)HIoK4kg4eBpUtHN|}17Qr6Fy#yAQJZqxfdG$wZAHA_lvyYx@ zY1KY*H=8*A?fQ1vN8cP4?4#>-d3dM|`zRo;&tiw@eGraqA3gLbvyb8rsrJ#70n9$q zG`=!Li=XK;_}F?OK4fVR?Ss2$Hw2?3Qas9VYkTMeK}d#M+e4$x_RxxGduS8cLu^V) z`6b5OL-x>x^_CBL#?%QZb=)4RKg8{!7P5zon4sB1HT5y=p&PC=+e5wIA$y3e*YZ*| z)r3_u-o*7MCi6|~fwKx5xB@)Ok^E=9=RikM$gCmgJsqf$s44L33_&&wE9qfmA z`bc~Dmaw~vvQyO3@1K}J2~#)J{`qRnjA^2PMp>0(5wu}3Yxad8w^?Ai1XCpMp+q+D z9HrjvTO4(iAJF%F2Vr+YkV121>iVh@$+y*x>pm7ib5^hd7Xy#n#-_7UG&UTC+W7If zOOKNZP?rKwlxzDF9EH-OefZ{t%!-W6kmT{i^QA0{$)0#7UZ2KKPlz#%Uz%V-!G-ZU z3YNoEJ}n*}RxbHyWkzNlev54pxTy~9iAu639K}VMbwVC8|0{6-?sb~Ww9K?W;Z0^q z93&g4*tZSJrPWmn!Hl@Rj%`sWx8*))wMAi($#Brp8_JXrO!DC>cb=Q8`b`wZ@_=)> zxIdvB--FfPN8U3>F<;%aaApxc*j13{h92>LWVhU*Fe@UiZ@?PCw92GJ=uqTGJc6-I zSiMtDt9KN9A!iwW?mGws@h&R8lrv*F%Z64+c?BmhV8lIn7eis0Az>waMaFwl!HH}k zd{9^jUu;jxT#O6hD=ch+NwM7Lu2?H|PzWA@68eG=c*D&cz*#@x?H=JP zbm&EWr)!Pt{Ts^J`bwjiOj;g?0!s>kMi%O1wquwGrl^_Vx&$7f;tR67TIG{Pe94Y* z9!MVyPww1=&{IyCf0dDO;{K69b_K0>cL(&v?#~J9C$RR$_3q`y_3q``dUsqchwI%l zD{#F#48eRiT1UP{zR;x8VL8xYut|Tx1cT2Rntx7{ zq4_6eQ1dIFg++fe41XoAMf5M1E1!f7pK-lSRaobf9=t>|&y3SsJO7igfoIkT^ZEL) zJ~g6ax3wbA6A-Boo86+knZo*+gZlaz@se7zOLtsY;6c;HpBvVLmneOj4eL?rG~Qs% zdgk+#LQm;;Smlj|KdW+%dS93ZyxVaH5)I|_fjG1g4Ajpsv_B&Tzh+eW27hLSiqQ4O$oLlXNtT5GeZ_%rA<*M z+O4K2m}FDvtx8X$7tcyjZf>MtFzqiwbtmPs7+fjJCJxiEja%$L+02vUn48qe@l5T> zzAtTt3RYjGwi8sqPLKQ?PoIDf$_FZcYkCy7MHD%HMnyO5G1lZmXsr&;Faet~uYm@! zQrLoxI66h~P^W7e7B5u#9OmWEqP6PfcIDi|>L8&y_1EgudfWVk_^z127~zS+Rv1#d zs_z3GR)KZ0(baUflAtcbSu5jn>WYTf=?Qn~^`->Xl#K$*>{w}B4_|EHtGi5m6`98P zs_1oVzWUhSDqmH!kFWlEg%w{lUJ=Dt1xLeICyiA_=+n#F%~wCh;;TG&fsjhY;kN>< zcdS6`W&>y)HD8q+6<;kf@zwn*U-^!JuX;S&Dqr=i_?`G_TE&s@Rk~y0^eDc_$huL7BVElWqMfHg4|VCA+8unrpm>)}2|!0KiMtkZPBnq&o7 zwq>mYR$=Rab&?sdj)<=cemlN`-oQ@Ll5a!-)?^*9%1wYZUjVFlGhod&0+y{e1FW6m z`WWP^_+!IYHyt@&b#H^O&KLNqCOo z|J585U*$Z+`0A1utoh2-(0mO1S6^LZ#aB;Vd~EzzuVtztH1ncA{8zuif3@|QR{3h% zbH5W`r9A(C+kcfl@_)Dgs%wv5<-c0;)F1w}=&|EhSXIyv5aK`g#XNjpluD){?v=D(VA!T-Gfs@!dXS*I*(&3`q`#8)4C zc>c4+)_is9j|RT-wui60QGE6Ac^Y3WmVDoEzRCcj2!xgR>UzdkB`C7MS2aey`cdGk z*Afk~F=mJ$yr-Y132$;oF1(9Dctfm%7ID7v0$+8YybWF>U#;$-C1G%TDGICM)k4X) zjqqx*nttIm+(7ucmVSW&R-UTw8DGta;;TH3ucX!4ujf$uvL{r+dW{Hcg+N%{Vi8t< zGhwYU5mrDYti>W>Ew%>+*5Q!k8O%b)sWazs17SJKjL8@7SjY$~LRb=lQaRx)0>Z*_ zIbqGT$iJ|-Ex=l%1JoBLn4!mBzHUfpelS9CD)XM^~9GQz7o>}PRnzdr}JyLV;V z`m?>-p8j2YPk#tN>oxmMss|&j3W2olh(%hnTO+MURnq#|NLs7TF_P90rBsFPMmB&{5EznX`!)bV+Xx8@c zx0kn;Fy6uvY5zWE$hwD4M|ZxiZrOKw#r^uPaquo0Z znq-8pw6hs}t)*r3ui2Fbw*Q8Bt16neR<(n-ZWDNGYi!=C5O}M18@zS4z+3ZT@YekT zZ~b7+Tfdlj>)KX$Yo~#?7AhCF&RgFDyfs+kEidv`Cgo8(-^g1_t`?@O$!BU))(Lj2DGMfD zGgDkkl;`y{GTvImc`LgVB@)f&!&rkx;H`s3kh)NO^7m(Gy!D0gveGkk-dZH`)*`#I zK8m+~Zq#_|bQf##D>dFKu_-eQymdX}E!>6w8le`BAm#kSy!bm++)6Rx)(L0oxYb(I zTt)yDVz@=LqBN75_|_atxBsLk6L%X<5!zCs`n3u>alcj}a@QWlT~Z=0FvhCbw$K7>{Ew}bi||eN_$~FSx`HkbN_mQH z){z&`b`ovVJuTs0z<0OPruz@(H$`Np7jqu6wcD!((WVph154hNI2_N9UzBZhts{n^-=8(KY?Vz)Gxd#sR5dJ?><67qgY@0ea-IY?87Av<1_VXO~?;86FYs;Hiwop*0CHume*G{e!S0Bzfnm8jz(H z`Ri#skw_`Sj`ivedumYMt2AQsu$c~Y5`pkqg#h#hg%bnGlybzE6aF`^D@o1reN42to(8JODBT`7|Xep&yY=)Fl5&Gy3$qgJy zam$q4fPz1Ko3f4gY8~6Mh{dxFNam3bzv=t0+Zgt2|Fvo4VH$HX4Rz(;l&?5oR~Cm=o((Dc4g0M_xZnEUO$MH|%=a`w;Mr#5 zdVVqA(Radn{)=^ zPE#d3O6x8}@x*;=n9b1B0#tjB@%h(_&rj8!?>o+T*?W@OTC5rjY-{-b8vdPfW4)Pg zJ4fy3?u#Pq_!hNNx4T%Uj18;VWJwJuhYpdZQ0^e;9h;&|AjvS#CzSpbi&G!}^&y^T zs#{ncMvUjQ%D35+Wt3qyk3ETb96zK9m3l&a_q*syx>LFL5Z{2XoWhEG4ERg0+V@V5 zzhe5TXCLK3U4ef~tohf^__y~{oPPr``1f<<-$IptLni+9Tk&rwntxBw_;-oqt4!kj z3*Uka`yI=qRW~yJox%8bDDdy==n`}nVs|0`;*1c;E+hkRevFEx>>q}cqN3qQV@^4 zLMf{}vsI_%QsR~ODT>?SDx-@1TurTy|WmuVcR=H zw7s)Lc7^J1560Nui6LU#-kEQs?VZ_6;~k+>oFzmo)a=|=S!dV9uQ(Pim&bCEV(*vO z(N1_XGk_I%!^GY!FHXuhFMM*d4;%~u%4 z=G*5N_s25TL7QV$e=&M|0fuIh>9$NY-6jjWKQ9*^s9*|vp5JV}YZ>m39jWGTrO#uP z{;I!|*^}Wo3wv_fgEX^ol}(3a1zUr~-7Q8~jKO!O3cUDoOY8jEEEIWDvo(JX5&WtD zYO&-`mzh6bJsg`q-)s^26PsKKH^t`9r@3=4t5N08SskfwLA8kd2{RspPf{%D2%mHi zm--nL4Q3*eR!ty(YEbp3!bIu)Sii9EP~^{{nm;u}{OL#jyo7;WkxQG6NA-Z&_zIkj zQ#)w0ac8^LYz&H$5tCmdru*=z?hxgJLuIVSul+PEDp_J@N(0wqGe5cJLiNc{CurnZ zYcr5%RtL46@ZcB0pIT~HzK!C|ag7>XZn>2;`E#@vb{WqYVpBr(G&~fU=<>!CC9g$r zdulTP-a@A&(33orxpbLbnb~MS%hwas+O^(F*VGGKNm!;FB(9_uR^JSF{$tgSr>p61 zMXGO$Ex(*#!Isx}g$08eUwZb>v4G3T3@%5MF}Q5Wvxdu|)d-h}i|{l?jJ4my>BkHZ zu6etX8#Baly$W!hr7_P+(e=9ka33&$6B6~GYgZG9kLskJ^MHo}I7>0;gj&C#gyy1+ zP=P>ZS9OT(WgcdDqMgrcP64Y5W1VVLYCg(pe7tz7k>tIMu&Pw@4JOy*p1`;|JmO_n z?q8w1<`=p4$gX0~0eiaRQ7QiocAx=UVHYy4u)E`7L@8G%O;`h&r5X%DyK)}FIb=hzvl}1gWS=qm`dA#>YJVIf!crD~ z#ZA(+H+N&8g6D5uOxOzw-`LI%KLG9Q2-=Npz0Ib#^}k{z*w_;*!3MVT^ETGb-cXBS z61>iiL#&hu2_|;(QhZH+KVMhoADYj5!NZO>2;zGzOthG?)=gJkpp?X)Nh(gJ{WzcS z`BZ9Av!j=)lj$uHF&I$_|&TTSw z;6K@U7lB!IzDVvFlugjkflbpGb0nl)YHYM`r*R$ds9m{D@VBYLg6%&T+W*QXq5XRx zvBA@()%gzPo{PsFxGbLO*PdzWsQciDB5JDIg!2+?VCKpjz__j5(yVpF`w6Tgye-YV zBcxT=j!55-dn5Ei?)7XCvs^?2unl=z^o6#VSIMNq^rDCF(_i#NK&3So<6M!>{W0{u z7>L5x1qIMVOMuuhzt^KzdxNx~Qd(76G{knXvEP@f<<7S&=W9IE8hlmjizD;9#`Y&B z3I4=|O|A3XLLnvnq{G%cH&Qr%>YiqEdCHfD^C>LuA8yL$o-eM~w75RqoKHj%@-zA~ zi}{2GT?^K<5&i&gp1GT`$jST|0p!0XkOfyrMp+mIvLJb@Pyr6TmL=0dGU1x3&o=1D zB^(eJ) zUq`XztF-Ycr`WE}>J&AWt4U%!YCauT2F6f-^>zSI% zB7E5{dFSZ)I~{vupq34k-b+_`3qWcE%r^v2PpjAUDPSmZPhfZ*Kklw0{Hk13uhI84 zWB6(Y_S7Qx9@$-tq4@!{2JO>BXfPcjA6*hFvTMKwKSI;vM?w-^E!|D-(`1~k=^O&) zG{A62>u9`bv;`Vp`k=U%2LA&t?h!a6FeGhwU`$$ncy?#_dkDqD$D~~WpHt!U01Sr1 z-zo5SIuYKGwBAr`WOQ%O{w|))J#IlXI~L_79pmzP9OLqO9pm!S%;nt(1*TDf=~!Uk zmejf7-mkB?%QZAGK5e+RRsrs(^2fvT#>4a2dIk8H3Lgi+zbUmRuK^Lk($j94fO}22 z{N`Gek_)Be>ZRmDDY;NeZdyuYhfsuN{gUT~^Ny;1+be&U`gNWgu0E>zJ-+RCsb9+6 zaMw4ErhYeU|6S_WWo~%dQPuDKUB65Hy3P$(9##GFzxyrf=NyYQ><>?w7?_$i9*W3< zBE|$BNS5n8dslisOp<3O7tKlQg>{gprX^#cbD;b=X_Kk&IZ*hVv~lonQmwRwswh8@ z92l841$k-r+(|$GvQ~rq(6K&+0$T`=G}%6GbC+R(a5xkRW>{PnagbXB6tW+INJ}Z zc;X$vuFdr%#VJ>iSA8nn)_zgC;mcW3nI6+<4xoSvSFZ7ocZ^RU|oBAA* ztGn*>4@tX3@-<_Zz!Q-%N)h6qnSjcM+Ue^l`1Nb>04U*7{B0`ymP|-DGVRjzkx+t{ z&N}BM;PD1fugR2z5m#4wx4VuHT-PN%p^sF&LH?Jlcn;eAaGR{8ehbx7^*3)g8xgeo<5~7Rxf`&tH(r76@XFhnJRq!!>*aC@HA@qTAH`LmAM`J&Fm^Y zu`v%s!1gxLm-hs?px?~Sa<%ltCjR2yL~f7wsg%F>0i)hkIgthuC>0R0wq5 ztg1L$ZYL;0@@Bww8+M<&q2XN5?l|QUfr0mR^B7N^N&fpG?JBu?YIj5bZv(BoM^M@oq{JsW2e}a9QB4v^cya5 zy`kPft09$Ky*_i&X89BIE<^#Fh;r%KJW`c+%J+(|oO?#b%+9V{`lBD`C z;Ip@~D$$nvCnlmD5hGt0?3+kd59N04d2+3{(lrJJyNbyy6Y70=T7E^S`el06FOz(4 zwGg{av9Wi&#I6+S_BJEX;cyA`mg{+_;xb-%pGq8xa-woR`f#u<{|>h~I!|=4Gx?MQ=5P?4{UK9K#R+`a2YIw%O+q%^8kxz;syrd4@YOx z1&)+}GgVV<>?}(*<^!4KwKdtZ`TU=pk-tZQl>aA9efYDq{OS zIke68eS^2}h#w5?+y957Y2PRBvS{BW!`jup4-JcI-@Q}YXx|rE`_{c?YTre7w%We; z-E!3Jn_4Tj?^TXA+xJ`EzWeqW+V|i4j;4LDy3?Y42M%pl`<^*8s(lOY*4o#zzt>S3 z7qurX=YZ2ovo3yBdFQP>w&nF%e{9PexaHWEH>vvAmUq%Fi}GTepPl?q>TU!v%9Ts7S7K;^8J>ql*^Q6HKg^pa#WJd@H=VWQMBRL1g2Y!~kxwO=& zSX!MKl2#9%mXonnDyD#NZgNh>i0Sf9$+scNCLW{R$dA!p?F{8);E}{(?Huj1R8YB! z&e4todQu;q992_atp=M}>Pgy<>nCYH#t)N05_s<)gBwnS>) zOLm?mqc9`0RGL?kz}GZ9K~Bqc2|BP{PbZnhy~SOYIiT3opE_e~XSFSdK=uX7Takk8 zgzEyan70y;H*%N@)0e|$d$uif-QI=&vU*Ifc0XN{`OtIxH^r-C-Cs znGf%N3~hsx@FZ>+OgS0XLOrkMM{~0;V660lFW|3PlJ`k!Nsw}HXTwFgxyQl(&yak0 z1O(qpmR*YL#_Bp49>%vonMU579n_J>k0H;D9(l)q$46dn79VvKya}rDk8CgP=ik`Z z`Iwadw+P?Q?|l9KVf=ACwD)j1-Oz zY#5+2VxtYjJp}EYLwW4Ov?!U~y7E_dsvW#fJggM#(_ML4o7DZ%1p?~dm$ zo2u?#T}_(>;MY#lyy;9s;dTM|qJuQ=Ui!irqCKqiRl!*pk6pbH^butZDU}NDF~ozM zrIbFztECTlLOXPt`@csTu4nOp1z|eyT;BpPTVE*exhGC&B(!I9c$fm3W4wOE#9X_% zITj0NEmX%@G)JACH-}3%QviJ%O+AAnMF>Vgk zQO-Cl_QzNynSWLTck23aL*U}Z!x8li^ht5r8R*%y{HO&w2z`UPns;}`PC5hqBdOqB z3gS5ZflU1j^dx?C2|oip$!?=WBT>OeO@#5a|AHgzAL9AU+U&2KPwTg0)F0bQ>D6ZW zi?ICaCd=|~I80`B`%cS#_95-G?D&Wt4*h$Bd3l?%Gx{qJt<*H1Tm8)pb}qqBJht}J z?&gS~ew6EluV1cz4>b=G~Me^>|Vt<1T5782Bq&;qN!m_)Gf(kbmd3n}3%Z`S)J} z|4xd{zdc0$eKVSW-xK+Ffy%!t+ReW+Tj$@gjDLFz{G0B0?15v*zaQ!RJI<1SuRePI zeX&jct^XDL`?OsXF6%_Vhg(Dv{;EABe1VySPu57dL?hvrCQA~2#Z1D7+e5qv3aJdwF>K z-HeB~a~}TYVqu}9<0uMhQ&BNaI^6-H}?d9QxDi7~I6wSk@t2}(-5%X~E zHZu=bjke_Bf3%y2Pd591Yq4B^|NgJ?|9<$p_Uq^#Chq+Q=iW7{=;Yw0EnhupW_l8XU$m^*eCk<;-vR;`8xZ(ihQQMZf!El1 zBI^bC(3}h>aPSHv2Y)PZ@SPoFPPe^94&D&W!P`X+UZ`^L+Gq~Gl5udMk%PaQ)G7xb z7|1v{omjL`J zWSWRrs~FT2S;a7#jw2!-J&R=wWJG+ZNxX=Nc(g{uek5Wi?g8_~bu>H-l!yfp&+O2) zE!w!rl8EnR`I|HSp2p+ke;SB56NtEw5q}Xy#FrY0__oclh`56|pQ;tV#tMxW zs%ZS@FtvTDTrKZFI=)+{;~c=_3Ho~Gi%Av)IL6y@G8V98PV0@3{FMO7r^Ls!UcV6` z`Jb&o@+&GNkJ2G|Ulb(w6d*a?3X*eFNRBiyI@198elsB7LtkWvVh{?VQG%pTo`ElH4KEAD;d_1HzK7P2}eC$;D_(v;1BlQ zWXZ=9qG7nQy?ngU$@q9H=i}|~82NZ`>;B*q+v4N51U~*pG#}4tg^#yY5rx^PA9h>& zgMWzT<06%hcN}7w#Tgo-xGSAiJeI8S`1#m){Mj33JYIb@;;}l_*g3B%!A9Euq2@na zOGe&`B1f@&``Rsz@SyQ;5=RfSriTFd6h(q*@3j#>QL6wN}j6_U$X9dN1 z!gR(8x@esW#gsKj@?Cd4O^fT9B)a@2F7``aIu64flvca^(&}Nr#Rq_kCvh&GIbCj$ zd=DOnkP%e5`0_Y@N47sF1GmIq8SMvFj%$sJS!La8H7>@SE&)f7<`K=J}#nW z7at!{vy11&$SzK&S1rKn)U9^YE^or*rLu1fT~2VkY97aLACiLPofD_!gp+(H;47}f z3d;w0N+sYuu(sHHl8wj`l@}!d22wtAM^NQG7c})Wpr~sTdE4WWB4dg7CKK;X(ReRj z;61-B;Hts&Sq)H?Ak&%*`KV!M0_OSwyN1RK?%t>@i0lna#OvNkXXRAO&cciaHg*

GNT7V7DL*h@SBya>vN^P;(PD#BNha?H?cK>WKz8PO_d-g z=n_my^;)cxE06NqZtS}NpCjdurQRYMp*j#rj!)uQZbv7nHL@!xQtICkl_%LVPk9S? zlD&EkbwiLL@jT4f&6wFWi1goXL}_a`l+mc&fzY#ht3JWQtUm3(J38`odtGz<2EAMAyZg3`#P>x8DcNNk!Et!b2}nl<~!;a8>$=Oe*q%qRc1u+bjLwX#RH zpctwXqPGl95^jOi6uEYCuf3m}CRy}DHL#Jxxf89D56Lbd#Sn1&_36alB|Sh_%Z?hj zp=wAv*d|5B{PrPh`{4t4Ev4bGh5g{CB|y4;@}}87p=MO(>iMZ+JOWcjD&4gC;T`sy z+pj!cZ)KlU>-LFXP@Uh6-P_6aNU{A-wfa?K%T zpZw_!vQN~RP1#YeKj%M(q6(c9j{2&~V4q+`jQQNp7D{Zc(;JTXuv$rOFqcUEu&9Z7 z^e3^Y*XdV={t|WXalcsJdsbMV&;R<1kXKWjmT?>@!-Y3wWl{lOHnQ=l^icD*mlQcU zhN5##yX#`BD#?3r_zJ(JzY?3utN*7nTkzk@x) zg0nH4{CRCT`B_0XS7`RkL#VZUSw?#%XtHO5k{7*xOs@e926dC>)`)1*$VlTW>8e#j z$*Or9C$@#`K6fxDV>ZC%ThR{xhISY>Wv^<6jfBskmZ+jP0NZAo))fy%G}{K9|JX;| zwt*RK9WjgBWZSsGwpmEWDfyp*R+OFISjpo*?2gIf2?$s|Z#tDm4-v4G?!HfH$?rpq z6a7penX&7e%{Xx=sbQ)e<3uDxmQSAQcpS8UP%1bNiG^VC)HsS4Od(iIqPr=pJVh74 zB!IdzUhG9(MQ0r~Nb}C=z}^4sh9>fTfq$)IGU$C@T$mG;82_K-n9PQ{OaSZh&ssFXJk-EOOXY)Jz1mBY=1P6o zqm79P*O`s^B6SBFr`{WdOX+qpGbezVxyh!-C-Tt7{H~+Lx=jTOHMU*%drBo}GunKHn2ISewtj zgx2PRY|3+RsbB`@iwG2d37hh#o}^hcLDUUwU`|vmnp?@DL3M0n5*uyN9A?Y#FJ@BZ zE(CjK8rd@=4`h%Qkvz6IRdQ8p=3c>?`8c*UQzlw7kHnj_g<#DLh+~?<`-$$hf6-{o zfEw8;VEDTU7Vq6dwPs#vqV)gFk~xoAGC|Ff>B=mbpkT@Tiy|KNcmzNt@gM5W%sfi( zAIJu?+b_ME?Z^E8E`R;)dG^obpX)!_5I)!bo}67+zk}uf-)durDOB3%FolKKV(||D zDOgmJCK#YvK(9!?M-LnJKQL7Pk`WR380{H<22CJR{*TSf8IkG70}^nOVFx7S(E$mCctAoP zHkA2*gaY0`54WpDT3=&(Zn{LXKG>h#G@Ar`SeyDTt ze1nY*YP>IpVv~Om&%f5L9?VI5Z7WPe0dA(k=Z_1+V8*E$UzBcWfyHOpT5@p{6 zl|MDMVc!IWslLMiOZ(=;`Y0nqj{fTBCM)}9P=99MIJkXt!*gWc2)a}m)u=zp6J>qS z85gFnUNM+BvS83OMH@7WqpUM(_#$r5+{(1OGpLNRvR;D9#o?$T!*w_ju_@!)Ut(Yd zs#PUXcpr8%mH8DJG(o$vw?3vpGyG|@LDM}A4I1Ozs)c11H$)8Q2i%AYmOPvDg!EDG zyrt(g+Tz&xecVd2W!~w^ZJD1`TZZTJxgTRQWvU@lY%*jjtPGiAVFqWVJhn_*t+Z6~ zCGoSVMwB&!f-I9aL35O|RY{wqVn+b%lzunSlB7pznRb~Pdf7@&&NASS@|=DX(pbWK z^>7OIq?zx=^TR35UZ$BLY?VtHp1z`;rMrZi9>oA@Kj81KVlb%C+^Az`9Q2PDmev=` zjuJXVSzBUM%8r@BlZ(JIWM$%UMxWUE)P}}_qtN3H9w!xC0H;7$zt2__l`{+B4O&s; zD3s>Cz*p2eD>9rVlIJ0HCDAgXm1l&NL?1@4=1_kc)=|)|Q^b`-AHU7qP`eA>*OvgHFNZR(0BOQ)R~ErUswG&|gC1!xaL+#Z9G4 zp!5e41LNv^yO8_wO!mD*XraZ`F5~_?E|i$&>x8PjzVO5j4zgH>xV#oaQ)CV z2~56LJK+mjKjeUUFUa&~PCxVdp>k|7)>6Jt(8=oz!Jow&)16DCd_2ICUek95{e>qi zVcti2VIp?*g_Yw7qFwMzj0at$#)GgLf_wt+o&c3&>xaH&HDzmuJ|S_sWmZnc4zR$> zCGTrCc3c;zF!*#KMT6K|3CoD=_$napi0Kvh3ZVr3h&MKRGB(EZBi_DRtc{+3Bv_3e z&;{(clps4UWk3oaIe5!vng-0rlaDx&pY6i<7DgQL`i8!lOQuf?WLD5w-XO4dC2&fg zlwcm-p$+Qr{)<{c*LlLB*$wcmypd|VgxLqH)U&Xc(r5f$>4+8%G?hY~=&F!^s{b6% zN0o+r0=*@lrre1>){7m5LL@;QqdBy0Xqk%L1;V?+mRQa%p4qYmtBk$C<{c zfZaFR+4%HMRAXMO?ap0HQ)W4>^x)?|fkM%UdXQcHf)n*$*m9t9VL4Dgwj2oF1lP;M z%jC~Du9vT%_2$Ledh=y`9Zkp%njV+Y+-tF3ezmwBs2uosp%CE+*@gFh+otm|yy4%& zhBv%=5r4yNe7$))>XUD={{6x*t?w!IJIXZ}eNkB7Ggz!rxmG1*9$Vj2uH3D!e=o=N zJrfRF@Z}m|$;i(v|9rp^Le`{1kn!*mQG?n}w&f8kk%6ghJM1Q!x9;a0K zOgI=TA!6W9y*$JEpD(ezdkp-}kc3~ajMLB8QonkE9h+3Uw1jmH&44hbMu(#=eL4DW z$pC2I(iu;5s{AR3?4$=SI!p^-906SYQm)+Gz(?gB4G2asPN&ei8cmtwU{M}A93eSV z?mw)G4~_hmXS6!Ds-=`Os8IT>oX{W~B1LRNr?v@M598bi-ezCLk^kUw_`DdEb z(`)=ScYlz|*D_3+5bWt>hG6|qw??ppDaQiAPJCKKuq!!&ZGGAj!3uN)d)tU$KbR5h z$0!7=dt24fPd}wiBDc4JV7R0^3c)7D8_pMW7YIo|9R3(oCRB*8jO=d|V)k<&V~htu|noc5)e(_S%fTAVefC73y_G>X$6 zTcdK?pP$r**y1DSv==NnZCL{2v;cY>L`a(oYg{{GF43Ew9~Z;{mZZGXMaYrE^Ccx`T*yjHf)g4e!EiOFjQf7x0StetrpgSGi5Si{=b3C9A~CIzkh zWoJEh?EPiKURQPX5A*-Wu0DCIqcQKWA86J zD{TL@{<0~rsKfijLMs&8TKNB|zwF1r|L^{?69WGq`^%~i+y4*y%cjf6)L-`PH@|_u z>;wPrDQntips~YtLl}mYiUXU^Qb52o`D&f`y_G?8|u~f_38v7Ajx} zwoym0jZ(4i;Rvm+?8g!*lp86m#!O+KL{Zp=a#c;=F;AOEZV)M~#7JQwm})zb%Pb_j zyaI&{N0%8t&xvP92vJDc#9{@U#n!080xwh{`F1k3=w&pP=W%<1#%?pv*h)rYd0IX& zm^UkOGMs+N^N5khUJ`ihtJpj?R^+i+(L7cz^4J3^k3DYUF+2xaHpxF^Z;i)1 zcE)4pB9CR4@T9n$$A;Ijb&CRz_1TsqpLirVR-@zC7JCdF+pFT37t<{`D>NF*BO3GO z1l#8y%L`oUPJmS`ZdbBsi$$*O_K>O>;jYbLT+4McX9 zHIW@hL>59K%cS}2g(xDM`K(H0XM41f^n8NVNCMTsbe-3N$lkFeGWj6W#7l5b35-49 zG5KdsWDf!uc^oCQjus6Q%8hV;6p?*WrVjNv`Bp@Bm8T6N)8->m`3F`1*uR*slCjx3 zR7f1ppx=~njL-6n$q@LcoopmDpFn62#>E`9Ux|b^uoXfZqY~OEBcWyHbACx{7Wv`G z{bTqhEVqGQ%6E(VVVo6Oet?jeA3)`z63h=kg5=cm8$563v!ZtL*}X^&#o$>0UN3{-DfeXsu{1rJ1~9^jSGbf0wZKCG=6|v`J|BJ1q!pU2`~M z<}-DF43;nCyi!wPZF~p++4{mo4AAaA9A<#_jWGk(DObBSKwBdD z?(D<>t=^5t$`{L3&~i)J_LnLEw7WQ@?N zsyW)UGFMG!wM0+fS}FjV6L+d)hvaMmv^@;aZbA6t`;)O&wk@>06aU*n%ON9tgFb#s z-ALcsXoG&}DV8CL?Pk$8=<7Q?)eZU|{v5_sLToDouH9YbQFp#zz6r@YGmcHTlJ5q5 z4Yya`$;qDf<#Txp+6X`ZL%cyD|B`Dd+YIp{5|bMf7A@ub@y-0PMcj|S6!R|yX4UyX zg?)olhSSgEbEUW!A27(HLhFLpEDNaG7zK)wCA^H{~1JFHUNV=_pOmB;PKY&rQZhceZqXDUZ+7 zPJA>zUg6vDoh2E#rz$l4WT~JpT$@1>FL^HI`|lk=db#<+_J|8&Z@%}7+aq2Qw?`}` zTcl9jd_R`9NPu-X0}IEjY)c8sn1p-Jq0RT0pm>jv-sX^kw#XjM7AZE`BK3gD*q3N? z1zdg}urGzurFoxYJQn@KlJ_%eMzk9~Y+_r6a$LnHNIJ@@#BY# zAD3$U_yK+4S}GsV`0;MqD_@0snaN42AGS#uX0fw#MAxx^HZwE)6i`&6b>qcz{ z5Ap5bp``2}?FGk;<*pEJ1P3McKr_p)MtrwP+#e5!?|VVmIdQy5*%#Y&-h}peq}k9O z%`II2DzC_mBvF{p>(WAkOd{5D28b@1&1;=m3(QOZ%=;!`L@u^w+|Zl_Icvl zLX~g(;XLLpWPFPmtFDgMy%OwU1Bz9z#DDJB5afE|+d}M8ZJR#Zk*Xo?DJtUT35dIr zE!!hpbp&N+ajZ?+7b)Qg%k&A4k->b|w`a5c?iF@MSY}~DY(0U2fpCTa9bf=TK`MAH zLEVkL*Df4j@VQ;vjg8pg=h(0*0kMH?tX!?SFqaTEBnf-4OJXN;wTsDI(>g|BLkDpW zc69>Bh946IY$#Q+VHk5^dX4(&ov#hp;4U=ozOLNQu;JenQueZtGIbU_K!_?MV&nQU zL~OSSu@e(G&uWOB4SXUXHuSR#l>5An8e%u@k49`PLGnFA_*xin*cQ6}1&5_+O zZ?7QRZ#L7PXgRz_>+IP06t-0-n=OZa9n8a44ywcUvU{~*JETL5VXJA=JPYH2dFRZ= zL+Ia3>-VNAhIstB2#cFOn`{R!jg!+m@DTKg9n7}Fck@--A#jgsJERGk-*GRq9SZq= zX43NHeqrx`pMz|FHvO*ThxvT7mG;O#Xa%tDuCgTGnxI_LtgkoY=OqxrYWu0(e#!HM zojFrEz}5*4(1zF!&Wv+G9s!o5`39W6C$ zyQ6!D)%b5QGy`t`ErBt~w*Llc`)>(u{|y43MQ#7Zxf8el=GkcbZ}yUSN9Yuw!^|Ys zvoJBqP8jnIhc$oXwP6#l_71m?S5FEXUO#gxe|-n{NA`&**q4U=%^|+wJ%2n6=a?^u z?{<3-Ur+w3{!=+@e~(@hUb55lnHdLWJOJ(6+WRHz{?@xFKP*i^BCqys2d|!H;MG2n zeTAsXa1V1~BYEeS;{N5l#&+=PE<`wo7kTw=D_(td7w1(P;L5=E@#@G%OJ2oyrG>Od z%Bu%j;ng1-V)E(@cd4*f$VPiqf>bMBecZsSr!{J5x@i+rQg<{mG<{G*)4$YnRWS;& zlk1O>7IeCV(doKIPNypx4RpHXPOZXisZ`}>f>Qdd>}9Yj0_sCu|umfA&hG)pFoZcql{A+OO|uj`Z2i>2ooLBPH+GG^3Ym zhcT4F{}wan4%4qf6nX)>RtPySlzjaO<`%>3JE#*Duo(Wg$R^r%&I&x;g=xWpOjISS zHbQj*nO)Vm!y4wPhNr9A`g_6M@OJDVb2pLD3dA6D1rgehqGRWEa_m${zR$?9QwR8j zahYAYf0b4_78g0|WM`S@fIZ!@NXjoDNG>BPbCw4NF)ABG&3MtbNM){0n$!j|D_A}o zkCF^+&bi9DT=Mynv=DLGw_zS4=K1n@`?9v{NY5+RnlEdX>3EWb_j*i|-f!?UplAM$v~+E;U8!%; z`~_71?24Rz0fxXhPYE&S z3)<*S$!o_1DwiA<_Kz6Dv+25clfeYSY2+?{(S{R$H4WUm(f&Jbl452cb$1b!B^BA6E*w;}e`A)L) zNu$iJPTERlLsWZhi;jc;6R)xogp4?oAna?2AqYenk!np}*31?3<;+_(eYu!t=f7g2 zaiBlmV&G*ysxOHMDzMDX&M{P5X|qjhrQC6<`YV&X4dVJ&A=JL%R_gLM$+llLIz{Q- zLgT5oHlFCRzST@p94#zgk08qnT6FoP7%s{$UpM6>`5l6geWfsd zPb)|UXbqqTm1$aKC7PYWDpY= zUdI=lWWd)-cD=Ty;l4HORj07au{%)rLBDGcQaZ4-sjOEVT?00_1R9Or4IxNZ1Cz+- znv9xES$;@;i8q_tT9}}$wpf^u_60-X(VqQ10%rt=)6UdOn+G;?`3 zLV;;iU^*5UxFvONxOCLYyIey9|7;r?ld1|-9bz6d92rkYUwObN_M z%Z2%-KVi`rc=DLEsr-o(!PY)K0gL9-%UcbQg(D@_HVaiYcLCVwnk!~Fx>UCDv# zy5wXe+%FYxkpCqso`ZHj6fG<1pGo1YF+l0CoD!>?~JHPi*21 zvA86!-(zSAUJ}5G(*BX;xLdEw>Zg&fs^$?sGRZoa@;grv&Vj z?QkNE4QNknYC2+oniE^sZd^$l7N~I$)_ST^B<@#Nk3|tKTZ{$M3-aCqQyd+mlUoRl zrr>?>OE#cO%fudf;q?n2MzC6vI z@{dWoFp>qm4F4*>5P!l~-T7DDl}-^uepLLi8~?GJ5>ht-D8t}R=q^_=)H=wY*QXLk zubikz5j91jQ~qx5ehfeqIU3~5(k+h7%!9f00EOABy(3oMB|F|Pax9l`uffrER&^NA z^S~Cz0W{|{JFbG;ar-x5i1Yvpk>Y8Mq?H_LO zl-Aw@pV^1XbVsSnkj`4h6=X#Xa{SdjCoT&N6cSIqJwCyPP<9-!8)C z73_8$my`KrZ^30*0S^Ba1k3dwX@29F?R|)~cil)+d%yHStL;6f@~GQ;pc13K(_d_} zy`8+hPq@L@-p$t^ReN9cfkk`Y|5Cf!``VYH+Pk2-?e_kjwfE#vruOdluU6YT`JJO~ z?~nGzXz#7%ZML_IxA(#HRp_7~gL-k-k^)!wInsI|9ef3Kr7W@1isIIEx{ImuQv7E=-HT>_i&0$@_m5FMrGIp|+EHF$D^x5ur)c7|B z9M$SFo>W^-P+B$YLeD0<=X<+9PA%NMtZ3*t8)_3a>`tidzbPE)xmjB8*jzLx?LstA zuzS(8kbm~kVk9%&k4QV#CPq$(vYEs=f--<4fM}DJIn!y;ew* z9(Uz{+L=-EK7m_S#)dqj&4mJUFR^B}#z**y|#QgQ1?UCc1HIj^b zx-r5)eeJB_$4h|Ld7ngNFltJ!Yf_=PQRNhk>JI-T*RFXPH07qezo*#bjYT7RNWM== z?Ys}I-<4trHPHHgOuA9;*h+fmCX}XeNg1Edxm}c`%^*peT;~N6WoI>MdFbLskfngL z8pWxai_=aJp+4K?2LIoSkX8-7(6iC*QS5%Z`VjXsMT6B|T)Uq4Vr5Y- zv=C~4cm?!Oc>bgHVJ_>#-giSEel8zW##!p0`>81Vd%TboZ1TX+WNh+HOkRg3F<~9r z4cD@vuwD>mjT_8~HPNqvYF-ng<$%M0GEzp6cTrHIjE1>7KO%axV`!wt6%Yf$ZuEPAORcNU43U|Df{9g?Tg1+qRy+*^-aK?qN<#&q;iZJLn))?p*H&rYG0lz0RzAV7^;}!@{V0HtV|Q{i5r-GYqY!#)md4 z8q@=ybMH&2f;KZ1)Pq#e1SUu?8&uGLOe$z=dsR@iK?QXNn_2JAC2QNGe>R)-&s{I0 z{@INB=Y6h!Mhp6980nw2$2+PeZ$DB%YX;;_ZFNGyRFhh~UDH2tYclK)qHZm|WZ3wYfZdw-b))=6salRjNv$2ohw*eT^A4BLQ|0qu-Y)a_) zDg2sLo3k9+;1qd7&x7&@JrBE1wErZZ0vyI26Qnt&La(4-ET<_FIHl*|egEd?@AMOj zWx|kP{}df_VEPZhx2f&4oIq@&Sfp8=T{}Jd=Wuz>Ec?RIr6}`5U@Vg7T0lx3Du{#9s`H;;H9B{7i9dgYCZAuHH&+)XxNsqc|UDRNE{|xETo8WKV-*anH#+OpzsidbXwhW^I zMQZrmKxSpYy#@vpYY#r4s#GN$06|1O%(XE0KcVi#rTVz204iBqH@PX|tAsj9UflfA zb7xU9aN%ZY)qpfq&{Rjsi)YUk4Y^8v+tc5q)*S+^yZZoW6KPevr}pCVX34jXyqR%< z>@}YM+GSVudaR5;p6XPTP3i>3qJ1Md!n4<)YPRo0)REQ?>_*1IK(^LuU=n6zfyNFu zMI!Og*ihpBF4P)OtW@+Pk00wZNB){{L|X4G4`i-kbwj^6xwcVk`=`lYVr7|ag41{H z!O8JBr^!$)#~NZmn4f9`PsQ5|!l4Sr7g*GIHcFm*O%seq_u|TnEW4-jTvibj$wRBL zfolH>WuXj0c_4Cnksy;)8j1%maSW6Q#nC~a#?ne_%UNj$Lul65;1Ta?nWaz?nHtc7 zQ1%y0>1c&UDp;XIn)Urvt46?F)jO}TlT=U&U-!REdNf35)+=YB>giM2=a6!Pu7rf~ zJ5?RO%f-PqIV9Jz0=;v@GmVdUa^i`s+#h_~&! zrwhocv2(6cM=iNVQg(rEs_jsL9dsp)+-w@TYq3FEeu)~nBUWi6_cHUyU5l0c{yO8x zy+<9nr_#uMKp45##c2aJl?LpZ=mER7y#uzZ&1$?3nWT-^+}PuFrg6O9v67G1%V@l= zwHU8!+cRF*wmx3T6@&|JXuPg9jMoEE<8}KA8m|?B%(bj;ZH?D~ll1YrR$0u)>#hYP z6){Bu#37~j(94=QJbEx{gsrF@x`Ia7`~|9nq5K)ft1zsn#Il#!&{`H%T6t~58&ujr zt!6N9V1WT=xmp??_Wo;kFUKyyW^#UERFUT4GeN@G9o z=OcI?i?@%5^3hiqPsOW#M$>nxX0It4r1M)Vg2WeGa$6+5v#kQYs1sfHTM?pcFBjC%di@o z{m$wD%)}$1G6!|L5vM$7wd(??XP_fo5?xvNS@PnEs}!TAb-J{kQ}W>!GkQad`x>a& z_XFiBN>NppOQqNkQ;P#L5G}RQNqIW;o-cXzf(a)2{)_$A(|Vwk0`<9qh39%yXqra zRl<~`fFwn)k~e=*$osJC#_Bxnj;T_e~0yk*HtQL zuko-RS_7ztrnWz7Sa1Ee{G*RQM4EK@65&xB&<0VTeDgVTcC|VTc$V+{tKaH9dbMqTF&LiSiD8Ka)`& zmbW1f?TAM_)7%s(8rOrxBPQzch+C57&*bc_wIiNC+K9vk9+7x6MnodZDk9N?A`+{f zOhALb2i)1S8UqtW$%7@|ZY?ZvnI4vyDugBeriCT$I~HLHw!gYYxkm8kN~^hR9@<|I zP&`&NeJg$RGuzj@Fol1CS>=ooHd@roWSUNKRRSG-+zH1UcaQSk~|t~#oiR8|j? z(9H&w^?sDfI(V#t7Dkoz{jzqctj%VXb^en)ZlS8I_bpWxi(Fi#MlK#`&!m(j#>+I- zHE@|G*zHhVgKr?!^-ngx2|DW~V?2w;FLH(W#T*{Ln3^`ucPRHBEq<|@1seLN$v=}X z2;&z!(1iFXT${Q8BTqJYL(fL}!;d08KX;vK|5SF{^pFFKSJ=0cca2QTq}q<7P|j>U zKi{`qT@RU!ORDKv{mEUZ1~rPh+)SeuUc2^r5SyM2@|KSxh9?N}esu8+siCPI@r7W5qMhd$|4aj4S_P8P9n1i|CR2&_ZG4iXjc>TI-QJ)fmv2E{xn!$2g!d zBWk?&pA?yOS zL4&(1nGV~=8Y?Q*)KZO=_KOt>B4S7&;iUycj6yYP)ENUBA%+kV_J7W~cOLslNEG`$ z{^i%2otgVM_n!B;=icki*7()a1HUed;MYgicDJUX@#~ge@#~hJ`IY4pM_<%98p^Mx zwZyNzU(pE8G_GhoMf^H=MK9Jf#y;BfddAWxiNjtm>h*fY!LshxGm=?r_ZIbaJ>!A0 z9@jIT;r#kU5BwTsJ)`PetY=j9Z9Svv9IR(los;#9Ds?@hy!dSE3G=>-^^7WYJ)`lg z{b!!b^^B^stY;*x>~4KwSIak9&xq_VbUkBHxBV%{zk~IRs<8Ep?bFZcdPY^)dWOI6 z>lq%5pl3dlKwlt@%PI%OLu-Pl+#UrYze)HDS3C_JBn*&)U zRmhL}Jqmg7%Rp>z2kk-295tyJutoYV6m3(z)n-Sn=WFmFrGo9eUu|*YCKg;wK<5o0 z*&?38MG>S64hE=I@Pu8}(f|%0#WEO#z7NmfSyl(lN&{a{rzC0DPQhP)hBX*%Xf2X! zr)MX0#@cNDOGtd31k<@*y2)-!q#{_>(;tY`F8zqA+Y8CAVlf0)yU^^D%Mx2A{n zj7{rKZeCEUKTA_AwZ`uf$_!JDMXe|9tT*FEq#7&NPvRcbP$l5FLC^a<1#4J#!AL^dBlr{4nR+TfTaFOA z1g62E3#)O?^qJ^>ej2}%`7!zWFh5kdPxBM!>&5)sB%As;KWzLURjb~O%MsnN9WP8<9qzYYaXJ^zKF#}Wc`#C)pl$FJzZ@X ze!|L*;>h-Ca^DiaMf=g|p;+u2JtTc%>JvS*G)0zY^k7=0;=3v;J;WKlkBy**sxW%M zGTqX{#D}8OgSX_|(8IjQ_Gz+Cd~7-=^iUevK27c;->iK$|J4!-pVaEwQsdm>KNkPR z)%JNHA2E+T4~)}%Fiz)yRXvxlUOv0WVnR@`M5dJt!y+&cQ^+_3LO=;PUkp8$Vjk*G z`KS%SPV!f~UEYqMxWj#=zs((=dKe6{V9=eK*5Da{b-dOX@AeE)R%6Bbe)mjky3@8K zTi6)ayaUfSpKfzZw=PLYt!}QR^J|Ymd#}-v2F)+v_x^P1#8<&QySF_ET06yakm4Q9 zWfYH;oF*!u=mp%biZx0h-yz?-`S|^A!+gZ`Wj>A!{@*npx7{kfNhg#P+2_GT+|3t= zTrdFvWtjR<{I3cSg z^%$ZOXGYly|0xBi?0D2!As*Fw0I0Oco*Wc>^(H#rBQZV4zK|Wxk+x6peE@&)qMY$~ zN(A*h1Z}CQ2bBhDmK?vY+yPJMeSXg-Si*08{Z|jH|ciewiJmelJO|zy?vkBghaSp1@ z;xy~)xJTU!qc9^Zab^aK|7!H;cwvPiU1`e2_%6q;o!l~<(yj3zwPY{^)$u);q_4-p zFcJZ}h3*Sz?galH?6=6C7$f+r@#nF-iPt;CWMtq5V&G)Mei05q6Ndn^Rd8zX9Ji#& zd6j=(;7KVyHQxOgzARZy({k3*H?Km)hAxK~O%yx?jrEtBxVFyU)8CLNtDKA^ZFi~EPl!+M+ z$a9(SMao1T$)aC)gi<#BLVn4iU-L);;V%rXTc@`^N`Za48Nxtzn<6@UxVu zfB94#a=%?Nc?kj5Kw!02ImgD&S#pz<I|5k61poY? zc3dr;Yeiej*&$0?Q1sBd)3i&|@_pzD#wceG>I%YGJZtdm(>k-fCMDJcU9Q5*x0=0? z_OJNn%A@PCZ=Zc16DbFEk@7;dDpG#5O%*A0bT#m6rc{dTBo(h^&snM*DdrqZqJ)lP zSEWgD1$!WYQoNo$kW4AAWDg`(iZ`$ak}SoW4AP`{3wt1eQe4di2uT;TG#Ak?v_0MQ z3(sm>PQMnxuOj;822oLraO1;rc<`wYMetCcwRov&1eV#ibMa?mMR4{4dfYFGS1~C>+qCe2Oypw--(BnWpmvzk>#VU zCT$?Q2N1kOJv-z=c=C1`;YEwmy*PcYed3aZFzWe%l+nW0T;S^c!bacus?mj)XJ%aH z`K7RN;b?PUwi&)%iQhy8zhZ(_h7&-@A>rqH2A^*hd{1DfZ+Yb@8EL|*A~KPxgLZ#$ z=jH{a&{u!#)jbHti$sgko2%wBQq3#3uU4lm$y6$A{JA!!^8Q^x@pBYuxF6k{W6!pL z=%I{F-CpXi+C?n?(6`IIrDQb?NZhGRMEO}8BW#4xszdo4k2SuT?M~3DItSv>dx8&b z+LAI>aGx?RtW=p5JMb(dP{g;CU!al2fj!X==6jT;aX%RqH7ifC zHiq$@(6Zt^6?Y60{1@?K+<0@AMp=0XX!5g8vdcoG+G-A0?y?7&;pM8yw`N4hluD80=xHA(QT z>#u*y9vh2CWM)gNX&g8PZUH9@G(rom6LeF_xZehkNoub(_!I|E6|9_9%CktO<{uW8 z;`|sVWpwE9waH;(k{YYF@d-6fNeH6V*&$NktDv>Ci!3<|two(QJ&dFh6uR#fHCGN> z)f}>`6LmNTQpH%34ipOPJWg5+xVT8*2#lxz5@Ipl^fdx!4+HLl)8wtCVcrK>^?6{` zV}JlHd(@&+xK%%we$65MIfYyGchfJl>gTKA59kH>2}(xD`HLzIG?@+bVHSMXpQf1# zqwRzt9DR)+Y+hjODrEGm*B)v5(N^Px1Xvjk3!fe=cE3qG*!}N#y$=v6-eLA^2Vpf2 zJU;&u9lA^#4TC7YKM^#F;9HKDA#9vJ69uw+tXiVWq?cI8N@SDB_Rs1F9q__XW**rs zGmDBA5@PIpmZ4wxB_mV?DVL9*i870*O`+NkhsFp=I!8fRkG8NL<-dOsjUj$^%D@nD z${*OM^H4gY{;Rjxmvs_q!7h}4I25NJ&+N@pmUL+H&InCLC^S*{S-H}9zmwY8GS=C> zytC$qwfx}F_S4VWzPH+<>^ZH;yRiDUUdS7(B6VATWH0)+DmNPI)A;UXn@1M76_KR|DyPhAm^?(KjZTBQFYLutj5X@@BH;X+8jndcVzjgab+1Eyw zK2R$3SMnc*kN{Jbo~E}G*xOb7EnY$xw!WdpA2Rg#!z(X=MO{bnhaHCaLyVi^54l#D zqT!U2*Z|HcR>(fxsh%~Rf?>{JYFp}I@R*VQ@ciO(v+6PnzN0378HW1`3Ww5_A9zs- z#y`)a{d(+T9z&fp`0WptINuU{cuI5XfqLgbnh6X!G&T?RIuDw?HD*W0k{RHx2P}^g z;dq+N+tO2)d=%?!kO~r|iK6oeUbH#sC1GR1TWN{?-T6{MgZE3bW@Sk*^895UB7mW@n_>KC&Zy2f zFR_P}pnE@HGW;hnXb=R|SV0lk7{UJ#lt{nE-7kHK#j`?!VVT6539clEGf9|UBe@d9 znDDqyVJW}dD3w~au^aAr6jJd2LJtlwocxx>GVeB&^6ca#{J}csTTp2Q1s;;|J}?S2 z>Ag`{0p?5jke$NpYT_MjbTzRJ&mp&u4C1kncTaWlz?8XKbT$gUS217maB5I;B{nBX z{YBRizJpl{NF8wxrw~yi2Bee2BQyxSLYYV)`8$cyLihVC%XAhGu(JKn(Od>nPPG%Eq2bC;f+e{}htR4M78^ zT~*J9O7##GnF(#hXP{5O#1Sn0XYJhgCA(3Wz_`@rwBZT97qOH+BiHFN=D{Iq@Q;5d zuTllEo`J|)R9@=B{m1I~-izhq19I}e*hOezbcveE4q zI>F5g__4&tsIL~O&i`xVPL04YY9sgp)RhZQmBa9;$=1eUvvL~BL=Gt=v|4U{D)>U;`_M1!qYA%{ibR$I$1>X|Y zRSCYvYh2g;n5?WMT&@*ac#dNXZ{ybedtcAA*f>e%o5OA%M{M0t(TKXPfge6-5 z9$fYU!$lg32FonGsZ-eM0?gBjp_$S*@nu?rJ6)~z#)ankY9}HLRTn*C#u9@d!*~YP`eDVzKvy~ z)GE*F`w1i_7nQ$ssOyzAfc|977_{Jer5#httw2-B%EO&xZ`-9|V3)4!Aba#zzG?vG zDj-{H7yF9vmH3D$lvb<}g4L0oI##!yGO#+`VY?6~ZEKGGst`DA3=Xtrv2lWh4xiNx zS1h1r_bERO$rs7t`65X`q<2ehx;15?w3g7uSKy2IioCiKKm2(Mw&=!tr&X@}2T8*0 zslLM{Ira>}|DcH>%MQc89`QSwaxS1BE#+jPmT$70Clk1N62T(Qg>*K+JqmH3zgh%s ziawCHBj}z6n(X}4V=VP#hNz_Nq~sGfC7W?V$I32_6|n`eg0Ypy5Up}3Qt(=wQzFaCX6R5a#$jk#WXS25FRB;lKzF-8 zQw8HZkrkgOKlCLD#`$8M{44kwJ)b4y`Vu?eUn{n#Seh)#gsZzk^f|}JCucgl!N>X0 z@L|^O0DM4$zYqDA`73ef_&zk-Ic_g8ygimbx9Fwr^XJ4j)QmAyl-cvzwr+d75MZ`X1Hd&$gh1eh-SC{m;e4b%VpJ7`vN2oG2<9(Wp zpO>VmckKw+xVXdf$L80_J_3FWx?jM)$kk#UdVbqnrMAcNJ(_FO=K&>X<(=X;*4ULF z1;g?=dN+T*KN;pPu5a@v5B|S9e>^`Ar;EfH&(9n2C(6&uA+gj`eqMH1e%{@xh*FmU z4f%N_uF|#qyfmIoL-%`SsP}v2_^Um4VBk44TW`6Rtv65J*{n&o*WhO%6K{px$hW+R ze7()*E}!ndJ714TooKS28_Y>Kn{#nCQw-LE^N)Jop8YI&dl-n(*H1zJVgBCTW|qH) z_i&{IxgV}2@Zs6=7{Iy-BUOht2ZMAoH#xYS*nZVJn(?Y;ng#PF2J+Bcq6|Jf{}?m) z@H*wtBtE>~OHJa#YkYf5;u~USmzaen@wqQ0Q2Y}O8GLryM4ZMxVEhX6y7V>%i%iyQf{FiM{ zg{0JFYbkX(qM9m)Ze6~XQa49Sshg{%)XmdU>h9K3>gH=HbqlqWx zO5eu(x*rUP%&+tBa*tBkdagO_4n(KT>pVgc@)p61Ml25W2AB@auB(%O@JXchVfl4X zCG~(*&_og4=JO5tkIiNP$?=}pf63&)q{lGLu0Kz+tKw;P&}|d-k2iNaZR{FI3{(_4 zoK2ps80mj+ajo~XSuAK0R-LAt4xASMJRVR^?jMWuvLaC`ID&|_tb*}kc-7e?XY_|D zXb|fn^Xs1ZSjF;>9q)IaU&q34$(ntFlcfAu^XJs7;qz4aVHRBtATT6XL-U&~@2;F$ zZh~%ws*E{u2lQL$X!raYv+Zil@`8S`CIDa+wy7)*hOOAB@@5N@H;qi*H0ko@$;VZB zbITLq`F43>`F8oLkWusP<{ISVMLgfm zkViM)m`AtJkVluf$dE)wxp!&?9p&Ds>2s8OrzOi_vph4-n0r^QKJ(nWbtX0U?g$fq zWU^_wcNJ=JL+;%{Q%LR|&WK@&G>PLxG~_~Xkr}5Z(J@iEkIT1F!@@=7KBK5S$V6oh z-@}m&HDwZ&n2Coa<;@>;quseg0Cugz|tlYjumz*dwUku5=%PyL z3Z8hE`Iwq`myvo{KK>Xj6Z-6Uf*p?J!H_#JvSnMy4_x|w* zoP8w*g4>T>do2EHO07ftjiuIM1(*fAmv-fL9H@GD3*+xH2IVv}nD{$%NQJ8W>teJW z=NV2IXeS@2J0;_0cQU2-Eh}QFeaRQUxW}E~bnVxUf zd==Ef?Itb7ZJt@nKAL0J=vSThJv_Y)T}O15*cYVVg-E~HgL0#O{v-HV834!(TG21F zn-Cd!6X6#g90W#;3aigeISYO z)@0U(H=mSVLi7>xIpWC)l=$_RlWHmvF?tyZUv1bvdelaK3r2ETceJaz8KPYF}9F zoJ%ceUs%Dupym6M-4KG7qMOvHrRbhjadiXx%`Hq-u?*9E)w+MYTINT_G82qt z1pni05z|rBdr>W(3e%NmpBhUuy!2JkFKXu5^u zm!GRVnn_!>bnIkl1a?QOM(?`4m#x`*Ihwtf7scMoH`;r1jP~AKqrErpUu5rXKBn4F zGLx4_L*?aBqrCjli7577#oB+Ry*EgMw}HWXBoy8wMtEO59t=hoNeSmpBvpK+YMh-6 zqP?LI?KMI)`uN#2&ggGqWZ1d~@A=PEC0@4_dUcVzb=uc#KKe@a4B9wLyI(wd+4or=XHe z!G=)eY%n5c1b`PUKl{FiFn-+-k)Zvf>EQ|5M|c3c{!J}G`w5nyU7gy73EGKxTY`8( ztiwdX%c0X!HR4(*IuG$I?A*B21O8oZ7p@6Wy7ovjTkX2mtfg!Jo(7;-^<1vTlt;zz zr6Opr%6W)Ib00I~IH7ncrs$f@EU9}Rq0Q4M7Bn>vQ`ak<`*?2m%~C-V&+QJ_Vx@w{ z^b3}J80$PDR23Y;boE5h(;!_dO{$cfdkYN;rC@SQM8a<7rgE!&%3V7`A`(i<3>R})(@dL?&%L%2Dr ze*D;JfT>ZmY=-t7E1+>{MH3Jjo64s;jrnbJC5(BqRBsUF8PZ%zH%k_G@GMj<|2s{7 z;z5fkeG8M3bv%_>&Hk>Ag_pAUwOFTYK&=99&JSg73|KNJ=J62r5F=ZN|7| zNtS&q%bNWJ+6v6Dgw!sLQdAOc*d^~ZL zSt2Eb+h_1lq52pHgU)?X4;4J`s8Bv)(xKdD;!uuaQ2xdg0%bqCuL>(}!j*lHj{Xy>3Gn8KdUAnciglJE@E`>1^2(1bJpX0+}!S^Vx$7A;!^I>@Y z#fIdDRitw!;@3^YI9UzKESAQnwtj1jE$NXLKIs6rkkg^A;@s#Z2c(Fc2t zrDu@H$1y$2wrls6WiP(pq9w#{WBKk39%VI#sI-ua*$CT7p_l@Ry@80abx7n*XtukS&6t>Nhdz?fxN1sADLhf+PFXP(_dN`Mq(o{f`dpC+c7pq z3lS}V3t?*ujxz(r!F2(|JTBWQ-z4?=A0INuo*$r2DcC%pF@^FO<%?>yRK;PnXH8X9 zQ?bQ%fO4PMg0Lbc^6l3lv_xFjE7?X0|NkwY+OS^&NZ@Xy2s~#~*jQx8ql)Ze3&`Ya z5mB5vnwNn&3FfBY8--5j4zXR>S`8&9Dj19@4NNmT*xrX^whvd>_$#xpv1~GJm}?r^#X7I%Qzct6^mzlw1bVUs(l!ksa~*3}nLg$BGZ4MZdQec~FF+&Q* z=AI^OOg94Uo>|-hcF|~{6tFR`HF*xvrlO6*r77|0QxXI(=3AD;;n`(V;;9MGYhuf< zVdlW(hPIIu#p5hH0yK)Yl}7O6ij%L}{d|d!bym~-XlQ{aS%Dc^0j2tk@jRYflXOE8 zj4yd5Xkx0eb&ufxvx)7J+W}=ud^DHJE2!oH!O5w+>Txd-ihtbJkFSKSyR~;u7~3~) z6elG}yKQD_`AN~g->C0L(KlI50s%sd3e%$ej^|IptbZS|qNuF|G4=AORoJ={#n<{5Mi6*gL@O@4+oXfVSq@bvz(+R-DNvO-RUx`~muHaccfra*oIBrr# zr!dRv3j{g9ZqT*L|L|g*B~CiuTW1M87(8?4%*g{|_FYyC|J+%2fn34FP^!sZ7@Qvxd~lZ{sE&mV9%>fp36W=*oCTC>9+Xv+kic< zC382%TN5MR7GKDT@M>>ujDuRjjk|j0jQEvMHQeA2d0x=u)2@($Le-5i##|$(Si@Xl z45kF8Sx^uHeP2WNu`du_*LaV%u(im34Gca-!ohE?2GFFTqVnq;82c==XyU~;NOLZ< zTd)ZDhzVT4tJff?npE8rmnbSYI)j*dgNwPV1wU@w6=e`mSBpC|0rfex7$ zEKL!pUzQiqR=z|ST4;R0ces!glmGY3n4D`*V8&z$ny2G=Og1nVAX7BH>|!Zu$d$>& zmAe>MVg}pwM@|RD8Z?MJm(nh{1o11Hf<#U|FeeF)8h*i-EXt_|kRe%~SV_&DVoUgW zo&eQb95OOg#v{a6B6umZ*KSjG`27`eq4!rziT5^|YmLwQWy2e3%A%0+ZByd=36JWV zEQ;^*m~iL)6n8DzpSRM1=<(9MMgBH-CLTTH9x7~{KDlI?yKb7t?A;!J=UuhpSF(L) zCm!9Fm#`@bM!`0(x!+S`0bkL^wdUROMU%qslb90kuLj#qhi`cZd@k{mTW3qR7fBu~ zxXd$(e+2-H0*`Ma{4eX8ivstw-+5O79<#2>qj%-U>j9Kl07Y!!aJ&n4ABaGYl@$+u zBtLo$heN$@6M86O*Ni|n{{cn~cHp~)9n|L@q+V)i#ZxxtCyDJVyJ#!yh_o7aY6&Z+ zmtmV~6QN67!2tuQ9dCPko6$pJ^B!?u^WWrQ1Okjd0w3J#-&U*QN1vVue4TszFGc)U zsrcvjVcbyU-{npuc1kjM14sl*&3HLRtvvN=KAyAT6Q|(@ybKhY93l-x^U-OQrY7$S zHp*S8Vf2BwfuJi$6(pAp>Wswu#j3%*5?wZ|Ic*}l6hy9u%HMWAH!VLA!e7{bz}dd? zDD7Bw?k)e*<^}c6eZPNY^8&gbZi9Hwk$Pvt)V7xwpmthu^=ZuVMqTBsfEV>n3O30v zFT^#LGRavH$o(7(Ztww-<|PH@q|pWUYwDa{lUT6Yf51IZ%1nkSeAMZcoNMZxNAdO< zx^D1-K<-gK|IjRo6#2}hbbm`Ax24|Mf(7;O=uXS;!*^;0y>l#C=X@4EmXl-W^szta zD4POv98%__I_EloVy)MJ|A8=EKK*01Q?0hZw!KSve&MKAZ^b zL#3wItw>FkZkyyPaRA*uNX-_MI0^u$_bKw;;$7ZqUYdnm%dJ6R+le@&`{$u)Vf9zL z#}euNW+1Xs3y*P|44my2==u}{-o2Cvt3#dRDdmJ{96KPyMMl~^xbyUi11z2YaTU|b3tFs&gRPl;u!P2QQ5ceP; z?tt?sia9j<3f4%|*lnTHXq(L7D=eU4J^dwTqStD{>TUtatf1U6Cq?kneh4Qria|IAoiX{bb8`kukSsI$Uf?HQ>Oy6-n3@mn?wZ5NOVvFC54Tv-8M*b!#ji)Jss4y!oL**8J z;E&VBO8Fd!+rt&y(uqOciNUhqCBC(Kq=I($o|f<8Lt30rM<5 z%R#rAxo$M97bmLAfK>@PU#ai+suG)l>rb&l*FIXkSFO`01y6{mbyU#bFvEV zL-jT*Bp&2k!)^e63E$Q**oOfP!6SqH3ED1Jj#zvkmNXkOa;Tn~)9F9V_0&-V75{b= zih!fKp5ntLb#;`fE1wHtFQ^0|LH78Z);ddqN%_Gk?oYB&(NZQSNlYMvX_g8qq*?K4 zmJ0=cpi`eCj3I`d&tG9igk81^{{N_k_mv@F8r1xc;@%*NU@~@uMvpO#BiaOo* zbcWs%Kvu=pwy0%~8c{=3kQrZ`kpN#FVj_$V_Ui$jgmCyLcl21^sspFIM(2fv3G1B| zs<2+58a$p+_$!aL?)N*%OiVDA&B}tWqcpHeYhW%`o0EiVmT%(l@hKUe{MGQ({7PXd znhwg~(=3Bz^z&#;uaRaarp0)CP#9i<^~IYNoh5R?o){95%JEiK!E! zs*Hy!wC+^AqBU0V9d5^8ZD#r|_+N*1lzMmv(*%}}Vm_%8Y^BK{Lz7R2tara^3YVX4 zWWzm213KNNohPf?Yf}(Z*IJeA-;tgPG>oeop=!z-JATf73T##^AIGQK@jzqf$VF^{1!4Yd*|Kxt&t5sAXMc9c zh;!-BZZPToY$o$()s7zhbA(&FCe*EctKR6=in?2izN}$?`nU6MQ^Wn+oPV)@YuR}Y z{M*}x|1a=wKMnD36aV}D+o6BzM8U`XTO4`+!6pr>7X!H0q2W9|#L-t2<2J$iE#wyhs0b!o_{}Z&#f$h55Hx-?4vNP>J~a=Kk%YPxsot9byglZxgMW zfBV;q{_WrP%D+8%7XNm`zx`Xm_jDiq+yAotAN6m4bT0kdKmOal{g?W;X$F7wSaf*4 zJ{>m13k_oH_85bx*mY9#S5_^La_QSA^<;fYwZ* z?)h#A@qC{}&-W#DyyPx6cX0pr3Elq{{BF|0kv{P4TeuJWCij8m#|=JkNi-jLEL5S3 zgP0Fo73u>&i9Yb3bRYQBw#a;F<}2_?>}-pWw-NsEPNP4(Cz?N;`gn*xys4M|@Ey88 z>^Jzsb9?O%r-k{$SN7T;9)q54$JzMpk*+XebbU>}Eccsjs^9!0Z0#}KZ{C00#HFup z8~B<|YTsWx&a9&SC%Gn5I$L|;PX89&=>sRbai{09Mx(mZnd&#A=ljCQ(~rvoM0knWBGaTRbH#m zYk22sr3r<4@pkh*vhdMBV70$~7Jao=?@^l$o)3?P4LDCAcwc|XX!oX|PO+7evsEWL z8!x#BO6D=>)TvDyp_5#<_EV>#kp9cn~esVuz@`1*r>ehst}*{L7xe<6m*n<6q7j!{T3Ag&6;`2j*l@{A*pE z^I?-%P{QJ0DHQ*DSaPmATl_2LEb*@xG*F=x+*-lnUys1YwM5y@V)lo^V1YT;OPOhP z&fftPYgqj2VTym1O3u|h{#9+#<6pMXuTnn8mPc6NtEyTW&hnQcHdloO!UnyJfw0w~ zfiMk!sHR@;hnp$LG5vXea!fHigjLg zS&hy8Mh%7iioUMqp)k846!tSM6!tJoOMw;&8)2}A4TLu4VaoR?R1-diK8zbc^o)-%61moq>z)7@yu&kBWv-Vj5u5tOon)f} z@n009QO=#Q8s#jHHBe5ux}le1al(Um$(x#Ha=8|Ui_^kz!&w-voA}%J0=RlcPp6Uk@cw2LW7t~k33#M@t;!r!%77xZTbJgqbgtE$cr=mq$UN*)fTq4$iMj4rHn zu0@JZ?k?13m^)*rE$fsiJk&-CFeKFWReQ8h8?IpM@jxCQK5jN_u6>LhsiB@=QPQb} zKFdvt)EO;aTd(hTcF!dhTUD*h@1j*BnAyA3c&QqQDQ=H)-o?v?$k8XvO%C}U7ZNst z7X!Ksu^|#OnF)p7j5**%w~!35D$k#ehN6~}Dt(9e-^v3K;X!3!SGd0(+SKIG_!DIVKbsSPY9 zTh5MwuJ_xR^)x3116}(l#Ul)wJ!hz8lj3b-!K)if&_Y-z%}y#zk6~A6LK76hQmcth zpSbU`N41+X!eFZ^LW<%7=ijrNPY)JrUqcleDX=Ue~yKM?rG!} zg`U$fi@&O5nHnherUn%ZYK4WQF2#^kj4(KA{K?kXef+8AgDCN*3H^HG&mIc%XIsZI zfA*i|=>DuHBg~(jbo;sRXYV>;>d~LQ{)Fi}@@JE{KYP^ISAX`pXaDWb{@b7Z7x=Tc zJQ(WFPI>TuzCZhimEYW-{o_^N!k@Lb^v0k4;;o+i*?n*I#h<;T;hXuh7k<^FKRc>3 zw$J|TvLpY$`Lp-je{THQg3}%U_Gf$R&sH}7+n@cW{;d1+fBUol_Gkaw{Mql__bvU| z*5&8OpZ(Q+z4B)dJ`v{6PP?yH{_NT({_W461Aq3>{Sp4`gZs~gKbx_?dw(`*e-wZA z&bE&KWBC-bR~{t;%xM*Kfq>h=ZmD-}XO8*Krq{_ouOEjC^lNDme{Udnz38eC?>Pv* zo@lenX~)56$xUSENcW&*78bu^J!4<;lvUbPb_1PRuQ*Xr3D6%YFs_G_1T*lO-r0 z+Iid$ruWNZh_-mJ^7-LePwkCC?-G4eiwlHNp#w&AW94g1C(gRQ_5BvKR zct2F_HhrPVGtgIbZ)HI|$}}T^WikTWI|&G^z*kaG8YpPT;F8lO790!|09&uaQ?N>! zJJ7gUSK@pcsFY&M#tf`iE<^fSPc9S1mN!kti*P_1VkG(~-Zile#v^Q;mX>A~e1E|J z!?cOgY$OJ0T9W80!N@cyBn)v7l4>0L1aAffBGzNl?d=I|mT6YOH;y)fRCue+P{5xR z%hLR)YxL>ZJ`r@>c-Y!pZJ?9CAHg{&hxQSsX({7s{0BtWYT-BNJ@~67=X&9W8fmso zbgo8|`a~=vQF1MutIgGn5{^RaQf6yt1dG}~u!FZ>;XN7`>spOrA=i2gkWRCT{vzCo zvUS=pkq&r8w-fg$EFTQb$qC!Yw*(Ra0>iX=6eg0Zm{h|buqK{cE(jSYZa`AkK<|qm1>Fe_mGB0WsI)G{aF%ieiF834mHf!#P<;c ztI4D*2P?N^AWkq{CXGg(c_(v`<>h;jcCDz>3d*ERn^?2*Bf75wOb6G|*gIO=w#SI? z3I5U;j3=4*1zf6f1e6nw#QiE$*bbu#jKiZOS5(AFxs}pXt58S^K z64z?n7PZw`D#HI7#_hyuc2*XrS(aT41QWFT?YQ5Q_P>17~xP=v~6Hn0**%ho-oCw8;Z<+cEgIzV4KE0<0O;F6$wpWwSGhR6V91CmKUZ4&aO27Qt^vrJ|c^ zF)^WWG0hDB=?-p&$JJ+Ax$p6G3HVw}AdQzhC|e)Hgkaaj!)I%obL)@da0tjf=5W6x^bVM(&n7_U0a47zMXd;&~NkehW$q6Qf7kk6K%hgb2U;mqi_Q+#P2n5jIyf}xjECJ6d`qO6Rt*($nk`y&MycP1dzhwQRd;Kzh^V#&v#_he)FZw0{c_#*bEaQze(hhOUk1M3qkh@_;r|Hz@^Q^s^-JE{-$cKBzP(5Na%1f`(k~l! z^g+M;WP5b|^5wQ3^vjPAo<+Y5-QK-^8S&b;)Gr6Obgy4FZHb~^F8zq~OO*IP)j5g} zRDE~xfvU5_2Yw$K9~dyOr})5Zmi!YXKu|)##)iu4y9*G!`OmNb!HO+W0t9ms3;}{0 z8zKV)t6qubyj$_^+-?H|kL>S0K=9c+kpY5ByX~Xf0Kvrly$TR0S9KpC_~#J%CgrZ9 z#axOK6jYiU*qP8EQc^TY85Sa_>LEn%0}K&d9W6v~5JLp%=(1n4MGFzEITEsnon$fu z2^M0IV3Qv2=brzLcor^r`7GgrgT`<{X*>@XRJ|G=E_nHU9+ji>n88e2d9<7bK`~6p zj5QO#>~24vWo#WtmZMR)6Avgp>AIG>AV(S0_8V%@q$_vyq=JZBq6 zkswsvkwI2np(6neyGp@FX*yFUNsE)vq?>9NJ*7zRQ(7@-3@Uthz%qqmskxP64z0+e zUJ~C0jljDM?wf$}(k9mKKP?ul@k|KOUeA?)IApl69Y$P$m9?H9Jsodi_Ff~J6FN~% zN(PWT6;kdRgmwBvanHC~|6%bxv7kiwjbJ8=Z@Nv$-Vgc=ZO83+ds^Z!)#5|BUEm|L z%h_E#A&!huslbQ!9w_idHmu?)mKIrss?2!tWwP8fdv8&vzm3^@RvWYTJU-D4tmCPK zKXH<$7;npwSS>en{IY8AxxwDsUKb0t%u&(llkPyn(P-~&8jLp6QOW5W2THnif4jJU z+%~X~SA7&q*V9?BEYI#SOi^kwv!;RXGADu&=%nn!qX7FbL#Y?W;Y60Obt8Y9P_i45 zojFm{Y?T4aBE-xk=WA9Vzyela-O5kN3iOmnp0%-y$qGC!_-CqCpa-qMMxzz@mC991 z$6}|<3M?TjaJp^W6HJep?am`un#s4Jfx5i*EK8N5^`@wIt;7mxlo(iNrD65fL>O~- zYmIYbE{UH%#qi-D!shG7GyL3x<(;NLW;nH5}pJ#+~r+?Z;pBw$t z_}`#^o)~h@^v{z0ke>88ze^>7TN=KI@+;LUjG} zitQ}=r+xI<^-t4~9`#Q@>p9aue>vQZ{`up8?)1;90TKFV!+xfJFvTLvo`j`RO$4KN zdt!}EbIMbzYpg~OJ+(UIIufk*HnU@or*-8S@|Q=#`0?hQ zTA&~Hs!;re&8?&!sGrV+{>6o2{#`b;SV;VY-~WS`|76*-9PRFcaqSumwRC-7Ht1yX z_pNeQf0*slW^qR#&*q-yKkON{vWsAt;oY7h?xW^0g8=lGSVVUbCdw}^J{_cce+~kC zP;4_!!JXnh0!64AfH{KT!t?uWt9fRiSb!Jwe$UqYY&80T_Uw2Mm}8&&3jYE31^#N! z2tZQFC9f`!l{aDy_f>39jGTXXS*y?g4w(P9#?^}N!#wOi6M}5Vs#}S|J zZ}UuE8Kej8^_M6n-_$})%{g(Bwji?XyGf+GjlL43PJvtZdVdE)6B|GU9A+VOyZ^4|k zBglpoyU^yWluXi`cE_C7#iJya6=vGq5e(eZ$`GsO_c2K!VWZssAE_PPlYrtI^Xr@z z+-5@}WkR-v;#|)4%@v#<#W#@(24Z*=Mwte@nIZ0*Fr_t60!m=CW6!eNdBoJpZ(GBA zc&HZ}-X<=ckDrlCy8`i3-4_*#LyiWR~0jYF?}3(2`Lss5wyF zBgbL3daQSQJXoxE-i2BP8b<3HMm>KFjQW9tv7ymr)DNtF0x1Toycf4f#6r{F?bbU3 zmb_Zb6NWzq`Gh%+k7inoT1o%ML!4GpVPHRyc5M;1O|kl`ANZWtzKzvxeh=t@3W%Rb zE-No}zipTCzBiY3m$E9TT}i06ADCjR#r9jgQ>l@fu|@~7C0qn2*50?YXifTy~AIIlbkfY=2pnC-XVE4(lajA|3S&F^dVZ(|qm z#gWm0f#fL`GO2(JV{w&G{uvU{aMF<=D93;>2;6UTj}J_dB1beq`j{v>smsyELs6mxF1X+=wEJtF~lfdur*)5wp@3LI|* zvPKPAdVRn$%uy>$ZGfkkKz8EFQzjVE(wUC;mP}vyVGyjzP55Hm&i%5vb`w@*4G1%^ z#tOH(`j)lmLjnKlXx7teourJ=J?(z22xp~>Z)ruzn{TT0C0@H?Sw z{Zx8vZq)f@DCd{8Z43}A*h!o}B(rK>g*w)9(r}U`2JNN78;?^y;R2&sM#rx;fUgVF z_SrCKtH04Ki#Ip0Q80PHHR?Ff7M}Cy&PK#0(%%HL_@?F?qb#juO_p`jq&1A8)%zi1 zK|m#e)Um^u#F}xt9mj3LdP%~rr4kYg6^Pdb{rc+2K+=sdCNay zP2uyI^L6Na8s-NBJAa*jI*7K~S2UplS?E^Q4@0SoGgP9q5VVWiKGA>7oh_L+BOyxJ ztpNDj!m8&n0#bCIDSdhS((4^{OBNs_y(`a)W7aQj@$z<=1MzvDtAwf{WIz{+gFOF% znxui>0jcgcL+BrPm5OJ(_nVK=MZ91HEd*=wF@RQzWd?X{vz`3C_-x0aWxu5k$JNQl z1m2~&u34n};18&@x4gAbj9=a?!ED`yD(jMZ6yCc2EV56OMoM?If@-=JW-+@pka9u# z{Pv}jVRBOJ@*@I6umzMBl!MQkOghob{J9|4`;{9-AafAJqklZkjeH_ZPe32%%a3UE5!7gpisoN*^Wh|FjJuqR6c zbg-x6?XIWfBP=k9K!cK(Oo2&@pcHUFAY+md8B-DZc7on!ypI9l-+=H>T8tRk3q#-- z!6Ed+Aq-$c*cvf}^-#u!wmniRPP$5|(^Yc;?W_ zC*9IIZl9xe+2Vj@c>0uf@yn%CC<=tTQsfio0e*%cvEd$-TUrt1_*>jpp~1qfnU$vy zPR|%LuUk0TdGCYqz0$m2+rKZ4Z+-_A6dTAC9LSXBH&miIwmnSa&lY!r<%JUO7G%35 zX}I^7B=MMt6XV3ecN+as-f;6fk@5=p@uGXq!jI&BB>@4JyQBGaoj&|+?n7ARa=_CYfk~ryI=G0}2?OHgBX~rNC50N;M6a!#i?h~Xp)qQNdkdeTY;jpTOGUI2}r2R zr*Mnm_LUvXqhB7{{t7%jV|?iRE*bP zOy}0t=I0AbTfCW_X6YJydQ!tjoaTbL?a5M_^ut!M0VuUam{I3=Z`mkXVz=Ce%}vIz z3}Tcl1e=MFl+PIC1_Og!wwu!#@y7uD3Tco8m}p_=c@WITF^4I}&rWbOCr0QWXb()Q z31-k*XhQuHU0vfp-hQ$+2dp1E&)-O*nlKQb-i6KB0;gw!QCGsoV*^NgaYcMRw1Pr4 zu3N3C^M@Vzqw7bfgDNO2n2F7dG;u>9K0@QF@rt2p!~#&1EiGtud?~D2jiJ>&uORn~ zQygy!tNzo>Imouav2*F=7+)t2dRK!z!!BQ_jy#16OKB$3(t&aNPzkvW(SUcw9dZ#y z{f7f^0n7M6%C&)vUk2in9q%l@zlg)WPC;QqF}R&LlQ5ez^Eal~A<5VF_! z(~h1aAU`F7KQBcbBY&#RVLnI~Zz_&?m_|M|g0`YATpyslKNOo0s^&t6cv#1>u_zm` z34>(8*5vD3I4vdIiNe4Tm<<`fp_6Xx@q3!l9+#$qZ#h-$Z?MXFe8?!$2C7;G-A#61 zG-etD)CIQ5q-STfF1r!HzGm@IN}#bC?16DLhLs^QPoKa=hk{O+tzG0D9R@}ypo^xV zu9DJDI9`G{u6!*Pr7Z3owE%rsF~98+f3;`uiCRrRnyb;WcCUk1theX9Q_I@d|bnXi=i5fg+itBv$*tvbima@h`jD)|39Yw znS77(c^Z9Y^og8+8fzGskvy@E$dlKB$zbAHP{AVd>?1q}OdOtGmVZVqkHwu<^MURP z-e=TVP+q8_3egK6IT|!>k2L6$Wb%LR3_;CYCd^bR!0fL$rdQYmXy=KCgaQAulM)Bx zf3lIEDb7z4f9hp55}4QOa9M>_hf(G1pO9-!&$S6Na&2Pn`f>YLZlgF|ZoIGxk045S z#x1jgeeQ6@EuG5p;qYvJmKL|3EfAr+V=+ToZF%S@$q~_6$(Ow!WgYJV(ZxKfDxB3^ zm{s#G(N!MniW74y%-bBhg@*(>8)SWKt`%GqM{eBWBFPm8>Sy2n_E=~91Wce_r)A|u z@BT5C$S=9p;o>m(WO=d93h#<|P(6DoxEYUU1pJ7OtSaXbNMt*??vB$z<%XbPJuu)r zi3RF#U7d9qXINFbQpOzRcoLM99cg7r_!h}!h50r_Q2>NMd%xWv5ZML=M4)V&%$6|! zNhgC;Z01%V+U&w_cb=hjb2;t`i%EHv(xCYSz|a*_(0D!oi#;ljGSzj>CA4lvupQVG zYvO0YqqMz77vOw}mP+MR$C_|mF1JE*Zt*HGj7q+k)=!ShwwOX!(SETpWOJ{k|B_Yx zXC=aAdP5`IIbG3hvk-ll3{0Pb4t<0^oPY$!^r4lTep=IAoxEuhRPiBt(J*59p4WBz z^)}|engK_WCr+qZ5iiZ54%3~$15O)snINu+7d?0ti0HEN5VMe)QbYU-)!9_ZMDgBgg^M;YKT71`%Z zD6;2EceP5>+sz+Lm}}32|K~gEmkpNC9}<4E6*({;ri)v2Xro+*oKzE7gfcQu$~F0` z-6`H8dmb=%5GM@YV$O&-35zGPeK+#4Tfqd(#b|vZ1tzlW`LR%t<@F#1&%sCZ(X*!7 z1YaFC1Qw&d2mme06|9lKlvc*Q{{O-m^_W(kAwNFfyFDW!UID!|Vs8%U!hJ~VH-5UY zPs?=o_jxFWbtiuhyYiTt*Wnr{^L6h>*Z+P)9~%w)f1hq2gRwBxrko$->-#WbUM366 zgi4wpunZmf*<_G3cvPRtk7imc!Jw=;eNnr50rPzjVyyiyDE+?L=hDq z!6^Di^R_S^vd3UyuzIS6VX=c|Ae*reTZlE<73#lwb10nDUNVbafhGfI-+y5Fg`9n_ z#x{~e;w!-Hqm9Py(a*@?)(VpU-dt~xhh(oMQ4hF)R%B0;5~Lej#hoA#+l3kR=6#Oc zFcZrz59HWKGgp2#8&?iY8-Z-$$=tf4#%Up~mj;!NSP2fSPZQ2jh7Nt)Ph%Qby-D$DSZm9gy$- zfVE%^Yk}djHncrFGbUMA@nJgV@ed5Z^rHL)jeRS>%UJ%K@`wAD?)jtSgKx_p(?9rE z@yFh#@0>qw|Dad=adp)>;t%EhUhzlG#@_SC#(#cW{>VCV&iLcLBYmUyQ++J|ym7FS zIgr=Nqp7jAg{5lz6gROx@FlK4gN5_X7+QbEQS_?(b9(u696$eOt}%Z851B_>4eMDL zPpwikr%;=ZkSX{*tB7Gam<1ybv+@|;Oi}}z^Imgm6s$l0Geb2-$I{w(?zDHV7 zUhiz8asy(Qw@SbDu~@0^A$;Y*nAQ)Mi$(T0gI!LS1Bz~YLcr6cZn?%O#nkGl6Zt8? zm>8QVIh%l?FXA_QPkoj$$+>r;&)=Pl-2xX)lVUES?(PpgemWI(`Yb zo!CXm#CX1|+lH3>Z2Zqe++?=a`#B~lcnV}6un4x@KXy^8_ojGr+w?dyG=;gK?(5|9 zQ!pWj&a#y+w4>L!*3fraMMqGMjd(oIFU7Qto zDzp5|1dFLR`1EZjeExH(hR-$YdcfzeuK6zUY3&}Li`Vr9pZUKG!>9L|KH+o2=$`O7 zeY}p(nU{nk4*5a8CgSxi_}T_F<=dh(uH*C6n5g(XFs^s_Y-0HQ>v9dBJD=$RpD(0- zm-tNX9-q%V(-(Z=Vay@;e5t%o_-wkUCwwkV*75nvq;SL`Kgjh`&VZWoswj=? z_#BrM6`wK5y~AfG!{>@$YWQp~?*X5Oulg?WnbJKz50v)>pBt8j;q&9C`h?H;#Gdf^ z>{uP2f4MjuamWwyBN4A(#McXJ+^oF+{^HpTcqJL`RN|;Irz%& z5})?&@fq`UU+~%F4#Vg0KlBNoSr_(%&qH<{pYJ7xBM$jNu8ny8A--M=g-D} zm-w`GkIx@J*%y3f-5Z9_C6D(BpX<)=37^-F(eZiR1>uN8evmJXcs&JQcY<=1XGCdS z$ET7I6`wUpy~F21hR@elYWUprcn|n|GWom2XF~V*{N3Yy!KeE_!|?g1$NGfNgYiA# zvv9PI&jlmH5r_OB&yIL~FTPHJn)0$JjqCWlU}RK$9>2JE__Q;82D}@Xo z-Y_C6J}6ShvfTnjgUWsJ6Fn?lkz#dqcYm;FEX z-UYs?D%%52ng~%MDOfOS#i|jhpn`UU0%}_bpi(VDd1h=^Jt0aOrbTIiWWq&j$~ zqjd&HRCLfm!GeI;2Q~#!3o7zbiUV>&5esy%6llJ+*52otleRE(=ezg&F27$nNzQ(( zz1M%Oz4qQ~uYHP6O}ST}2k-Kl;+KCk*@xF$;a6ctWGi%?YkgVW-=$MUdIvn_?>S3c z>A@i2!f+3s%^gfo8tfUiuY#UgH~k*KG{G|pn3@>$d2-=79G<;!_0#9+A^rRk@NzIf zV7TY0P@0`1gYD?s@q9*a>WR;i7}jQap0c>|Z?sz2a(`)#CsDKtIdr%~9BiE_RMM_@ znj>|PbH*fcjimc1pd1FKy3z9f{Q&44*DK|Ct;#DE`CELW0{NaI_}waEq3h^#;ZPz@ z9O(?C*{$Lr2ZrDL10s5sClN#Y4TWE(6=Nh$fU)?zJvhcXV37xdo&naAX1&HPO>>o& zSKku`^ zhFS8CIpUu;wujnSyi)HL@^1;}MDYHjFkW85+Ygxkpe_jIq==&^Y8*NX^oC!vQ3(2? zM?@!(1S~b(A&zi{J40S9o3P%|#r!g~WM1Bz&_ptIl@#x^v!?5W z3UZKCrAmvztd#0Hm?ZLFj_6TvF&}E{Q-(+imo#I16v&7#NlxzRs$Joal9zk9ymaUC z!ldK~5}akx9|s`++a1!5%T0vk^JroDNcuV$bzYI{-`S{qMZZ(XEYU9(Rgm(n34*-% z7YF^4FuO?bZ$PiciWgDel>{>n7$rofRbIQ4>*E7>4I6?qv&2;j%Ec=97s>Kbj?rV% z*o8CG@MfV>OKLp^kXh{SAKr*%D(9C0-VE?Juyho)W^t-_k*l9_IW9k;h2ZknCfogGlG0DzICyCEg4E(}xl3A*t)KzdT#lR>Lv+Nj@6u+%* z2XDhDGSc32?bsO6Y8%!NxD9}i9&dFOJa5HIxmerhIJu@Q(!`%A5!38|=esZ-CNQ-w z$hwga8xEq{Le6YJdWvSeu@gzRM(|$4#n8luBXs)~73cqOwVm~?EUDV{#)sKh6U6)D zSUc5q8t6af^JaVjwc%Zwr8T}H?A?M7AW>a`W{6tMhNy8Um^Y(fUJQZ>r7*c12gxaP zMflMO4H6`vPoVVBRVFfV;zAJ5(NRD97Sd?SWYbl!5XC6h5#8bPn0Jm82WEzJx-$)Y zBxpzAGanD81X0n?@;m?o0_w07J|Ohl4ERQ+Kg%-^zNWpmkj90EuvafBmvgme0HuF|+bg;f~gptp-WbFrvFR8nCa zR>2@~C8|%v#P_`Bz=kQ@mQe7+*o+YzFGQ>21k=e$vQB&dLB{HjmHXSc?oHC5dO89J zYeiW5uO>*>{Y~UP@&dclCkY73MAlx9|DEgVK+LSm$Fhi(e?6B}s#{zAdH}N|n7nu^ z$OngmT-PpXXScAvvW;yB+yTrSM7lPKxY?KNRcVe{BL8Jd*Ix!T1wn%&$>EguhjGZhnKYc7l`Kg*7)yM`R~fF!9GXld<6sPj?{GL^uDgrc+_3# z4vHBK#X^x-l+5#g2s)lu#^fI~Ho?ChOJMw)M*IUv#G6Cn)%yt&@KXZ*RQICP;~YEs zsl|(NwycK0?a-|msJXso4P>p_&|d9Ys*AMDbp*egWKlTC6alI~=~25$0~GL_BmD;BuXMDd1`7K-%KOnR z<#3=H zV@XLLk7shfOkwk1O_)Qo3DVa$f~r<})jvV%Vr!{KZx9I@P`hurn7LTyW1za7rq;vvGB&<=1~b8XtkA95i}jpSW`c)0s58NO zn{mq5u@IQEBkJeh0Fcs09dJCgL>I2k1pi`FW`a93Gr^f1R5r=}$2p*&ayfSuX}hU{ zV(=lOrD^%lxp@9s%(jSA8?1OP#(G#dA|1TdW(kg-f+3cV$Ph#)qPVf}`$+nI2Yx>~ z1|}|}bHzJy*`&lR+?gwk%ypHH^tnp!^c9Zw72W}#M*88Kzi_m_@D9J2Z5Qvd3z>Fd z44osqA7}_{$dTvo=K4ZsKP=Jfi}(Jh(HCz7H1-2Wm{v0KI%^cg44vUnu+cXWwSZfv z1$-zg2^P(u@j*bZIVKi?j!1~s5fu62rE&U!U=797kiRW68UKy?!ma3w{mnL%<%C%J z!hfztU(B>d8w86A0Alx>ym$^@+yvRBJhM79`r>k{iN5$rt1o_aw4g6u$1{w<*`d5c z%h+5&2o6g&kye}!t%A&c@7wr-Oy0yBaAK($cA*f+5BY} zd|3nLCEYJ>QlmdflX?}D5-dQxu%?8cK$OvY!rA7!&&47uc@CEBEs}xb#Pk1yW)ei=8AK=+mgt`w z%-k-{&KFoPQ9Q9oTNA}HFt%Um-HieE8zcTDVrG#65uDJ=8KHGA&|p>q!w57`^cF`C zW($Nm=zP-uRM)m3KwYVOV2}psHmT>!Jqeo#VGa0!e(IerRolnSGMej9&&5OPY(jz<@+8kBdQu*nAHQH?=)wN=%x zY<(Zb{alPUpk3T=+{_mD_x!aKk6aFiG`(n%pDfHCQm1FZx??NoR#(0?j?Ab;%@RMG z#mROWTgu(-V9|NmDttki>%}H`@)iGI*VuY@t7iE%dwQt!68fn4)U1=W2^M z(q2Rh`{k*NsJQ2|^EdiNps^(`pdZAsPRN|RMffqfD)or#uCFiv#ETM}-zQnCt(#IS zg`o~y=LeJ3H4oQQp$1){bN-gc8VTgj@jnGMJdWwtAlXQUH8d1kJ2(6^wlDFYHr@oy z5{s(dm*Eyhg%z4P#y-6-wwiBfY@e3E`x3e_{Bg4!zZb)388%aP%0C)5 z9R?x6VwRolJxs+#&*AEpfYj$4^4(7iyCd|*ST4oXrC4r*9OAvs@M95LMw2%xlK4gi z$<=sV5A91vbCSGTdEP17Dmz zZBus|>fuW^StB@31@md$5u^s&G>S{j*c>J`51f9Rq$VebxAsi%Okh&ePuew|qy|^d zBd+{BCN&bEz3@C2Y(AsYxZV$fqKK!Jb0o3QeE~x5upjL|Gax zl(^>MHDHYE9@lywiP4P~@m@PvB`HFV$2}3{33p=<{;WjTD;1Y-N?l16yIwpB|L1RY zma1wXlKDvao8}bD+3VsgT+= z?+z=8eGk4DLBB0zn|~gp_8GL8++jTLUIcBvk;#Kcl?PXT03*#Xg8djL(<2VG-;8g4 z?FjF7B6f&lz!0Y^@Vb@ldkk?*#PggUK11tAnvivo9lub6;r5)kSIK3 zpMDd^_9S#8yFD!=ibK;RjBe zwjeyRnY065vo(w}EKS}m8GzcMiwjZFLwpXmpa3wv!XKTcxoaB9{-C2ad2Xz<@P3d* z=^B$4L#FfPb$Kh(`zxs#k5SE}@#XdJV4#(fex7D1-_fYIqDFUI2wH)NL{ zHmk#bvC?g}dYig8a!9)>vg0?+F0jl$6yS9pbdLd6KEMYFGOf7z1T4g%a@Z(bv-5d| zqoq~#H|9nmmF7}Ed%%prF{TPQz(yO9EaedixP7`8zo+No?HTPb3`)5?v`V2%)eH;N ze8BQVi>m-V8;+-+AI~CT;X+49cBdE$W5hM6d7qgDDyJZV?hUT|*;Z2aNv_f|akTrm zJtN6?x3V9GV=s)~Bb~U1{1O`$5}9_zU)C{;3Jnj;K8CV`{Sr+bwaV|pW>;CPbxF+r z=~H%YjcVY~s^UdMbbb;|PvIit6t1eNjs7*%z5?VNK+V);!d37`i)k+b9c(*hp4Q*O zqs#0Ig|CTF7!#BC;!0K+b5jzZo>g!h7@Xuw#f)!+KWf&QIkG>-LkN7jQlJ~4ANmkR zD{-_lyoy1MG4{SEG}g@1zu2ODFoI75p2wQJ@IB4#OD0p-OVbY8l-945TW{i~F-kho z0OB#Y<>dYw6ti#VA)8sZ$_8&Z0nN6z8Z>rQaf8ir*77q@BR}o_&gEzN6aSL@%)j{m z%kr}$Lnl9Lru_d$e!5N8$WNbx(PEPMB#s9rFH)W~$j^-j+A2Svz_2gbTTZT#pI5_e zke^46Xyj+?5p6uXe}})|wo@nD=r6c=QnbGyn;(JrE@k37FjzwE04eSvPnE!k!P(M4 zm@Ns70$yU8$C6-$OG+(wjBRxB_rQm|25!qAq+&;VQ); z-6mjcCe4yUqP(QAluw8-3jTU9y~U|G*XWJTsZ4&@d?*3uL%@LGeO7WKbme<6uviJ3 zAq6kAazS21KlH>pr#Z#v9Eg@92wo`ElYAm|lk3h+ffH6VfL#kOw^Ao9<}xpq(8t2| z*jPYrpb}jkQ^>7~>4HjS-h$uGiQ`i+NQ6xoZ5LPx=nz4{a0u*uHsZvb6~5sDd)TY`VNMb;cNSDHJCaYi#&a#{+u`u5bVSN+Ry zcJ@7d!0uav+~ZpxEMiuoFxD<+I0j_Ev@8=<6f`fx(PwLTbcDzM!J8I_tM?r=oKN$o zVQ6P3*9%9{9P{_5SrdTBs_9NJY=uS)cVVp=fIx?-)cy8p_v2LR>So11k}O+o&<55e z*t}<;D&8-A&p%Pja^THcP+Z*thL1JmlC`v1zRyUj&j_qEN$Mevu@hU~KW$)(YBo>Q z*OekLO4u~bugOP6pF{b=gN(l`Q$n0crr^|`bqPQzA$ZdWI=b zarTv(_L8C9!)VO2sZ?j__h>&Xl98NJS0T-WU!=;tGz06Q_g%VLk^hGo87Y0X@{Utx zS{?W_kaT6QLk4}N_{;m31jpn0wK&^>F7tSmvBq)JhZC>a#UXF?qowG(S%QJ2T#vNA ziv9QivsLUJ(l^JLzQR@P9>!JdRKAKm!c{uHxc}IQf0%ALyZs{u*LXEvmrx$HZXNE= zUE?XfR;jmG>_nRtQA^)%$Yj*5J%i=#Yie!ewb5R;MIkS5uY<8vUfwSI$+(XF<3t#4 z-;Me?gg?IkIi)Z6L>I0uZ$I^uvb_D1W_f$qL0i=R#FF4_$z*dPhuDgn6Zfx1wiY8> z`#l`XpGD_V+3Bdt!SUkw#hPifvnSpZ;+tAf_WUhCeyZ2$y3^|vFBI>F1Q*VvyPV~) zkD4*d)TNcc62wQ~gbf@S9eO%c4YhN5IbQ#Oav9VO4L zoeZ@I-qq5{ZrGQri3`=#ySF{836iPpKeh9c$cY3;v+P=F0Sj<|=(PSLv&{N?%#1r_-p%c%$T4sY(w$mx4NA1G_O^`sMx>8{09e zu{jUvBZ8W@w>xWZ*L8;Wb~LoNIZQ*F(BZJK2XPy+|UpL zCjLAq*Ht>iS2)NA4}WM7bw%MIKU*5NXfN|AQsO5k>1x&tr-LbOnDojGHg?ycA$$~% zhwO-zef%kYo!!Rp-8b;~WWn1Uc*S6PBlR|me-*M~w@HUV66t>UZ8moMPf^IqQZd@g z9V}t^^Gmpfp;*{hIjH`-?LvYkls2CavHM1H#3|AKdN*kN^(u1!O4$~4*t-z@_3F@H zuUR-E^>>^5>)qX3@2{89`^^3I#@NM7yKt9X$R;rTJ%{}D__Za}5OyP01USUvoAdZy zc;S(C6I9FIxP|RJC|7Im)%BgkU{3V{jmg1s*PQsseff*=uHz`~- z)2p{BX1X<^T4`_mi2Gd>Pj8K$-@mQZe_!>fk^e2llVC^e#%xgeKc*%A|E%!em5-tu z69b$7bqsj-0RV2c%#B25-vlTS{f@QxB~WdjD0CAD7B_QPTsg)#$D{Ryn==m$mZYK)uA$#2)WFVcJeMUg)zqKVGZQiW{speZF zVh)c5#C#I<^Y{4k%aBw0VT%cnE>_O}LC#?I5_F}@E(w3FvG}uhYw!0N^Qj&`7k;My z{(YGVp76-#6mh)61X9H-K&y<$$$w!LplWsrp4aT0&1Z?VnwGpzzG?QkvuiEBE9l5K z%?aDVoG>9Z-R+w9yag8=#}^m61L=5ja-SG)%V;>Bc775}Vtn1DWx$MlIs{)V4#TB@ z3z*+J>r%FOE}x&UWJfOph?)DMyw`{s|G0)Bpi;8}5Pcf*@kk_M<^V@`W-n$%goi|! zKe8S$oe(QS@V^J5P?Ig$Yk;vhN7nA2Gv@hvO8>P}Ma`>#FX&Y1it{W6m@FR+FnJu3 zO4A`t-A?K6Uq=^8YKO=ju~kt!ix^Z;14!5G)UE*W__$dj7$d=1dh;w7*$$lUF%tS2 z>!6K&3KuFZ=?H}nF<525lXczo=JB%bWFCtn(JB*0=aO}drZJdfU?ih$HV7;-Fvo`Y z3rG5~y5x~)g=MjzpUhrDFQP1?tz=n2&$Jh-$&g8`( z@x|ScU3&dX8#~RZTQE{>mYZudHcNM{&2qtZf`!4~T*#ao@|G|)u(&sNxOeHqO?Wf$ zGMHeAUZ>z)N9PvG=-k2v^g{P833~Gda@I%U4rZbI`CQd|JW*8M-7*3tc&>W#ph(PK zEe>Kw57yDqgEBgLut7O`5N~Pg(F1Q`^tl6nK+K$LbT2QYuBqtGr29Tux)+GqMXVX3 zw=jyc^n&yDVd<*P=x09H;AdV)oK2HfZA0;<39qykQ6P7KT=zD>mGp+$n|1hR2IQA2 zzQCoxxkk?NbQ8WpVdvc*ewF0CkQm#4n^xXs{w}bn=Lr_8ntm9uxH@4oo*^irGX;xa zC?L)*VF&T0i|#^(E>;;T>*L(Jbo!XCQBckUFuw8g07Y~jV3A-r51^O{n)3i}>eR7a zyZ(3;)986;FnG`2WNRVJiR(L64PWr3ag^>e0^@;gHvW7u{`}py=>N2-rN!Ec&5AnS ztQomq)8F|l$4`i|?}0h)74l;3@-I;YH_P$gGO6Fenld{KK)JZm%lE>$-E@p zVPYu-tg5ASJBrh6r@DY{1(8rreQIM!=C6ojO06#~MM636!Dl6XOJq|;ZTepkDa-pX>idpDWa+x&!H+~%+ zyrG|*Rqd?7M;hqB5nC#zkQAN8#+vCjiZ?> z$j3mMavN}Ts9nK?ue(qw4ZWQpafx^b;vqq?iBv$iG4JBrWJ657-%h;Ct~HftRgeMj zh06#KnDJ3HV=Vf7oW9M&Oz3;(wl>jcIV1Xh>ZZ^a8m45F@6Wc9<0>x1q6k`11lhI3 zk*wY*c2zz%Gl2&s2s?O*Mcw$Ktma}4b-!)AB%kNfFVQStiIXYR58}7VmfPn;O;p4K zbnh0a2v>d)o0_vZ`FxzH!#oUUy^CD=6PbX_o#}^!cre4Yeyk71SCIEL)G2*o{=TR} z@Rz_C!ETFo3Mc3)QoOUs=ZUAdFWO+c3He)Lu!uDi`mak(luZdJn_q^?%BCcyvdQ7Q zcL^YKtg6=yNX=->uLBZnmaSm;u{8Sx>*3Tu%s}AC>x1YqrZfg-Hc-@J6HGbmmKCguAgda%H{e8CA<;gj}8*H{_a676y z51mBC|2n!l$m!o2tg5w7HZZl8ev0DlX!rjBm(r{7x^9oEF|U-W%VWM8%;U*$m575Q8TuCP49pB^nQW3x$4>XV8 zfGCa(HbL>LO&Sz0h=t-}SN;Q96t5%{=laC#VsY%uPl&bsU8UJY1-o2}%9WdR6FqcS z7)F5@3KN0iHY51ki(??Tr?+(k-y?d_c9rG~HXwLnk&531GJY4x_|3gps0aK4p8&$5 z4MA+fo9if?No)AMk`Y{&FJ>-~QFZ+`#P5Rjt>AY7$8Wug-!2(vhTr|^Dt=FtGyLYA zFyhxW1n|4F+=yStXQoCs$M35!I7|E2M<-G7JHMRccTxBbihs6I#qYfv&GBoZe}91a zEUDm`Oa=ci9yCF9hn~j@Vmeizo>;5$XfUZZxJeD(7&LIf5`E~ zD>tg65;e#enh8#3uXKkwyJ;Ig5QTPRP=A5jH;); zLHriBrhf~g^>6mAXNKRaZdLJ{`WeG-`EetD?-~U7z4$XDeuu4VN&oHy(^I<2B#DaO z(0aZ8eWyyr?`u_U#xDc!BE^2#vRgrJ!L269P5NhBkPG(16f^r_*Aotd3Bi!7N9`_* z6E#E^#l@u+o16upBI+c+5`PTdAV>yGmPI?cYNy6#I9NYX1&2vwx5NXYF5YF#A^Q-_Eh@-+^af z{|@|*+P|Gl?B6fX+Wt*FL;E*XWB-1_?cXC&_V3MT|9%o>|CY9B|CXcuYm!7`|9)by zf6F!YZ}}POUx%W9@AyfYTV@Vofe|15sv+l=3Bt{C{ewtw64o0s~Z#P5}^X#8IP z#o6MwOW!lJe{a&*zop#%Jsf5K4nX_2G|K*6*%E$VU61zfik9#@zf_OkN7rlY-}NT= zHLUOJ=5J|;UvD9;?ZZr>`jY*)*3Z`WX;zck7x+4xusl$W7k@~D<>FXahFRQXEtc2I zSoRkySO$amCKb+w{Ok)eDV(?;5KkfRfG3&7Vw(2Cn3iqgxbtIRdR*VuF+G;g=-$7{ zU=z2BXMaiI5MR|0z%!q|2=(Ff+koehPKM`s8a&@$eYSY^rkoj`yQHXiPF~6I{9&CD z&$spiJfFAHi06JEwuI+RYXQ$)Op>U0UbRA*&t)Q>|F~Agv$*yQ@tkA8bKL<0o*zpw z!L$9~|2uegw;9hjoEHPnLQ325{KJj^DLe(lC?_)mrGsy=(g9s?hc!s;(Kio(4M8^{Zo3X?UJ9-bJYj!@hMC+Qp z^+t5fHupbo{D}O|g9i=%=P&lw_s@%mXzuGxQFZ(X%Xr0dI_m1+iw`<(ammW5@ z?f4C{+d27P+XIIj(oes{Swe#tp@V?XK|tsrMrc4GG@uX~PzbdVp@WD}x&Yd4F~^tM ze-F^MzO=c{(0_McukXJ*fBEE7D4!PdowXf~I$9^$(->N=}*FHPni-BWs zzb0NlM^QWnV-?#8U!b_U-0J`IZP_uO{|i|cG5>r_7AUuedqPT0 zeQo#8&++62r|387rl3yh<&mzwR(1euFOmZoIp)71#hJQ*ePYqOfW2!uGZ!$Zu=}-9 zj`%7+{=NSADH!K)==@Jm<&7*!7>#tMy&~?tIsObx)%Q zw$}kQzlTBFEV$tiW5_SEvLS!qYZd#=$BV@Ftm5rS`jxlm`y&Q=8r1p#hdlwCm74E@ zMu|mzx87X;{9q%H@O3 za)`q{PQX#TYyH+Rh8L6Dw;F3xv>)lO??#UlDp4;C_c-JV5!QR#TPy{;gsNbg)7K+# z(i(i;>FX^>V4UM=de?eMnBuWZfv=h(LZjk8kk`BqD)3(jTqF-qL1MoY4si;NzHn#= z^M2}9HMpD8A}7-6Q`Dx3Fgo?dzyztse0M>U`XwJzD5F4V4rvfj2Sf>>;3TK7f59$) zm%Ip7eKV9QNbJsr=@z0EJrO`FN?$fb>UO~EPq7p36(mgKDs5Ld)LB=-`zJJ%5qMeE z;LDtrx)t*HH3~+{;hr9;HNI;Lw)!pt@$LdlDQ;RbSxQZ|Y3{?>kQm+H@MERYzT^t% z?{9>VvB$xjc&Z(1Qx&$UE3_${cc)uzldH77(xW~}=}$q@^{7G*wSN|G|7K|a`#Nzg zYD4?R^)R%rUqqD`WBXR`)8mV9KR-IZJRYtLX2W=xBY2kynae}o&1^8NS^g2uTD}c=x7Ym> zT@rVr;5B-1JXsDizOjv|V;iPk0)qqoo^@4|9Avyw?tjHnghFY&;rCtG>o(D-vJNwb z7UPJpnpDVhZ=xb!353)w!;WS(q<%B)Vp7~Q&lSFsU{(_m+kp{m-A)&R5iW8(c4*_w6VS%m>uq?x zp3+}PiryieLMH&5Ev*4(B9#-1;FDGza(hiWrv&ZR#EPi+`FSTuK{(|5$0*!Ky{jDK z2h2IhbBA7|+;uyF-;@A`#B2vo^}HRYVl?P2j6@=a@=ek^H){M{Dc=}1Uz^fjt)|z~ z`+Qub+}r?y%w)o?r9PRR4t19m?3qzatsScVqt{9(WqTS_Kw^ zMc?P*2nUFC!B#NwW?sNEUjjsIl=T^-QY(Wa&!2u%Fu{`gjVohkaO9>N|n0wsIBaDjn4&Q#;JlbNWVk+7}H-MbcGx!Y^Ry0 zEYGwDi-~bqxB%xdp$z(3SBv%-Bcc=(T%LMbg|8H!a@@?adxT1< zw3B(E4vXxsX`{fgKDrW9s7T(Fdek*^TWa}?D?$2{@^)Z}(qo;dS;BTDz!#2r+;lk& zOocv3L*80?s`^dtzr=s)`%lv!*!pueG|^?Q6i-ZYS@ahw7V+`v3uY0f;K)>P+~*ZL zeS&}!Ga8c1Q@?V}e;4P3z1j_!+&KN#)bFP~2gVLy;tdxwmhGrro2~vET%{Kl#)~#G zxS5%_Jv#o$?WYPh&RJuvfgHZCz;a~P6A0#el{krK)_SE3ph*o?_8wp+D)y1JCN<=m zk4_3iMDq92#WESzP#9zWLT^2ZBi;>Hpd@J9*IVo=PHrgp#g`(UE2cLD2lg27Oyl&M zQRa6@-*n`~h+VNgr>*`zuF}qGdj_iQ(Z=%$Jafu2=TmDnWbl0r!?J^eMA}uMHfMv} zoSD#^ewMnG8vW1h@lik>2804zTTz1}=YlMSpTL!3YVfRrHo~i&((3)++L28d3Y@~x^BYDf!CVg(;!pAaF92$r9 zkwP`}GHSFDC}v6G1%YQtqcIgG#0wqn)!t9Y<5SdqAFYp2{tC)kkw0R85*UX$#Qfgk z)CR8Y=YI;RQ!8e)4-UK`wQ+iPWz)t-77rPl*B!?xeSBa;5*u;gy;%ETsCCH8EFxsx*TKP_>$Q{YLwIuGM(A{? ztM1*2MfHKSQ&#at{PvpC|17==o|VLSef`Dz8-$(76-;GspK-CZQ5NbuoB0w74e?Hk z%oD6}oJJ@{E2A(w-`uQSk8!PMvFx0Rjbb$nbfIIMt%-)!S$TaHMkO?W_TWTV|4)NI zs)r4V+7nVVx&SmEIz}eIq4=mVOj{nOw}&>j$mqv;TT)Lls=BHKJ1sHj@nEI?Pn#lg zRuGCD)~y#>bOA1P?N#)*mF7*OKumm~BLOsDyXHR%4f~XAq%TtsyXFtaDDyQl+F8p} zH%-5qoUqZR+o2E-6RVR)Wm3696o(;{wkB7g_VH;J40Z_LNnf7J7leWdJ*=Ui{f5-g z)I=D%T=^Jfw&1wmhr@QF>gJc)G%Z~?o%|h)2d?}%nC2H(0Y;|~>aESzUy~)6;=1xh z3xy!5l;s%-dv6_d&GsTRD*FFAt^U74 zr~lb{hX;348w({rNO6DV|L@wQ{H> z?yJj<7eJFej#F_E4~$lLcLM;XJJye7Xfy{_Dcw@f!Q#FbrG1onEt4+S={Ga`*^j;p z7ufD@5bDW@R`fq#AJVFDkc?uHq60NFQAg`ZAs)Y(_b z6`B)}WL}=v9+&4&L3d$F*ZN(_HNto&=nu>r&S@kz2awH{i%5$)X-@|1Ph5>jDk$@J zIHp8!$I$F_`V7n$?h_Nmf|K9 ztLD$>Vv?Oeip#r{-e)h<+}NtFYVNDUJ06#d-lfPe$$2x{U#|Q^bW{4$HQee#o7lDR z`(_p$p{CGg32(v_*mxm(X}BE?ATVnRuVBN+AXJl_m^Tt^q(U(QBJ{~1RfCdJ<*6>g zb8xuv4qdn|5C*!JGo#RVj&%JmxXZR&)4-cM8{*|LecD4Fe^}gLrnePX&O9BMFTr zfEO_Cb*Ao|;TC2m2z~&llaATa5_R~EFt8zq**L}uzPs3_u5YB!fR{EPqtTZ}kphFa zH>B3PGOCj6k$5zjk@)gMI7XqVe0u}8!!IZMn+7Y{zv`Y-1-s^aQYZ26>p3!}o+>y# zXA3%%p*>zYkK5y)v6iJZ1hXPAm$@uzg$9KDF^jUSBd_)wS3cUw&B5^k*OGBf*@@%D zm4@-cwSFrfGVs)$BRqITQ>3tyX1t)@9tiV~DW0)Cr+7xez>p>0*B}mQwEmEMvS*HG zRO;t5I*6kY=`XH82^$67GnjUGFfKUR1>K>m3L-*9Fc&v2+`j7q5vynoPIbESd!mM# z#m%-9%#sLM+|m~x@re<9fjRI1XvipQqs_`gvy2VSYVWi*!9>iJzum&)UZXlqU`61x zpinNt8q8|oGo(2}pS)(884nF?7%0d1-sL-p<)=cqzFJ<>EYDag*q}Jo>yLz~vo^QX zot5ks`_z3H8p7s>Ps050I*VE;vmensYzN7H&-uTW^M5SB!nF`J7NgiLeUxv*Xxna~ zPxzjQE}l2dA;ULC&>q0g8P4!Qd4{B{-&$#RBC8=d)jA-zaYlPG)1U8*l<$zbpQcr> zLljW*M4?kzrIAHX!K*yy&xO|XwkU6P_6mBtge;gpdi@{AJ5n`#QUzUm9u9oVmN!ML z+iBoV^vK$mASWgN13ICd*<_|j@%P{s0Lv&_0CtbHf=sppKS2pLy0EnV;-(bc!fq`dAb_*r{qmj zwA-TV+cLE~V5^r&eIl<uw_`ti(^ItD5H+Fqb1OiEY2?R zDuMM|rG`DM2#28v#?MN9d8iP2s6)D8kV&o8P}7F=e>%hTw`p5@w(_yy{h0D`ZtcG+ zAE7<}G5J`w|G!y2cI|1CeAqAeH_6B2d)g!)i#nfyeDwYCUzU$=cmLbuDHddH`smc zs^YE;R9J<|ynmqGoOcrc_hnSYT^GDPt}4TNjc_!7tG|EXq}`X1chZ6{hwwz>ud<|p zUK?ixbNQmOKy6Z>Y-pji%4WIuKER)FB!8oCps+-cL&&=NskM`(g$J0I@E@O5yoA}Cu>Sz}3VtIoWv$*H1o`U` z>Ar?JRcW2B!+WE;U@Gy_Q_$sAX`Oq)PoXqNN>}vnb~39kfqiqcZ;9+%68q+1-+Hib zy@)?qy`c~xE2U4FtJG-|M>`6K$Mp-8L906We+g{x&{zck9&Dj|k`kq9&r-C+L^%$; zrI(*#!?Qw(imJ4D`0E6JoslB;My7~8WQy2BOHox?Z}{s2e>cG2jqsNOf4_sjo8Yf6 z{0*`QLmc67v(Bf4``3H*{`H+#k$?T^i&sq+y!-G3#3P4Ljt@spz~tT8r>tPBm|f<2 zrHmq@IfN~txXr*8AwyXW=dvri%Rhn_>Y%&4gRS4=c>@Q{+wmYpnc!U~J+#|uVg6CF zn|x7RQ^cIUZj8Q?OAPegN%X}V=yS^Sg)$tnLXmxw8F^KwwdBo&Qa0k&rO!(a=io*K=xCVYReJXXaFz=R3zu~+^HnwI| zbTHb7*05l-P1vMSo`JzpJQyvQ8`8-W6g5^H<_KA^F$EiaE*!D#Y9LyXmB*sA&fjij zQCguXmq1ej8^-cjvpf~&l3N-NDMdpxSfN?ds{gV2{SQ8aejoThSij%I@cKiN0k0jK zV#>QEx9$49Za4e|%>ouM?0L zqyMg9^mV(!K;Ku5X7Wy5cSidCc%zBDr$bBZqxVZAz1fHVf1zM80h=)_}TJX zuixAKX2S0gQ54QO(VBjL;;A<3_Z+U@cY31ryW_Y$WRrULT<1Oj;*;}La z`@4;rR*l5f7gX*n!qb}T;J>xKNDY!gpD1K?X6k;TFg8I^@9vvOg(ouIodSxK{U9q+ z_N^EDM%TqcB|=s|aU3vDJRb)Rwq8BawLZZ*Q5ZF7AXoN>X(5Mn{U}-2zw@Nc(r06z ztz6en6ow_>I(x`6+*Icy&23looW5xN-Vgp#;jcgZ4S>J9Eke2@yt6I(e#oax{<|CH zzagglr?e>l**bkcw82dNYog@;cr5w9o6$GrYNPxgiz)vpEy;hWPMa=0W+wk%N6G*3 znDXDB(butuQT~sb$$v^4O-O;n;_ai!eKjx?j zzyJD`k=&YwSo|K&=*vkq(D&kzv*UM_PMfYiV#04*6nT9bV)8qM(bsIG?{NLu^4p`M zuMen0r7k-~+?TGRKlA8Vt&f0FC_P1i*0dw0D?->0-e->=%N>iawDThjNz&C&Y) zlcWFJ^!=(yG4y@T|4@BDnah7Kqx>I^DgTqsK;Mr!Y$pGkqU66mmi$lW@_(&S{(p%n z|C8FT?^pj~CjU|7^{J03|MzkEH_~_bkeU2XI%9p`^%pbw-xwwTzqV1|Phj-Ef1QEe zTMnHizxDe5(L*Nu{;1kWZtdY%{LW?c4Zq$%-=FKwj^BEHUtMRy?+c>HOFtZw-(wkl zhmG_#A3R%r>-By2Ium|B9Wqk*mtR`b_rZtTsP89neZQu6w7&0gP^0fBwL#y9s#JY{ z@4=Sz{p(fH`hMdfy}oyIeUCRrfbz^@%QWl}KaL&=?BRZhX?gZYdYGyBiEOoo{n+a< zdi2hvN6HL(^qWJEfdW0!UZ%(3Kha~@U+FRYZF*$AM~_h-&|~aJ^vEft#{+BVF=0JD zCRNd6%GdPB{f-{KUG$i_haR)`;e(>egy|DTm8qvs7*(c;K4IXmxC`+UMo{cPpBBNV z1p0)LyWI2%FDy!=PmAGG5`9_%pQy&U7)`=Mzb%7LJ?PVN_|%I&VX)@j^a;-xr_iT$ z@TnhtDuYi0FT_|ow38-$0nn{R%+@?;vnb0~J$%NY4YpVld#%J`?Mxft!&A`Ehbzdxl8`R4lTN47q( zJjJO0e>Tv zUfs_|3ugcELe7UmzyK8FFiq40z3-zyVL}Dn%H<`WP$7FYs?cj8J;i!jEu_cS1zE4q z4Pw;=Wj;5?h`AR3i^Gs^)kOKr4`XR%(zE4OLpZ3V2cXsTi}d~jbm6p^77xXopXy!b zqw!LM?Z%P&Oop^Sml*-E z`DZ;K%<0|E=*{hGod5r$75rw#CimqNT5^~C!vw#-er6>1(x2Oe-+heUdHsy*zdyBx z-;(u4{C-r}8h)!AwJq8ClL>w^3r+Bwdv8qqK2dna_}%&d!|$5)M*K?q6#V`&-W0!8 z_o(=Nc2ev3-OTzoFV(pIzqd8~4*WDGAo70GcH@48@6eIKUn|N3=$=?7=}! zZ6q=mkSFYr`r!l0s;NC8U;9(kTK&$|to~lQ`a2rx@78kt3)fNotJksmvrOubw(rs| zB>Rp%;_s$M0(-b8&?AvOk|xr_Gld>K*pI!Y(xdlWdZfHakA8oq$H0&1k+y*zgSXOS z*gkp;KSYnL26~J-MUSy|H`#YidOVOoj|qwNnAD3NQ*NP0?(OvOji$%U`{*%il3TX# zrn+VOZmwIl?-sdb`)-L_w(m;avVB+WmhHP5w`|{Scgyx&ty{M5s7A6NB)4qe)w^Z; zuF);qcb1D}`_6HZY~RISB-?lHi%jgh`Y{^&uHXOJcl^`;0{gD>deVnQw;25&cE=bW zm+|rO+SP5e@A7w>jE`ThHmbwZKelOn?8WGP`&Og>%PzC=ahXPc&st?1A79QpGy87M zE|c-`+B}o-F>6%J@i8;+jK{~1#>G=5eNOgR?=fT#;$9AlL z-$*n1KkYOdAGQ6PSlUMWZrVOTq8?qfGJpbC!zVSMO^bzZTZN4-PWU|GsYxzd0+~Xy2{)-UPqRD~y2X zwX;S0?$WF_+IR7vGW%-tHf~=b(b5MW>FulaceQ9=UB80ttFbGXeO14$?e<;TdRG5% zUH#V?>c6Gs`v3kB)xZ5CR)4NZ{pRO!=YB}%aWC>3&f~8C4w17wWLXE)1c%x2^r>bs zmmMYDxC!~Tk}s8>{7%ESbz&2;8L#8a{g7S9dGmL) z)cHX04tvOkL@1YNmJv#R*+fxoG3g86VQWWegH@^cHN>CxvH0C_LsseIPk;3-wzo`a zuYT2f?j|ijJAY>a(AU?*82~DNuLG!Y|1Z;kPkw$S-5#0CRedvTT1`@Kiif*WW@whSa`|$6>R!hOdj@0JhcsL_7e;v!{k}lN`Y8fsdVk=9 zyU%ev2vOJh=19b1aSb^f^jia;$EBX0h6k3N!cJ)fo?Wk;wg=bS0~>m=FqEmk`hU$k z*&LyhN$xc)?>Ev_R(6z9PNzM;XJemxt(04U2cL; zg(Knu78_{+IeurKGJU{@;}vnfI|Dyig>s)qj2F{b(9h|^T&vFMO=ZPV_JB36lFmaN_lT(i}kVdz78OJCLV!G{@Q>3>SjEyw!y)}z4j3* zh5G!mnOy?qR#$16&_RC1;%Ocw{WQ0!eER0OO?zhC3QVN}e4n~XpRuxNjHd(p%Y=h- zo96nL3iU!0l;SFFDz9x9%qumP-7{lhpgd0KP**4%o!j)QYkmQ?F%m~5x#m4Z z$L6C-a}|un?~tR`-$7`a+w>RLyup<8u{c2r)RqYqf$9h)ycQGI3kO}L^+F@mU;eWb z>bKUrN{?)PnZ<{}(i>d!f5Ff!5gVsxPjd`MX{*FQu5wp-We=%iGk1HJPX^&KX4lj5C1@!7Mn{Y7jQyKj-jS9d{ zJBq!3kSOnrl>0pG%YW9iq3L zR0-0=@-jzYuhlhJa;^F$SYYW9iQF6k^Je<>!Jx$xiBL=PPS8(fpCF)8zZ0Yx9|sfe z61vuXpo#Z(lC%F+*Q)#DgzZ>x!A4<+Yj8D{;aasZ_$Mqe?<5xHnvc9K-+x|kS+d2m z_|zw8AlAL9;xo`RXY|M!7m4mZ8wZTFy9($=uWCG8!{~>33rOOOeqwKEW1o%5$AEz8 zKL+o#3JzgQdAMC5oL1OTbOe67HBd1(IL<1#3p)}0RLI04$PX%G#%-GXant{-`d`N-7pS-B~!3V*zP~78w%+k#cO=+yoCv=@CSmhjDAV+e| z7Rmn=(^Ft|0X_HjDPtcvo>mhee$vwO^+*^?;_aZ8w)t~KTk0UY?>4HvyfF^C={l+$ z_oK1$B&d9V*fn^&UFaypvDBAf&DE6Jzg4ZA<{#$u?@`7NNrd!uf~r5!S{m%h(i#hk zK4N>()9(Uv3HP7}dj`te$t7Q$h|ImYe#@H47JobpyZA}E`YyUE;7a)ZK<28+(y9%O z5jn%IFZlj5qYv5G8`3~h&Q;pLmNvZJ6p@Q7#@UJ8Q}!Nwo&rVHy@Pw#{4H%;PtUYP zZCiK#3JovB&nOtCA23=#Z-2xrpk13zAa<@4^`>;b028n~9MZritz;5>JIH3in#sUd6^^;YL4vIbY9vJ}ceEKoU4O8tE51aS&j9{a5{epHhN`~~#iM4^KiCw3H{ zw+F|@1=Hh%i<3h_JE0L|;WjbDp1d6f`WY@ZyrZoFN_t|EYgKxjp^9^0yqx|HBq40d zf##L?=yq(N64V~r^F53J@u-HrDL)wpth-t4EPN$=p1NgPx4JYj+aiv)2ch~(!E0d& z62-gisYhpcghpvL2z-8-f5*K<78XkaqQ?Kemx$2T2feqA;`w7dI-IHh7DC12D%gwU z9k2?sJWfr#)937B&(vRi<7EAjh0(AD=TX4aO2 zz9*rxok9haGqJn^I$G@M8e9RoCiPd+HvV_|l*vKqNq=?~@3bdx37oJ^$Ft~8p?u<1 z5nFlqyouLZJQMT6X*~)e{$3Ny%N@wKiNblLIVK7jap4glC`Cd~;W@lAM(q$tQ@2yq z508V^3wMdg@#F%tJSlkYvn(#`$Nbb?;mHws1(e0N1cjDj$6z{&aXd7yS)*p_VFr77 za9jjt!EWIw@Wp#P5=pIc{h^{@m+O_XK%F(e!v8Zfc=4dT#@@voc!s@E+Jg7h!^gTM zdj0+tT?at={cr>5cYVdXeAhtnN_nK+k%BjWi>BZwvAu5cO!A3Xa6khS;-G?$LBfI>k^FBoe1Q*4lwE-Z{fTk4xhV}YJiMF6~5)4m52Q1i^ z;#$=y_#TQLjASTyZw6n$!kA%nZt77sd0DTDfINO_<{K(b82w@^@giWRM3Yi>u0Dky zD({UdcJCS<)UTK3L^(SjHY%8-*VYSgz6xsi+Rxd1Re!_J0X|oS1hYQZuL7|9Ox7q1 z^v3uCqE($@RoHMKG#EzMq5Qh4IvQ|3=hBIs6}xA4+GPlkTtx)=I;B z(Hbasq*nVnVkie-#j*hu%0UTxD91x)_gNVh{U(3N7X8Ll09QL;le(ss`_h9?I#Lh% zvW1S~9rl8);*$>HPCM8l!krG^ox%me;|`%FG>Fl}Vw}#eI6>D_)pO=iLFyE zvPjo;8z&ZtBhhdiZ5Ky6gwYPcR`;>KJu&b%k$3(3<)(Q4!D`|7J5_GP-)9MzterfX zv((Jh@zh!>8@(LS$~^ZTW@Sq0tgZ>%Nm1veDcgB?b4_>(*6yUK7P&?G05+D!+_jUB zz3uCa-#+UKBz)2i-XDA0f2nMVjv!LASZL`YHC|PMY=j2NaP^N2%C3(o;_`RhUYT^nD8H7Me}1g;7ir61g{oP!m_1~h^mLon zb6=F&mOf;~1dEQyR=qv&l=zj-nKXXY|t z7{d1C?=v!_tNHua*`^D{^;`|p z!^`;=ArPj};dAmrGa%F5S_<(E71smaWa;B>e!iaXV#xeM@};{DF#fGd(eMx7gnuXB zP-j^0-_P+;)HXcb@^jnLhpd=D`s`;$&(&Ib@J;xwpH1mGypNZ^q;2$ku)l5TLsm>6 zUC-(HH6J180G?F-%08YdB0#Ft8+Q>A|#JF^cYk#xUegx}D1B8Ho0R&ts2d zC4v=0!4Z`CFcgtR*E6MI0T|hm3N;o0g~IQ{ctP+rK9Uu$6sAyAgi66WFPd@%<@#FvG<3Gy} zyk8(VzARhqpVD;F~p#ca16a8ew<3`zjg2dywM z4U8bw3=14e0-Ht1UdFAVRV&EtM9f}>cNSEVY1e>emlzKg8%CTKy*&@G@CC!0B(h!h9iE@n7cjqG?FnMggbUZ^9!V5_gM))I2%PXn^Frj~2rgSZ6h zJ%;41UPx9z_)gpq^Y#|g++b_D#LV7!*Oy!a5{edLZ`p{P z!d^E|W4Gz;F{-bh*Jd%;W54_Ogkm2fKl2Wuw=6IdS(=$3jNcF(zeK$wy5AP>$Hil*^0FxLiV9F4l5+sm$fYGM7t4yny9$(OU~O zrdGT1C-8aS$z+>_BJ9ildPaWovhYP_Z!vox&Qh&Vj#^E@hmXC=2Ki5DnL= z%w-dy>8M3Amyw`+OX4~qN?h+&#r2s3%_Oe3;wDAg<@F&;l)R?RCwUF~aKX?hvfpY& z_O0|Nk$vGq4S%`3sw~#a>o$~Eyz0FekPGs9@Cij;dww9ZxMg`QF=KHtv3PMTc`X4Q z!R0jttMQhI*^ABOwa-@Ii^Qe2MTspj<9jjjeX*&;7At&bB72={mA3?Hok;RiOgFmM zq5zNN0^Gkl2=EZ(E$xT3EWfhwR^gfw2s0EAOvo}w@yy*^ik%?EbAjjKnKHwp1$pgN zMnV45-!&e8>^>i#=yj_CT(*w9Ef+n-K3Oz~oBIYL*hx2z5GvO5ff;xKd;pLvC0GCov*Y=u zm6#SShYh%ZpS?_7%9zZFbRm(Df{)YK|GS<5&N{{TU9+%0J}i6jJ_D$aUrCY)6eQr) z5jn{JXibB9t*(UWW8Hd3A(yVcg=_%E9mtT~GYO1(xy`4R#aU$0TxvR+9=w@EbE&4I z4!o~$4Ee={6Imt;+axIZyenF0-Y(ye}QdDZ0^Rk zBof|^+B#^d{!w4>{SUeR1+nVi_k_OwU3pZ$o!38{*T3kkGpfJ0-2NqJ+*i8@3B0~#OWIUl58l4><@%P!s&A&Deb2G_mds`Sdnl3h zZ_1K0>ff=vy}>tm{TpJ{Z+TK*|H(O2zlYa9h1b9G%`>V$MQ;C_XWV{P|B^YZzX!hA zrvA?1?S1{PXWHHltiBXp-{!yS>y!5bYN0&wws>QakaO|`7F0ju62s9EUH(%s^Y`!1 z^2f!_?}%AHIy&vRH~jO%Jbb^BK1O{!eO0P1J<#WVG!}i=Jj&>M=;D^zml897(?FL0 zirD!bG3)2_zCF>{z8LlK^z#Pl+b5>ShpbtY#mP@+n^2njIHPptMJlD5{Jz%mr=_#} z{fzk?ZK$79erR%>CAxpwP(RPVF3luAqrbQ{`YpM<{ch9tuWK!TjhDCInBUQc`Z@ix zo{HK2mh0#FhkMQ15As8q9nn;WZ1K;noh+q1$MoH-3-u_K^E)QR%wGZ;MQV7K5bR4 zFGhW=HlDtAhT1+UHhq>^K;Oz4jJ{JBn77aJSj_w$Y@d(kUuTxz5wm_)JEynz47GhR z>SML>^cGF~+_C9%WBb0H&ge^w(Z1fX^AE)KE#moicQ$WdjQUyaoZhVIYWrf;$7?6@7uQ4_eFEe`mSlQKJq7>iR+MxCuzuAvxKcMA1*}iQF%$Z{N)pop!aYvvz{#* zvl|h;Nt%VwZiTeN63nh=tB<(qn4L(Mo@dj|(d;sIyO`+|oStB219Lu=cckL+tRLU4 z%8nNjJlva9-HnWw{Y&kId^a-Q=sln^>PoGjr~h}n8Iz$I8_oOkYwikq;7P{5&kX*h zpE5F}5P$!EO#jk`X#dg|JT}YSrkr_kVQ4Y%xb|~4Xm;0nN&<=?V&T*@kvz60j*~Pe*}>k^}3fsvJ1~-ExqPI#`H{v9+#9!=<09(jf1yYoy`Hc1CH) zX{SiT8^Jb9L-%$@X-H^il!l`V`F6{(438dY;`{Jg)-E95w~du1`+2+N{qM(^KHl82-jh4$Fn&S*|xwcT(1LpX6h~eYMSG4$ey5PSFAFH>uZX3$@ z$SG(8K8AkU90MOZ&zQ0cqww+i{5Ij^d4`X}|E0ypi2Q#iK3ej0R8aEbiWbeWJ*O0u zc=B67$*NOEl)N&J_k)O`O|39eL~76KyE(pwasBfrExtMhSpUJmWMP9d@2hO+4`*Qp zIqFy3|trj-OI#CQPyT_n`Zj&*!(zMpy6jh?1xqPjp>G_UG5h_bamgAJ6oE zfnh%9#K}ba7>gQ|^Zg5=ME<>iR^-j)eFBsBldoyz{lU2gye@4CueE1_*L@g`!Mj*y z7Zdi&PiWDyn4zVF*i{Scs<``P1l_$EyE01vsd!cyGzg+aom*{cj8o83tAbTgOvbti zsc$uEp|Y4kMXh@X)m9DO;4qg#66HdeTPszE?_|!6QFY!;w-4}?Gi`MC~dYfi1fZ*K_9g|Q-w`w4k9`mFJ z24xtb%539)ECzZ?iDf?i| z2m(1dRkks_#J|Y!REaAjmDuGms_hoTF%%l}Tc&xpNvd(mQW^tnax3-cj5qiULuiIN zyU?O1f`fG`1=$DSeI5MoS~z%|%A-dxjNLT+qvC5llw~GjSf*GH^LdAnyhG}?d(ofI zQ~mk!Lb?9D^%YCowQM z$IxJcIo&8iOhO@RDNj9(@vz?>`q)bK@$DbV_3^@V-~MJR z8T{}?YyL$f)z3^^XK!$H#+j*IkM~bS_dV%TMW6k|KNY?9GW}3zz0c~?J*wCCL&s}W z?~fna-*@%rK2}%HD_m9etu(5S@LfHeNyTma!>1ek^2cg7IEqO$tKDFeqnx)y6i#Lp zoS3*SJbI#FI2_lF2jQHl-p8}1d3Q_3B6uh@77-r)Gb3d>ID}@J+N9+_o8}#mvVP5H z-Q-c;1Cr61%V#pX6&ofi@aR&~RhxIXdl@}!NRM>o{yGhNkx%W#?WJ;iankDB-)^SA z9=?qJs%b(N{N~eyJlM}a6B75^W%%JY`L26SUv=H#a96fR-8CmJ!w+A0!si$uuCICw z5J5(ao@0Ok8g)nbs2lre`x8FfU1L$VJBsOV_H6f-x*%mAEp4WcBJjA$8p8!G{L2m1 zQ*~-X6>AgjKlZRs6R3UK^r_rF=_mhd?9<}oJ~i}+l7H4db@W~Ro<;wxeJXYNto|{N z>i=H*)XC-3KK=N?KWU#%yx^yOdTO8__UWO4e%q((2Kr&2et+bz+NUDDhkaV`Vzc%s zhuWu2pDX5npZ|B*r*psh)Rk|?_-CI!`1LaEQ>O2_Z}zBL+dg&BsJmJFr2o~Yefprc zfA;BQMf?!|ER^AhPaVDNUH>f9rOTM)$`8_*hemZ@}~2d=95=~3}5{tNIk8W1U=jg|GNeL*H)U_OM$U1&*s5@1ZmIn zRh$n}+raq~z0C7XB6(q+&$oRnrS>s;x!gW>eY%WMkGDPbFS5th{XXq+`#1l~_V~y?pEhRv ztpABUe$+Qr-#h*%_PF9lpH%hmLDk=7k8MvhXOB-u`(ckCTHv=mzHWgZ_W1WgPkVg+ zSOE6;yJM0)t~%z$9!H(_u*WT)@?wwopYq2Z7g2ls-8XW3yl~9F#UA(DfoF>_6W;3IhqZxZz8KISyS>puM9 zHT@TViNA?`D)FX|VN4(MK$533(7t&T>C`#qED%dfh@+CEMVfM!fd~`fNZ|-J#(-}p znQ~_0TRl6_40q~GsyBVv%JvHjx9dP2YqD655x+272arU#mZJ;3?E`K`C-0-U2im}G zb|%L!I=m3XoYz0p8Dqq*y}AisMZs5q6`W7M@jP7o6;W^Rq_+;0s0CVCdbecDdiw;U z-Wtg#!dI<#2I+)W4j%=l?xd%zC&fgvdNwg6`+WZM6%%cbx)Tj`n^<~7P>eCU%Lwwa zD?7{_S#O_c)Z1Ri4_dKtA<>w>lY59kNr3BRH(pB?>E2rB#NX|%sp2aDxtmi|;irHP z0LJw@cwlJkha53{C;@L?N{RhM1{^vHw_(e4e@rda{Z#}kc;GKr`q(+Qa3K%Dd0xUV zGN^yr4X#`^W@Y}OvyNvoi}^!B*_OfS4eUHPC=Sl(n+30IM#9N4=}ZP*0Yi;IA9D!Y z)CQ-3=h==xE%=B>T8FW5!Wo@#avD*UM;w*5o9GF^+|0*ti$UJ_2Js3jI1kiT%-+Bb zXwaX$IyOv3W_9-L!LeF{wL+x*}FVj4+}(|!|qkdv)zz@ znnU-JBQuO!do+th-C{=n_rlIMbLn(~~y*FSkSQhj^PMp2#< zhWL=@vv>ZJ@-%ywXWWoLq zrQiCJXWw0tJO^x13l91Ncdy6m!SFhSe94W_C|r`~x$iXPx%~(K z*&2mQ^6a!(Q=UOP{gY=Qm1pJ_QJ#$heaQ1d$A40u;ojxBePAH+4C}0t=Pv^Sl4n@0 zFL^HBF3IzgO=`hGf8gHmc>N{3oNQ+E+SuY$2Rzq zCsV5_&nLI~C(l|c&zrW3@*MfF4|$F<|C92J@Gj4L9u7pF)+m)c~NmKa5vY$~s0_Tq^sea!U8C;sx&RyvSe z2wrlY);$sBd@RwmKUu}j{i?2wmXP9whq$!}+- zmzn$-#SOFIWz&&)1I;h+x6y-ef%W`!DYh*klA!(6y4kziW=U z05LQ@g#4LL{)D@VS~=V{i@nysW{}KnK-}kuxaBjaOU)>6m}-W{`*?Ef)ftGE5FNk2 zj>vppU4<0SiY2xLZuV)J&Q#$YNHNA9u_4nYP<+AUxE>ZI_!(dK*1Ewx3y{dnXY4sh zVh~$|zo|@o6LLEd2#H`5jXe`Xrc7e3<_J@HkbPYcGu)VJZ**H9Ce=o;{fs^Pg-m(Z zRIW?y(Z}3@WQ$~{8%*=pLmuWJ`GYx`H$tDY*ESd4miqsZ`51wCBP@|?dK8sBOcuC*&pum(jUZra3l5uBY*ub_js)Q1aPV^u}5Tvz>=3-RT^thRdRdF zC#Eu)Z|7xlOlEanW(kv7K>7if7>9RmgC5ga2e1i6l=wb+fS;w9 zps#0a$mAD=`!ExVDf|Sz2uQFci}FTbTB%TH)P7207H29S!z$q+t!cR1S2~*tmokHDFag({AO?%n^Fw53^m$g4Eml! zLneR8lNY5V?_;TdQG70z@R?vF0%2P*Z~};tjq4^;_y+v=ZLuK^i1fy_a^O;{-~kOv z9bXxVecl!7mihyHoM>=tx3#Q*`|ImA;JSO=8ky=ZR;d0)UiBCA9Uz7Kcy$m~s1NSn zV1JlkGghwpdpaf6-+Qfkp)e($Ks?IhbzgX`Ctq>{H42wh|L<#f)nDMcQ>OZzH6lc* zzMcg4SrGL*mUNCV`Mnl}M6_^sR`L<-vGgPW-b zFjG*6krZdHL6AYjBO!Z%H8n4D@|8ZK+P8J1mPb1 z26a`qyzb$#MBcY*Bt*v|2g0eJVRBq-g88tO8a#ln5OOWJTH+9J>#I@iMj{}VR||j; z@Q_UKU`0HH%JEPMctGb0@t{A*;~|;gVPQ1V650$N-VT@WU>i#~6H56%1o+>F&>gx8 z@@WgS(%3T>rGyMwiX??9NLZreKIw}hcmWF-LEYlEP`y=`eneh>XI-WQXJ zGqi4{Oo*XggcvFcapQ7iaF{nCK2{|YV)6=Cv$MtC27U655i_x$# z*kT10Vk&t<%ooaXm0XrPD`^ks$8R<|ew#$bZ@fE#j!9)A$kSF$oRVojN%NmQ=t#-a z50R~(hlx&z?LYhoOZT8+gk^+dn8^r_O$w33r^gehl8hKOBp*zJnf@Oi-Sd*GGBFR2*nujFAcF?(KdKbmZd=Y?6+h z+@QZeB&GkIImvx;TCd9+J_(|(P71Ii+~w}Mo>V>*-|vOz+sHFJJdJ%MjgE7|nMc!1 z<&RjIq2y<{HI;ePYFhs2)Kq3D`5ihnclgxYN2an#26m8vNiZ-Y45*L0L*PuZFoJH@ zpIB0(@F$M{BJ(GnctEBvR9XV+dZM*tIIPnYP6Tn&Q=un^OFbD}&)djj7;lwPmpuP~ z!eLmSny;-V04m&u8 zxmz?6dP2e(;stWCT6NfN6LrK-OR0_!nt)2;XStI2Vzu(}B89$q7j8Mu%XDU+C_}&4 z$mFF#DdUTrmN|4llYbc1M*&_P31RlB(Hh2BmV#P&@jfC9EJN(v zhc7{|a=`VvNb+6R3nD-?(A;oy;yG?;D6epwI%_LgF=t}KT3Byp9g}$eyaKg2AX(5u zp`?eFva#t*(jM5}nzSF(M$%z6X(^L*garj0X2dbV9=sPhVLx0{%qAR$Ym?aoI5-cy zqP&D!SZ+gFg>&|5+gUb~(IYso4h;KJwyxHoY+Yg)9dCdG2@1@S0lAa17$ly>i~_30 z!~c2^RACyAtI1r#5+d{YSc?K#_$^}VVQw!m@bm?u>qmfzz#bVjr|u^}`o>G*50IEo z3gY&Cp;@CXQkHufDJ9PVc%e<9ZUv?z&ibvC#vh2U>=Q*4QxMskkgquCx)CsC$;z{E zOj3^1QqhMKPrSCw0SR}ymq<7zpD2U=4f?$jjQDe%kGDoH=OyeGVU&^&_-l17kD%Q; z>$O-w@W_TU@dQ3?Sz2;$DA|%P04GF8^hJC+LL`(zBoskm%gRgG!)E3HG^}O=(QZau z8W7LQ-qX&q-+m$thNC5HLcR(SJfX3z`2hwRGq`G-G?1QZtukhFL}QllIn4a!tELqT zd1H2{0*qN9iv1Tr3N}kT|NB0e5B7L{yc>D_A^DQ4|BR$%<|`*v+6ehxUlOFFLU4VD z#;g!!`)q|mhsgYmg6tD8`Xln?g^OZdQj0ocDQxsO4lc(WkWEro%6TF*9n?k~5Bej_ z`cgq!jB@^kNb+n2SjsfAIzsxHenh08+jpg#of^;%E#gUpQzgx;B`L+8(EvVRg zVLjaA_3iNbDDfA$F52ZwBK-byQG^F%A}n1l^G9UTyu9D`nIti{HQ_DUKX8r|q_zhDY&P!}EmB%#klLgi` zyw5r3Zn@97K40NF>SeX>xR&-dCr)=lv`lg? zhkmB^B46wZ>){@+ABWf1lP|fk8ih;FWzc7$b6GEQF83`}_D4D!2_fJ_bw$YM=0m@u zbMvWx5HSiN;1CYZM`c&tNqoK4I5Dj^X4EZ=SG{34x0hTv? zY|ch&GEVs~#TV?z5VpUu(=KLDr`m0eJ?c$^YV3`A)7(FGu;(CFzYb@K3E4fqWd<3U zM1yHoTdYN|EO^F8{P;hcHkdSJhHXj?;EzzVlDx?RlJw4g(DE$TcxY>7DbBk@sOFx2 z(aZRe{3#!GPB_iLKt#$HAW~rZ^#Sy~BkBCB$uS5znH1Uc>h-F{O79lD= zrmF?=wT7Jp{M`E*39BGsD*rk5xM#kU^*EuwC7aVoAAnUJen=#CyQQ0n{!Av_E!o@| zy5B9QvHO`}Dk2=_R-g+ell~Wb`#CpEZ+FVonmp7h9C)1$Tab9&RfWBg>PeZ9WNS!N{Zhyy4+1c6uBYl4_5{4DTodYw*M z-ZI(G>qNQ;Nv>zzIBnEUXAOf_q(ed{QLSg(Malq@&9>XI#qow{$Ys3(_Kn3G5E=2t zp7EskI6Z7d31Z@nLig;^Nfa3I6KPQuMZ`C?K&=BFr4|BwBGG?z9UjO-*L1-HsA4L2fx-& zChBF=9(QZ3olG60SU0hD#<^fRku6Mo*g7aDKIH4W-sVZaY(eeFD%F&C-GYFoK0aCK zYc--b_h6Z9>La?ubB5!wC|Lj1NQi-i3!lRJuT~whIqqK<$>z8@`IN`%PnA<1yuVAv zmzf-qD{CX;(Ne}zBJGtQ3zKk}I~m&&r)AILvqYfd_X9N_n8EWbWfP1wbSR5X@8B@U zcH7HrY#J=2{sbbX8`_yF?zIS-FM(#w%3Pu|IldriXJW4jHRXH=(uqxHYGBfY=;Xdc zC!2YX=*0}8Q*33XoFRIu;%xl{{V+I;E+`pk{6p8uE4K>6OuF^=$6y-SKsP-m6RM>N zS~9-PEQ9sbHq1F#;wGLk$OZT1RERUPIhD3MWQ5Z;zDe3%qtn-Y1nsb$f;L!BxO##r zA@tM8g*eu>L>agc&ZaD(ns-Wfe!$r>>lTWtLu5c)Wtx zAsW`>TH8ctTP&;Dq)Ks%H7?0@l}<9o7@v8!;_hlh<|2TYVh?pydjh{X9XG>M{ zDZcRAUyk3@^CEtKzBNGnZoBb+g5S1!Iev?7{XhJA#qakwOZffeJvC7E?O^`L2SF;x~S=gx?1ii}?Nf;?cI>B-m#<@5C0FOR4(}wrm)0 zp+^>M#^15-CN$0Ch^yTlmY46!D>7$6{$z79am{;yC!TEX#;v*;Eol_7+A}n*b__Om zDf&}jwPz4l`y3tUMoF&rdT{ZfTM(afRu1oKTS<=57`2l3te*F>?;>7y&Nfp{J5oc> zGBX@YZpym>eBxoGfXN~303%y~ubH!*e(dx;k=r(RkMpKS&)eO41_pHVqV(AMV&KpE zpdMRDJG$`CsZ21sxf6*0{VVmq&HMoI5#Im)ntv@g$babhwph(wfap;MW+|5Cil=^~ zS@0KPuAtZ@6?ENBoKqZ6E=5`$XQsp6W%#V?##F}W*k|i)-(+ARHVeFws|SY(tc10y z4wv+NG+sB5^hY;Q8Dv+3VEMUO$9C(Xx;2z$h*$#Vbzcbrvb_qKp$(*+LNkVfqf;5w zbvyC&nL5`vHy!UfHZtd#T2pxjVSElKv(%p5tA}}?vFG~=}5Tl3L+f?<}Gl0JXU1gQ1`}4 zj4fCX1M;alfxn0}gD@VCB2sWw6Yn&i8D@@jrMTTP8oDsFW;!-_?~+PLymxMDlHOzC zE$I8FFR9+^rAi3`Wa95ba+2X`Obb$HA3ij&|Fo+KPGj8W`8gd|O*CE2CBH4k@x=&! zT>8xz9~^^vs;5SV5zyyoEyQ!~LdFUx2%?@I;2wD^h;|&s6gc@9wNqZQK}TL(HPIQD4y~(+o33Nx49=P0d{7BEXXfyKJ7?yK zf6Wp8iZeEn&!ML$R1iJDCamUmZN++E*)z@xkVsffAc;QV9j8G?6*QIj_0HHdD20hj zHSsRIJfb($@NNYAbV~u66teQxwVJsC~ ze`uwp0tHcv41P0QasC|7KZ$vrVOxNO+uNdo=OJM&@bA&+&U>f((Ha#BR zw3rnRZ*uBsE=qcpk!EyVzfDi6U?Ch1DkrLch=B>y)37SpdIIx3jSrjT86WnLEI#bI z)&xpPItUPJ1My*X5FggWoaA2pPCGuVHF50a@nJ#aIq>+f5k#RGm_Y_63Bh!!6~>1# zjY5PNJ%7kO47SolkQd^3FR?+t2@Z9`lyGLxDBAGm(uMg~Scy#boPRBqI6}NXoP&M! zstTNgkK;2sawy&1euh8D&6aV_>$C_x#~CT3=z?k1$mVg+$yK zq;pi-QfRpII2!5@6aKoCA3L&_m z;#$>y#zQinW0i~d;tuJo&*6T?!e`kjN&X?emb-lOku=DFEdOlz?jj2pa@_F4G z0+1fNDj*=eI@=eJB3_q(6#1$eF%J=}b60x2?g+1cevJU>PL0Be%Hi{UPhggpR05$} zNky*jWgh>BukjiO@$&RqC4M?qDW8w6Q{ySKBrk=7!N1L@9{EpN1|$D!#zqGJwnBoe z!L10gGK*lx-{`COk>X)lYc^s$lp!ngu+Dm?a$FeJBR1SL3nqABP;ajcA`W5`6B|Z` z^o4G#jo^a~4UTI#6LU=@8PixhaK91RT#asQCoV;YxMO_Djj;3zS>;U<`Jjo1f}dAPH}x=nMZF>j9@E zuBStDqcup?dI$I2JPA(Q2sQ|(xreXPsqk~`YJ#5+NLKDMlBe!R?$;bI8?3QmxwA!m z^eV*=9t!#dDS-IH%ogIHB(lUg$;(i>YkdF-MCucagwYU~g5|?R^GWW=dg6`sRe5O; zzj##XE+-#FcbOduUK%r;xMoAGqQ^X(cxJ<=QqMVlYHr`DxkINyg-;v7D@z2o*`Nye zrv6kivBQaKUux%4{EZoXT?GWF^g>$=i`l%#xv(W^hAJxme$S|U+igB#?xT+h6TRr_ ztZ6B@I>~hFPar-`S9=h3wNx{Mf=^SGC-Z5l9iFbs;VTIYKGjHYLc&b)IrrU6-wV&r zIb=Rf2f0rZpNASo75~g6WH~KGR8tfimcdWy{nrzIk1r#`FV+&mSXN^keI>@xS3^{^ zr6kXi!(i|@5ZCq!2#3y+qM0LDG3|Lsvt&t;@cC>~1shL8;a6iQd?kj$SBs(Wp*nv< z;VrqIaqu=fn~Hq}-1BAM-ARU0)rj>GnAddTpe9xWAg6QWgwPg8x1$OB3JlkDwW4F&m z!A@j7_kZ&%P<(uQv1AM)P{g%IZXhDI7 z_g4w==~Qlfe0n~{r^60zMSQyGM#$pR7b*0&L8cWK{z5f;b^ylxvl+gQz3Ba_q>bZe zs;&4F1gubqn$(mk5Pt7JI~}(|o70MXkJ9X4$`GwBpk%o1c@bgez^Wo>B_g}0TexC0| zHd6R`kr;m7YPy&3b3r`CxsrHFvea@|N6^RRdA$AV}#t^m*eOM~zm-N82|U zm?|d8NRwQb4(gQ-jlcC7F0Z~kb$!I&`yTu~2ndurPXm`>ARw2~)aYjW8AQxjJ230H z5pF#|=0EHsfR`}QXOaLD4&N>z-%__t7QZ*hAa|vZL<-PT2M{pu;WX((Z}j!&>Dzxv zgTC@6zvv4Mh`u2beY-D-9}dR}Kd8cru3jV!1c5FJmJ4ou=mOoc#u`pt=J+sXFJGeW z06(c4Hfppmt1GS7rEtRjBjprN@p2rG5&iMdE#i{h4;LFfRY=SwjFANuV#;}g4(;if zel`sB$ruhs%>|~MPSAmpin3mwN;0m*QBItd*kAVX^c8f_Q^`Ky*k>xJVr)e)M1-pa ziQ;F@F~iJ8x}QE2k1dg(&l;Aqo!Ap^qpRTk8v3Y+=%e!&^}IeR@~V#>;}-%S<(n;; zDf}t}rYm6D0z+{?i1H&^*pwn1u*F+z;-~6CS6&zVcmwmJ>nd>Nyy>%{`=~y12-60) z!J@W@ZW|!pxzIzp%N_HdI;R&k*A*{Q%{BcZIFEA86+tk`9ear=twWMhY{y+cO>@!# zmEyhJN7>;2P1Tq>h!EIa@Di`$3SDp?DQC?_J&Jm6Lbk{Lsgx4l1@xQ`2wRRW;M!XO zeEG!8F)0Pao`It==)49BSDu%laGp057MgO*auhBTQCP@MPG5y6T%M2*NbK!61K=|i ztVi^9L!X{WCI+z|@%0P+Mqu_{F9=LO-#h|G@&^oUKBq#UKLAW3ov0Ww7-y}CBN)6P zcya@C3MY}h0&x2t3cy(cpcbAD41h15l>q3NMge%~oEm`dTp$2Uou&q0ft8?(ck0Fc zC?Wtm5YLu-Q6q~4!0V=oNBh8}19y751i)j{)$yR3`tJZ4Z_=m*ssazBhK)t0Bm3Rd5qz{ z_1|u9`tNK2`tNL`+8_H1`Y+U{{@bP2e}4w3{~Bca&&KP&vmW~I9Oyr*hyI)FQ~zav z{(I4<{%g5&PR&%l__r&gf}^sp6{= z%q{|N9~>FfS8;NrPvkK>y&x~^&*qUghDYAchDOy`UOIn_;&1lfYkzm_pwllIbOi+= z_5P{AAo#*534->?6oMBT)DT>7hCp!KWHkg|f58_7&BUT}FKA?uAlPcM2tkY}KKYUa z!J{t)`Ro7fUncs0oh1M7l$QT@`oHe~$wZk@A-e*)cUVJK>hcJ zO#h|v`tOv7{%ZjJ_kxH1d(Nl+n+E!Cl285jf=d5Qlj*-{f#|;1>ymOuV$_}j5Xg})De3k-jgf0OVx>p6_N=_w;jW z{LP=}3x6GnIp-#8WRdU}_M8%b4OR(%oK=lK)%>$!{LuyMuO%1fp69@FlD#gK>1(a&J5^618SD#^F`HE*5>s7Z zkUVr;g5>Fm6q3*WriSE|q?2(wC#oSCG{M)1q<|P(?$Fb|MkLu2l_QcTCQFb^nyj$L zzVJ9ug~y+|sPNdMP6Ll6b^kLwhWm}jF`K;Lad@5oc>Lt}e+!RGHmdMAg9{9ggE$F~ zPfehB+;?1!$CpkJJocHO#^dDizVK)u7M~lWkwwDe$)}Zg-1dTm#|RSh}m(h zQ605ykcBZX{!rc21{ZCraQ~{2`?*A~>sslIM?!1jUxw4z)1C2@P`gN|T_n^l5*mzz z#v`HjYU3zbl!Z3`y5TY~x22mp{{2@a{~j&*yZGlB1>U+^&cHsTWDz-~z%e{Xy@#MeFWt2(~U$9iz0xE?&eJ6#Vp{-QCMn(~XxVfYlfLXy$3-IPNxj2m6W1Qs;@+og=hoLwhA z6FlxE*grt}=1C4Cb15$K<@tC2ru@ENz4EzSmEKWGXZ4^l2u6~OY#)7y{qO*LV~q7i zd!x}BW?H+QNg{Nn|0eDKHJ>`6Rw*JAlr{5`6ymEv1OxH)v>_BrDqQd)M zSUHi~*ycPS*-^Rj#p`uCTMTpE3Iv7`<28q|7n!Y9+|6CrJ+pm0({d8@GS*(D&pt;y zD4p$)(_VR{P6vP6tIb5Y8X(%O3)_X?TS9|R2>3y9f8;pl&U#44tg~K8GDT!{*I8dD zRD=N)LtUuX_;|-qqOKz0T)p$8Gw$U&2qfBi7Zp9mY|1{V(?#kAzgzU!yInVB{|pbd z@oP_=N3~|KT%d80^`tuDwO?VqpWovH^8r1Xy`)^o%5A-YFV(t{ylQy?t6C+#Tq=-O zLEKQ0{~u&u=r{g(o9#7{BM*BJ)=S>Q=@v1j95}eu30o+1b-BE~o`CjxiFAg>EVwb< zvZqHcu-7~Dl9s|58pK||cMy8&5~r>UQTloP4SANca>YSUW%zhUlRM9{6!vA3&b{xT zzOGkE@fvtQz`lC$mBi<~tc zK+X~yHd-UTcI`-l$>DqmM&2;bINP`idS=uxx?kzsL;QZFSX%cu{^%|-8uiB6sODFI z9))08;(3jA>iQ6FoL+2g4Nq$yCsnQhOrKtCyD5+Eo#&p|k5L!=LYJ`Kz~3XF$CiOK zF}8Pn1s=jSmXCy`S|P)XE#F&Cy2>Zubpd6VeK;XW9W?v;K@e=x2yA+W*mTA95|gX2 z=R?!iPPqlq8*`zz(Efdt_oS9kwhM4VRy=Ht;7qd=oCt;JUj-+^*4jv^0w=B)I5A?M zj1w$>2)~L0PnGNF?j<<~hEWdeUQRgh70-cCI75vaHcRhuCqq8Lh41!1S|PO`V1n(B z5!(M_v+Z{@+kQC`r1t;lNBfuiX#Xu2(#ME<#j z@J#y8>WEc7`_I%hivH8X!t+nROS}Ipn5or&(&YVTO~fkC{&VXt|NBq-ue|r41z&pf zpItLO`_GU)&G(*wnU{(GZGN=>Gav0Q^K5^nM*DY2_5+CG zzR0BZqu;|a`vEDg`I(~qz-LFMXg`pDeKdTJ3TkhsKjN{ykE{8fux^-nT-Qp+cDPH- zG`|wgs0m7biH!>%u)*H{=tZbuWFQ^MLAyTlrDEcm9pz`S*K*C;x_j=Lg=pe*72kHtxIT z@s{?ncf1`by)3-l^fAx0J|BDHE$w?>c(d~S>NLocUmZ3FgtxOF{RO<;zS$4F-B;=z zZy$ejS$O;TBc63vmU`mtzAfVVlji)*p5=7@=F+A{cV4{F87%Mv2_psMkkXmG+-D!r zd8R+(gLIHT`dfaIOqg);QvOc9{CB;TZ>HrZzz@lHbd##weBb5g&@nL=?XCRk#aRAt zi)r}|Z{>T(SMeHN{}0yC{~NXYW4c2Be<lh95B>k45B>k4U;Qy% zt^Yq1^#6w%`u|&B{c#D;uN6Zy^nY!0{ZYZWr%Po0(JSYa&WEJ`YyHvxB|h|jiC_Iu z&AK5ag8nbj(Epp7)&GS&|9&5;q5qwJ;H~STzks)KPCxYjA|LwygUiC(O^XEmzeq#> zZ}f$?Ql4L(k~H*xO+a`%yYMgI?e-df^#2Dw^#8)k!rRXa1^xelhW@Yht^Y&5;q`wt zuRqh(`hOwS{|kBjAI+$*ZWEpNQZFqqh7M{38c6z!ixTB z6@lLDH^2T8y&fVR2wrZlw@)b6+uE@)OJR?@zzX(i_f|F-NWGU>aAz>GhkR#S?}Z=g z`iHWx@ZX9JXKrLdJ)4)$>PdAi>g_Sbdi>N0z}HDZB;<30qmt3{c{~b$bXMm*2Q5z` z%2n6o_FNBRG33RuoeUsDtXJ0C~QM%ykf~$bALp#LFTn#QKdGbE4}J zWGbj!uXvtcxn6sIUZIHYQO?gVc#I!kFRT*hR}{AxKjS$oJJzY=nw_7os?wfc(NfhL z-WBIp!qobv$GhVE3Jv58$3k@ZFDn&H_Pe}-DSg*dH}72ED6H4x0S~xf|GiQ+nBF}9 zIxG3N_i>(oPgH92uaoDjq+k5YuJoUOjw0{;JNJ%%{EIE(`8T1+lYa&4H262~k_Z31 z^#85Ae;vJ+*MCsCLjS!(_1`;Gf8W=g>hH|8{^{?{eEA2~cqxAzEkExas!!Uh%Wa1K z?!5n=>8*SNE&oow{0(co`tMrvp9*}Xs^&jag!!*Ef%H$qlxF8Y*Z7aG_HTQ~*MbGw z_$pK3>!$@gzKm~s;;UPw-~F>W{*6`g@1@Z^|Eg98(m$K$-%qRk=ikvn@BDkL&_Dhy zEadrDTjiF`by_H}67VZCU z@&1px+-B&X#QRqVR(dIa94$YOFTcIF@-aR!&(df=F;Zs?D( z6~e7MlSqYZQV6>2NlS!rPA!OTn=_8yc1uHb`3qN=q$S)mSR6@O!rF||>EacZJ}^M-VTbWd9&X9mA9l9f+j#e^aMQnYvmC`ti-bYRbQRo)r1lc}1g} z?jzyHJ(P*IGJp7Z_Y9toWnTGMrr={3&&LicWPFrZSmw#X)dg}Eu9+@pVJKm5-Df^n zIL5AKVZtiP!WQ$@EWCFWvd}mG$|(O{cuM5oiSo<9-`UK|#NY4b0pV}P8*=7lXUdtk zE~tbbachyJX`(NO3u`#PunBwh7O^ z`OkfW{J%R@>i^5M@O#2H-^(TaDb9W%-}}h$E4SGKe(zcq5PsL@%b6dm(4W`6)(n16 zdFao?a>{(;Yij1-U+y1%8!7)LKP~nDuYKXS89u%s=}&KbEK~4N!0)eL`-|UA}-gD*5 zt5WFCH|92jzsVl@bL&#dyxh5J<}F|9AO7ko|4uz4`9EL&1^oSyahdo_{nB6jU7RCl z;dF)mOw4Nre|KlAS(x`VWuYZc&B7^PEA%I{fct~jpHFv^$A^Kw{6W&6_`D%YxfK`v{QQD?zPsN3j6rX`a=kGBfaM!uFPbsB%ZQ4J zw!7->&l>eatyLRGtxwHogW1H8?DP50lcY9mjDfsn_KtEN7QT0Ht=q!C`x(l|{Uqtc zASm|FcK%i6 zSzNfqCeBDmrXRx1ghUhR{^FNtA1E4$?7}QgJF}9b_Uo!sv~n z2}LC1)sS)X0l1EDiTwmI@$BFb$97^=ETyL9x?D>U(e%ACO>b7hw@GEWv7u}b8xt0t zh%^pE8tZu)kBc;h$&AbU@AEX)3p9q))RvH%-419hR?!%)pb=8ID4@|&MrZ^kg-2&0 z0Za8jKm$)e9o>giMwrCLM9^ArE$}}A4GjVfku()dCU@yJprJ%XL!^QRJhZoDKkx}@ zK4dV}IJ`(QBwFWy^xt(tdV7+d8`oYGJ{J1^FKFMHs)daQ zS5CCA>j2YXqyy(AnlW@Pp^PhvK2Q9wB?}uM!-)|4x&dOIwvdO^$)(dgL~bMpLxf-{ zu8A9`XX3)(65+TA(sps*kjb$UU4eSpn_7HxLiT2tPN(BtiT`{|w>1g#cS&V=2`89@ zBEljbig=%aYsw|OzmsnoALG0#sfbn)B37{!svwev^>;@TfkZuA04GwN)7>qmJ23r(GW~WbeY}I;qlS*o1Eu2D zEqi9g)#&alnRXR%c-&^kSTa6^?W1sqF!xP6*c)2H`)Rm^^YOdHS8_&ML-?xB=QOzo z%NY(S$06k~Nf{z%JfyfFrG}&=@>LFK2ggjqrdHffcSj`Nl0U=XPses=Y&cDdfFEL}oUxHKlUYYBR!wYs^5;06#`@$xT)t{Q-gh@^?Z*qx zdTE@F(qO%l^lw2J^GI$sK1_Jb!p8{V@kLq|F&(ZBGkJ6ByS(1Y^13L?yHzT0SGG_d z-0z0N6RXzr&KfjJ^Ij5%C*PH*4N@J^Nz8iDAa$7qdhCpbL5f!yq^}l;1}OyW}}D2+9_GAXFed9PPqsQo%nMp zg0qe@L(JlHCMxAJ}uAvsoH2Y2zBv`F#*d4$- zIk{0D7HX&5LKW`4Bw47Patk$`q-a~HVbdiGRT`nNP|S@A3-$7iyoI8V&)yg$n$BA~ z%B(3hH#RpMw1CA9ju2DpzSFi>PsohZ&o`@$lWtL?V9i`Nd0IALwCQRu_QhbmJo|z` z1{2e@GL?xngDUe2X%-GEL3g-``Xp`01O!{V9Jp z%@+Av^u}MntLgR2#Os@H_>0%hFKDs!&DZ2CO@E;oyuS6Onx)I;Qr&8xuMUinfp+I z8n1#rhL&-E6wvWY$E#%e7*bq66!7C0{&|D&>{~u*R6Z+TmEu40weYS>^GhynZ~8gE z8N4sf_ZRQICTWRemO?-0PHG14vpw|lhS#Y`GAF4;^6BdV;601-v&|flpULxl;oVQZ ze&kI*=Qo4*N9P5E_d^r4nA__tDn^)6Wwqe<$Wi z_Al=*;B}BU{oEX0&*b@w*E!ES0Kks>_8NBZH(9hTBQIns-1p{s)6e-h z-kneN^K64mKj-6kcfP2f@wvr(zw~nsjW2sVUzAS>tA+P&{>i2Hd=c-m_%b4wYO8jf zo`Cl&Sby*_%e3PknSk)#d%PBNpHb*%c6@Vq_t4L^EM;!icr|lBX9LsE8I-?Qy&>7Z+`oX= zd9Pn4UWe!Ui`NrRX|ePM#gL@?xMuL$(PKzrdzG^E&T(p%j(Rl!yw0Kge7ZpD|Fi!F zygu;SW#YAIRzP^2_oNncS19!Jz9*Z(>n0EV9L`YYZhcbC+@@S_`nekC|9SmF35~@Sf`M7w;FxYT|vqTqOOUXb$gh zt3~3NO+^y@gjyue&JFMyFx$L zjcE?=9{M?I7G>_?F>2;sJ1a2#TtxZ%Nugx_X8r}d9`dH2o5Sn!nf~H+;AkzDrYiJv z;pk@YI?Y2r|Bypjnm1a_(p5PD;I)kMv*p`T|Ihv#@H*R@er^u0qq76T>mSKl%)L@E zIO&3JB_!wf=tYq-=dp(r=5HQS1fi;NzN={til5|oYU%qA2wv7Ont(CEtH zkn(mg5X&)^T!<7pLL-HWFj9!83WGR?TKVuQ4$6;dVB%e2@g?z`vb>Za{72O4s zHw($#Fu9wEZ7lN6atPxpX0N{p@x)c#A$km=vj$v^p;=X2=T_(4kik+Y1ZT~uiH)a` zS@{^5RlvlWl@Z0S=+zO$_v_X1S$*&gCwp@mJ822@!SW0~#u(yFqx7H#eve8d5B?Ezf0miI?td(~1YHiEX8GY_ExJEi9wsvblU69hc1` z=?m&MC>GIcV!M!kUCFEa^0SrYPnOE>D3$Nk zUs*!^mEol-f8{^Z)c(p#Unu;Q;!(c+mC$70{!0ERZ~jXCV*&Upi=Or6uQ>kj(_iWQ zalrn{*iruaEAEND{FR@6_tRg=Emis}herkAue>tRm%ozoyPy7wp;YOwEEyGmzjF2& zU;fJ8-~9AfvOZG!D`}7W^jF3{-n_q(`FS(`N`~=&;IFi_{{PNj>6R$>SFV_%@>i}; z^zEuA(k1PC@kB%$+ zmBQl+e}y?N`76Gd!15B_cRsQi^Y&WFF!OYKj< zebO?2B8F4=6J0rlKXDr;`V+e!(ezh5%Kzh-qWr_h6yU6AhlRQ*#BGUKi*C!1FJT4@9hQmDs~wi8k4QzKu*s|l_9tx}4R+vOgRnoTHJehL z%EY&Z{Yf!n(1d_9f_94}htcFP@Kq}D(*=BTN-0})0Y?}SGw4IK6R>4P= zUJd0?X9b7Q1$lWMY^Otlg2AgPMpzxuAzZ<2A>SnxG4b7~SCfy)y9BSMJ4t5ZyDPn# zmWyRx4I6H+>ZSH;+(SEicr`R6ow)@pR*K-S&>eEFXAGa|5AhsOvt-N#Q+bEr+F(QPk*TX2_ODY;@ANEp(Bs^@`q{;_~{Ql_g29EP~{W; z`a_}1{Pu^gKj5c7G-tNbABuT00Dox4QosG7oc(_KLlX4xu|EBw%CXJ+LuZTrjsDQBPyUzvA?%?4-|&aVFYxe(hAi;m54C^D!ymeB zfu}!o@R$#O=wgKA4=p<;`9mKc^UELls?eK1R9NWEA9_Ao@`u*#Q}{!R_9*Md4-nL$~bv3;xgt2h{#h(2E~Dd@FSt)B1y|UsBZ!b7=Z#P5r3pQ!9=d{bsGt{m z-sb7a9Hpcu@0xQM!Sur@pZ66x^~PzdCUU0k6crpw3@ygY!y_bpP(z9rAcr8=O~a)XVZ4*()6zt=AJ|^o$Le5@D|-me%NuHvlW( z@WVZ$#Pbwcy*n|g?iXcy==W`;?}Nzq81Y3MRRdo_-g2+s3;b~3PutgThngQp@7LnT z_k8{~JJkGGrq17gD#<^nCFRGl?Xvuk;<~S;UYXwt`Av87`=90cA;tA)XH|Zrzc)|M z?Com$+iTKq;`5K#uBQLb`&9Wu(@Fk$S5SI7%JV~t%XS4%55YS@I@bboM6CC?52|7_ zu|2YP69XK9mvLpbUNK0HmTbiBdxdD z8$(Sw3&>N~jgEb`r#fx1^|n`c9yNMQ%6c9zjx%&c(6P^Yl;QMEOtQJZX${9%%`prq zm(T5buBnmwGx`hqO(d~D$rr;6lQJZe43N%nB*n<|GD9K5%n`(03?~H{xI3EgioFOz zdAMr|m{!D_y=oF>BRskFb-gYtJwnG+;hiGnttn?NX#eFw55^9#PJ=JI$M&~APya|T zIXVFToAjo+aGDUjH7$?Rch8EsVQO<*uE5JtoO)M96RpN+Fy9GjghcM@6X(EfLUNa1 z)xFC49noju&<_4sESmogA^*NQRsMIS{I5&-y9oI|mGXBFBE!%ozR9-(E#jAMXhs$J z4o*qnrpfCVpzmH~%4w2iw{_qv87WlKmwv!h(NE&^t{Nz?)>Te_UZp=TYu#@{@z{r8 zZBPa_HlwG$IScY`kWos+I5)M$xu;_@2>#^R}&}o>G`byUY*G3@yH*kmS4dx5%VZ^Sb?@=|jnG3%>TE`#gTeWL zlu%bG=ui8)NyN|Q{+tIf9IQ@|^fq7<(Tu=VLQiTBy(y;(iUULkG23_vOF19`bG-w( zXbwT9%5ofkQjsF-=W-w?nmt`3du))kovhB0iaH_LC6} zpcMvmkt|IvM-x9jAx}CQzq}!6CEy(Wf0_Ono3To+e?|~Z6UuBNY&3S==nU#bl$$e- z9xM_^4;FFfy?m=P?k4KDRXHl1GjGH@=15}(7|5I32AV@0mAL~#RzT6FK2>=GZn7V{ z$i#(rt?YCzyGloLSGj^tf10=QRv7%fdK3A7OUpkZ}$~`Meh^J8^YfwgbkJ5Clq$KPM7sch|X$~ zIg~Gu(wV(n)ZO%wp~@kiP7(BPW=q$7#BSBKCd0_wJ~v-uU$4);kOfNi1)%Za3FNaz zx9vzx-w<8beei15$VTE?tmR0K9fz5dL_4Q4 z{hENV4z6?L`+heQVB0T*+I}Ra614-VL0?xS*FQtMR`M2j5@|8%8fM{??L7VrvbRYG zu89xPG4V#y*3RfMg^v=>;7+oi7|Gv$8YXAxiLdDGr|UL)-hLW27){w&{@&9tVOPc^ zp656j7JMgahcG72SQAHT-^P6jR)xQdD`_yWdSnW5aR8P;X}<|Hg*#otoVr@#y)aeW z{5y3XS7ucWB{tZL{ErCoPvqr4NiF|7f!EGpD4%=aPKvG>8}%r7XQC*0FXiv&%fHiG z`Aa*?%HQ3Y0_ufC4?qzd;f{uHD<*=9JG^ot_wcRf+zTg=zX&W1;1rPr=oBkzx0BRS z;q;D$7LWtpI9p`!e?eYS9_Hh};X3=yE{r!wRc%Xq+itZtwwN}_ZFcOran(fBhjJ8M zlNyS+T+#i|%86_cJA||o{)B6P zoGp5hzo0fIX*J0MdqIX67sZg5Oj3oohou%L7Z-=&6>{}<`VniXT+v9l#KssH%Tg}f z1(U=}oralExU)qCU$C>qQt}tx1a7ItX`h>K*Xb6mCND`z6+%f{p`=6uleCoE!eL1( zvY;HpO!%BlTJ3C+BbEp$aH@!Evkh~7?jfA0$I0)f2jb*6sU%0JM0ZFe_ZhyDIkXZe zk+oDfTjYzCKniS)S5>m8fYyQ2K)(zY>c|)BFdPya(t;CMg0-|5Czd^y{I&I!RltF9 z!iS+hi63r0CVV&+KeUP;rU6kI_@R~mknL|^5|*wAC!cd~z=sLs!|XKtaG3aEBKa$n z);LULhg9R^w8jP|UxDBfLMwjL zqFSt{lKhoU;fB-aUyv@esFuR5TF$eQ6+1zbjDeC8N|4{#l~`C2U)YL5e1!kwCfw_b z53N+=fmDM!q#{XxLXkkO@sLRF`J+hgiW17-LgdgAXNyviY)F})0k<;B5;PBeMhSJ4 zDjO0)9=SJP~A+7JG(NW8D$Tjws5Gk)Cktag8AT&dQ1#KxUsF5h{*CPV$;4 zF$4;qi-~2Vd?sY3*zF;$jGK&UtKnRFOk?{KFs{Z<%MBOODwwcr5pM9^YVJWKcr}|) zs`w5h%-t+}x0L@b1mzyWSSq<7{0=T(Am8O#s=?~beOPu-eQitDvYF(Bc*$CrAHR*b zi&rB~xDD-LcA2j4P_CSQq|uF_towNdK(%fkcA2`JsK@HQL!DVyvjTKx-CET6brtgX z^d#jK7e~-!>{+}UOvcW7A>GN4Z=bH>uT^k6^8@WoOO z3wVTw=iA}w%uFol46#_eWI;-}IX}w~z!%RwP0A&OT1ub|Lb+%~V)+&bU5~Z|mC$W{ zAtbg0J6#N^Ct(TuFg61)#hImgJetv1Ndx+e{3h-CtiCjM+Uvu`#H zW8qsWFEWW}w+b&Z$%mW`tMsbV(zjb6E@e*LPsCDjj$3fmwQeUdm0UVLl+-!dgktVl zd?>D4$tDzWqw%4r?lU%_kQ}V5R$L!^D5!fwJ%0z&cVo%0bS%u&%7=UftLO+g z_D9bVaEG`?cUJV_ZN!5$Y&7LG z>Tq9s7(CbA#+B|r=kC$RY>FOtRTYf)NJ8tP%3UeiUvNp95d_H`q3FR`Q0af*~?7 z>ntQi%yjHC|%mdTFJK)8jKjZND343kFC)|`q)p&-`yTO>vrwp zCt(SJR^nB#hJ2_u!HsXzD5xOWN|KWa-Nf;TSb`fA#PK6#3}@SS4kr1mL@-v@8Cq!0O@W9vncZ(PHZ-Q@!LxHqCfvd zOndr84E=&Lk(|&V`+2u)qQlyo+ZER+ab0o<*x#pOQp>g$lN#z;lNM=0)Oza2q$q|HaJ=U9M-2q^VH?U(2E8P?>iAW#d zE7{!b|B?4D@J$q5<8aajh!9PH00qiLjoM1VR*MoT(%K7E3l=F*q#!;*Em#pSp#{p# zwAg)?XjN2RA5^@f5Bi`Y1w<^@fY*W|<))~p8v@FmfFT^w%y?wp&IG9BI)Xr>GC7I@%80KO#ob_JsJVusQ9kzHv1E>>{L8b`6zPTev z!Ua8&kV#0GQ%gzUha16s+QWn0Q?~M>O?)cPrB=Jv>FwK`$NN%j@sGD<_(;|P60{BQ z;nPLX0l>*UVBoQ*WkzlQUK@i}nu=)7tRMpIBhEs4@p~oVuxJ7Z#0Ey|HY@~ElXzlw zr*(24@-_7#@x+JREVqw%@DM^l1MwI(bLAt{r^Fjc74a!g!cW4@tcCL{kxPJ(A7nsT z3hf$*Xl-u8lRSzw4Ie|+5g_vkvDB&Li#qu%TSLjR<%-=%k)GP>g4SG^+%Dt zSt5JW)!ExzWN$jqk;TO^6pL_~rNWkf1$-}HT_`MT1=f@Aw>^KPBN>cYuZqDE5EPkp z=m4K;1Vpn0T+rUB1?MxNEh$jxx_nzY;3W2T5wA%Lxi40NT! zHJPbvJg(U6-|IGddep$hs~7&bdIG11cc@-~VCDXOtLgfIM@NTW1CGxSm# z%fiy;X4&+kl0MvLyND2B7EC1TAW%Z|(yT5`24BBTB0rTb7%isci`>|DlJ#QAkJ3yo zlom{*Gr3rXhZ9Qllym-EG2J& z)Ow**S|pVgOQkoZ(h{k(RN~Px3iCty@e%#_n0_p$AD_^V74)N)er%vb9Flm1l$H=4 z9f8suRUVOuV__$WM*`(hWiXHaIL3H1M*>~}r4tjW?pDx;mNDI3CAO}STF-})jjh_v zr>$4A*1Xty?Dx_V8I;I6}#3?GQ@_sbrK&CaGkRN>-^9Czax* zQuiIA*4wZoJardYt6V)?=jBMNq=4 z;IVZPZEgISwl>n%tE}4tgO_cSB{UTBporhHV?*N_+WG)%egB_0G;WcG#*I+YO%#Vl^8QnM z1+{>Ul)DSq(D;>XXtYwCDO)jt@XBL95F245z^W6($Lxo%WE*BPL2}cFBsYBoOT}-T zAWt?*4bDj=-A>6?q>@o8nWU0srwG!zlQ{Br^rJof=s-W>=toET(TRR^rXM%&Bm!)d z1c>x6BA)*ol=iE7eliU{E8zK0P(fA)3-a(G%BH%M?Vuq$B@KZR?mk$hL*;0eD|IGM z>P-Gl!k_!#qnK+~fZ<}ZLaAMmR2n0d#!96UsZ=VJCP|PTwAW7hF_nIl(T{TaF^zsq zryn!u$Fr181}Wx5;_C^Uj8ID7sm3PqVmzRm#3miJhWWv4+U#Q*TrJ6<5=tgEbdtX@U`ZI5Ck>FxsG3;W0Ga7!YEmdERRNT?umQ4wwqDAVs-4)n zL~1=2N)9$aj-{q zTbE0%9Z*`zT03a#I@WrWfP3ur6JNidytHK>AklxeKmy$CLu9zhK0=&c_6am<4v#@z zEUa(v)8%yo$>3PD3SZ}hqV>26x5#6di_oB+RpMKM&_7W5gS-;MW8oU9a!ybsMl3=z zsS?AlKqZcog0N1kTpWZGeXsDPRJlJ0EP5Q_1E~@_29>LEaAyySf55+lh=SjJ^963^)}wI_KeH~?`uxB>aWt#jEg*RrnRl3xq?j>w_lr z=>C8rmSSs>FEFOF1;)5jp$m+gu4}|OV+%jPP*vwB=I=FDZFLOCHAA!>-!=02ehbdW z71%7eaH!{tY*zdI#;G@8-Z!1p{*_J=?+_=5$wHmK-nS9wYs5u}v9FM|4?t*wpT^N8 zkYUpN`qi@eY75T4QG9WF-eHTgPoenYH1HWz@SS*>%t%?pF7f#mK-jy6tnV3OpqUw) zea)IdHFnQHR?8aWoDI;}i0M5`p@Fz)sk;v6%!){+G?|7ku-R}v4wn>gIj=ANM~(*X zU~c7Fr>C=!WZleR7ybd7g%Bq!CKG35c~t1~hF<42;*1&8Vh{w4IlP-dMD{fbt_w%vC&zx<8R}> zKI_tbZlG_x0GM9Asg^Aafdz`eqAiD!bnnDC*kkqiLq z^?@IqUSYy3a+Lu23Dw*DG{JmT-Ci<$28CK%=V3k09;PinbE{P0=dZ^B!>Nd7=~ zarGbER*K83cO(TC`)~eNI5`%)qt`Lci!P*@(Cykrzi@Dooc}}cHu#Q5Ts?4=ZVx!M zU4r+FpX|Za|BqsC3;r86gxlgego{bZeETD=7(IKqGd$b@*MtDT5(c1dAzk?5+jADz zM%&2IARxM51$U%n82FCJyTk@=-MTZexPbc~)a$e>>}SmLK7itKq!^L;E_E)F+w_T7%#xd!eG2aZ3m-UWn`MnJ?GN$j4uiA3gNz8gXQ~ z%5Bxz>!(ir>>M=oHTw+3%_Z3c3-FWMKo(Bh^Ro=Rk!wiY37wDOj9epm)M=~Q?yl%- zpkq%u(9U($`?y&KZnTVY;0W1Ii7oK}72IK%x{)78CnEB!`~ zl1z`M-@4OpHu{a8BbiPP4dC*V0SK3$no?(8VT$F48LRVR`nc-!uEti*!&I3_;!l>2 zq>RK1$6wInQhL0UWkzP*)9FY8;FO3+Fui*kI z&X#VCes%ipr}V}974&`68R@eq=rf7*u?$I;n@2Ix_x1B~@)|oMd8T0UGDFCl+_llK z!M{5xeQTBU^&<2cgXm+d)4Vl?QfLdJa9C$q6faWv+G!<)-*!=6$D%=RE~WQT-Kt=E zXLY(rc{|U^$$h7jioB1VQj*)fiPn|>Lt=JFx^)rewQ!5_%fW2Hzk69HGkCepG zc!bY2dUV(sdHRf)B$*dTsuNnA4D4L|R~(BbNa(;?F)76f`%cgdM|rZ|74lyFul4V3 zpHcYtwExBaeG1jrQ3i#+KGj~+-bfaOPy@L0>1mfJymH&i?R%3S5r%A*O5{F*Q<+q{kzL+btO71=GcH+Y6 z5%Bq`;7I8Yq9di>lIS;*(*;Pl{672$5FURe4jlA-so1>MsxRgWGSir||I@WGVI=kS z1){IN0l18Zk1$_f%;j1!fy|@JQ}y{sbM%g$(HH99`@o+a{%(iAzVLUSj>|B5cSqyz z@7qf4zopXtEt>YfD6IVt4f6LMi<mfm5RJw2bJV~Xwj5+I;C&cl?wVM zUU{+dwgpl6!j&rW{@JUf&}@n1@6T67>F-xFe}DH?q5giMN#^etMd9yn^9KC=m!@$3 z{z`ACzqgzJzvl06tJ3iIMgL3v{ZwZE7Nz~S)U^NlCiwfEE!FJ*j}ZI6Qp^6IVD_)1 z@2ZxX_Fo^pzwgsh&HjH6v44}M{ZC-_-&$$^SE$*4eUttD3s_;b{{HP2D)K)1tCGTQEhG8+E9XS%@0T-wf4eo*-!Ew{^Y`^p`1=9B z2K@b==HdK(mtRBu{ashcdWHLjaMef1oK03lgDzWwf4m+SJhnKl!i7^@@1xD6WmECI zzzhRlVawtjwmj}^;`+Jk0oQE%59TN5#Q-H=@>jT%n!AS>6VKbXnJeGJeRo5Q_Jigp zdg{sc-gNyJz?3*{eGe!np0(%MavvX8wcT-@{j}q1q+jpRA90<KpaP?DbO$3EtT{b^1N;HTu1M;VH782dhooF2aE<8*YP4$3`DrjccG5 zZ(G0od~odDl)JejiH)&PB3S-MG+~79Ae(oDM-js=x_vm8p0uf})_Xnh%W6Eg-+M0( zI6!|7gwm+zJdSK!-=0Y+j^mCcp4D$=ov$W*F;{YU$|N$uL1kq`Bo1Ya^>t=_%7fnrfe{;Xb-6T=gCet!>QF1 zg!_&1^-Ori0DUrUkbQ??J#fA?T|YL;*N^4j>G^6_5GBcLaGf=mrSW>uitfM)#}Mu) zVSvGAUV9YTAe>l&s))_GA)t;HP)947yJY(0rn{QNvqyv?n%c;*M~uEVxuexaRS1Nh z;lsFZz#zK=6O(bfZsOmrzs+2cExznJzP0ObJy-9@uiE3pJ*x3s4m=+N&v(a-dnO(7 z(@nP{O8ED7rTCkp&U3?z=vlzvjIUKgP0YQ8YP^` z7tc=wKWic`4eGtO0Xp-Fm}-3hWRsph{l=v|UwetqmxVr0_EWpF1x#|}vcJc3U!+sH zxa_5#?D}ONVr<&bqALV)<4CfXaPG7pv!Ci+bw+!PBMmQN8MVxwX_(R$Z`ptrx1K-k zcaJ+kGWl3w$|G2Meo}RNlD*{H4q{u0qph#bwJDB~r_=xbp480C1%3kVw zTNZ!e2$aMR!SOE-`b`cGC%G3hK+I!)@>|3i>rU<9e#Dsgja{Ipg7A+R?I)*9 zAYs=RjvMS}9M?jekgi|HhH~8NEV2u!>GwJgUsZlbcWmbJ!w_d)i+WfQ*aX~~wBa5H zl}ZkZw%C5_bOH?H7n7LUhoFzeA%PIV_!gU2z}q~Ia=ulck?5n)FP<-MUeUVR!pC~2 z`N@dB<|NouwJtECb6bKF`aquMweSX$ZQAP1Z^TsQcz!T)s=K}Zabv8WT}!}1HQX44 z5PuMlr>}v)HdZgsCxbw@wL2?Dys`lAzu>m;ZMfDnWT5e|i6B_#=ml*@813IV`tW_+ zB}RU-(f*g?QO?d;_Y7Q~Zp${ zkuNktH~C2x)GO#YhEC974wwcVEHUw@ZqRAy@CYMzb{fLwG0vQf@V!eRJWSb>vfcZJ z;)ruzugDjb^#N<>dbSn!ulMLEZbHB}z2j|x*yiAPA>7h8kleHyS$meA%WdeyUP zfD4}aT=|SqrwRYLi-7-tDtr=;W*SI3AcUmc`ou5n$IJtMu&*oYjJI;&!@GoQ+tOjA zK@1;>XUwya8Hgn(NmhRn+QJuxpmp>#xq~g7eGqu&mkKZ(u~$9$;%jP5daMeSMi353j&4=eBwq+vud{ z=PRBU?;imjDmiZl&`s94vLR!j`~~Ht@G{yA#*j&zcA9v^SJ>(jQ?b zstL11NERABz}RcTHxT3*k|Xl$g;4CSuk?*ZfG zCmOjy2L2xS-{=^`wdEc$a`m1}(Ma(5hv9kG#v<;B=&j;y+);7fK{(TzI&y<=E4;rA zF>qIL!wm4gkFiRu?~`EuEA;32e>M6^7c+5$fR|Hwa&paItfN-RJea&~fo4J6!Kd#3 zOU52Hf5Wq*CI+=8BQF|3+(-g43Vlc<`d|v6lu-TkCqt#89$jSWQKpwnDl+{q{VAtk z(g*Dayr*Rk$ovg?jyRp5lO%}UgERRE)76?&{xWA0@IUx$LcnRsP_rxbjKUP<^CtQ{ zVy7c+4?R0qCIMW-wPY5f$Yzwk?R{`qCSel}%M$hZF8GRImda7TBnQv9%w_P(UT zhtOL@0@rwCVUK2Z>u`rQvTV9g6s&=q`}g^;5c(wItUt8u1#&#Ci^@ zMx7%8v%e(-+-vtFu9v_Sv9~7x`vm5XjXDR!Zj~MS#E0&;K$XO3#E5TW-QjJl)$t8d zd@DvBIKq1Wcpl%!^wlx4_qnD#|7z&-qP`{ZGcEimD<1YU*^u}*H|hX%o?G9eb>arD z0hI4MdxLqv2K%wH&b;#gH`4ly-eE*LN)50zvcJUULJgJ2-^5=li_35 zGy*j&893F4FSVue(+&L11luM~;Pxf%fcL!to9w&GuEw`6ae5io9?}HSOOUbLB#Bsw zbHiDk_?M|0GpLz8)Xr(?f4zAX>fM@8CfSUTmK&VUAup$8!vbNPX4CdKdv#jf9ADAv0vcR zAsS9x4d4i(7BdMtK#dn}nqa4?K$Ae5##8*L(rSbIC(PX~N!1w1)f}(CR=WGHo-ljjxPcv{A5`XOLK#szH z_P@*ek)=-ZLPU@W`}PNsVby854OTdbC0XV&mzCgYolWLcV2CV|8XoNp2$GY zmuz4Ecym0!m|M@=-II;>3+Bpy}hy^gy@>^!~Z8=;kw`Cpt*!R!DJyzE1K>dx2mvAAfOR<+&vsC_ftF1&O!J6yFd zmuU<@lHxyH-^eifo)P!+p#3;VNBffIR@^_(>Z1zTX zYHPBUL; zt(4x+$@;{Lf%$0wZ(h*`=j6$n1l1ork~rUf#$g8zjW>ev*f%+x{9vQ~80bu|s#A`R zctK(Z$7JcMPUxkV3!*MfR2n=%6q`8cNuqZn*0#V7`$2~V@3F^Iy{n4Y*5LwZ6pQQR zFHw3)_JZ$8nZ8h37uE#$oyU$=(D%c+y0UzG{nP~gc6bchV)3ee~cnS=f+5SIBvV;LNL3%+F*Kg8j22DPwSrNA> z@qCX`TY>&a4?Nnq)D{O!?3;)uXPYZK>uK&Jz#*I=c62LMkSag7&e7B52SYMfu16V~ zY{bVSQdG%#)l?;A_tj_F3ajcINg$I1kcr!1H&-sCaxG-ZA!L^}s!uL^8h1;BmZie8 z1^Ns6Z}g3^#Bd+S3W6(De8?!Y6;ZPDHex{)EEH;-@Xh_?s8@2NGuMh(c$&Ca6tHJK z*$d6?`vkg(482oHJ`C13mz`%#*3Y~@O0)hv&g0-4GH5pXr)w4OkLI=8*()SY7#qC> zPd56iTg%=bhr0(GsfglvJ-*08jA*ZS&(b>vphEAQdIK1YiA^}s#jIVD34xR8e1V>k zY~j4srex6X8HUYS$wW1nf>Ra!BnTgnZRJ{vi$6DV9dSiugpn^aa3c(yg)N?JPB-cp z5a~RVauYwv!WUZk5+gUw#7(wvFt-@Rk7h9ta)*QzT08bYei%7qXl~ zmv-oK4qe&_UDTmZ4jbYIWyL8vPEYQ^z)3Rjoh@-n?wzVezrKM)Ae)hSWcu>d%a~+D~^dy5Ph5+U7 zM}MT>0K=t0;D2He=>)N&Jv1ec=-%TLc8^M>E2YB@LgbS%+N5rY*tUzq=l58qD$rt=aak2O|?v>-S1mXKchHuTm zV0;ne@#x-Ad0-}?o=n!Vq%ATP|M6~dj0>7#Rmx9!zdMCTaqD>n%*Xa9ut#YBc@x_| zrqs6o%k1}$xhnQMefK5UZ@=A_+kU^?(=_}2wBfSYuVYtq_FMYL<*{GGuITLd-0w}Y z-}f7$wcq1ETz>og&(5aVqrZvm|FbKky)xf9>Av86XJx(VzR-MV&Gpx%Z2h&iA!Pk^ zM^n~c|7Zxe{yOahjW{l5{k7e!Fzc_D?V;ntW1&IdCq;j+o2iwr@Z2$`&%yZ$@p~iZ8x$UsOd%xS zAewxDxML)@iQrqhN0A?)9gp4>RXoZc*NjJ5qLvtuek}Hnyy0AXZ&dpO&JEJsA5hBn z2OMPk1N!6s0FSsoAdTz~_zU+3Y+?HY&YGX-&-Mqnt%Er{Rf}#AI7l`KIN%*5*?!WI z#FHzh^lnp$+c3#o>4j(X+gZjMc?WrNMx$TM*FWXBmSn-_upEE=DOt9?6}#}@415nw z*$$j3=B(wx`vu&F46RCFr zXCN=Q7tg`--rn>{amPSu@Q#7*Y{vlJe1IrD3CY8JI$3VbkddqE4%MQ zxE&FEFK!ud*sSJST`||(yY7N~|G{cJ@Y$PkL41Gffz)imy(!zyyUyz!_f{P?S3ODl zU`_l}zYfebj&$sG9lfDzGCT`HV&Vi@33bx|^ZgW!xwdsNXYpPqyKg9$+~JPI#Q5HY zPoxbAOOWk1p!It1qqw1f7M~UO8^n=!R~0d)PouB0Uc9VFd_Sf5zoHuq<|lkQK{&Hh zX0rSx?k@<;=YpL>B#`Pl--7$QtPiiRI_&5I9OTw<2OalF@3X~RN7uR-*FnAWBxvwN z)Zh~FRnv(2n`KLuFAgt~^6PQ!W1`Wwq?qd?2Aee`zu{Xl1IDJm5|4Acx1DvJZGrn@ z%B}_#=Jk&ItF}9DP1(u~2Xv@`X-17q&VO^^OJue%GTUB?z@ccwAdaMwk-P>=E}AB>mZ~3 z%#?C)qUrFLg+qtqc6*U6i%dYKyDIS1-aK0t3{-AYuG>&(u6&VB6vnYZ0|r(cQRhC6 znBHMaI9rf&BH_E1;H4UgBw0Xo6d}$;Jz{{PkLvzkcM5B7eOV z-x_>7bR#&0{SdAhw%tXbVq@rNzBK-j?^*d5{{Nc4KFv_&ci8z!2Jmzfqs(7NUt{#% zfngBKUw;Bg7w1X%No1a6ur*~5PL=?);K`C=F3zjJ+!^fei5cv#1!b^@=C7x0XT5+p zWP?Wjdc(FxGQVXF$uU>WFW+{SEV!_zIOS9F7qqbW?!72{9V6h2F2DV|aQW@Y31o47 zIU35r9lD_R#jyG9?@y%fi~U317mtVJx35OyKJ>LpetZA$?|)0$>ZIqFejWLJv%GCo z`RxVrd}drbZ!{0^V2%e_OEL^YP(9nKB)GE`4)|M|D%%cj?ZZ2t78TLb2Xz?bJi8|65-h-c%k{_4Bl0$IrPEs z)bioCHEN|;ulZA^1HnnhQ)LXkPK+TKzry6RQ%c8bWVAP}zg<;x>Vy4HXnuUj_(=Kj zhvjM&oF6am^-cAck{^Fq#sMw9e*Ntw<;NeA3D2mBq~zPs{GKF!rU{eDMp^hW1DAb( z&$e>M5_j9zn{(FNkMkYMZgj`rkEn+pDC^5*Tlwq*+$b?ap39cfeku;Jv@%B8gEG8F zz5#y)&#|Nr8A&AfV;fWl<;T}X$d9*Z=EuviPX9(VKfZ{tG$9c+YrUwc_RUjNv*h3Q z1zUwimc03!5dC2B?%f8yjoW%RNtqAPpUaj%e{U-c_%-t9e>rwB`SaH(@)z`VV)i>) zkoT=(_QEKpz&G*vQOf5v@*B7Pjk%39%Q0~S#BUAU@okNfvm6gAvgqYz@F0c;ml@y8 zF!+vsiTI+)PuCwB5O_pj$4+WmWN zYf%531ldfBJN{P01!%Xiv|#AmhG-G4`CS`fG9V=L1B!fL=+00RxKYdruJ|)}|MO+$ zN0;BVvzDLP!t6^$zsEh;RQ>+=wUYmDy9!?OTweWN7beHPw@1|P%izBX zL$)tyVEue^sQC}Mca8cY`paRdqYS^G>|>AF-WJP&A;yhVt1zv$Cx<4(&J_QM3#yStq9%+ z5S)N7r{mWRI-NXFme+YUgzWc_<=@vv#qi^THp3s5!EbW@eGBdU`^RpIkbnP*R{njt zn17#iQ-u8c+7`uJhS3*TAF~v59ej1-_s_`ucOd^B;!T=;PhK%jjcoLL@52myDIVR< z67k6!#SbG%GX7(M3y^}&8${K};?^ggP2BBBsoLY{$)~uJy5X{V(nNRKEJrFpE0v&; z4CsoH%A|a{&?Me=WP~0J)j=1yW4`@0my(Y^f#&1i!Ontnn{plhz*h^Pi7xSz$%_;B zvt)zEajABaEGeJmJ8P!q|3ga6U-vm#lzEn{e`7v=ZJT1QweP(Ezr=j}y94?7=E}JU zp5^5CO*ve3%5e?N%Aes*x|Jp61N)3ZKB1A)BT|~6ouGf0P9;JAK$0>+-%Zx*X?{St zY<;B7XEAgh&i7o6N`8L-vb*i|QeElkg5Ecnj&tlF;A6s;v$?kWy4t=SXo?*oyRS z!xVGnt2%NT6Ed*~fV)j?NSZ!-ffJT609Agzl><)`E6^W_b=Znret0~?ojS!aS??F~ z^XZ*l@xtTyP%C_lo=^ET$jn6V_)6}f*AarSH*JHm^JVsrc^2MWznFgk#IrRnC;mp0 zLVQa^e?Zm`y$#Zu#t`;`Y6MfZpabhwRmbge8b@wm=RtEVUF&1;Cc(o}(RmO|lff(I zIt5)g7bZU{C#w9YR${(>%JyO|X%a~SDwq@_OV=mHwjvlGA3on#c2sq~G3Y+H%aZS_ z1doa@&PPX+@0+p}7qP@AgZ|Nc*#u6%@&Zl%O$I;P7Drh0rmqZTn>!4d@KYcM_;)df zKS7bsrI{*+L3~moi z$s^d9?U8B~$murfg7a~Um>+W35^(*guYG;ljfwT{_~A4m7sGkr0`dZR@QYdoKO6k7 zNem4B6F!v(Ko^g1N)SFv5Wapgd}mk7@kNqH{Js!*(EQ(8MK0}-JrVMMMfnA(*KJ?HI;(w<#AFTXwaSMDZ=(EimXwl_!4=P$Y@d_I5LHBHFp|B9_Q z|FI-wy?IB|)|=bC8`XMqFDbSEBG;P_4-B*3oF6g2|AULm?>`+ezrQwoe*cPH+WGys zy5TnD2hK~B_xF6BR=!4NNPa)bPe@xDIp4w9Wr`|96O=lADE6~Eqd zTq}MJr1z5ucDbnEu0#3ozJfOvSmerGvyR?aFvz(I*8|hYg#&nF0dU~dTc`0&V=TFd zp}=MlZ(=y`D7jslTwN_}o9o9$m|QUC^T)ffOW^U2ix@-crxT99?Px=)oLJRdN3Mf! zCthn{cpD8OpT3ggaOq)JA-L+uo@5xG1!&vw39J*aW&bl2S&ItNe&G@&rER=uq-iSiq9-Ms%`nKSW$ojT;wzj@mXJ3@Q z4V=xG=9nF-Z;Rgwr*8`xzs{70@@v@ZP13g;W?h25-T!(N`ZjKsw!ZC}c~Sb-W)@?e zeO9QxjeC>n8+D}xZb$IQ9ajeIqNpF!@dNkWDdEE=u19P80qAG!_5< zYB+sc#Q1e)mWuyh)Fgeoq5Kl`?fym4`2X@S{=e*^^sP;~=>N-A{QoQA{eS#c=Kuf2 z{HMqd$^Vy8|6j)Zzm@s_e?{m2;~4y}U($eIK;h3UWBy+WH-i6P`UUgKM9IeTw7tapt;r6`h*(C%+cb}#VZtOo0BO} zqcha@Y>TJ@4ds5r90MI$?EhAAnLu>>D+=Zx_XOkLhYQvD$K7;s{M)uLdj9QjX!Gwb zM|Avq#=-cv(hZ8!FlqpQV3a5nXSLMQ}?K2Yp#su>(aUSDe z>*t$dpON{O@_h9C>pfYUfA3C;j(?Z<6& z9U3Fwh>II@J=ygM>&RZ*SF5GHxNDw09k>B@nHa|wOqAbXD&AbWl0;!cmkB$2fuamu z#ygFHw{y@yPmF^qU2Ck7j|m-d7cO91`z-G3Z4_0`alJHYhzV_&sE~bv!~0I@M&ElU z;ti+Iv&fR%+MY z)Gn%u+N(9HXpK@c5}Q(^W?LiFs=aCxo1!+=S`jOD>?B0;%jf%hz4FI>Ue9yxJ?Eb1 zm3!}b&UwE}HP64;(e0a2q}ZExaK|LeQIcDSOzaSgsV4RIsAqzDd>L>e1$Vv_)@vJ! z)s{XDkVuY8H9@)p>?=n{N;LsLrPZH>>kW?(Q0BxnPG9`Ui**Pavr#132O#2K!QjG% zED+3nH`ug(mRNwAzV*EV(5f)5nWjyixYAv!LFLl3EbXX(JP$;k9pnKnoH>~ z5FcG1oDZuSePy+(bak9;n%Q%b-iB)I7~vuB=O65X+edWwp%vxd7kbc)TVjB1Jtaz{ zNkSnWDATO5eq1IqRz>ik&Al6{SG*2Ar@IZLQ9Z2PrdzP-Yo3}Nrb~`VjK^N(8 zxYwD+9%VlcymIFzsA|tABp4FZW-#ltca(h+Ui1{S?b7n2r)kA_*6BQ0>D-C(3{0Dx zTG)e(MNJKvnD4NrSV@D{=4SSM*tel_CZvZTpyF+E?}!f});uZIC>r%}A5n8&ya27^ z%5L%vNW&dEGH8M(6hv(l_l3v$10NW&yjEw9#r-tJsy%0{$AKJUu-#t*K3@mHz{ayZ zVS78y zA>Ed3-v$)+yH zwa!ZZH|k`+9qz}qcXFFH)?*CDR<=m9|0Pf7`6T?E zBU=qbBJ^=`>G|-ejfg6prW2Uzqjz1dzD)<>j+=2+i1G9yaVEH#lJE*Q=r+9=H0)Rc z0iNh&Tr}g}$n6NGWXa@kb80&IPBx&IP_|` zBnO#)+yajxO$@)EO&L`Hj)4a0CK!9UaLJF)BtRZ$_zKze8qoXaHRR_LV*&GMjK7O1 zQMe@K=~TDF3xW8gOu2jq<7uQ^CK!P++JIX%4eW(w0>VwlHQ;*F$mXWp5(F~kg^Tw{ zJRX^L@fW@`Vb_+TR}yaC6HnYGmfDTar+mz?1rAL2aQ`jXSCWt?;o=3%HIM?1qT$&I zO{@|UOLo0aemZ60|Ip}WwXQnE^%>*E2c>QJiPhaJjdSVU18!TaQaZ#@uF2r~+Ovq= ze}ok6?(~W%JfCg@%=p@T=UDQ^AA32waSfNL81GFR3`lDSjDP3ecKv5~#ta(%twu+k z)QS2x?)URKr0&e2^@Sb?R zStK29r94U+`Rlox@nT{b8typ;&2gmt1lrCitZPb=G;>nO(XXo0CH541$8}-YSi%zp z2_y@7fPSa!wl_{Z_D!-}LDPxV3|IiL zURZeMb?r7dM|T>@oj0=|w)fH^oLiE0bgb|5g_^78xhos<=uLE%T-eyRLd1tmFsMuX z)E~m12hks0-I2)7{$2XDVghvc4HT&n%jNd28!g5br5z+Q~4U;u6t)fIS`8$AU1 zI5FJAarF>|-&&4q=+7=5aHm>2EmE1e?A7z&-gYTOLDcVWfSd9&OW~x#UZIM)g>|CB z8cqO(m$(ecXh=5x)qHY&J+URYcR)zE@Fh&}mj*8EB~kc0wzKzqs?WZ51{XH&6B zWUlatD`>cF-EaKcj;x6Q2|~fFJ+uZDE_A-61m0In?(M5@r`BRr2@>5E(rSXV9pWi$ z=3=fd( zS?VV-+{x`n_8SE=1TR{@__&Du^bdDH5ES-tX4{1A9wyTEq^BphR|AjR>=Wup-YTey zG0cVrqfDt$G!!^DlAcx;OhlJdw2ko^VwE|$3;gomi6n$u1hJyOur0pxlrh99%qpP^ zu39O95D$tSyBTybyj|FzI$n8mZQgf%enMJwD=eA(T|@i5_H|SBi*AkNb`kVcYV3kj z#upqiK@Z!`pEIVBvyI~{yk2gSRlb!=M1yQkYM6jM_Srb(levpl+uu0+wg^Blf#c{s z!~IH0RgeEq97+C-9x3Gme{wIT&Q7+60xbNQ6O!tJv({Fd{FW~k!$Wq zNPwPGQmWRT*TaudAa3{AX?M1|$sR4{YY}d8FR=0qF6Ye_7zEb61+g?w9fB*uJB+?J zP5FamZa~(Akm!DpQW6^UV1?|;=GQQ5D+@q07Mj`zJ@sWg^1pXpSCDFPfqRADrZJY_ zg5vgZ1OMq{u8SLqU##oY#r4?h;*u6FMezi@MHk|te@<{gmAfFK>oc}+adp!foS*3l zV)N7UTS-f}QxQdY)&smH&KKRqT25g6t-5y)!!w3G20?5hr_g~{M{~Wyt;iA2EpYkk zX_RF25a`Alqad$*GcScAY+eU}pB-uB4}lEZ=ntC`lELxZvtzjO6Q|cFVeyf;b_H%&hKtmeX!w)Jv@?>-@CNQLv< z)?39dk_cb^@+I|<^%Bro_W=^++?8siE&$rIjN zB!5C0kqp4sh@QkPHcD-)sK(dazV1F-!<X)?t4s|#e%<}~Q4x1$-WDO;!>=OP! zQd{|6`?%u0IItPqrWz7K$(x@Vht9xD6eBIMU8-iVBq{(t;d`F1&R<%G^dt`F{^ao;(4#ISgeaF1!E{Q+boIycolY6i#*cEA~c4pY_^FS|+ z{YQrEk1uoKT?Y3uJT7c+BQL3$!@ac6vSXp@=DW+We8yo9t(q6{apG0u;unXnIvgsz zjkpqAX&r>aExed7l4(qwesmYmz7H~Ct(b1@OifpJ(YgL+eqD>R*Mu&8_PnYrxWs#k zg70MNv&fYvE$<0zh91-KakkaKz-jTbaVElD6MMY&Sp*ZdC;uSCPEU8k>3*q?eSQ?g z2B}~QafsTznYtCZ$nUl=aMIGb4#)OQ;4E9c0R~^{2)`vz3nd3vEMA&RHRP%oH*`AYeDGK*vQTS}H$}AcmAvDAY z@vSdbvYvu@ZrxGb*_#@g*WA4(5O9}nB=o{M7-M_M2drjw?2f&}*|7nuPc2vR8L3db zT+4qw>SC-V16=--8)5fpA^@J!2B~pnp?i4u&y2Fi5y5rS_%{1lF89jRe(sAu8u685h+E0xOejA8)2cOQ zOcJSX3LGsuyJ^gM*n{pnyD7DL3^YfWXMw*vjfciwdHFRDaQzu@e7e@P zc~0FLcd;SJEIuZ`Zly755}DtVGlBfrHiU-YO8}rqAj4&^Q0p{$42YhYu<~|2arzVG zQ+z@yID;O99=}@xY=6mO0&0k(IKt>q@nO$V7PcpZXA+BP$bTHgpONNX6rUp4&A! zP8Qj80$SgywZ@HtcrrlkX4sD}@IO$PPuaDK|I2{u7GjZqY=# z02}T*J(k@G+y}8(DqIGK8>(SA%z;1yz4q)QR8~z3P-iMRgq&-@Db!=fPygFyaojys z1A?$5ZUD~zB$=G}vHz3YI+fe#l!yQWe1f9+93>u13C%rpiNK)E&H(SHZ=*_si|Bh+ zEXkL4YU`6<{Q>Ky-x>XEahexxzfsUha+kigKbv$LQ?Wd1YD?U|)A@#Iqq3>}&)*$_ zOqMsJJLT%p8}`?f_s-t>Z-W)dZ4B@wM|(GW0XGxVjh*N{)f0w;tC72ZU0FJM5#;^f zFO|EBAKrody*NnnQdL&o(=Vgsoo`rFp`8grH(1zBm~hU2=5MXu>VRR=GnLgps5v#P z^_F_Ci^$(2C=E}VbC)Do648ihQIx!v_#XYJ@-j4^X%YSV5F_zZ(}m#8eMie7=4{_~ z7aPfyIO;=dqm8+Aoo8>w+>ptz(Qg2n)3>$a*Om7vb6h^qpec6-;0TaSM(%*} zu1EsA)E)KuhpS>Lk9vPKh3f13i%M&>6nIkYEy=9op*lJzQNpypp6|R7>>_37Qyk*B z^R=7(Eel{PMY-#gH)SHk|Epgfaf2UvYfVW4|4$!1%-A)RKNX>_B8FFjEee+q;s7Ck z;@ph1! zaMYD++$V1Qm`L5mgZ~C;YHz5`;1^l&IvnUoT_;F#c{;r_`sih4olx{|-t-x%0VYCK zSPDg8F9K4|6yIH5OBf%_^qiddIiF}JMZ^VG@0bHA%i+kcIF_LB%JtrJV(G%S8`4h! zWwGM~rS5 zQ0+C5sqeHzMUu9?Cv*?+E^fUZy(aATGiiYx1#D$s0RnYR)g1)~Y0Gk0zCM;g^$B_t zt#J-+=c4*pyonsm2Dj}{eU{!aS(2YN&uTF1irzZ+ogDkOM^5<-SJ1)6c?-Z5`%6{2 zS5S}I_XBWv+oQ}zAwQuP!#CeX`g6;GYS1LGo9{dM_oXj&m|wD&Qj-I8qmxBfvwAHK z8{6e~Lw@uZ0~|mc?HuiUByhodhUqIAMys)keycGVJ`r+X0goe;7}2PD zF|G0rFf&Oc;S--My7YP7wk{}NPMP?G$nw!Y#p6hZNt+G3(c6d~-`qBz@Pp_JQvUU# zzH^wrI^Q`=ihA8Mj?0(!!8z=aE5Kjq^}u3C0C8%#a$mmD&OTwrx&L)u&O~_YDAl(c zE?blGp7tWqSXRcz4_?<&6%dnJNvUwy53Pd7edtUlae&G%8a$We!KI}IvjNV>UkNp8 z3)bJ#&TJYdxV!ZKq7F8F$mt{i@~ic{IqY6Xb@0|qbmr^-LqV$9Hn?8-({dfmOhwj5 zdWbfe)jxMuq%NSMynU7fm)`SPWnknIW zY-@V_KB;zG@KmctH%N=jrMkaLV=`_Nzo#H|NJOwPDpph=MPony#HXoh=u#^g3HJJX z6BfTJg3#F8M?aUF+eT=d79lj)@E7e4FV;ZP190tT_lt$f>72A$ERaRV>FvXCm)QmA zRQ6!}Eb=xVwwJ^T*SPxe8+3s`snLF*$;a*1O==WVgjdk-Ha)t2Ry8fOLQjm751=Tj z3j=+?W(Clc`e^F?MJ_ALgQWLqu7D3WSfI4D0epyftH3fJDs8X5o1^g{9VD<*FAuj@ zey1nBAJoGbj{9xdUqeo-5jio{RZR@lgVEvvWe*nT0VeVqrky6bxSNWD#aW(P#Jx(~ z?fj*efj;vsf}0nbF{6ONH%-hJ>v*oY5-AsOvdL%-=4&(l>71!ul^QMZv;qb8-7Z}v z&SM`V`q6v_r^2@tCVlOQF>u4_Lm#4o@W(d)YtKX6Zeb&?*va}vwQnb0y)%CgX%-7~ z|G;y7`-apL3#K%{DaezfHGMyghv&(L4{Z6*$m!9H)77`Ch#Nn6H#Fda#`kv zmQX_x+7vc|r#gi%aBiau7K5mA5$GFz+|*7OtASN8WTYyT2$(BFVM8$t!~ z^{WGOtisT9N4aZ9PsViIybwe9LMCJbiWln66@jh;rf5T}ej%TFJ&07em>HAYKhw-S zXo$C*JKY_IYA?E2m5rSxrQvgIbO-E6vz@~$U}s68Ei|0p^j7|C0ZanMa-^U#6~(I1 z^FJv|=z`)k9Owb`Ja_61_MCeR1Gkesf~8eR=u1za~1PR~|5cuf;3soKA$cpMr@V!32 zekQzkb6!?9rhs>tS7RbzBsY@?65N!n5h(d_mYdrJ8{8~8&n>hfa6S_M{bZ!T@(xJ# z3}1(g+O{mh274tMLhz7&sLRKA$`~N!L2RyV1Ew{|^&rH0^WCDMEv*1Fx7n;(|LS9e zQSaI3w(%UgmJJ(WN1Tg4z-)zC7!hNo{(q}Kl7^MRxV^`?Ji!s7Mv<=#F)9BY z4@z%npWy0V-hzzcpqkg9*cdRNu0yMV%g(sKXJ8VSt>J`kFt$nF;d~qyJ5`^q5(bdc zWPQ>}13OyI7L~5HU}JIjU({oKF8UK^{Z^osl=)u=e_7Ic#DhZ9mZ&9r(5Qxcaws6pK9*a69EX zD9Wjy1!5A5U?3lNMSi5r01`G$iERfKF@vc1!worq)+xI=J|9tYgec7w5zZ@{>Paq5{4~(TOacyYf*-{MB4C-(4DFZeQ(rR*O;Yxsk^&UfzHXz!K9rdgRYol8 z-a(9&^>e6yx*>5M1UyfZ8ap^PYMnkf=3q3r*<+s&)5$S6WW8~1x+9rKE9k-nfX6?* zYj{%rDuayqN&h4L4>X315G7b{lk$j-+Th10&OQRIZl?5OmnsF^_B0}EoQsm0BkfdG zb5HA>M^N+4x`^|r$D4J-7#K&iq*eKqOw4_ES<8?-dIj$~p-zY|Wl8{b$cUve55`Df zgspwwP$^V#`WuU);@3is<4B=jo>Dfm^fZ{eYFr8NB;=i+O2|WcA9BgP2$?h?hy<4A zSS=`#wEJ(aYMc1}Gir}CQp`wR7F10rjF;Hf=M7MgTPC@`Gnag5FK{o4%=T{J$CI+p zFd4GVhF_B!hL7Lpz{Jlt>bVtv{`w?(Ewy8L@@1OCBj)%*HZBi0&;RfhBRbzSCF!@t za(mx4jf~w;(S6BUrL0#o115j<<4v}1xXBry@zR9P2&pGpx#g?^qssu3)>g$c7}@OA z&3E>~f48dJM0$$<(JvBY6vR@kNWdy@U8&Q!&1PAvXJ=Sky$9*T)|@?JNoVZ)PO zx99y*Gkw1bs*jK%C;&9~KHho3ob~g)WZ`4Ee3^j?87p83KU&hD@VxNnvHo+>HW_@j z^R8JbD|4$GrC&uOL}~J)pTT2H3w^Eu(DK+*&c#2aoPvp6hU8!7Ia zPId2m?ov7ZHY#~7jQO788?g&N#zA3DRU4HA)>xB{*Cc8yI~N@?29_yE;{XB~kxI>S zO09BvR~n5NwAU@uNL@2rt>ue#L;ZG%v)Wb4!HH|FGB4cf1x~qlYew>0BxTN^hW8`^ zYr!1})#x@|6B4#@RsW&WaT%-oO|HDiW0|uAd4zISLd&6*n@;Cm++5=+^daEx@c^UI zlcE9rm$F4Au4ZQT48pa&CmvKWJ?xl!+UOZy!@g8U`LR?xP&)vF`ffUzDw|88!G+Zw zO*N^d-5Igda1sPQxhZ-Cxjt|Y#BTGUfe$~`1!C_1rHzFu+}{5pNtV)jrNijceOs&7 zwc!7pXD!q>lgXz$jXR^ zzE$!AroYvW>A)L^N`lt8vv z>Iuu(tTK>=*j_6n*R3JS66z8q?4Kvsi3Ay(F393yr%|4oTPVZS!s6t*MgsDry4qeo z6An_{tTY%6mX0u8XKVV~SAYj3P#py#TlT-LfbSU7%ZPFRab9>S#sje*U zV;zu)X=llX&dGRTCUe=@JB~1*AjZZyBFq0+i>Egfi6LfrsTTKu;iXy~RXqe+#PagP z0$Kg*sn>lAy{ub(7WyZ3uz{-9Y3`M1uG44j`U15lX^{fZv*`NkrNaIDW)mTa?f2uY zQawLk3Kr-u*-R9;o=)#3eTsiQa|%KdZ=<-UhHkR1c*-smbB&W1-UaIS}dJ{4ez9(tScOfSZ(&##nDo(5wqV!$eO< zbbIS8BsWGvVdad~xcB%ws{va5CJ+!G(EZx4QBPZ=5Gywqm|h|&(CTrqiPA;VWX@jL zJst2B@P|zGVE3!)6202QCBWDV?gN_P4(h4>1BS&rGop>P(!R@;F8MvaT70LQis-e~ zW}LT`O9wymcpgI8K{;*u2f`Y@1R8XhUNKx0Y8OA~A|cpY@~K_&bbOU?=aIUTINaq% zs9rsLzP0zddWYnV?=&*%iN-33j#j|^RYcyH)!%D^J&zPAx|s)r-4$PClJD_2%CrdZ z$0t`?QyeViT@enxCivV;;UQfmrvuDw5A}vK>*tLZ@sIWnK4zV>Vf7i1-Y^en{MsC+ zqNNh=AS2oR(i+M7-HXV#2aSzRttSyDdoaxxxa!nUJ#+`$spr7eN;Jx^$D6uTt*Pg2 zC&hYzVIyv=kxGBk(g{@Bu=N=VP9NnbdGcqGaKwvRiR{Tq_+7qNmklLc+ori$E`y$R z0(8b9swHXqPsy6hBmNOcaqxPQZ`IofrlmfJBs=u2N%@3W=SMF*JjF@XOjpaKcm2fvx3(gm zf{8bQa{Is5@`)CeyF+xpeU=4xOkg>K24|vgBG1?3YS>?!)J{wbjv&rG^P%J{ADxdWqhvV*^Ky4i&mcJtW&|3W;U= z;{B+OxZCKT$XU{j)M@-X)G&mk`BQZfJNkw=AC4ro-(k%Ib(9a%vE7I6__KaUnNipck};qn zl#^Xlek*l+_QhF(tzFP?Q%;at;7ddDwYh)I9@bf+?or%(L;{wHfUxJ)G`EX%2zXQ= ze$0d#TTK=5&Jjk~mV2?Y^de%nkS?6SkCuRdeTv|xcjeh%t?g63Uzo+#{%E2ZmzagRc}LH+pRB~tW|&yul*PQfV*zk%K`=G(=0XLfJcxTX3eoL z(7+Fo-u%+JZ@ZUgp8h502cKL60PUt3BS67a&9dhqzZK%gTuz1VgnYWyvEZ^;SUUT1 zWAHc?|*36v~F%F?3c)+@JVte+(a&4yJx{0hJvXM6WQZi z4ORaPzp6S8NKOlrQVgp`{M>SOO#si(_35RxoXE1CK}@1H(@s@SHuHe}EenhRDJ-HH zpkXM_RpjKlPZXE)aiy|;9_n_$Jt5%?8vWj)$sBk_L_W5SlCOkOViM3%5A&`yn;+)M z5=8p{>;D^Gep@Gg^O58XaY#y>Q0kQQc1wKmMCQFo_80!-R4^;HJM=F3l51!T_+AS+ zhlc8r5VHI6d@~HSJem9W{+@jWbi=j|YM} zuSRPv3l-Kk!^zmf*Ssy481GUZN%3YlYbA64W4_ulw0rVJEmSoo<6Tn!=+C4)G!Ntp z8RB{bObX8~ruarXasP&eEZ1wWJ z7_-obG4sB|sGM70`o)*RmwTV7_FzKKXn#eGLdx|oSjE&5(H9R@X}hxz4*jykObzV{ zxd#yMn@92+NN-Fupe(EUE=g5V)c#w@?+1zs|292&VAUf}Z~fwJAEKUqnPOF%dmLuZ z92%fAI>w|D2$(Ji9DnB)~s?p7~gdY_}om-S0Qm(Zewk3rugN{>_X@F^32FRiG-6g z!;T7}KZ88QQz}9*3bFz#)*hVx22i8n02!@}LNa>AJV$```Qj@MY=6po(T*&<$)nv6 zs9pXy=Qx@Dy(wEr3=y-m*|L=3#VdBzCjLk7gYe`Ktg`nOCCQ4Lc#dR=;M&!!Fo}+Q zRt@{cqWLC2{G@|qO*4J4uY30;lmFv$p91D@RfDfbMsAj*p77nBxs2L*aJSkHLO_Yd z#=S~mPOVo?uP#}bkrvXKkyo?6FEQA>`z^JH@@ zTI=o_o+TT|7~*XCLbp5`P;F(dYyXHCRxxrF^D>e$g_rg1+0I?SGN4eDVmV+qmoYeH zDk1@vCG`CExe;xOx#NPA;i|S0X83EUtq9`p-AD$LH-2RHC~! zk@${MeNq788(~l$i{HzJ^w(lFT@uu48ISp&6R|x{bZ53t(z)98&GE6OP4e31Q&Bu7 zEe@W8*$`9Qbi?yyY8z*@^N90$e3F}sNit3N!00&3Tl#2@PoRbj!y1nx zY2TwnYLQQYoTp^jI1KLzufm|byrpFXJf#|$PYm{~8#-ZenGL@QJH9>;EFE$SR(D*> z%FQgxX?wD#CQxcOzEUDv|CHy!AE&Z7?ZlH3a3rVei)`5=O}Uq_i|)*L=YOJnNL(n{ z>SmyQ05^uypPPMr1?heqdtR||I{yRtH`sHD2XQ)Ysin{T^=g*@0{`kER6E1inI)Kv zNU9xVwL}V*yw&@gTzdm0&$poI{OqlTaQ)dpRvF*Q?5}bZBYWI`)dEQQ@2lDQ2BkS~{j#<@bk}z#bk2ZJDl=5g$Glxs(bIY? zK68h{zV*4NME#8qcmEmvM>c^;9I2GXfxit2tW2fiZ=!1}D8J8dhr(}*dDqthXCsrBUV%~SlPgDxRVR+-kftaWL% z@#&JR5GgT$q|pE?KLvDpvfoN}g&C4=BL?trgmpRy0tbmmAV921s4yBL`nmP;+-b6r~wpUED>T2ep-d16t+$Db{;s zjKwffm8VOGP*B2I>U^JNki(N5VO>Pql~vc$X|W21{N#w1@#70jcYD)C-j3lEyLz5V zcRzY76ydw0@sJvhsXE(J`Vxy^^gvxF_9KfcGESO1&sCfsP&yS`;hB)}+C(?cp1kv7 z?T3$+%dmlg$~yh!wD#}eL5&~JDmK5euLPCqgsQw8vAgjd`mTD~rDi)MBf2P1W&u3U z;XfXxkqqQaRp}-WD=G>mV2=xCF11%LLl~F7i|x(tyEm~}yPVD*a(ug09C*Bz zeU!fHtc_ZAUauNA%18v2Qac(ryB-IZJ|CNLvsxieal-w~?dS9TGv-ak;RCMv^sP$y zDbqgn2cmLCrq6ldv6TgveLgqgF)2u{-zMgvG3az7~Pt#EWeo!YRAJmw7=+o4;u( zOFx&P2WIO^3uqH$mi%>%=0P*+5w|%=u9vqtOL~@qCXLd2^-N9JA3@=??w7aLUrHdf z9{!6+F4_PysJ;V~cOKa#d^tbTH&=4m?cNX+jvEuJLEK1=ozDcbK&p$ zTl#6-v9=%))e9?m+bhwRFBv}=+@ku(Nt4U{S`$4eOs$T=zCYJV@(?0X-eCtZ5eG9z ztrS21`e0fB^j7cNgN?a8!@T>&_uXl!Jifa{y|*+9w>lcv$#yiM&L~;LoFC&Oo~;=d zOS0oxjt`W?x@kg67guRR%B?^dvfcRNJTSNqa1+$|^HxR36Zc-3+)1lZ6fmJH2B4`s zQ9~C#y~#l=U_UTG>}*ipv^gyxI&~n@Pk({9wkztf`OM~PR4bIezDKFo^n6O*8^znj zI5oTCx$MMM{$0CGv7m*=f0W8_NZELGzbJNk7I@hznDR8@@zA2~7dX;;0^`1tLd-v;ypr8#=>IAbA^dkK}X zK+Ysg<&g_Cv6wneVdk!s&-Y z%Lzh@iih_bmYht)*zmu?gR5I5X>&s5KeW;9t~7?nIq`DezS%C>tHjt$%P*Z8!W@#X z!nBv~mU;ays=X!Y!UdGlqwj38N4I{^liP+SDZh1g$uu<{R-1qJDm9S$cuzGaMCMZM zPPjXxX;ky}5AIOE!$-M`OFGM}T>LA913zh5U*l^uk(IV0QZ?w^SjEt$-Pi=iPPmd4 zsg6W9K8$n0r97t6jSPocgw~;w-iAWewD3$V*yhd)i3rP_2?K0gy_@?R;8D0A9naH` z##V_NAWNI2H(U>6PG%6gN>K+zyjKF-B?1-@^0{Z-%Tw=rr{uxS=br(A#)+nE+*zYs z>=dFBJTKZ1?#Ci^i8!tEv9Cr>pQq}w%~GjmaYHK6v$zMYbh#!{nuII~2F+size2}; z{@5z&8)Pa2ie3dS_e|eHD|bVS-)X2dZ~R7Ss|X$HUk{$XAJv^a_A#NT8L9C*keoXQ z=<_^?{-G9hmloH(@V9a9bj4=xN;VMsTl!>;yW8Ysq+*mlz>@*`IzGPMUnjM}x4e#` zkIZ3zYDF$Wpw+fuONpW1V|?)P?Gvq`HaUD!jxC39*POGDp@5-IFdK&h*PfJFX_ zoS}ux5havdRvW|9p3J6q0q^WIoh-A3fc)RW^RaY-S&bzq4(Eb-y52mpaguI$JP-Bx zGq7s!l!N(vv-`5@&eZ0MV41iu(pWXq2fv%J57IX0J2xtiUO%8|*bs@il)w4ZtF`=! zL*h?E0a~kr#rSYkrJf7NNzz6It19BD(+9$%8E)3im#vnfg-5qZngN zv{Kpf)@oXG#}D=XaX0MUMZvM8z(G=#@`=QCa`0~U?5~j%I%caPiCap}z8A-lI<^YZ z4Pym$KP4^xsW*SEdN=MBhok#ouZ9R8cZ&5ppW!j}4o)5vZ~_L_KON%KKI#7gA1#g&bruGhR+*1K%8 zZmE=7Q%mVzSKdTEf)16lb3lHG$0wxe zUA2jL6))|_1m*cSeK==}Z4|PEG0a-3I^a>-+HG7@RXmuVTAYOj7Rwpam|jd0pOGF! z9}R{G)lSY{&le6C(gg0IpLAHsKGM=tmIxdU3>MI$^+W*nE63+=S?u(v$&5H?x_Q-! zq@bhX5uXPAuESB1lsM{o`xjrLUj2o1&2m-!lzgrP?MS3-v=B3sOS@^SY?$?vsA;mG zekwJmGs55g7drZq?YOqAuH|R@pCJG4x8r?(=u>^vCpRVaF+*^1BmwYkeLtXk{UU`5 zs8%wlR1;mxwt3i998^1UeJI%*)Iu7*-T48x8-oyYPbzV>`uBMBnLn$8(3L=^bhW{- zPX|xu)?I~v#>d|d9YZpNR1!P(IA|NI=*Gm|IG^x_tlf+V9sLTk2&hULi$=bI#+?wGyYPSRT~eEY7)wq>~WIvIMrP~tCUkaN?NWd=lWAmY;0O; zY-)r-#(=4_SJC1P!>?=EfdCVgHtw(1M>}|geVj$ei4*m9kMUjH z!s8a_m}#0X(mMC+G&nun?X7g%YnP%AvVZw=QeMP`)yoj)6}}c&EROax4(e1qrU{ca zO4<8s^TJO4UA(i%$22=bV_{cswdD zy%VERwAFU{lXN6t0c_}UTY(hf8_FzM-YB5+dn%m$=K!)F<#G-Au&`QGS$;p`sZtpj zmvD{(1kRFfyX zO}ds{eVvFj_d(r*8rGU2u3GP3G_BUT64r436tyHa-YBvDVSeKP7>=i^bSK@;G@WO~ zbAn<%Ui`@TWOr{^p8c=Lp*`={zZoyCh79c(3tB!ZR~CfLzb8*{qxx%W^6%MFN>xxU z_|c^SnCX?YHT$g?ROB~2B9*7>lIdl(dun19BmL0e2J)IB{ zU<~#}me9!b9Pz#T3D3tF@fhvd8|;%zrEB^2T1k(U19T@`c!eJhos6DZed7lPqrRH{ zRx0`8@`OJC-B)1$POYc~@)7f1w%0~zgEi5owrDbM;qSukPwnQ>rgvY|zctcA%R9J@ zrn*JoJip@9)aa{)RJ)T)WmYZiH|>{TiS-E}@4b^JBn4Gmog(nSgrL;@8ySt%`ZepN ze}QrZ^<`zzl1)}mgoQVM=GNpCzfsujY~R<8XAbG>e;KdQBOX8Jf87Y>y%O*YA~Zpg7TJ^!uFz_ z)C&EFb4jgob;wpk!HaXthO%-nj#uJOr8c z<^q$}3X1$Dw+gtL&A!cG$jQ?W3aaJkE_wLfMJh! zzD7H?I7QVIvqLejO%+_4sf~gQ{%rwX49W=G)}8ZaH$@{eWfgWg8+MZNjtCsSnd!+t z`&Rdx+Y8M3k~ZXbXus?W#h%24X5U%I7Gt6p_9A4qu_HRWmSuexm|q3bgDUQ4^mUF= zi-lPm7CdW|kc}+ktHHT2m<8Y3U8hr#2f@)@CzW(lP^&I>^0m_}vo6oU<4#6bOdarfnSQbkTC1(EG#@Av`3zLI;~ri8%s&xtp=Aw5P-9#MY-#K_Tr- zsen7dPTOePf(OBM!7yQZgrC#tuNNj=H{B;u^pbz9y55jGrm;GbZRC$%(o1SaE!ICx zY)wA{*9A9AF<{U8jfydFQO67-pETAr(=iZaBR^-I(@A6~EcMJOr4Fs)&<}D9HqOKW zhRh94^nzjGPta3VUC+ta%8^E=&&;snSM-ukqmVyX*WCYmC@F2-_@dvd4BzRREBRWh zQAx1-LmV4mFeztU?I?E9@IUFNmvb zxxVsv^D||hmue&bIiG$HV8v%Ppfvm$K`&`_ys33?xeNW{;4jX(p}aq}Z@50iWKUe( zKjQ%kzrz9g>eAPtV#8KEz_2a_bq<^>D#A&!59C!uhC>J4>9HjNG1lN9>)_1wI=amf z9;_=HKzWTFP6-*YrbIT2)4@O?_fIr(x06jqoVZJFBAkT#K$f3+xK5K?PxgYvpsW~n za_kE!JgF78ShUHA`)zoiPv$xZSVsoJN%cY%<~YD9i-EgUIWpD{Df#4xnaCdhJPH+!F5`qNx!QI^*26q^A=5oKf@4i>>->Fk| zcD1Y@yZfwO9Ww@%W{1vfzT4hOKY;vt`+v>S7+QKa3ru2U@kG4Gh64=D5t5{IE;QPK z@A?=9U6k0p35FR1zK13laDg6Ffe;)?0zkTE{_o=-h0U(|7#=Cz`wxNv8PMPF#|J=q z+^DbU86KzNu9xV8Qr^F-0lkC)48j1P{?{!3ceC~w9}B05GNB6WP@Q*we1e8}sjv7L zAF;n*H^u-}-@U#hehf2X;(-1qg&Gg<5q)!43GCjYSu{@?ySsk%M|BsyBRS1RWW+n| zq?#>Y%%J1UTbzlLGb3{Xr5zFb@AXok98I@FoaD(D<_qMxa2`6akjMEZ`j!Eko3rBg zFY8`)TVCr0IAv!7LwhoqcG!d4hnu%e5!*1wZ#TU!ni)Uh-iXyPvbPRiK90PgZ%cGo z$=kO6<;QF^#^OzAGRD%=r_#I>{ReFTn%J7TnYvB~C5_%#nbhnxA^s^vCNEM^Fzh-6 zm+U2mWTbJ5w;3>JZNdKVHoX=JQXlt#-yFu%6P&XYAsD|9bv-98-C8440X7rHP_NoO z;Q*aeV$8-i06YxrMhRO}kM!y`mo!0aV?P0N<{F2EN$fgb%+DV*id z{FNwR{Tck_4xAppF2Rmhe+9j4;^N49->#WItnAudpH;Yky4}{1(_)}>u6*O3Eu>M5 z%VKj^b-(=BixXA6%|G-Lj~D}+6WsG2c$xgyB9fsb(lMnzm0=>>*zS4MpnnIOykc_F z04sd`DYFyH>^M;5zR6Ch`uO*=b{C6r^$+OkuU~%9yRu?3Z&(rWrEl8o_W+IsNqbod za2JEgp(ytYY5>H3ex*+G6LHgv$VP%kP?0@={Do`+Cc9>)fxClS@mZ~7Vq@iGpWQ=I~|drxNG zrDXr4H@0eK-euxn`#m82L5uG(qL-tR#Z$mR3Q1e>gG+qs^7ATwxZ}vntHtuWQunK^ zhFZlI(eAlRJz>2IiFTDkTPLGF+fn<-#d37^4=)z@U+=b zp6yTFXJ?9ifkfxe+o0fGQ0Z%K>H0WeJ#VyV1W1;J?!t5u{ZL4FZt-KL7D)G=k2soo zt`v^y^SXs2yV|9zoAYqtJO&H!6rj7NXr@rkXWXoeT#apDEPbtvw+&t@>TUfR3~l2QK(d$@VLUBr*{z7e`-*e28n!jZ}y659D` zOXGbLy55z5ZRxv?sPEK9&Id*F`})_)rjoJEWacKv#YCe@UpEifQxQYni!Rp2QW$MO z#4+QaIi+uJ`_#aUOszE?e_gLwI8;JL#W?#qF#Z* zeS6L_{moQ0^d^}BwRrNW!(V2@MVX=}t;SoeBD+}y)$>r0R{Q4Q-iWBMy}onoG<}I7 zAdaUp$w9Sw;7gZRZ-p!uOv%MVf>u)C3}T5>+lRy_P>ttAg-GA8m2Azm#f`V9PiK2B zO9x7qK>vwPT~LpjER9^TgSjo^F1oSuV0Y8&zYSbL{_?uE{-X-tKdoXLlw!uF430l4 zFbA|{2fE#+QJ@woIHm8*VYhGV$iTB)9sj8^xj9BRGdoVyc&Zpr%)nwd_3I>;49u{a z8Ef4$DX-vVw- zMEfUzaQk=glFrnH7+YAi7Zt-Z24pnd2fzKRpsj{vr<)aRKNIYFeBF$*V}#hQY3P^C zsGT>P161?M$X7T4nHIkN#SdPVZ66#2cJg;6CMhfQbgH1cx0uU2hzQ~5zXE^H`hAqR zg!l6NjtRtr7-zc#euqtoJT;P;a-j%B7QIRAY{H^t5dZraG96#5+0l=PUF`6Sx%Aqf z@39!=K}$Cp4#;5@+QD`n9_56n&q&e*(KGSQznsAio+*ox)9R=%83umu@0DKiVKfm>K2hB~r8jF(4 z=EoOQZX{ImaK+tD4qsM(JOa$fDo-Ds`Jj7oFSOyfs+wV!JUm*MsC$q|EL8`|T5g-p%_7_^+lUV@@(|uQXq;ZeM?42$EoGgQ}^MHTE zh@c;5=b$jbF8V*O$!%k>z*T6d(r50w&-gsr<1OsE!aoXvg@S21S+=^}B$fx)g|t7W3@0Ws;&f}Wdxn^fvv?lkdbDG#&l-^%77*;xBeOre zHS05WfpG%N5Ct(qj}Fm2!ne?Rvi>Km>-!$I{->P6W0e-uR|#? zV^1Kg91xkGx+54xpZtDH5cu#eoLj!NGV$7V;Tv=~Apn@HX1{`1DjcV@47zx^_Ds_? zVGG?RIaWKn&4dHZR@TdLE@StdWuD@)m_s@2Cs1DOLP2UD1R{5h(5RkDxS9!Q$VDYL zm!uU%?-rT;MDRHNJ;;AFs=SZz+jKpnXL$b+P$0eC$haH{=o8iLJ%0mf?0`3>mUmex zG^&WF#j6v0OZx7#e@eVAXdR;6S2Oube>3W)!{iSosrtI~hOGFbX&0|Uqo!rFtHW*o z#_mPDG%$bEYemnP@6~6%eA%_<`^T$sTiEQcn#%ZFOkfuk<-Yo!PXMk5p zciYa8a`zc;0h7*Q9r#@Mcr zvM_ln?qlSRjT7A!DRYlQ|EBd`AS*?RD%MYlECf=gHrpTW4`TU2hz&oXxEyaZNMH{P zOZx}4w@VOj)HIIl1y$jB+M-|Q!dqKpKap>)ej8uJs}VsB z%|I zKXue5q8WKyC4ocnV8^U0l*aovt`OTRNRUZ1&-^nrvPzBG5xC=}_I9hoVQNV#{06DZ z_X)`$;C3Qxt{iF34#p(r^r@YYs#9i4d=Aog!maT2aN_Uj7tVJq`$xJ@>3dvD6!X$3 z;DPN z=ywmLZC8^G{Q;jyopgz8UUS~g-rupnURzljtBjKmd=|Y1KS&04*wyxgz0cO+i3(8B zja7w#vQ3BFW7op$UlCe{!(nXN2AOwXn&RV>eTf|p)q2zM$++Skopijxj^=)?&cUH6 zNZLEM;)H|Rtan3_pL2z%uL6|PB0+u5>j5q66VY!Hk1hqo)SC=xF7epT?W3_{<0+(& zc$=sZlgf}KYl&XY`yT&`uSbtK!)7fNw3n|tAt<{Ylef>PxRq5v*4$_hk7dM2HIfgS z%g#%qI?HMBqU|-I<+bKy9n=iEAGL4)Y!EDNjS1p8P}(@dwzngD$eIVYZ>IH*=Gn** zG#wD3MyA6?I+_zK3IsdCLE?mEo=zd!gJutZI3G`ip7aqRyMXou^>*pUNEX3Q@W!q) zUFx<6^S6=;e#+Hy(@k(1PQ{TgZ}^-}q@Rx_I25nGCVcaf{}?Ib0n%j*exaS5?Ekbn zk*;;f>iHxTVZxm5)H4HSZm7_&@D3jDVmo@~PfxWGgpir05wYs*qq1uZjCzm@`7f=!y;cku!N6YfgSCaKRW;!)ep)y^J5mMYTDlKLf*@?)^~|!jioV~ z*1I)NCjHeo6#$4Gw(eH7DHMf0^YSZ{t%a>()=InLHOk6IC4 z2PFcxnhQ*l@bve@m!(gM-zAHQ>MV;3sR_W;e}V37;NNVKrCkt`+RV!KTW%CZ_85crQap}*7iGqOZMernUt=|l=;tk`XwsY zTK<>Q;Q=A?=TWna-9G^;GDn^g+~aKpK)!>u%8OAUH||R2v8U1I0DN7^4igRW;1dBT z&ZwC|)dmd!I=u(pm;^i?n0QVBRFC{1v}3nq$GETTa%~d=n7CK|HMS^=rZ2pgF3qv& z_ve}g;vi1LAb&L-T#K;4{J3QiC4Rzx?SYn{{2 zXNAX_-h1RzEuYoK*hV92@xv9TbPF>iwhm7fWX0e_CiqGo=bwZ;Q{9Ht##}fpr&#h} zbQbJdN#XmfYN*8F3K9X%iY;24RQtAbLF%~fuxHO08_(nc)@GVT>-1+st)b>jf<&*O z!oa12={O-nQAhzu#9JCr7{An4$zc>pKJ`~%_%1_8YiF6NpI)znDup+$F)ny_2z(Gz zx%uYraXu>FmV@HRj2YXz5%5Q)(iWNqgy#{YiG!;Yl1#uSx+9&77>K%DZR4iEEq8fR zIL2BsE$OdFn8evyB*bDx#d z?$b2B)z#fer41|C0E*w5p#?|>U=o5`g)Si}_z@7WF*SqJk~J3shIC)IaFda_w> z0VH5njhQcotbtEfC|v{B4x~-+^UDH{|a`_3*=iwcG zsbU#%(fO+|$d?4B`cuHm)Ji$+NK?RnBFP}*QXtcTb(|^PyvYdc(cV~d?Et`FB!lO~ zW%h%}cjwK!s~njyr;2~H<>9+FNSVw^j^#k&=}#-tL_K=(i*KXH@;rdO8atrX5;#Ec z3&|eHHMi{m6cca14{Fv|dGtMDVgY#b>FipcylT|MFsXFkWn5%G69ty520|!Nb&`xW zSadWpt?Wb+1?7#&0ex3xVtAYW`*F;uncj-M2b_3|#ptL#k}vhB4=qAHPFHlxviW#_ ze-Eow2dAW-0&I`ZQzgwr-rMn#L+yvo{gT;2-hG9qZQE080lQOcZ95v6ds9=EPq&}8 zH5B|_Rs(m&1pbyraQl-p{~U9M zJIHrUf-?~`j^6s72A&DWF2p|jft}=kV?OAaf3ricFa9*WNgOjwDlGF@gg%Fzb|l1p zJr7m>$;EAQKMkOrnR+cLm)t1zh8yueTT-SxzlJqwy|g7LiU{?`D zIea6ULYcjv_<-z=zq&wNIOmWoVDZ*@fo&qy>~@_=WTf%iCa)h}l3ZcN=*hp9Etb+= zWFE2G<+|bOy7u;0Ws({88NJVsfWm__8QTcvTWTDYw@&W}v&LEM7{+4ebtMcWg$4c* zbzlSWm$l#s&B=s8E)A)T=72fL*Ho+E*`V^RR(-@|pg|;oLCn^;EH^DIrQdfLyPyRg z#H7LD@?}b^1ySqV#ceqp(q`EHA z%IS(ON@88@lkJW*h8}EX-Q;a#iVU)QkIMwwvC?A4bMyNW10B_ol$ag9``olR?87gsM zIH#z$a%&O83Q703tu}v$Ml(O4)ihTLTZ~|6%9#k>*K*i3snt&P*H}`mf9IiwIH}a{ zg^Cu1Ay)r%AWLFwML}KN>Y^z^zQ0DezveY??>zYVRSn>OW<#=AFhCq}uQ4<%I`z`L zR5(Cya^OHF(=kvTwXph&yt1QdSp;$&W4}aV$K~NtE#Wj%)nYYK>b?!jn0djsjt83E zfz1@py!hpVZj!W%-iuY@5@e&Lkykr2i%Q<+eva!v=G1G+>^OrPck{?#B=fn2CAr`q z>QG7Zd*Pg|`S_Tij^#)@fH8D#_wdWmczhEZchp1mvwvuK*QnAE@y90lWTtuBSFpDX zvrF&5OAO~f8ByVz&wa{XP~-t*wzvmJT6uC>f)f4OzO7>$l`S1@?A|Ni16dzn*62SH znjLGzy=V9>5C3aI}Q-I3pZQd7{`W;XVr2x#lHps`W{ezO* zxgwkfAPI1;1{nLe+5(c5{5Gu!i%eMY>K}14HCR0S@yHU;Z{z||MTI8F&w!7O9h3GF zexe(XMdwe)6(W8+m^x1-WoW%h-0c%P$KKr8XiJa)v!0lZ2U<-g?duV|x*9)~|i`8T#ZO-TbyASZ(>SI~Ga8 zkJ9h@4XN`bW2LTrNevu$&+yFM|68q4Q2Cacy7jCendTN zTu~n@hWkNpbJ8VOzW<k_ynp3N;a>@Os6f%1a~f%DeAX8#sf#KtRHr#_5rj2 zimIacB6BXgM`9K}hkj!0Ypx)&SgssmZ3go=a*igopG1L?MdMtDV`beQ3B<|AyK|&- z^4J^d*__W#gC6B?*DsM?qdn%YL)ruNH-X2c_a~e0Q^=b>#hV+s zcH)xn>n}cj-)pZ!Pet`8G(QBWn z*a2f0_y^OQb^rMJ02#|Ircw*~RMrV}K}F8WID$cJc*4DLgiOSHj$I~oJC%`&%Qa#X zz(wy79{J0*L&50a=!O7JQs?V8ouR#LDUh!D2CICw4UA_P;psv-9efu%A)m<}Xur#+b_et=HT+vNuWR#Y4GRM2i?D7HL|JeR%`7yG6=_|v zVpdu!$1f&sJ8b_5yjvM8X_h#j54}N|_uRsZ$}e`g&AA{7#vo{CNq> z1T#dblbQZ}dycF^XI{3Ej&=4p9vyHZVQy^@H~HB2?dz$)xE~zHKc_tfzJnmlx4b2g zz6cgCFVSueC_49c{mtUcVs`4sPvR74ytuWkZiP3;p+ljedd`us!|F{j_Eyu=1z|JJSfm1OL&P z9XCN=LB2_zs{Z=bLIh>Uta~Mged1K|+u#*7rv&T{&;wo99rH?kIVUt@Zl`cn-4d=5?gl}zG=sQ~rM; zFIg)KmWNQ?ZgIY%4~BpqO9K+3s7+(x9W!MOl2Dry6RE4P)|td^H_II5A(RYkW3gvZDUzQ$H!@Y!O{x zJukE3W&LlIkjY^zl!1VUs&F^a`f7Uij|oM=*P1FTNb_NX ztEtH@Aiiv2L|~(FY30+hv1+ zP7(16`cM0M@5);qb^;Bqdyy;P( z%o+k;#vgr$fb|r|oKoYZ8EWa(PrZvmE0-h1Roy~fx-zSn>Aib4q&Kj!Gp^R zA=K#gC8;*8X75HE&6hNS;Jo~b8CLRoNW&2}=+CptBQ2DwA(-3Y6OC)zE{6@%SPIoa z2V0>2r6;iy%9N)3hy8kBA>dF08!81YfP93SLZl&`v|xG1r*Dx_-XLlzzYqNvx{$!v znp=ISI5>+Fjh%Vd!+hs#wAx+>&`IEVU^p+-3rU-vx-NgC0N1>Tr`xwXYu?GS=Qu%R zf?C#WU6O)OoxgmBGk7yxssipaMSk37@6Xt&qUo9p-@;SB7_H8Q#OMS2hPp5cm2LvZ zV7oQ4)X{>uy$?ia3!eJ!WC>^+93EfTXf{6+5o!_<&c3#lHFOM0W(SzfEcvk$*(zH} zKLp?bYb?tkU6RlrhQ+v>(SOw8lr?@bbSmK-tLgs2ZcVIcw`1<#wd2#h5G;w7nNc%+ zUA6XDQZQCAxGkO_sU}%B$PHb;=s8V^Gv8>0?|}rqy|ivU+g`p>+W{a(&+64z($=wk zOW9Ar5{R+U3iw~g*pCGJq?f5F4%YqPpuGFaC*Y8=?i947_rA~?VsG+zDRkMyxsK4W z3jd7YaYjeh`Wih53g)6bSRI;NRoeo2wv&sw#eF#@DZ=M7KihMsJ_7i$U)fV1ZLJ}< zH3i*66aKk2-}273A|4jhwq{XXtYlpXmxy7##kMTfNqS9)g8_Ut@{r8nEX@)-@;eG> zU%&Ldx+c^ua&PmVxw;49Nz-B$EU;{Yr*Zo&Io#RZc#mJhUAtA^%g^!DOC@b<3ouq5u$-o;eB6Wl2dd49PEpI$C))d0wM-n0b86j5|iJdOS5u8z)9X=oB~HR@W;q*62l2J%^~YZZeqhq$^U5fq%IE6nM~Zu zRWN_e5G5NXBPGMr3`whp1faQ*?HeUiOL5+M1!Y3`=044Ira1-ErrrpEsb~C~H?AJy z&0wB`4{U}F(^LLXQ~EAt@rQ^08fQ^z)z3^xcb+A+z+8O|Fp+FAD4m%4s5T-*TJOfo zq&|OmaO^f40hT!TP;l%@#F!|oP*xrpn^=md85#dLF>iTbA0_#Xsyh1*kCpX7QbA7P zeGz9sOaB8Iyy@)ny5GM}*&f8{6=y&-^5h@9U``wxC1seUG=z}VaGg}DA|$s?C7KF} zR+_vw=8x4vTDun?IAI)w@%ry!$P@1l;d-Lz->=5yy(@C+BlocPqSeISlofWIF@4#y zU#f+Ov*(a(;s?NFBL=@D#5MXZKkG?CppMUle%B#7r-B`S)I zFB3J_t%eYdJ7MRgjguxTt2Z%DIE<$kjHDJ^ zI&17)6iJDvB@yP0TB**P!~DpJmxIVF%#EiWxYs|8u&hOgiN>EUNMg*dwH7_BNn?Wi znxpry$T+u0T{IP4B&y?KJQ;|6tQaavS_8eTc@12=`dkLkD6~ltYN7RLCbj)u4mxqRkN&t}WCP6XTjO?@&J>Vvi>$O=g!) zE)5ugIP?|*#1pydq0-nQ^<6kFH8@Y+rQ2CcP18;Z*k*F7*@No>ETSbmOG--BJQfbclUbz#@e@;_bnRYeaDT=Za_Z1LHo5k*6GYXd zGiEFo$@o`9b*!Com_FHaAI*j-vX9>Px8rc5Onbn@15c!>j!ICxlWw3*8E}^y3QzS>+ z!pVz>dqUOj&kR|-sNeWl!KdW&r(=UJd_wy09T~Yfr335}LZLFL z?s}m8>XDf%mTgKs7@ju|)3mE{R4um-?lKQlx}kd09sZLW48vjOs#eXf+39IDd^rqJ z9k=SPzhI}PrbdTToH4~Qb=+?k{Yb4qwh6pJo`zWBCUKr}-206MoVOE|+qh#qUyt3~ zCP=e$Ud3aQm?V~BQmYVed&M2qB?-9Id{U*6fBy~z*VU`$cwh{$x+4*kbr_c@!#nY* zm372g3|apwOAL+ULHdnIv7a=;Z$%!Zfie3&1QuG{a##kb^IVEdSRlBY7PhfDkc!=B zK?y^vIfSnvT|^pLv7hTvl0C*sRVta7k@DrX?O{`MYCH6D^G^ng+1G{ak287vRg<5b zZ>eC3`NnV0+gNtBgHL<-^D2As@R$aqki>3Gf$KZea_zn836A)1{%4-wq|Jz$Pr^%K zUDZG_EPX9+oG#Xq_7PWuNK+tcy$`^6ZAVu#cw?70#;5~oJKL)eT{}oT23@Da~_Bm6AF&%hE9U~=f{TiJ^dKIe7*Ao+@l{Cq+|M5UC6L7Ic_j~mR-IY%h#!; zXld4>e4f_xt30a!o(4@TS`r# zxD{;DR3RYO4v|sQP0GEEW(|@p4agN4G)c43QZ9fB_ACvrJY*gchBea%+ouBU&q?{ zU2u2aBBytZ9G-rdN~g`9&xX_36I5dSj%U-2mfv3ci(}8A{l(}?d+wgk#L_5AxAmUS zU7wtO!@hlt%~trSNc&~+Q8gcOZ6iLRQfS^n7tF z%y1tq>>36p$eE@Oe>Am|o9aUADqKwPh+=z8a1#99t4HtWU9Tz}S^Lqdbi97O-OZI4 znES6<&x|g0Xpx8SM|#JPSB#WhZ$@j=Hb0>nd_a($FrOS`U-?&kZTa}eEFlRd+Q=Kt;5-%@f+#vQ)Ee^dde%TOF;5=c{|P~1Xt7O zeUFePxtOnp&IGr8VQAeI2A@5WCu5dkh@sK>o4UTau+DkzaBF(s$~x-d3aCvvT7CaW zX9=RtahZuauS^p}GgM$@O<2^WyZ4ruA|%FA*M4cx4DH-mNk+8T%Cx%=m!g6rePX_X zpLa;sp$UeuMRX0zLqgp&L=OxvWS*$uz4tZc@Vy6Fn10vo(5|FrjvE?!z2(%5?lP^! z_UZJGuQ9D$xb#nufKuts*)I`A{o}phg7i0-AYXDURFCE;F{v|PUz?~WEM~cqljbPI z^|+|V&s3PGWNJO(YFMHRSNvczgY<)bZnhXQkBIz{TRG`e+9~HE8O*u zh?v+zLYXLa>PIM=ugU1WAPIQn?_?@P#cr}RPI84U!#%?Z$A}dx>(bKWFYI>1vp1$W zMHU4$RyE~hZtflz!=7K$>tGaa85o%a7V^}zt;u>2NlR&4aqy~8qgH#vqrS~4DM)6M zsn?;!TGNG`EPjhwk-|WFbf!5rgvUsyQSo4>{W6_uFDTPu5>bW9Y%v&5D;z+N-9y9v zBA9AEY=Ss)Iy!D_(PiD}#1Y@fBkjA!pPzRii{$w5hu=|{G>F`HI4|4)ooE~L*QEBl z8V%X#7NX?gLBd|+vqs{=3ENiXLUc%g?=L+luM%07NaEs2z0_p*W-IlmC;dFOrixTm zaJe1;asQ~;FpzF|B)svNk;VqAyPYPA-pODg@=SDGZaOInnAfRHeY|wx=Nm&z}IoxQ(PH;BEibEC|gno&XS<@2?=mfvUS(mN&5C0Awds8uRvI ziDg9A;X_f)QZIc2Rf4p~PQYbxyhWB3GF)LDv3Sb(sD_UtLI!xG{z3rW?qb+7pAR=V* zV$+42?5eA+mdgY`O{BI9Gcf2^DSiq_la7rJkEkJ62PXe2s}oF|aEZcZ{=H&JK#~%z zyh_LGg{C}rQ^~E82|rYp+R)e?njAMDn3EV!V~ezjxC~0;p&uqm)sq^;+Yqn&iZ*kQ zN+<`0$>xo;JQ~)0bf(jZHHXa>_eBdm!Gt2-0PpoMdG^B*d9sErQzdfa3uNl>hfy92 zgaTONMVZ(z0c^7IdVdktD>)zj4GZSoxz2M7YU@!^<+|=d#qI@aP*p zYRYS)RvV+BhVWTur9NTH%ApSd2!x;GD>+f@PU|GLgB@sA7-(`?#7OL?j9%QYuoAk%-|mmB-Sr#!YGgXP9#p? zw_9zfn*$R7zpSYBGI1?v#J6bbs4=FR?_Bq=LqXgrZ|7IyGQX%Xr*P@O-gmC$)F+n+ zZxNCgR~liU-!zYy@)&y=Q)BkhKIvo2vQVtAjozCU$!%80t>4B}2puZZl6#%gQ_>hU_waxL+Gj`bO%B6R} zBO>8i81u`&j#h@zB+&CeFPRvw=UZNJF#hi>4Hf^o1_IsJ^Sv!X-B-%PLhSG3IghV+ zy07`WZ}_^Zeb$m3x$?Fr`-S;*_0*4dZ^daI5XPl!XEC#yLWHld2AFk7mPEsF$>dVn zQVLg)sA}hFFkCkLPsHP~?;ug^cOly>xzry@L|N{$4fe`kIX@BQcs^BZmaB}JYoPN@ zC_Hn|WksT4EWAH`ne1u4BJ@ban!yyMac>Z@CJ9N&Zu_M0oLnJLW}TWPZjk|7u#_rd zeUvxBL%x_w;vPlX_7UB~m&xRTH9uuM{2$pLcX#xx9t;y!e;8dkIqnD|%xj)d*6jv(kOq>QLeTeW(iO9^NZJK^7HU8!8jOA+HBQozFM4;DwG3mS6U zK#sl`n-gR+%$Dn>D(__}ZV6o-+OvdZM-@nrRv2K2!{*CAs?BpzcG!eLS3;`jKVyMl zf1>uX9)Wt@L!-Zw7M1yB)z+e!6UZ<{d_;-G!J;JygN7A`nT26rm86Nk24E+M4Kh(q zW8%PXa2X>XcpL7*tQ3`0Zi}?|55Q~$9zEuIkhTssk}bhkGnRpJRyN01y-)9zX#{8p zX&7mIX=;MBYJ@@pka;up$9x-O_5B6I$$O?&R(z3?0%4A?ruN@?o4Z)ljkxDrO3G^H zdJdekor~Exxp?g^%Gwl?<7(>h?cQGOlAL+@N(o;O6OC$V zto7F6dR$K}CAC4k*1|;{(YrQmG-)@)73g8v9<)7k{!A`C7^(`J4PS@W4^xM`&y!q5(=LS-9)LOvH+#D5 z6?oL0|NH*H~Z93JqP(f_iRymQ9|?l68~Q=e&=NEF#}1^3P{O zTqoB&{ZuUSgVrIUZ@$U(&aI^nQu&g{Mdb#Sa!J~*73$P4>iJzyl(A3dQI#UQZ;3RF zLnn7nL#KDmokry~@CJ_sYgiMd7tU|)`Cb3;|8hakelt7sL6IM#?vCqKw#fI{7C7JV zi=ac8?RPWb-p3jnEh<2GhQMjg&LtuiYB1Av04IS_s{>@@$#|_!7KmpFGYmgT`HZG% zuMti<43mtU(}OX8aU*hEP5JD7v0l6sf|Gn-vN0{={M#tc)g*~8I~`AR;^A8`-lnf#bP!Z0 znTclR6Ae*Jp=WfEWDL?T)Vu1~)mVHT^Kn)14@leAC3H0iAan6(5)NTXc1Tu~?)CMB zy!pN5(nL#bB8tG?pepeV3(>p)s+WSXZU~jwhCd}2rQJWDO82UN^nK3p4RO%AoCd(& z5Du5TOX1BDO25wEWR@@gUJA*hnT~Q3yHmbe4}cv740|M}J8D9>9=owwaJtg33W!cd z|4=^vBy>Vm+9(dDU6^z5%PFTiP~onem!?z&^E<2CwD^*4UZTwYXp{}s#P*!8l?75- z1~vUBB?2NiOX{^b?&9|eY+2ATtc&U9F8Bc0I-Gs#qOE5nm;MLJ=cFdsq|o(G?Xp{+ z3NH*N#rCCxtLPf-f1mbZ;z|r%pEw>-J=-@Pn~W)%w9Ld5cy^Fgwm(3&&aj(K=cM(* zKTC~D7a*-*)nV^jBy&lxO2Yvny6BV`h8dC>sc&qojyC<)8By)N~H9+G{CieaLa_lIzp?+i*vMgl^`-IG8yYBSHL4z-q5%OA)X*N~- z>YXQh{CAy^Sm4Me%mKld$dZ#QX9#>!!uD{Y64rFAJZBmRGt9(|?&wh{p@#5Rpk!%X zz|?{tlvU?anIt&&Meu|PDJ83c|Jx_pz8n5*!*z?lJymFJGf$#z^ikjVzc1?*K3V6x zasbP-^mdAE$&B%ahjh3MiP5U)d&QIojq$fpoOgI|)$E*d)bX{18*nyIqkrGrcpf$w zCuo6IJMxfg4$BV7_z^|vCH(mK9aV9TpYuN%FkxoM^>EBM%z@!!k(7}{+{Xk1IZ$$t zu~*8Rks48d5k*}2T^i_sogdb-Y3hkNY27UjN0*r?{GXL4N`k=E;{5Y@kF(haI-3TP zBapMpi_4OBQ!7(okFg88q!xH{XQ=vR?o>c1;J$Y}FqjMaI?JbTNEKuiAY3d<9{DKJGT&mSO@T5mRfHa3873e zv>6`wF)8}D6xzS8Pcg1HOzsXb(Jvb#=JtI_BXIBwo3N}U#S)C}ITT+OM+Owm9Mt&k zn+9qi(n4VfouvWje~`w5Nk$IaxWeMhEH6n$7CYb+&KI_jpNq5{64-qRa!;v*q(%0@-Fzxx&M_tXcZHQ2<|Alm@ zk=*#Q`w0S}fk$cgcE%~g9_FBtm2!gbNlM&}qR-2u#^fbJ09(b|Ai|Hy^P^NGPz(j) z^0~|iO?B-Af2rFRGC?F)KePj-t|Tvpq|4eUVMbJa7cgi(P7~z*eNc#61E8-%NBX^e z?_0!lJGCe86!Zt-mc-^`_A1KBr8L#{J+;KH*V>~JNI3WhkI_P;zqH*VpC@Al!n#l~ zS`g4Vl>eOyiH3ejHBQfMOcbTY?v!_ZW$GSVUf9c*W8o*uRC|*sf+wvM@Fdu2g`bvx zWvrceK~`>S;jUx0>hpCqv4rh>CyA=S%j(=+`OPMPn`7JUnh#!4U%hJ&VlYx+V)6gSD<4^qJF{X1C^W%Iv49t2@S+a7y4P`1Nr<>O(i`9#cp6C`r!?8{<<&7 zxGIj3al*Ssf&^d1PTla5+zdx0adKjK6KcnveX~5u_Z=9Yu&Jx>Ge-_@%@7#;>}-Ry z!MEp4&4>hPZ0z?m>yum?VQwz0C=kCW<)GeJ6cn=?RRP%;e**dp@o6|cSJs&yPcN@m z+3tiYMwW_SQeQ&vMI=s6PN)l?_DXHlp}zQdmn|&2+OIi^7lp50kT&2H`In2cdxumF zG$mFZJp7B#KLxP$3A8bOvn>BTl!e`KkEpZj+hu(upwak6|Sv+-HSYx5|6etyQlTdf8CMWm$u-w@wL zB9Fr!e!(DRASg?0NG{&MYLfR?Y5W9{pIiz01>77;N+_*;x|aR;>_L)AT6)^h&n%5V z-s+x(OrGBi;^KJ{0 z(P$128fHc4{uO`bT-aAa@44?Fj{Q4u1bR3*|x zL5UC{6fqzIDr!W82q*z*DoR8YP=xO}yEn-dLJ|GH@9+Em2FE=+=gg^dW}ex*1;-1Z z#l^RO4^1g>B6Hz?)ajcq`FQnFr=1$doH`i*PJAe`XP=LEXUiO!s zowj}4mEmuE%obNp$1Sd{I2PbIo)FShCx;h=<8skSXL+OxkdDxtG!BS!D0;KCp?shsmNB_=lc^q|jf3iH%1s-Xti<3S>%6DJ?Uh$KJD zBY(PnV}5~0e*FsMsjlVub1RS!^2i_IDev!Y-y=UqzcIhSBY%1Y@>I9-{DKPPgFNzA zRWyE&{Njqn?~$KZ(fGTU=bx=;{2uuQp7Or#_C4}1={M#Vc;pvXAWuE!u|CF)`9U7} zojO*~zDK@Xfqa2SenF^O+@t=A+V{vWFe+Go zkNixng7x>vFRnnI>RFyYzXJInk9^9kpnZ@0{EFK5$PcJMp6XSeUv!;3u^U0X9Q%>w zJ}!12^Lsh=q1Zz{*)5;%9;aP@$gT4OZj&E$i+p0MB9Kq)j&0A7p6gEMAf4k*7b9KZ zP6zbHxjP+!^x4w#NMCZNsXnluhPw>XnQnWVgYT3MtnzWLxkWyyYmZ00Cp_w<`rRm(*0H?ah+E{_cE4YFy#f8p(^($rVvlrC zXt{3)3oZB2Ex_}>aP1o553Yc3&y8D_=udK}TdzXh^Amb&Jy>;{{DRx$7u_PC^sOYc ze2hK=%G31+l>5a%q#IjKT6U+&7`hH{c!P1wZSSO$kuG$nry?C@I_dcy=`|kd0*~~5 zk9N)sD4%aCtbAT+kNFO&fN#%jm{Z5xu<|jiLi&QcUj;<2gOe^ox`sPlf^>a%+IL`i zUm7Dl!p-NAp6*WfKzfxs9fNe9JDr7efjeD{bg?@f^aR><_a_JG8l|{nPWt zTaR?7LFMx_*n^+xk)AuKe7tLrE^zPVy+{|k(`S*U-1XEL4BdC9+YT0XM@~(2I(5^I@TcFwp4$S z?%_@sA|3Be7l)UxPl-pGitw;w9_cKPbb&{jiY&KRH6opU*N?ol9S^)kzHK)m%j@qN zS#HN8DvV% zoFg4`>-W|6Waw~m+h}A|+-Qao!o!Cpr9{WZgr_HF#3jZAUzaZ-O`gfN-^3M8p7{>G zRpmF-uh{j+#tly_e-YuWYxs*ii*#z--|E6&<(csC(FuR6g4R75w)EX3;XT7qh388N z%kGlBX%#ohJ8vw!YkAiF=EFOzpr`1(o{|wdj7f{NUjxwBev~}eBTsVPUD>TyXl!(! z*vOdJl;G>-S+;*-^oZE#k+Cu56~!fvyzTnC<#~7E(sQw_7q^jD%I<7t`J3JSe2ZFc zAz%Ks$vc!6Z+>U>O>6L!S8n-c%!;dM-Lr2R!-YF{MTe7nAyWUU5DXig6dzCSh9;Ta zqJx9~SLHMQ$K|<%*woa>;jyU|4&Z-WKI4B}J~2JP{%!Sc`~UCC|I_~eeR*91@e3;l87R2?})W`@~!eS zuFDt7Jh4Xwx1Zme%U=&>ZYN*n3GcG~>*fD$`(>V}w0$U_;(pUjRQj-R`|W{gNhx*) z*G6`ua2Oq<+a`CzX!Cb1&bWJo8WFGyY-w8GoaF$*tbk>wOvj zI(?T*)wNX5D$L8cF|Sn3Dv~S9t3a-F`Tq^Qs$l%(_5TZcRYCnq8BqBb2T*bS|K0#@ ztRFzb>3`DyH~lB|XWXp*yXn7N`rcy6eG4)v-!~4F1WIFQk5|Ln=h60+ohbWxH*)Uu z>$-DKH$_#%XDZ@n+@ySlM|mbZoM>X{7P*m^;pW9B4KKZpW1pu)CJvAFJootC1%T8j&i8m@T7@cb^Yt&6Pr7UQa<}YE9O1d|YA+iAczoIXx@R*wF1R9oMmhgF zxKUQmbuh!tPZ}MYGAzFQ8#3Tk068k=yLF}lh)^*!y{9MrzgZF zrn&2uJnTw&MK{gMD9fwp8#si2GYCc9DxbMke#UL&Gd$(x@Nkb3?g4q&+?(Vxx604B zjl8GrwlC2-yFEQ^m~2~&Zk?R{UU6RP&GVc+OMbNQ$iotsRZ86|KlRr6wqCIGO&(h# zdGI-oCx|2u3Pnacj-yOJZkC_%7mY?auDt!fmh2Q49e29`4Nw zQT{F#uuT3g7w|9gcd>wwx7WWsrcug%mnY}(Nn2c5pt+z`pcA9ExGsTeq-=2oq&W9B zEEdb}aR_?Vxu>1ntDSuRI#&pY?ytyaLGPR3IM# zxdKpbTStB;%9fy9VFhIa9$Du~ZU+*bvW28*xoL^ctjBqu$j{xg#j& zUk_=z|qTB_PE3T7^`N(yZ;7H-<53&a>p{+*iTqO-51K9{1 zlN&m6HINs8auJ|p5Dm%&1-WI(z3iTImyEh|Kv{L1{DAB7ONpEZBCogw`UonKo%VRr zmxpi;9;Gfn@ z(dCbP8vNvRtZlXR&T|vUOU~HnN*+xJZG#HxI&%4>kH{-QUM|VYz@+9&mIC(Piios7N1YW>+ z&_wt6ke59cV*r&*eaA&T^^Pk5#}H5!IVa;pnL^};fQsv^$6Bv<<<>@jaSW;B9xth9 z9O?m4Pru{x2hr2saYcZ#r#bcHlX{RJ0xGEox%!Z=yB<2Z-W5^LJ$_Qpc+>;Ro`ki@ z!dTGPLZq`Nnm7`C($OU^C{Fh6?INQ zKGNCKaGdI%CzQ)UIU1CUykzimQI1BL5)chu!33wyFq93Mu+deBvi{GZzGs{|GQrOR z-yf7q_)k0h`QXzN$=aX~+0c`j4nH6K2=Gh54|xIQXE^*K@cpw;7I_hKp&xVH;|4zn z{6g>x!1tf+UVjxf0Q_V^^H9%A?lFNMFbVAv8Sn#Mbgw)3{*%!r@{+@#)1ZP-j1k9N zP!=cx6f^+50q(IuCSo#~Z;bCNlm}4(Qp2jzg5eb7B_$RtmJ4CHbKp}&JM zmjh8Z(#4=$P&O#}3Gkk9&k1A-Amb0BzD5~P$syEx1Z9x+C+A3KA4We9yXOlsg;OB| zDjbS_hoe73PzGs#q>FJZ0Ob(g5cgb?xp@lXhfMY{$Q(z#-(b8*mw<9WSs{BRr8fCskJ4ly+azI%i z>LkujxYq|Vr8cefk30wDY4>b9kK^@rncT0Jd@ZFyotyI z(bZvF?pa@ETm6w2GG!C&!zNcyt@W<#`(S@+IeCqdS27KKAOzbM0?MiFV9FJ8csRw0pNx28sy8;>^zaje9biJ$a;q@-M@%l2G)dOX-=WKE% zg93Vi{}}q)9p(G1$KJ&8@%81l2xaL7Slb16zP>S}FR!34uiW|iCPOB9Ip%ixov-hB zGB0mnyszK+`jY26=rx;Mg{yB|U-G<1$y=!FtsB>uJpYls4*YdDt}l5Wgx-KU-??#p z$@3uvTcCqmZoaIIdo zLA|RTK6!qs7`y_Ie-YX_;PA)9+Z3tbsci}ZW zabstk(+yysLB;)@btd=eXFUl2_TZiSAaXx{L<``b7I*GX$bJ7It>M>O-??uf&j$q2 z8(jhPo!j{!$P_B@bs&2W<2<(`Y<@@QoIJ-6(i!~#CC_*7Lz6sHi8<&}&PxWb80Q5Z zys6-2KY?>lz?*0jHa`ax1oF?t7}lbHI0oc8<+D*fc`)W1RJa~_pa|sUyp4GU(I9_N z0eBI4I4ATD#+m2HFD88*g1!zZ@53ta{KJ7&hGGp<9bO)IIpAf5mzOI5kB&gw5#_wS z;6>m($b(lz=BEJb2%^C&)w>hm2l(c@N~-3U=^f!^L6?#}^zI7jkC^W&7V^vVj_`6& zCfludvDZPTO|fBF|jHmx2oYoU#Ep zQoeaEe;oa*L&n!B8)T8^TF*-8vU;upe zfbu@ZfR{5U-xUNZp8Srh08}#B!O_X2|KZ>dg$yuy@f6@~H&!1{>WT#)bTd3Z9c3b1 zs2g-MtUj02GZOirg6H0GB|n4w=_or3$2q9$S*KhM85b!7N?wn?^+f5u6u{!`h8= z&d-o~#-pC`&$2J?aXX?4=mXQfJKlNMBc@udAK&2%LxH zVUF^g^LU&`ybHZ}*Nq!-p8Ov64k%&)`tlm;#W5GhVnRq4m)a*XcPN(yDqiT6Oohr>b6^C4N$ItlwanqcUgH^|K%vR%x%wzu55>{plrx;w>=B0 z_!`8W5Rp0i59P`8QFkIw^4tE6vOWGr+4#Rvb_U7@VGaX85i6Ye&RXuVjw`W0+;cl0 zWs^}Z1Vp{&l+9jQUN(a0)=H=Ba+J+MxhzoODyMA8YvpBg5hE46=DsF}vL(Aw4s<6z zlswNF@)6ek!~DDQq2!skfDeGLKOi_Z&lxk0rG2BTn9oDsW#*Fd-PU*!3_fIa8~=yv{#JP%s@(I!_G=z9M}o)69W1Z{$@_g^iL zSMVwN0t$HpZLfpu`aIxplmjIrT>vV~MSE}Id@bsI-I1js8}u14Fesukd|XfXpkDAH zI0oTZ45C9okHd#`haY?lykN&y=%ii9<$#i7;cte+KaD^+P!5R3c@~I@b;@@oZ55&| zP|yUF$wFPA0ASu^5QTIIsPIXrd_R=WLfHsV!6b)Ao}ml*3hM+S=j8d=tRtusbiJP@ z&&viBL-y#V8~ikRem3_cViC~I{4{y4Hs}Y`4Z4}1CePc3oJD^?xAN2ES=>UD$pziY zPm||#Lw-bkpi)0gp4TnJc`m5bPm^a?{eME=!OJ?~@W`{@$rqsm7oE8w&n9P4n_Ur< zV*|)@iMdGUfQnB$GUOc-0hN#s%JSXdDy*`>iDAIcAv}`TdV?z<(BYGJLIik$2TE?c z!R6o9;gfeg1DIZFe|Lc5*|4L;m{3O@^ul~Ap?5G9= zcInx_Re=4ruK#%d@&4oe$NP`>AMZcjf4u*A|MC9gIlTX^zdt9{w(spal~dggSZcc| z5a(&20#HyUMHP-gj64?cqI z$i5(jqHYa`plhI@r8ozD2Wq;kI`sr-7U+A>W6P^klR-y89adDQ zo&KdKs4ovK0IL)}Z&r2MJ-s9KcsP7_z;=*UN7;^V3A zNQ5V)3=hwYO^J()4|lS|JH(~+9g#k4SbS{H$h5f8fec6qJ8LLzh!z% zsPl1)I}%KZ%qVT}&ZqM)LKRM7Ma;Xc`o^ie3I9$T=${yUH$(Om`_~73W99$uu+z)x zFV!nD_PZ9n`+als+A7#G|NZ^H|EK3xFH09~u1=kOyE^6nb~&$L3;h4O>J^Dni`Q4D zHiPznia=*UK6%xtx}Zlv9YA5Ac+h0fLeLwaZJ>Ri6QHZ0`tMYy+Jb^WA)t6r7HBSL z4QL0b2y`CgvjOEnDySAeGj@q;J;_s!6`&6$6ws*T}?}cmTbARLA(F)L7?~dW!03 ze;h7&bZlZ;d-BeH=e%!hLS*s?Q~=&Vs#9!yY+7u`l(@9G=*alK?(c#9M0H9}j*lbn zo^jXq3l*H07MpT?L26H>F0pAH?HA;wg`^}!!;erO-pK0~L+$n8_Om~@K~bOFz(YaG z#|vDi-EN7)$oI{iwyF|-kI2-tVCQM<2ITzlq?q)0cP}xb#@F)(P*gXU+8u=6Z1?UH8J8LxT>jM4Depeei^$Y+WkLJ~UP997*qf>!brB^} zW7BMfqo_Z~S$aZj=~{R2>06dJh@?GMau_+Ua6QJ7oa<(NayhST)@Kl2|HKh?U&{N2 z)gvQZ;L|rgHa3}h)u(TID*4!+yHl_E^ovbNhyz-WEmdA>jZeS$)b`HPX>XAcZF)~gSoM*Y3_q8rvWO^C)Hh`oezd@*G=0gQa59#lH%hjfu!8;k`PIH z7dq!Ni(FiE8)rN>j9Nh)&~X1>2qT2hAdi9RZnq@B<5Q3HKOmrfQn z+$SSC)oyJhNx55yCuzHdi6mv$_Nq^OQsQu|8@1ji+&z<@`jGXDNk_K{4*Y+J9t-Z% zGq?xG+ShyVR|mZR7bziibaYBu=_voB=Su!{71dTzQgWdCGHq^hWnMoQDCC=#Pc|o18#%Lq8p5#lVK@`;%hwr(cxl7y> ze!MVMm?5ke`bmSNDCx5Fr`%TObzP6vUopsF$Tw2IVSL2uVk2>jctQR{uC92gU`9B7 zb182qht-$0721>fQ~C^Ju2I9PLp}rtH`ot{YIH67NBUQK2ouW$V5HBpFS1dbi~EH8 zlIzV6M4Y1Q=JdZ>O#|3yD&Q3VtghB~X# zPt(ijYqSqDj+x7pFuyWCus&P_H-$TjwdlvE@}Kc%_)bE!@Sad4{2|qmljS+`Ir)M- zQkkkes5jRiGg6Icv!6B4I!MM*=&WU9rX$1i!^A1#DbZVcL7!gL)a?(2EKqlz;_ph3R8qfWnZPU5o+!>zcmL~gHbPLsDvV_MGc?_(_NSz zOg*+SJC9w=cI6)DT1mlDj^bCE5K1Y95U$5`hKi7ZIYZ^_BmPQ++qtV+4H)4!Y#x!G| z@v^bf*lQd!P8+`)lv&-p&#Z4YHwDu$N11cXSIzC_N9Kc;Y6V%HtzK4tYq~Ylde!>U zI$?chowqKNIrXnZ?Z?53eu(Z!ccXjJY4linIsGa9GkulzWtuaOFfwB@y_rEwDl>+8 zgl*6EVnf+M*rV^WpRtF5^$5mdTj9Imw)7?lBLWjMc>&XRWcQfJ*k-kE7Sn zqnOi7YxWbiKeX;3e@3V(P8P%U7=4sJMi)(PlnE<=hFM=i`Xe?(7bA#$W;<&s~z-S z`YZZ&>qF}^i^{2F>*!Am$4xg`!QQH#JS=!@uFBsswv$sb&x_Ns-P0tic|->JKcwVf{vnHu>51`$@H`I zYvw`hv?(<_w;%CciM}o#?)dOGR>IQ42xcMV7fDXm?zLT7n8z_ zWiGRoxG-)gm&9dq)1XDmxz*e{ZX>skI}UGgp8K7v!z=s*ekT7G-%uDYd;qJ_L=?q% zF zP1wt^>O}RLI>;Di>^3eN_nHmN5Ob!v(0twe()=1$*w^Y~O|kb~p7pM^+d5{ISX6N( zVsfaV^hEjv`X%}Z-4!bojyagZ>|pjV-!SKyD@+%*51R&0xsPqk$y{&lDQ*t8mivJF zocju%vlTD$7XJjF!7t%A^ZWQJLIXh-f`v)KT%n=ZLhLHWis!^X#Yd&l($mtb(mE+$ z`c`TtD{_oHN*;qToPeFJr1&YKG8DFaweqgAQ#qli>SJoGI!axsex{yM|5P8+Ol_u? zr(M)S^ay>qE*Tw+uF$ckjZN5nq2^#S(VSwwjoJLfJZhdWe=&bID_hm9_SWN8g0<56 zn%J0QC!?b;bxX1{$$OI_$zdW*Yi)$!uY< z)*$%55A2V$dQmZCFVGw;+*JBC`W>uuM<$dR#XJRzCbHpdCYOVGy~17Ln+lrnn9x@k zBs?Q76gP|CU>1X=0aCK`y0k<3LV7^v<*j-RGsBu-O~bmrWW8eBQ7>vL4h^{R{8WAh zA10&-tAriU(DOnKv5wdndiuB+Dkfq_%@lLQBJsS~7Z@a3njkHZewW(H9p!%V5crW- zd%+q}I~j)h=rx#!%xsqqf<^JZ9bx zyXR%&v21oeo5TLhlKm9S?ctB}m-t#jpwK~x63z-2geyW_vAH-_Tq#zS9+yT)xzfi{ zXE`6O{w!aHPBc|oLBCNE?d8}fsh1Qg4FT3VCsmaj!)lL$r~4Tt??c%-Soc$~m0q^3 z{FS}Je#?K)uNO88eZ?n4Ued671EdvFN5jkXGpP_S0;Q4p>x#7uAD!XnGpG5OY0?X*^y)^G5oaVDtxYP+ncH|N zRT?YZuf!_x${1yWx<=ivrt9PN+4^8J-~7NVGS6F7wwH~21L&^wLoDgTGw^4FxoGZ9 zP7rjVqp(DXg%wN{-xV484Xh2pd`|tn`SZ$U*ufp@hw1^foiFKRj3X6XcaE6~@oOd&G}cA*M<;B(wAt_IKZ;d}x=pI^y;&L8D#3NHy?2@i{J zi5EmedJNWWs}kY=bjT3jlIqGvlK7W?_Q(ittzhRzPt)@jY4xBCnc zmUFT>$I)1dD)zE{doy^>x=ajP8)FaUCUbLuTo3Tggr(T8F;Z>0H|F-DLF}os*S=?d zX4-RIxla*WJkIySKL3utiuj_V5Tn)9>mvH`rpU+Y+rsYkWuIW1bFH~=;Yq*X5Ao;t z-}sKgFM_vNO?+P}L=5$glB@=6J+y&ZbL<4k2(}V!yXI}{oe%*vo;FNhtIMR%w6~3gPBUA$9b6#aj`tO6 z3N57GlArYvX(z~=s*giwb_44Rf450ED^^!Vt5k@$ji+XlIwG7h5$tfbgulpJuo9ak zvQM2d!-RKqD$8j*o0-QfXFg+mxe%VpcI4{vlvowE*b+0P0(*~mQ!Q|qCJUObb<+mu zm5mxk1A{gtvy+)*t|I-)b?W|3#QzGMdT6>B=;;E}gbm{ska(cb+um!%+(0n`yD(4| z<`%q+x0_o0lE}g|pXR?`H?3b)J*OW^{{C0}_5hx@~m?IPmK4LTUoR%c1 z3u1U5d;ZB9Ww5!x>AMYz_OZX!T`ZrLFOo`woO5FL$B@B=_}KIM95b6)z+?l>zh#H>$hU&$P}4mE~h&`csHu zSs=zP!V}6#vkee|0$b|T*@>>owpXSrvy_*V%4$80%JH$+@BlrS=f(YE8lurWxu4R+ zY-v7Xc7@FfwkE>gKW{-Ra(!&QiKAE0M_~_sM4a>?Q<)9m9|n%`x9V9B!>&1F3_w&W z**fB!`wR7ihXpbj&OEiDSz4k00DAW`s1k>_P5D6iQuz*kpt%W8X}9$UOLlq~7ti~P zA4{wCpY&g$tqsf-_8zTlkGC(=23|8$oGvbrc;%$}3CRm^ zrTJ;ip=q}Lp)1>SG6;75HDROhkl0V!YF|64Op(JdnunE31NzS6`ytwhQf#o8a*hv-WOqni<8j5HMJEm^zD_IST%UEF0Zj;E5H^Ua#7f2b>1qsq2kZ^u6B z4o!KTt;4yvdEAE_v3X5_V~+{D5Z^P>3)0U(CqI$>pIzBr_eEkAsl7B@S}pC?78y$o zU$drp2A+k=amJBEkCVEq3*nm%>m$u+Sg*?V9v)5lRp6BIW~;GF;8V^CzX>j4LkgY# zbvH+vuaI)Zm2Df_oSDQ23b{fx@fdJtRrvN4d6Dd^G*uH+f_{_3>S zK^>_Usg!>eyZx<*#1Akn*x_79Ib6<>Uz0ZiTWHEEWrl-01FG12eIC$thjk^*HPrLOXrHe6e&zp3ZxZGe)(&CkpLXt`!lK~-$L)qpN!9%Xs1GuK3D zDVRc-txH>k1!9Q&mYk>TQkG~dwQX9F_J!UaH7o^c?Sz@$j%c9~ko2q8+ZGk#)K!FC z^&Nd2xUGooz%50@f0Es z?JKI-*R`6{GHuacAPSWki>b;Ul6qkz)K|dRcxJl~u*Is~;mW{)%42E`{bhc2E;Lh~31_Sh<-% z4XIkb_MWy&n`bTodLp{-tkFDr3H=uR8oQR=#-{TVfkN*WAAr^!6@L;pLXSR`t82Bi zX4)D3ynaPrWv(-~VqZAA6itr=l3l>P%Dv8Al&(ql%G;FBfl;sO_Zbh6Im>nCY&5-- z{)|3JyZBK;CVYG_@c%%mgVGHse5&$3@XSPYn)?Mdw$?If^G55!?9 z#$@9I;}hc`;)3%gRp9jdex?c2ifP0(<63cv@OTr27%3iTxw>3iPFKb&QG{SEW3Lg5 z__~UX+cW9O^b8d?Y_z zm?bO_=D>1gNc*I9@-gh!Udle~>~U&{K0x;|+8a+9`wf3{7GjN)=2>$PVo2NHQB`gI zUkESXp6SN?jy4MUll)npjQ5OiPS_~6L%eP%AF4IA)*7RQY7OtPJZZ>yT}us!}^`yF8kHl71bdtIIrq@vUVxFz+%am~eI&o4_sr zj;_Mp18lj3TZzbKKbOpB@>%?=d|N>jx&kK+7p4iH3gO}~F+p4)UV|67M^dCE(n{$~ zX}{D<4n_R@jC@Z14Uuyz+q1u{>{KGu5%5A}f}TWsF@B6cQ;&I&d59tN zt765vGQF5kW(X6*jAT-Pm9v{}~R%3(NUhF_bUAlnQ{AJM5c6z6)N?|r3ETXD z(#gKAeAyoB81*=;eTjNey{cBmzNoD=)S3b#I;%*KVjp1q2-x#PEnOS0O@Y08L7T4; z`~0T1QQNM4tbM5+)xOhy0j8{~-={ayAJW_Dir!Iw9Qr#(cQDZa_<#fE*QO7AfTL^e zXpuJP7&j)W$IN10VqRu;GUwRe*gx48TmiR-`-%(VyYd71_YgmP!k^}Q2?K<9VXd%1 zcvmT~dDni8c9gH1kSp1{7TV)eLF)F><(_!6a8HL6#Mm_T(Q!(E( zcbk{YT9#xDx29W5t=-l|i;Adf|Nc=Q*sd!bMbDy}uxmL>*eiY^ek;19&m}`1ATNR6 z-ykiF{dIvFSbrwKiStKs#1G!xX-O)0c;)+ zxj$Erdl2#868<$H{m=O(z?ZVnTUY}Bn=gEBk3LXrFHRJn7Uzp^LxZYH^(97{XkSlz zTRI11?JGBx!{qsL5s;0nWGea4rbg-@b&+~lZKMr?Jv^+{*Ex8_RLsWP`X2q5eo3#5 z8R=_e8ZQ{DjO|7d=A^#KA$}NTPDjk2Z+?N9scp$tZ)=1#$(nDiw~DM^$T+ebeW_0~ zn4d^Glb%E8!$)7D?}Mdp&kSO=Fpb!e>=w2WH;(%l-gO+}mo~yU;jo~I&%t;1l-`qe zNuNmLb!S{b;9kqTZ^%PVkKZR0<>Epmw ztJ!tzCUzW8u3|kV_7Mk)jpSx>E5wB4YS9*LhxVcNoH5&2U<|UNV95zSu4-f0HVn%s z%pa^5=f~9(h_1DiACY+(k(c_7dQd-#$mBGz_*EN2SGE23JM??>hjf2-2wRV9!ad4e zUw>P{yv$glBzadX^s8Ufv(EeBGG^k zq`lGsX{3?@?BcK2hlR-3R~hS!twcV+*O@Cjwp(TYnjI*xf-bC*)=68XK$TT>b+x`u z-=S+(2dj^b!F}yLu>+Ch0fuHJc0KE8;t(!|TZA#)!?(k@4E|+)Ie&;h3#?g7Y#_$M z7mkCaoFOHu7k~L8MLl7oItE4&9v5n2t;z<{8*@ku}-wY#(+Go5PBn z$#n<1n#1LAfqVzP4*2 z=n?MUsD489UYBXkEMbl_-!tc#K(+%L0$n}CHse}zEH~8tHEIrQK_C7JK8l~uuj32g zySiil&J$KaD=!MZVlQ!kI0ByQwCF1}1702=y)Pd|jB*}GL{wHQ-fAPYIo3T+9j*SL z_5unSp{<3t-J{ji>*;}dG*H|WeKv610sS#!nX$!qAKK_=)-|8QZn|jtTD`0Ru%m0O zjn*Ff+K978_t7L8=}afn6X<8@-po)Y7MLR+IAb5;r&rh&>@K#1y~{3a1uylDbW*A!)3Padm+w;^R31`# z!Z%FA`g8?ePEn_;tJFQ}8LUk+jn%qhMANlZ7}0U8kT1s6RUe^G*H^(?90!v2H3E&U z#t36Nyu}{lxN#mHw2L_cxO%U7+H~w)IASbc+a7z8mu& zm`r!3Df=iZu%Ya9_9aA*qqqs&Q`}ozG4~VqyZu|wdHz28mz2(k-KJshMT&`HI##w2 ze)D^AyY#8_rSu!3dQt9BwyIgmOl4u&j@zUbz#iAan)Uz&Ov9XwHx^;d?ll8U7E$|X zYl~HAeGk9pOOaa#eV~J3%o%1edxeeS;<#kQ>^m@@SGZ+BuB(K$;$vc_xD7oxE?y8@ z$|JEt3*|h-s=n%cwTHGwtE~sXSNDabnyIhW`xwQ>C`8Lmt)A9g%tt=CLY(Wg)q@@h zOu3QyoC#*@Ba#`6IHtKk3z86xnDP~2ix4H2h?AsRG9wR_mjhw#kq^m(5qrIXg&=;UC#=$Qf%~=Z|$>vr7sl-tUm(r<9t|&J@A>A=vvUm4on!3 z{d8t2+CRob0#j`j+W}Qxld8(~i4i^7t~9LH5+ITz@j~@b46 z^qu-wh*>V_)s0$4BjX{Xm0*3Adqc{!uK2B8s7nzT{Ny5 zRn3NGQ`5wr3pYueIL3U|TwtyRPWuE%?Q8QGqV>zLGYx^MTUqTa&Qh$QK(%9m-JZod z%(vE9JFL%vMo(EK)&=Viiz@UbxB6iH8_-SYR`wO@j@VOS*j2;m1Vnq!(Ahv#Tj`I1 z?#=<-J&dR?oLPkV+s1sr>}9@S4q+b8FkY-5>(6#(#{-vq30u{X8^h(?fP#lF;XFN#W~j{y_?Ogp%04EHqmDm3d&?tShP?jUy< z{W!y&=l$t@5g=c79|CGB}B@HZi+LL%?$HN*pe5_ zMdk|ZsZI8;$e)`kU}d5A1t= zzOs&6XW#*@*!NEOQhFtFkEK7|kZwUgO3T2+J?Kz6f_Bkq@cPr~+4N#WF1bK6JK-sc zV6D#5ztI#^n`vO*za=52dW`9hofpTXGEXv3GcRBdu3*+Oo0yMa$&NE;nG)s_@UuVL zkbRJC$v(mwY(I7o8_$kr$Fh^zXV``8a&{G)%Wh=%0u3KxkFjTfPpfkcxj;_hg1LTN z6gP^S$j#&ybE~;ci1Z7AHfr+?c^x~ZA0L4|oXJn+*JG!=&%YqPCcY)+0}K8xHj!Ea zz0Q#qO8ccBr5cDrbD(#vlt&d4erdXrtrRGGl@j;Wjb!ySR`3tq&!~s>8wcg>2uFoe!jD1&So~??^WrAE*N;g3q!Q_pL?L=! zV|$vf?Hmp5d|j_;)HNP3I>FzaF-na4 z%*EzP*y9h)gXV9h2~9ZQ+&|;*XW!T1NB{K-S||7Qq|4V`LE|y^ML-0V_#x6DV4y{+ zhWLHHvDA3oXa{Rf1^7|qLxR)T=h+|FHr!@zJNF0IpC7`11)SbM3Xm$vzH+qe!iYYT zHKl_xKpCoRP~KGDq6F-Deg+W5&BXhxX3%}>pNRs_80S9VO} zXJ0SxMu*TF>235Q49_fJau{Ok7qiRQOXzPb7tfvLe&Ku(<;C&I{6VRO-Uc-<(oa}F z*s+M8{rgHkdJz33^EI=GtIlteK2}DmGGYK{K$yRPZu(D%>8TJu8ygH`5)dI*XUSFd z!>qs=+(-Q9d>fG!o5DIyk)D;#z~)8B!{u?Xa0leC<@QQf<(&GPO0GPA4vRvfcM>OQ zMh9c9vB3y1A2#1JcOgD9fV?-@xZAHRHhcl-fULwsW*XC&ZO&%06WNpOSvG-7s|XAjvtjrIlt$wVBTcLaX)aA`DYO?ZR3mhQ~WP{lCVzLEbI_2 zA-)Sh%=(6S9=pT~)}7$aXz8fbOm2cc>vlhtQ| zM8XXHA!2iZAMIgNvnl*dqjT&X#97q-J`(cp+>ZE)M#e52C^eqJllNPYzXT# z+{(1xvvvcElIt~o_C2Ca=!ao_Qt9Uq5iZ3}Iz!MfCXs)tFZ{{S(U5Lg>%CZ zGrh;{h8EW5+wdIX!ZG|b{tv#dFj7c`58Nc|5;SoMtU$i|dQ`YHT*{P6(P@DEsI1DB zlzWx?VFgAgqm{`@d$p(9AJJ2e`W9lsN!m>9MQxjQ2B^skh;ARSeI?^w<9zVpA#DS6aZ%?lng@_ZrH}cJW z=5e!-Mwb+1~U}I+mVE7ho)h=(lZbb&9Ev6=B&*+`ZiWh|!Y~ zCp^oA@hSXd{#E`hAeIA&0qY_P{26$vviK;FMxr=Y>@5wIVx?(PzO+l)C%p>)|Bn2P z?2kC1H9UDO?0*$DI8)71*QnLBAVhs3+Ia1#b{g7c>0R_NeF^++KJ<$=WFyFkH$E~b z)7SKe$6R8*2J3dstZLPFYghqd*+R$9<@(w2Yy{%+WcV|R@n!rO9oAwMlgk`oEVc_) zWeNKlR>je>2yO&MwV0!LU)~>HCWl|e=kiDRAfc-eB8-Q{K8-zOiCx4nx29E+8UP^; zgr?1d9r#W9Q)(s8l3&6e`cQU$SBX(R!^(WE_^CrN}unxt*=acl8 zfWc4dzvwNDiN-YJd1I5|Tn`^;TZ&KM>z%893mhL*;74v3|BDaWPe(8#m}GciUpA2K z%0{s%h~`$Yd!TLSSzmb6uJEQQ+;pJOJwTu5VI2eEMWe8K(=kdX$|DiHEc5}Y%t4Hm zD;yE-7n2cZWg*tv0$ki$ijYPC11^RZ(y}ZEAs!kBWcJ$KqR#ak-|P;7;@dvk36P8`O<;FEq!PbQ@urRr$3>?SZ^Q)i|fN(=ABHHS8*Q6~Ocq<;h^q|w9VrS2^qb0g4J&T@4uLAP-Lu}WL831JDT%&CO zOHRDwCbo%vFLXaxvt5V=E_31hFg}4_0DNBs_?{OEggrtb_RuKcf;^z{ZxN3;SB77g zYRYxx2jp(@T3~~B$2WQkAe-D@3v`| z^!oPi4pBy?F&}7jpK%-`tYzBwW|jEazt_&ie(4H*BEL5kuq*j5c+39%K1KM`{kzd* z@g6BmN|7c@7nCc?Dz#88R!^$|dM`879AZvI4D9IaT+~{Pnrqv7vQo1V`<|hFnPv>j zbcN26$afvH2N9bu>?8}_9RbZURvGyG zVfgFu`cxqDKlB%Yu5*E`D*?R`-y;G|_b~^Xqs(bowYy`B$^= z&z{b$<<3C!FY}|6G0G(6RpoW%ZD7Ow$`M7^MrmU(hg-GxwT}?vv%0D;)|bK8{eZoy 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�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 li`_X9TQDN9D>KvVGtl#)u#1z}c~bKf^vtE$ listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString("name"))); + } + } + result.sort(Comparator.comparing(DatabaseInfo::getName)); + return result; + }); + } + + @Override + public List listSchemas() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW SCHEMAS")) { + while (rs.next()) { + result.add(rs.getString("name")); + } + } + Collections.sort(result); + return result; + }); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT TABLE_NAME, TABLE_TYPE " + + "FROM INFORMATION_SCHEMA.TABLES " + + "WHERE TABLE_SCHEMA = ? " + + "ORDER BY TABLE_NAME"; + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("TABLE_NAME"), + normalizeTableType(rs.getString("TABLE_TYPE")), + null + )); + } + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT TABLE_NAME, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(schema); + appendSnowflakeTableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "TABLE_NAME", constraints); + sql.append(" ORDER BY TABLE_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("TABLE_NAME"), + normalizeTableType(rs.getString("TABLE_TYPE")), + null + )); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + + String sql = "SELECT PROCEDURE_NAME, 'PROCEDURE' " + + "FROM INFORMATION_SCHEMA.PROCEDURES " + + "WHERE PROCEDURE_SCHEMA = ? " + + "ORDER BY PROCEDURE_NAME"; + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return queryConstrainedObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + StringBuilder tableSql = new StringBuilder("SELECT TABLE_NAME AS OBJECT_NAME, TABLE_TYPE AS OBJECT_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(schema); + appendSnowflakeTableTypePredicate(tableSql, args, constraints); + MetadataSqlSupport.appendNameFilter(tableSql, args, "TABLE_NAME", constraints); + branches.add(tableSql.toString()); + } + if (constraints.objectTypeAllowed("PROCEDURE")) { + StringBuilder procedureSql = new StringBuilder("SELECT PROCEDURE_NAME AS OBJECT_NAME, 'PROCEDURE' AS OBJECT_TYPE FROM INFORMATION_SCHEMA.PROCEDURES WHERE PROCEDURE_SCHEMA = ?"); + args.add(schema); + MetadataSqlSupport.appendNameFilter(procedureSql, args, "PROCEDURE_NAME", constraints); + branches.add(procedureSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT OBJECT_NAME, OBJECT_TYPE FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY CASE OBJECT_TYPE WHEN 'BASE TABLE' THEN 0 WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 WHEN 'MATERIALIZED VIEW' THEN 2 WHEN 'PROCEDURE' THEN 3 ELSE 9 END, OBJECT_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo( + rs.getString("OBJECT_NAME"), + normalizeTableType(rs.getString("OBJECT_TYPE")), + schema, + null + )); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String ddlType = objectType.toUpperCase(Locale.ROOT); + String sql = "SELECT GET_DDL('" + ddlType + "', '\"" + schema + "\".\"" + name + "\"')"; + String source = ""; + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + if (rs.next()) { + String value = rs.getString(1); + source = value == null ? "" : value; + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Connection conn = requireConnected(); + List primaryKeys = new ArrayList<>(); + try (java.sql.Statement stmt = conn.createStatement()) { + String qualifiedTable = JdbcIdentifiers.INSTANCE.doubleQuote(schema) + "." + JdbcIdentifiers.INSTANCE.doubleQuote(table); + try (ResultSet rs = stmt.executeQuery("SHOW PRIMARY KEYS IN TABLE " + qualifiedTable)) { + while (rs.next()) { + primaryKeys.add(rs.getString("column_name")); + } + } + } catch (Exception ignored) { + // Snowflake may not return primary key metadata for every object. + } + + List result = new ArrayList<>(); + String sql = "SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, " + + "NUMERIC_PRECISION, NUMERIC_SCALE, CHARACTER_MAXIMUM_LENGTH, COMMENT " + + "FROM INFORMATION_SCHEMA.COLUMNS " + + "WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? " + + "ORDER BY ORDINAL_POSITION"; + try (java.sql.PreparedStatement stmt = conn.prepareStatement(sql)) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String colName = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + colName, + rs.getString("DATA_TYPE"), + "YES".equals(rs.getString("IS_NULLABLE")), + rs.getString("COLUMN_DEFAULT"), + primaryKeys.contains(colName), + null, + blankToNull(rs.getString("COMMENT")), + intOrNull(rs, "NUMERIC_PRECISION"), + intOrNull(rs, "NUMERIC_SCALE"), + intOrNull(rs, "CHARACTER_MAXIMUM_LENGTH") + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + try (java.sql.Statement stmt = requireConnected().createStatement()) { + String qualifiedTable = JdbcIdentifiers.INSTANCE.doubleQuote(schema) + "." + JdbcIdentifiers.INSTANCE.doubleQuote(table); + try (ResultSet rs = stmt.executeQuery("SHOW IMPORTED KEYS IN TABLE " + qualifiedTable)) { + List result = new ArrayList<>(); + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString("fk_name"), + rs.getString("fk_column_name"), + rs.getString("pk_table_name"), + rs.getString("pk_column_name") + )); + } + return result; + } + } catch (Exception ignored) { + return Collections.emptyList(); + } + }); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE SCHEMA " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + private static String buildUrl(ConnectParams params) { + return "jdbc:snowflake://" + params.getHost() + ":" + params.getPort() + "/?db=" + params.getDatabase(); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() || constraints.objectTypeAllowed("PROCEDURE"); + } + + private static void appendSnowflakeTableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (constraints.tableTypeAllowed("MATERIALIZED_VIEW")) { + types.add("MATERIALIZED VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND TABLE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static String normalizeTableType(String tableType) { + if ("BASE TABLE".equals(tableType)) { + return "TABLE"; + } + if ("MATERIALIZED VIEW".equals(tableType)) { + return "MATERIALIZED_VIEW"; + } + return tableType; + } + + private static String blankToNull(String value) { + return value == null || value.isEmpty() ? null : value; + } + + private static Integer intOrNull(ResultSet rs, String column) throws java.sql.SQLException { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + public static void main(String[] args) { + new JsonRpcServer(new SnowflakeAgent()).run(); + } +} diff --git a/agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentMetadataTest.java b/agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentMetadataTest.java new file mode 100644 index 0000000..8708a7f --- /dev/null +++ b/agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentMetadataTest.java @@ -0,0 +1,59 @@ +package com.dbx.agent.snowflake; + +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.TestSupport; +import com.dbx.agent.test.JdbcAgentFake; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class SnowflakeAgentMetadataTest { + @Test + void quotesSchemaAndTableIdentifiersInKeyMetadataSql() { + SnowflakeAgent agent = new SnowflakeAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.getColumns("bad\"schema", "bad\"table"); + agent.listForeignKeys("bad\"schema", "bad\"table"); + + Assertions.assertTrue( + JdbcMetadataSqlFake.statements.contains( + "SHOW PRIMARY KEYS IN TABLE \"bad\"\"schema\".\"bad\"\"table\"" + ) + ); + Assertions.assertTrue( + JdbcMetadataSqlFake.statements.contains( + "SHOW IMPORTED KEYS IN TABLE \"bad\"\"schema\".\"bad\"\"table\"" + ) + ); + } + + @Test + void constrainedTableMetadataPushesFilterTypesAndPaging() { + SnowflakeAgent agent = new SnowflakeAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("PUBLIC", new MetadataListConstraints("ord", 25, 50, List.of("TABLE", "VIEW"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM INFORMATION_SCHEMA.TABLES"), sql); + Assertions.assertTrue(sql.contains("TABLE_TYPE IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("UPPER(TABLE_NAME) LIKE ? ESCAPE '\\\\'"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 25 OFFSET 50"), sql); + } + + @Test + void constrainedObjectMetadataPushesProcedureSearchAndPaging() { + SnowflakeAgent agent = new SnowflakeAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listObjects("PUBLIC", new MetadataListConstraints("sync", 10, null, List.of("PROCEDURE"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM INFORMATION_SCHEMA.PROCEDURES"), sql); + Assertions.assertTrue(sql.contains("UPPER(PROCEDURE_NAME) LIKE ? ESCAPE '\\\\'"), sql); + Assertions.assertTrue(sql.contains("ORDER BY CASE OBJECT_TYPE"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 10"), sql); + } +} diff --git a/agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentTest.java b/agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentTest.java new file mode 100644 index 0000000..11af6e4 --- /dev/null +++ b/agents/drivers/snowflake/src/test/java/com/dbx/agent/snowflake/SnowflakeAgentTest.java @@ -0,0 +1,16 @@ +package com.dbx.agent.snowflake; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; + +class SnowflakeAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new SnowflakeAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } +} diff --git a/agents/drivers/spark/build.gradle b/agents/drivers/spark/build.gradle new file mode 100644 index 0000000..868be72 --- /dev/null +++ b/agents/drivers/spark/build.gradle @@ -0,0 +1,11 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'org.apache.hive:hive-jdbc:4.0.1:standalone' + implementation 'org.slf4j:slf4j-nop:1.7.30' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Apache Spark', 'Main-Class': 'com.dbx.agent.spark.SparkAgent') + } +} diff --git a/agents/drivers/spark/src/main/java/com/dbx/agent/spark/SparkAgent.java b/agents/drivers/spark/src/main/java/com/dbx/agent/spark/SparkAgent.java new file mode 100644 index 0000000..bbe1570 --- /dev/null +++ b/agents/drivers/spark/src/main/java/com/dbx/agent/spark/SparkAgent.java @@ -0,0 +1,341 @@ +package com.dbx.agent.spark; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; + +// Spark Thrift Server speaks the HiveServer2 protocol, so the Spark agent reuses +// the Hive JDBC driver and mirrors the Hive agent's metadata queries (SHOW +// DATABASES / SHOW TABLES / DESCRIBE), which Spark SQL supports as well. +// +// Spark 3.4+ supports multiple catalogs (Paimon, Lance, Iceberg, ...). When the +// user supplies `catalog=` in url_params, the agent switches to that catalog +// after connecting and uses `SHOW TABLES IN ` for listing — which works +// uniformly for catalogs that have databases (Paimon) and those that expose tables +// at the catalog root with no databases (Lance). Mirrors the StarRocks catalog flow. +public final class SparkAgent extends AbstractJdbcAgent { + private String configuredCatalog; + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + // Hive JDBC fetches rows via Thrift FetchResults in batches controlled + // by fetchSize. A large fetchSize can fail with "Error retrieving next + // row" when the result contains large binary/struct columns. Use a + // small fetchSize (50) so each Thrift batch stays within limits. + return super.executeQuery(sql, schema, new ExecuteQueryOptions( + options.getMaxRows(), + 50, + options.getTimeoutSecs() + )); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + return super.executeQueryPage(sql, schema, withSmallFetchSize(options)); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return super.startTableRead(sql, schema, withSmallFetchSize(options)); + } + + private static QueryPageOptions withSmallFetchSize(QueryPageOptions options) { + return new QueryPageOptions( + options.getPageSize(), 50, options.getMaxRows(), options.getTimeoutSecs() + ); + } + + @Override + protected String driverClass() { + return "org.apache.hive.jdbc.HiveDriver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return "jdbc:hive2://" + params.getHost() + ":" + params.getPort() + "/"; + } + + @Override + protected void afterConnect(ConnectParams params, Connection connection) throws Exception { + String catalog = extractCatalogParam(params.getUrl_params()); + configuredCatalog = catalog; + if (catalog != null && !catalog.isEmpty()) { + try (java.sql.Statement stmt = connection.createStatement()) { + stmt.execute("USE " + JdbcIdentifiers.INSTANCE.backtick(catalog)); + } + } + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + // Catalogs like Lance expose tables at the catalog root with no + // databases — SHOW DATABASES returns nothing. Return the catalog + // name itself as the database node so the sidebar can drill in. + if (result.isEmpty() && configuredCatalog != null && !configuredCatalog.isEmpty()) { + result.add(new DatabaseInfo(configuredCatalog)); + } + result.sort(Comparator.comparing(DatabaseInfo::getName)); + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = buildShowTablesSql(schema); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String name = readTableName(rs); + if (name != null && !name.isEmpty()) { + result.add(new TableInfo(name, "TABLE", null)); + } + } + } + result.sort(Comparator.comparing(TableInfo::getName)); + return result; + }); + } + + // With a catalog configured, use `SHOW TABLES IN [.]` which + // works for both catalog-root tables (Lance) and catalog.schema tables (Paimon). + // Without a catalog, fall back to the Hive-style `USE ` + SHOW TABLES. + private String buildShowTablesSql(String schema) throws Exception { + if (configuredCatalog != null && !configuredCatalog.isEmpty()) { + String target = JdbcIdentifiers.INSTANCE.backtick(configuredCatalog); + if (schema != null && !schema.isEmpty() && !schema.equals(configuredCatalog)) { + target += "." + JdbcIdentifiers.INSTANCE.backtick(schema); + } + return "SHOW TABLES IN " + target; + } + useSchema(schema); + return "SHOW TABLES"; + } + + // `SHOW TABLES` (Hive style) returns a single tabName column, while + // `SHOW TABLES IN ` (Spark SQL) returns (database, tableName, + // isTemporary). Pick tableName from whichever column it lives in. + private static String readTableName(ResultSet rs) throws Exception { + int columns = rs.getMetaData().getColumnCount(); + return columns > 1 ? rs.getString(2) : rs.getString(1); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + try { + return getColumnsFromDescribe(schema, table); + } catch (Exception ignored) { + return getColumnsFromMetadata(requireConnected(), schema, table); + } + }); + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + // When a catalog is configured, qualify the USE statement with the + // catalog so switching schemas does not reset the catalog back to the + // default (spark_catalog). + if (configuredCatalog != null && !configuredCatalog.isEmpty()) { + if (schema == null || schema.isEmpty() || schema.equals(configuredCatalog)) { + return "USE " + JdbcIdentifiers.INSTANCE.backtick(configuredCatalog); + } + return "USE " + JdbcIdentifiers.INSTANCE.backtick(configuredCatalog) + + "." + JdbcIdentifiers.INSTANCE.backtick(schema); + } + return "USE " + JdbcIdentifiers.INSTANCE.backtick(schema); + } + + private static String extractCatalogParam(String urlParams) { + if (urlParams == null || urlParams.isEmpty()) { + return null; + } + for (String segment : urlParams.split("&")) { + int eq = segment.indexOf('='); + if (eq <= 0) { + continue; + } + if (segment.substring(0, eq).trim().equalsIgnoreCase("catalog")) { + String value = segment.substring(eq + 1).trim(); + return value.isEmpty() ? null : value; + } + } + return null; + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + private void useSchema(String schema) throws Exception { + try (java.sql.Statement stmt = requireConnected().createStatement()) { + stmt.execute(setSchemaSQL(schema)); + } + } + + private List getColumnsFromDescribe(String schema, String table) throws Exception { + List result = new ArrayList<>(); + // Use catalog-qualified DESCRIBE when a catalog is configured, avoiding + // USE which would generate USE `catalog`.`catalog` when the + // sidebar passes the catalog name as the schema (Lance case). + String describeTarget; + if (configuredCatalog != null && !configuredCatalog.isEmpty()) { + describeTarget = JdbcIdentifiers.INSTANCE.backtick(configuredCatalog); + if (schema != null && !schema.isEmpty() && !schema.equals(configuredCatalog)) { + describeTarget += "." + JdbcIdentifiers.INSTANCE.backtick(schema); + } + describeTarget += "." + JdbcIdentifiers.INSTANCE.backtick(table); + } else { + useSchema(schema); + describeTarget = JdbcIdentifiers.INSTANCE.backtick(table); + } + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("DESCRIBE " + describeTarget)) { + while (rs.next()) { + String colName = trimToNull(rs.getString(1)); + if (colName == null || colName.startsWith("#")) { + continue; + } + result.add(new ColumnInfo( + colName, + trimToEmpty(rs.getString(2)), + true, + null, + false, + null, + optionalComment(rs), + null, + null, + null + )); + } + } + return result; + } + + private static List getColumnsFromMetadata(Connection conn, String schema, String table) throws Exception { + List result = new ArrayList<>(); + DatabaseMetaData meta = conn.getMetaData(); + try (ResultSet rs = meta.getColumns(null, trimToNull(schema), table, "%")) { + while (rs.next()) { + String name = rs.getString("COLUMN_NAME"); + if (trimToNull(name) == null) { + continue; + } + result.add(new ColumnInfo( + name, + trimToEmpty(rs.getString("TYPE_NAME")), + rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls, + rs.getString("COLUMN_DEF"), + false, + null, + rs.getString("REMARKS"), + intOrNull(rs, "COLUMN_SIZE"), + intOrNull(rs, "DECIMAL_DIGITS"), + characterLength(rs) + )); + } + } + return result; + } + + private static String trimToNull(String value) { + if (value == null) { + return null; + } + String trimmed = value.trim(); + return trimmed.isEmpty() ? null : trimmed; + } + + private static String trimToEmpty(String value) { + return value == null ? "" : value.trim(); + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static Integer characterLength(ResultSet rs) throws Exception { + String typeName = rs.getString("TYPE_NAME"); + if (typeName == null) { + return null; + } + String normalized = typeName.toLowerCase(Locale.ROOT); + if (!normalized.contains("char") && !normalized.contains("text") && !normalized.contains("string")) { + return null; + } + return intOrNull(rs, "COLUMN_SIZE"); + } + + private static String optionalComment(ResultSet rs) { + return unchecked(() -> { + try { + String comment = trimToNull(rs.getString(3)); + return comment; + } catch (Exception e) { + return null; + } + }); + } + + public static void main(String[] args) { + new JsonRpcServer(new SparkAgent()).run(); + } +} diff --git a/agents/drivers/sqlserver-legacy/build.gradle b/agents/drivers/sqlserver-legacy/build.gradle new file mode 100644 index 0000000..6930022 --- /dev/null +++ b/agents/drivers/sqlserver-legacy/build.gradle @@ -0,0 +1,12 @@ +dependencies { + implementation 'com.microsoft.sqlserver:mssql-jdbc:13.2.0.jre11' +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'SQL Server legacy compatibility component', + 'Main-Class': 'com.dbx.agent.sqlserverlegacy.SqlServerLegacyAgent' + ) + } +} diff --git a/agents/drivers/sqlserver-legacy/src/main/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgent.java b/agents/drivers/sqlserver-legacy/src/main/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgent.java new file mode 100644 index 0000000..eac8b40 --- /dev/null +++ b/agents/drivers/sqlserver-legacy/src/main/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgent.java @@ -0,0 +1,264 @@ +package com.dbx.agent.sqlserverlegacy; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +import java.security.Security; +import java.sql.Connection; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +public final class SqlServerLegacyAgent extends ConfiguredJdbcAgent { + private static final String TLS_DISABLED_ALGORITHMS_KEY = "jdk.tls.disabledAlgorithms"; + private static final Set LEGACY_TLS_ALGORITHMS_TO_ALLOW = Set.of( + "TLSV1", + "TLSV1.1", + "DTLSV1.0", + "3DES_EDE_CBC", + "RC4", + "DES", + "MD5WITHRSA", + "DH KEYSIZE < 1024", + "RSA KEYSIZE < 1024" + ); + private static final Set INTERNAL_URL_PARAMS = Set.of( + "SQLSERVERENCRYPTION", + "ENCRYPT", + "TRUSTSERVERCERTIFICATE", + "SSLPROTOCOL" + ); + private static final JdbcAgentProfile PROFILE = new JdbcAgentProfile( + "com.microsoft.sqlserver.jdbc.SQLServerDriver", + "jdbc:sqlserver://{host}:{port};databaseName={database};", + 1433, + true, + Set.of("INFORMATION_SCHEMA", "SYS"), + Arrays.asList("TABLE", "VIEW", "SYSTEM TABLE") + ); + + public SqlServerLegacyAgent() { + super(PROFILE); + // AbstractJdbcAgent loads the JDBC driver before building the URL, so relax + // the legacy TLS policy here before the driver can initialize JSSE. + enableLegacyTlsAlgorithms(); + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return legacyTlsUrl(params); + } + + @Override + protected Connection openConnection(ConnectParams params) throws Exception { + try { + return super.openConnection(params); + } catch (SQLException error) { + throw withLegacyTlsDiagnostics(error); + } + } + + static String legacyTlsUrl(ConnectParams params) { + Map properties = baseConnectionProperties(params); + properties.put("encrypt", "true"); + properties.put("trustServerCertificate", "true"); + properties.put("sslProtocol", "TLSv1"); + return appendProperties(baseJdbcUrl(params), properties); + } + + static String relaxedDisabledAlgorithms(String current) { + if (current == null || current.trim().isEmpty()) { + return ""; + } + + List kept = new ArrayList<>(); + for (String rawPart : current.split(",")) { + String part = rawPart.trim(); + if (part.isEmpty()) { + continue; + } + if (!LEGACY_TLS_ALGORITHMS_TO_ALLOW.contains(part.toUpperCase(Locale.ROOT))) { + kept.add(part); + } + } + return String.join(", ", kept); + } + + static String legacyTlsDiagnostics() { + String disabledAlgorithms = Security.getProperty(TLS_DISABLED_ALGORITHMS_KEY); + return "DBX SQL Server legacy TLS diagnostics: java=" + System.getProperty("java.version", "unknown") + + ", javaVendor=" + System.getProperty("java.vendor", "unknown") + + ", jdbc=" + jdbcDriverVersion() + + ", sslProtocol=TLSv1" + + ", tlsV1Disabled=" + isDisabled(disabledAlgorithms, "TLSV1") + + ", 3desDisabled=" + isDisabled(disabledAlgorithms, "3DES_EDE_CBC") + + ", rc4Disabled=" + isDisabled(disabledAlgorithms, "RC4"); + } + + static SQLException withLegacyTlsDiagnostics(SQLException error) { + String message = error.getMessage() == null ? error.toString() : error.getMessage(); + return new SQLException( + message + "\n\n" + legacyTlsDiagnostics(), + error.getSQLState(), + error.getErrorCode(), + error + ); + } + + private static boolean isDisabled(String disabledAlgorithms, String algorithm) { + if (disabledAlgorithms == null || disabledAlgorithms.trim().isEmpty()) { + return false; + } + for (String rawPart : disabledAlgorithms.split(",")) { + if (algorithm.equals(rawPart.trim().toUpperCase(Locale.ROOT))) { + return true; + } + } + return false; + } + + private static String jdbcDriverVersion() { + try { + Driver driver = DriverManager.getDriver("jdbc:sqlserver://localhost"); + Package driverPackage = driver.getClass().getPackage(); + String implementationVersion = driverPackage == null ? null : driverPackage.getImplementationVersion(); + if (implementationVersion != null && !implementationVersion.trim().isEmpty()) { + return implementationVersion; + } + return driver.getMajorVersion() + "." + driver.getMinorVersion(); + } catch (SQLException ignored) { + return "unknown"; + } + } + + private static void enableLegacyTlsAlgorithms() { + String current = Security.getProperty(TLS_DISABLED_ALGORITHMS_KEY); + String relaxed = relaxedDisabledAlgorithms(current); + if (!Objects.equals(current, relaxed)) { + Security.setProperty(TLS_DISABLED_ALGORITHMS_KEY, relaxed); + } + } + + private static String baseJdbcUrl(ConnectParams params) { + String connectionString = params.getConnection_string(); + if (connectionString != null && !connectionString.trim().isEmpty()) { + return sanitizeSqlServerUrl(connectionString.trim()); + } + + String host = normalizedSqlServerHost(params.getHost()); + StringBuilder url = new StringBuilder("jdbc:sqlserver://") + .append(host); + if (!usesNamedInstance(host)) { + int port = params.getPort() > 0 ? params.getPort() : PROFILE.getDefaultPort(); + url.append(":").append(port); + } + if (params.getDatabase() != null && !params.getDatabase().trim().isEmpty()) { + url.append(";databaseName=").append(params.getDatabase().trim()); + } + return trimSqlServerUrl(url.toString()); + } + + private static String normalizedSqlServerHost(String value) { + String host = value == null ? "" : value.trim(); + int separator = host.indexOf('\\'); + if (separator <= 0 || separator >= host.length() - 1) { + return host; + } + + String server = host.substring(0, separator).trim(); + String instance = host.substring(separator + 1).trim(); + if (server.isEmpty() || instance.isEmpty()) { + return host; + } + return server + "\\" + instance; + } + + private static boolean usesNamedInstance(String host) { + int separator = host.indexOf('\\'); + return separator > 0 && separator < host.length() - 1; + } + + private static String sanitizeSqlServerUrl(String value) { + String trimmed = trimSqlServerUrl(value); + String[] parts = trimmed.split(";"); + if (parts.length <= 1) { + return trimmed; + } + StringBuilder result = new StringBuilder(parts[0].trim()); + for (int i = 1; i < parts.length; i++) { + String part = parts[i].trim(); + if (part.isEmpty()) { + continue; + } + int separator = part.indexOf('='); + if (separator <= 0) { + result.append(";").append(part); + continue; + } + String key = part.substring(0, separator).trim(); + if (!INTERNAL_URL_PARAMS.contains(key.toUpperCase(Locale.ROOT))) { + result.append(";").append(part); + } + } + return result.toString(); + } + + private static Map baseConnectionProperties(ConnectParams params) { + Map properties = new LinkedHashMap<>(); + String urlParams = params.getUrl_params(); + if (urlParams == null || urlParams.trim().isEmpty()) { + return properties; + } + + for (String pair : urlParams.trim().split("[&;]")) { + String value = pair.trim(); + while (value.startsWith("?") || value.startsWith("&") || value.startsWith(";")) { + value = value.substring(1).trim(); + } + if (value.isEmpty()) { + continue; + } + int separator = value.indexOf('='); + if (separator <= 0) { + continue; + } + String key = value.substring(0, separator).trim(); + String normalizedKey = key.toUpperCase(Locale.ROOT); + if (key.isEmpty() || INTERNAL_URL_PARAMS.contains(normalizedKey)) { + continue; + } + properties.put(key, value.substring(separator + 1).trim()); + } + return properties; + } + + private static String appendProperties(String base, Map properties) { + StringBuilder url = new StringBuilder(trimSqlServerUrl(base)); + for (Map.Entry entry : properties.entrySet()) { + url.append(";").append(entry.getKey()).append("=").append(entry.getValue()); + } + return url.toString(); + } + + private static String trimSqlServerUrl(String value) { + String trimmed = value.trim(); + while (trimmed.endsWith(";") || trimmed.endsWith("&") || trimmed.endsWith("?")) { + trimmed = trimmed.substring(0, trimmed.length() - 1).trim(); + } + return trimmed; + } + + public static void main(String[] args) throws Exception { + new JsonRpcServer(new SqlServerLegacyAgent()).run(); + } +} diff --git a/agents/drivers/sqlserver-legacy/src/test/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgentTest.java b/agents/drivers/sqlserver-legacy/src/test/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgentTest.java new file mode 100644 index 0000000..2f3249f --- /dev/null +++ b/agents/drivers/sqlserver-legacy/src/test/java/com/dbx/agent/sqlserverlegacy/SqlServerLegacyAgentTest.java @@ -0,0 +1,111 @@ +package com.dbx.agent.sqlserverlegacy; + +import com.dbx.agent.ConnectParams; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.security.Security; +import java.sql.SQLException; + +class SqlServerLegacyAgentTest { + @Test + void constructorRelaxesLegacyTlsPolicyBeforeDriverLoading() { + String key = "jdk.tls.disabledAlgorithms"; + String original = Security.getProperty(key); + try { + Security.setProperty(key, "TLSv1, TLSv1.1, 3DES_EDE_CBC, EC keySize < 224"); + + new SqlServerLegacyAgent(); + + Assertions.assertEquals("EC keySize < 224", Security.getProperty(key)); + String diagnostics = SqlServerLegacyAgent.legacyTlsDiagnostics(); + Assertions.assertTrue(diagnostics.contains("sslProtocol=TLSv1")); + Assertions.assertTrue(diagnostics.contains("tlsV1Disabled=false")); + Assertions.assertTrue(diagnostics.contains("3desDisabled=false")); + Assertions.assertTrue(diagnostics.contains("rc4Disabled=false")); + } finally { + Security.setProperty(key, original == null ? "" : original); + } + } + + @Test + void connectionErrorsPreserveDetailsAndIncludeRuntimeDiagnostics() { + SQLException original = new SQLException("TLS handshake failed", "08001", 1234); + + SQLException error = SqlServerLegacyAgent.withLegacyTlsDiagnostics(original); + + Assertions.assertEquals("08001", error.getSQLState()); + Assertions.assertEquals(1234, error.getErrorCode()); + Assertions.assertSame(original, error.getCause()); + Assertions.assertTrue(error.getMessage().contains("TLS handshake failed")); + Assertions.assertTrue(error.getMessage().contains("DBX SQL Server legacy TLS diagnostics:")); + } + + @Test + void legacyTlsUrlUsesSqlServerTlsV1Properties() { + ConnectParams params = new ConnectParams( + "db.example.com", + 14330, + "appdb", + "sa", + "secret", + "applicationName=dbx;sqlserverEncryption=disabled;encrypt=false;trustServerCertificate=false;sslProtocol=TLSv1.2", + "", + false + ); + + Assertions.assertEquals( + "jdbc:sqlserver://db.example.com:14330;databaseName=appdb;applicationName=dbx;encrypt=true;trustServerCertificate=true;sslProtocol=TLSv1", + SqlServerLegacyAgent.legacyTlsUrl(params) + ); + } + + @Test + void legacyTlsUrlKeepsNamedInstanceWithoutPort() { + ConnectParams params = new ConnectParams( + "db.example.com\\SQLEXPRESS", + 1433, + "appdb", + "sa", + "secret", + "applicationName=dbx", + "", + false + ); + + Assertions.assertEquals( + "jdbc:sqlserver://db.example.com\\SQLEXPRESS;databaseName=appdb;applicationName=dbx;encrypt=true;trustServerCertificate=true;sslProtocol=TLSv1", + SqlServerLegacyAgent.legacyTlsUrl(params) + ); + } + + @Test + void legacyTlsUrlNormalizesExplicitConnectionString() { + ConnectParams params = new ConnectParams( + "ignored", + 0, + "", + "sa", + "secret", + "applicationName=dbx", + "jdbc:sqlserver://db.example.com:1433;encrypt=false;databaseName=custom;trustServerCertificate=false;sslProtocol=TLSv1.2;", + false + ); + + Assertions.assertEquals( + "jdbc:sqlserver://db.example.com:1433;databaseName=custom;applicationName=dbx;encrypt=true;trustServerCertificate=true;sslProtocol=TLSv1", + SqlServerLegacyAgent.legacyTlsUrl(params) + ); + } + + @Test + void relaxedDisabledAlgorithmsRemovesOnlyLegacyTlsEntries() { + String current = + "SSLv3, TLSv1, TLSv1.1, DTLSv1.0, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL"; + + Assertions.assertEquals( + "SSLv3, EC keySize < 224, anon, NULL", + SqlServerLegacyAgent.relaxedDisabledAlgorithms(current) + ); + } +} diff --git a/agents/drivers/sundb/build.gradle b/agents/drivers/sundb/build.gradle new file mode 100644 index 0000000..ef14a73 --- /dev/null +++ b/agents/drivers/sundb/build.gradle @@ -0,0 +1,13 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} + +tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'SunDB', + 'Agent-External-Driver': 'true', + 'Main-Class': 'com.dbx.agent.sundb.SundbAgent' + ) + } +} diff --git a/agents/drivers/sundb/src/main/java/com/dbx/agent/sundb/SundbAgent.java b/agents/drivers/sundb/src/main/java/com/dbx/agent/sundb/SundbAgent.java new file mode 100644 index 0000000..e36620f --- /dev/null +++ b/agents/drivers/sundb/src/main/java/com/dbx/agent/sundb/SundbAgent.java @@ -0,0 +1,530 @@ +package com.dbx.agent.sundb; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +public final class SundbAgent extends BaseDatabaseAgent { + private Connection connection; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + Class.forName("com.sundb.jdbc.SundbDriver"); + String url = buildUrl(params); + connection = DriverManager.getConnection(url, params.getUsername(), params.getPassword()); + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + Class.forName("com.sundb.jdbc.SundbDriver"); + String url = buildUrl(params); + try (Connection conn = DriverManager.getConnection(url, params.getUsername(), params.getPassword())) { + return conn.isValid(5); + } + }); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (var stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + List result = new ArrayList<>(); + for (DatabaseInfo database : listDatabases()) { + result.add(database.getName()); + } + return result; + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + "SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? ORDER BY TABLE_NAME" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String tableType = rs.getString("TABLE_TYPE"); + if ("BASE TABLE".equals(tableType)) { + tableType = "TABLE"; + } + result.add(new TableInfo(rs.getString("TABLE_NAME"), tableType, null)); + } + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(schema); + appendInformationSchemaTableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "TABLE_NAME", constraints); + sql.append(" ORDER BY TABLE_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (var stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo(rs.getString("TABLE_NAME"), normalizeTableType(rs.getString("TABLE_TYPE")), null)); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List listObjects(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + + try (var stmt = requireConnected().prepareStatement( + "SELECT ROUTINE_NAME, ROUTINE_TYPE FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ? ORDER BY ROUTINE_NAME" + )) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), rs.getString(2), schema, null)); + } + } + } + return result; + }); + } + + @Override + public List listObjects(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listObjects(schema); + } + if (!includesSupportedObjects(normalized)) { + return List.of(); + } + try { + return queryConstrainedObjects(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterObjects(listObjects(schema)); + } + } + + private List queryConstrainedObjects(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List branches = new ArrayList<>(); + List args = new ArrayList<>(); + if (constraints.includesTableLikeTypes()) { + StringBuilder tableSql = new StringBuilder("SELECT TABLE_NAME AS OBJECT_NAME, TABLE_TYPE AS OBJECT_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?"); + args.add(schema); + appendInformationSchemaTableTypePredicate(tableSql, args, constraints); + MetadataSqlSupport.appendNameFilter(tableSql, args, "TABLE_NAME", constraints); + branches.add(tableSql.toString()); + } + if (constraints.objectTypeAllowed("PROCEDURE") || constraints.objectTypeAllowed("FUNCTION")) { + StringBuilder routineSql = new StringBuilder("SELECT ROUTINE_NAME AS OBJECT_NAME, ROUTINE_TYPE AS OBJECT_TYPE FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = ?"); + args.add(schema); + appendRoutineTypePredicate(routineSql, args, constraints); + MetadataSqlSupport.appendNameFilter(routineSql, args, "ROUTINE_NAME", constraints); + branches.add(routineSql.toString()); + } + if (branches.isEmpty()) { + return List.of(); + } + StringBuilder sql = new StringBuilder("SELECT OBJECT_NAME, OBJECT_TYPE FROM (") + .append(String.join(" UNION ALL ", branches)) + .append(") metadata_objects ORDER BY CASE OBJECT_TYPE WHEN 'BASE TABLE' THEN 0 WHEN 'TABLE' THEN 0 WHEN 'VIEW' THEN 1 WHEN 'PROCEDURE' THEN 2 WHEN 'FUNCTION' THEN 3 ELSE 9 END, OBJECT_NAME"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (var stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ObjectInfo(rs.getString(1), normalizeTableType(rs.getString(2)), schema, null)); + } + } + } + return constraints.withoutPaging().filterObjects(result); + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + return unchecked(() -> { + String sql = switch (objectType.toUpperCase(Locale.ROOT)) { + case "VIEW" -> "SHOW CREATE VIEW `" + name.replace("`", "``") + "`"; + case "PROCEDURE" -> "SHOW CREATE PROCEDURE `" + name.replace("`", "``") + "`"; + case "FUNCTION" -> "SHOW CREATE FUNCTION `" + name.replace("`", "``") + "`"; + default -> throw new IllegalArgumentException("Unsupported object type: " + objectType); + }; + + String source = ""; + try (var stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + if (rs.next()) { + int index = "VIEW".equals(objectType.toUpperCase(Locale.ROOT)) ? 1 : 2; + String value = rs.getString(index + 1); + source = value == null ? "" : value; + } + } + return new ObjectSource(name, objectType, schema, source); + }); + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + Set primaryKeys = new HashSet<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT COLUMN_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = ? + AND TABLE_NAME = ? + AND CONSTRAINT_NAME = 'PRIMARY' + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + primaryKeys.add(rs.getString("COLUMN_NAME")); + } + } + } + + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT, + NUMERIC_PRECISION, NUMERIC_SCALE, CHARACTER_MAXIMUM_LENGTH + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? + ORDER BY ORDINAL_POSITION + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + String columnName = rs.getString("COLUMN_NAME"); + result.add(new ColumnInfo( + columnName, + rs.getString("COLUMN_TYPE"), + "YES".equals(rs.getString("IS_NULLABLE")), + rs.getString("COLUMN_DEFAULT"), + primaryKeys.contains(columnName), + rs.getString("EXTRA"), + emptyToNull(rs.getString("COLUMN_COMMENT")), + integerOrNull(rs, "NUMERIC_PRECISION"), + integerOrNull(rs, "NUMERIC_SCALE"), + numberToIntOrNull(rs, "CHARACTER_MAXIMUM_LENGTH") + )); + } + } + } + return result; + }); + } + + @Override + public List listIndexes(String schema, String table) { + return unchecked(() -> { + try (var stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery( + "SHOW INDEX FROM " + JdbcIdentifiers.INSTANCE.backtick(table) + + " FROM " + JdbcIdentifiers.INSTANCE.backtick(schema) + )) { + Map> indexMap = new LinkedHashMap<>(); + Map uniqueMap = new HashMap<>(); + Map typeMap = new HashMap<>(); + + while (rs.next()) { + String indexName = rs.getString("Key_name"); + String columnName = rs.getString("Column_name"); + int sequence = rs.getInt("Seq_in_index"); + int nonUnique = rs.getInt("Non_unique"); + String indexType = rs.getString("Index_type"); + + indexMap.computeIfAbsent(indexName, ignored -> new ArrayList<>()) + .add(new IndexColumn(sequence, columnName)); + uniqueMap.put(indexName, nonUnique == 0); + typeMap.put(indexName, indexType); + } + + List result = new ArrayList<>(); + for (Map.Entry> entry : indexMap.entrySet()) { + String name = entry.getKey(); + List columns = entry.getValue().stream() + .sorted(Comparator.comparingInt(IndexColumn::sequence)) + .map(IndexColumn::name) + .toList(); + result.add(new IndexInfo( + name, + columns, + uniqueMap.getOrDefault(name, false), + "PRIMARY".equals(name), + null, + typeMap.get(name), + null, + null + )); + } + return result; + } + }); + } + + @Override + public List listForeignKeys(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_SCHEMA = ? + AND TABLE_NAME = ? + AND REFERENCED_TABLE_NAME IS NOT NULL + ORDER BY CONSTRAINT_NAME + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new ForeignKeyInfo( + rs.getString("CONSTRAINT_NAME"), + rs.getString("COLUMN_NAME"), + rs.getString("REFERENCED_TABLE_NAME"), + rs.getString("REFERENCED_COLUMN_NAME") + )); + } + } + } + return result; + }); + } + + @Override + public List listTriggers(String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + try (var stmt = requireConnected().prepareStatement( + """ + SELECT TRIGGER_NAME, EVENT_MANIPULATION, ACTION_TIMING + FROM information_schema.TRIGGERS + WHERE TRIGGER_SCHEMA = ? AND EVENT_OBJECT_TABLE = ? + ORDER BY TRIGGER_NAME + """ + )) { + stmt.setString(1, schema); + stmt.setString(2, table); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TriggerInfo( + rs.getString("TRIGGER_NAME"), + rs.getString("EVENT_MANIPULATION"), + rs.getString("ACTION_TIMING") + )); + } + } + } + return result; + }); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::getResultValue + ); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + JdbcIdentifiers.INSTANCE.backtick(schema); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private static String buildUrl(ConnectParams params) { + return "jdbc:sundb://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static boolean includesSupportedObjects(MetadataListConstraints constraints) { + return constraints.includesTableLikeTypes() + || constraints.objectTypeAllowed("PROCEDURE") + || constraints.objectTypeAllowed("FUNCTION"); + } + + private static void appendInformationSchemaTableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND TABLE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static void appendRoutineTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.objectTypeAllowed("PROCEDURE")) { + types.add("PROCEDURE"); + } + if (constraints.objectTypeAllowed("FUNCTION")) { + types.add("FUNCTION"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND ROUTINE_TYPE IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static String normalizeTableType(String tableType) { + return "BASE TABLE".equals(tableType) ? "TABLE" : tableType; + } + + private static Integer integerOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Integer ? (Integer) value : null; + } + + private static Integer numberToIntOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static String emptyToNull(String value) { + return value == null || value.isEmpty() ? null : value; + } + + private Object getResultValue(ResultSet rs, int index, int sqlType) { + try { + Object value = switch (sqlType) { + case Types.BIGINT -> rs.getLong(index); + case Types.INTEGER, Types.SMALLINT, Types.TINYINT -> rs.getInt(index); + case Types.FLOAT, Types.REAL -> rs.getFloat(index); + case Types.DOUBLE -> rs.getDouble(index); + case Types.DECIMAL, Types.NUMERIC -> rs.getBigDecimal(index); + case Types.BOOLEAN, Types.BIT -> rs.getBoolean(index); + default -> rs.getString(index); + }; + return rs.wasNull() ? null : value; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private record IndexColumn(int sequence, String name) { + } + + public static void main(String[] args) { + new JsonRpcServer(new SundbAgent()).run(); + } +} diff --git a/agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentMetadataTest.java b/agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentMetadataTest.java new file mode 100644 index 0000000..2fd7c91 --- /dev/null +++ b/agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentMetadataTest.java @@ -0,0 +1,53 @@ +package com.dbx.agent.sundb; + +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.TestSupport; +import com.dbx.agent.test.JdbcAgentFake; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import java.util.Collections; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class SundbAgentMetadataTest { + @Test + void quotesSchemaAndTableIdentifiersInIndexMetadataSql() { + SundbAgent agent = new SundbAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listIndexes("bad`schema", "bad`table"); + + Assertions.assertEquals( + Collections.singletonList("SHOW INDEX FROM `bad``table` FROM `bad``schema`"), + JdbcMetadataSqlFake.statements + ); + } + + @Test + void constrainedTableMetadataPushesFilterTypesAndPaging() { + SundbAgent agent = new SundbAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("app", new MetadataListConstraints("ord", 25, 50, List.of("TABLE", "VIEW"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM information_schema.TABLES"), sql); + Assertions.assertTrue(sql.contains("TABLE_TYPE IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("UPPER(TABLE_NAME) LIKE ? ESCAPE '\\\\'"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 25 OFFSET 50"), sql); + } + + @Test + void constrainedObjectMetadataPushesRoutineTypesAndPaging() { + SundbAgent agent = new SundbAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listObjects("app", new MetadataListConstraints("sync", 10, null, List.of("PROCEDURE", "FUNCTION"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM information_schema.ROUTINES"), sql); + Assertions.assertTrue(sql.contains("ROUTINE_TYPE IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("ORDER BY CASE OBJECT_TYPE"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 10"), sql); + } +} diff --git a/agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentTest.java b/agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentTest.java new file mode 100644 index 0000000..1a56380 --- /dev/null +++ b/agents/drivers/sundb/src/test/java/com/dbx/agent/sundb/SundbAgentTest.java @@ -0,0 +1,16 @@ +package com.dbx.agent.sundb; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; + +class SundbAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new SundbAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } +} diff --git a/agents/drivers/tdengine/build.gradle b/agents/drivers/tdengine/build.gradle new file mode 100644 index 0000000..3d53791 --- /dev/null +++ b/agents/drivers/tdengine/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.taosdata.jdbc:taos-jdbcdriver:3.6.3' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'TDengine', 'Main-Class': 'com.dbx.agent.tdengine.TDengineAgent') + } +} diff --git a/agents/drivers/tdengine/src/main/java/com/dbx/agent/tdengine/TDengineAgent.java b/agents/drivers/tdengine/src/main/java/com/dbx/agent/tdengine/TDengineAgent.java new file mode 100644 index 0000000..f9cb2e2 --- /dev/null +++ b/agents/drivers/tdengine/src/main/java/com/dbx/agent/tdengine/TDengineAgent.java @@ -0,0 +1,743 @@ +package com.dbx.agent.tdengine; + +import com.dbx.agent.BaseDatabaseAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.ObjectInfo; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Timestamp; +import java.sql.Types; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class TDengineAgent extends BaseDatabaseAgent { + private static final DateTimeFormatter TDENGINE_TIMESTAMP_FORMAT = + DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); + private static final Pattern NUMERIC_PRECISION_PATTERN = + Pattern.compile("(?i)^(decimal|numeric)\\((\\d+)(?:,\\s*\\d+)?\\)"); + private static final Pattern NUMERIC_SCALE_PATTERN = + Pattern.compile("(?i)^(decimal|numeric)\\(\\d+,\\s*(\\d+)\\)"); + private static final Pattern CHARACTER_LENGTH_PATTERN = + Pattern.compile("(?i)^(binary|nchar|varchar|varbinary)\\((\\d+)\\)"); + private static final Pattern COMPOSITE_KEY_PATTERN = + Pattern.compile("(?i)\\bCOMPOSITE\\s+KEY\\b"); + + private Connection connection; + + @Override + public Connection getConnection() { + return connection; + } + + @Override + public void connect(ConnectParams params) { + uncheckedVoid(() -> { + connection = TDengineConnectionFactory.open(params); + }); + } + + @Override + public boolean testConnection(ConnectParams params) { + return unchecked(() -> { + try (Connection conn = TDengineConnectionFactory.open(params)) { + return conn.isValid(5); + } + }); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW DATABASES")) { + while (rs.next()) { + String name = rs.getString(1); + if (!isSystemDatabase(name)) { + result.add(new DatabaseInfo(name)); + } + } + } + return result; + }); + } + + @Override + public List listSchemas() { + return Collections.emptyList(); + } + + @Override + public List listTables(String schema) { + return listTables(schema, MetadataListConstraints.NONE); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (!normalized.tableTypeAllowed("TABLE")) { + return Collections.emptyList(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException ignored) { + // TDengine 2.x does not expose information_schema.ins_stables/ins_tables. + return normalized.filterTables(listTablesLegacy(schema)); + } + } + + private List listTablesLegacy(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + result.addAll(queryTables("SHOW " + quoteQualifiedPrefix(schema) + "STABLES", "STABLE")); + result.addAll(queryTables("SHOW " + quoteQualifiedPrefix(schema) + "TABLES", "TABLE")); + + Map distinct = new LinkedHashMap<>(); + for (TableInfo table : result) { + distinct.putIfAbsent(table.getTable_type() + ":" + table.getName(), table); + } + List sorted = new ArrayList<>(distinct.values()); + sortTablesForHierarchy(sorted); + return sorted; + }); + } + + @Override + public List listObjects(String schema) { + List result = new ArrayList<>(); + for (TableInfo table : listTables(schema)) { + result.add(new ObjectInfo(table.getName(), table.getTable_type(), schema, table.getComment())); + } + return result; + } + + @Override + public List getColumns(String schema, String table) { + return unchecked(() -> { + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("DESCRIBE " + qualifiedName(schema, table))) { + return readDescribeColumns(rs); + } + }); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + String source = getCreateSql(schema, name, objectType); + if (source.isBlank()) { + source = getTableDdl(schema, name); + } + return new ObjectSource(name, objectType, schema, source); + } + + @Override + public String getTableDdl(String schema, String table) { + String source = getCreateSql(schema, table, "STABLE"); + if (source.isBlank()) { + source = getCreateSql(schema, table, "TABLE"); + } + if (source.isBlank()) { + return super.getTableDdl(schema, table); + } + return source; + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public QueryResult executeQuery(String sql, String schema, ExecuteQueryOptions options) { + return JdbcExecutor.INSTANCE.execute( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options.getMaxRows(), + options.getFetchSize(), + options.getTimeoutSecs(), + this::tdengineResultValue + ); + } + + @Override + public QueryPageResult executeQueryPage(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.executePage( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + this::tdengineResultValue + ); + } + + @Override + public QueryPageResult startTableRead(String sql, String schema, QueryPageOptions options) { + return JdbcExecutor.INSTANCE.startTableRead( + requireConnected(), + sql, + schema, + this::setSchemaSQL, + options, + this::tdengineResultValue + ); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + quoteIdentifier(schema); + } + + @Override + public void disconnect() { + uncheckedVoid(() -> { + if (connection != null) { + connection.close(); + } + connection = null; + }); + } + + private List queryTables(String sql, String tableType) throws Exception { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + result.add(new TableInfo(rs.getString(1), tableType, null)); + } + } + return result; + } + + private List queryConstrainedTables(String database, MetadataListConstraints constraints) { + return unchecked(() -> { + TableMetadataQuery query = buildTableMetadataQuery(database, constraints); + List result = new ArrayList<>(); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(query.sql())) { + MetadataSqlSupport.bind(stmt, query.args()); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString(1), + rs.getString(2), + optionalString(rs, 3), + null, + optionalString(rs, 4) + )); + } + } + } + MetadataListConstraints postFilter = constraints.hasLimit() ? constraints.withoutPaging() : constraints; + return postFilter.filterTables(result); + }); + } + + static TableMetadataQuery buildTableMetadataQuery(String database, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder(""" + SELECT table_name, table_type, table_comment, parent_name + FROM ( + SELECT stable_name AS table_name, + 'STABLE' AS table_type, + table_comment, + CAST(NULL AS VARCHAR(192)) AS parent_name, + stable_name AS hierarchy_name, + 0 AS hierarchy_rank + FROM information_schema.ins_stables + WHERE db_name = ? + UNION ALL + SELECT table_name, + 'TABLE' AS table_type, + table_comment, + stable_name AS parent_name, + CASE WHEN stable_name IS NULL THEN table_name ELSE stable_name END AS hierarchy_name, + 1 AS hierarchy_rank + FROM information_schema.ins_tables + WHERE db_name = ? + ) metadata + WHERE 1 = 1 + """.stripIndent().trim()); + args.add(database); + args.add(database); + if (normalized.hasFilter()) { + String pattern = normalized.fuzzyLikePattern(); + sql.append(" AND (table_name LIKE ? OR table_comment LIKE ?)"); + args.add(pattern); + args.add(pattern); + } + sql.append(" ORDER BY hierarchy_name, hierarchy_rank, table_name"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, normalized); + return new TableMetadataQuery(sql.toString(), args); + } + + static final class TableMetadataQuery { + private final String sql; + private final List args; + + TableMetadataQuery(String sql, List args) { + this.sql = sql; + this.args = args; + } + + String sql() { + return sql; + } + + List args() { + return args; + } + } + + static void sortTablesForHierarchy(List tables) { + tables.sort((left, right) -> { + String leftGroup = hierarchyGroupName(left); + String rightGroup = hierarchyGroupName(right); + int groupCompared = leftGroup.compareTo(rightGroup); + if (groupCompared != 0) { + return groupCompared; + } + + boolean leftIsParent = left.getParent_name() == null; + boolean rightIsParent = right.getParent_name() == null; + if (leftIsParent != rightIsParent) { + return leftIsParent ? -1 : 1; + } + return left.getName().toLowerCase(Locale.ROOT).compareTo(right.getName().toLowerCase(Locale.ROOT)); + }); + } + + private static String hierarchyGroupName(TableInfo table) { + String parentName = table.getParent_name(); + String groupName = parentName == null || parentName.trim().isEmpty() ? table.getName() : parentName; + return groupName.toLowerCase(Locale.ROOT); + } + + static List readDescribeColumns(ResultSet rs) throws Exception { + List result = new ArrayList<>(); + int ordinal = 0; + while (rs.next()) { + ordinal += 1; + String name = rs.getString(1); + String dataType = coalesce(rs.getString(2)); + String note = optionalString(rs, 4); + boolean isTag = note != null && note.toUpperCase(Locale.ROOT).contains("TAG"); + boolean isPrimaryKey = !isTag && (ordinal == 1 || (note != null && COMPOSITE_KEY_PATTERN.matcher(note).find())); + result.add(new ColumnInfo( + name, + dataType, + !isPrimaryKey, + null, + isPrimaryKey, + note, + isTag ? "TAG" : null, + parseNumericPrecision(dataType), + parseNumericScale(dataType), + parseCharacterMaximumLength(dataType) + )); + } + return result; + } + + private String getCreateSql(String schema, String name, String objectType) { + String showType = switch (objectType.toUpperCase(Locale.ROOT)) { + case "STABLE", "SUPER TABLE", "SUPERTABLE" -> "STABLE"; + case "TABLE", "BASE TABLE", "CHILD TABLE" -> "TABLE"; + default -> null; + }; + if (showType == null) { + return ""; + } + + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW CREATE " + showType + " " + qualifiedName(schema, name))) { + if (!rs.next()) { + return ""; + } + int columnCount = rs.getMetaData().getColumnCount(); + for (int i = 2; i <= columnCount; i++) { + String value = rs.getString(i); + if (value != null && value.toUpperCase(Locale.ROOT).contains("CREATE")) { + return value; + } + } + String value = rs.getString(columnCount); + return value == null ? "" : value; + } catch (Exception e) { + return ""; + } + } + + private Object tdengineResultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = switch (sqlType) { + case Types.BIGINT -> rs.getLong(index); + case Types.INTEGER, Types.SMALLINT, Types.TINYINT -> rs.getInt(index); + case Types.FLOAT, Types.REAL -> rs.getFloat(index); + case Types.DOUBLE -> rs.getDouble(index); + case Types.DECIMAL, Types.NUMERIC -> rs.getBigDecimal(index); + case Types.BOOLEAN, Types.BIT -> rs.getBoolean(index); + default -> rs.getObject(index); + }; + return rs.wasNull() ? null : decodeTdengineValue(value); + }); + } + + public static Object decodeTdengineValue(Object value) { + if (value instanceof byte[] bytes) { + return new String(bytes, StandardCharsets.UTF_8); + } + if (value instanceof Timestamp timestamp) { + return TDENGINE_TIMESTAMP_FORMAT.format(timestamp.toLocalDateTime()); + } + return value; + } + + private static String quoteQualifiedPrefix(String schema) { + String trimmed = schema.trim(); + return trimmed.isEmpty() ? "" : quoteIdentifier(trimmed) + "."; + } + + private static String qualifiedName(String schema, String name) { + String table = quoteIdentifier(name); + String trimmed = schema.trim(); + return trimmed.isEmpty() ? table : quoteIdentifier(trimmed) + "." + table; + } + + private static String quoteIdentifier(String identifier) { + return "`" + identifier.replace("`", "``") + "`"; + } + + private static boolean isSystemDatabase(String name) { + if (name == null) { + return false; + } + String normalized = name.trim().toLowerCase(Locale.ROOT); + return "information_schema".equals(normalized) || "performance_schema".equals(normalized); + } + + private static Integer parseNumericPrecision(String dataType) { + return parseIntGroup(NUMERIC_PRECISION_PATTERN, dataType, 2); + } + + private static Integer parseNumericScale(String dataType) { + return parseIntGroup(NUMERIC_SCALE_PATTERN, dataType, 2); + } + + private static Integer parseCharacterMaximumLength(String dataType) { + return parseIntGroup(CHARACTER_LENGTH_PATTERN, dataType, 2); + } + + private static Integer parseIntGroup(Pattern pattern, String value, int group) { + Matcher matcher = pattern.matcher(value); + if (!matcher.find()) { + return null; + } + try { + return Integer.valueOf(matcher.group(group)); + } catch (NumberFormatException e) { + return null; + } + } + + private static String optionalString(ResultSet rs, int index) { + try { + return rs.getString(index); + } catch (Exception e) { + return null; + } + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + public static void main(String[] args) { + new JsonRpcServer(new TDengineAgent()).run(); + } +} + +final class TDengineJdbcUrl { + enum TransportPreference { + AUTO, + WEBSOCKET, + REST + } + + private static final String PARAM_TRANSPORT = "transport"; + private static final String PARAM_DBX_TRANSPORT = "dbx.transport"; + + private TDengineJdbcUrl() { + } + + static String from(ConnectParams params) { + TransportPreference preference = transportPreference(params.getUrl_params()); + if (preference == TransportPreference.REST) { + return from(params, TDengineTransport.REST); + } + String host = params.getHost().isBlank() ? "localhost" : params.getHost(); + int port = params.getPort() > 0 ? params.getPort() : 6041; + String database = params.getDatabase().trim(); + String path = database.isBlank() ? "/" : "/" + database; + String query = normalizeQueryString(params.getUrl_params()); + String suffix = query.isBlank() ? "" : "?" + query; + return "jdbc:TAOS-WS://" + host + ":" + port + path + suffix; + } + + static String from(ConnectParams params, TDengineTransport transport) { + String host = params.getHost().isBlank() ? "localhost" : params.getHost(); + int port = params.getPort() > 0 ? params.getPort() : 6041; + String database = params.getDatabase().trim(); + String path = database.isBlank() ? "/" : "/" + database; + String query = normalizeQueryString(params.getUrl_params()); + String suffix = query.isBlank() ? "" : "?" + query; + return transport.urlPrefix() + host + ":" + port + path + suffix; + } + + static String sanitizeConnectionString(String connectionString) { + if (connectionString == null || connectionString.isBlank()) { + return ""; + } + int queryIndex = connectionString.indexOf('?'); + if (queryIndex < 0) { + return connectionString; + } + String base = connectionString.substring(0, queryIndex); + String rawQuery = connectionString.substring(queryIndex + 1); + int fragmentIndex = rawQuery.indexOf('#'); + String fragment = ""; + if (fragmentIndex >= 0) { + fragment = rawQuery.substring(fragmentIndex); + rawQuery = rawQuery.substring(0, fragmentIndex); + } + String query = normalizeQueryString(rawQuery); + if (query.isBlank()) { + return base + fragment; + } + return base + "?" + query + fragment; + } + + static TransportPreference transportPreference(String rawQuery) { + String query = rawQuery == null ? "" : rawQuery.trim(); + if (query.startsWith("?")) { + query = query.substring(1); + } + if (query.isBlank()) { + return TransportPreference.AUTO; + } + String[] parts = query.split("&"); + for (String part : parts) { + if (part == null || part.isBlank()) { + continue; + } + int index = part.indexOf('='); + String key = index < 0 ? part.trim() : part.substring(0, index).trim(); + if (!PARAM_TRANSPORT.equalsIgnoreCase(key) && !PARAM_DBX_TRANSPORT.equalsIgnoreCase(key)) { + continue; + } + String value = index < 0 ? "" : part.substring(index + 1).trim(); + if ("rest".equalsIgnoreCase(value) || "rs".equalsIgnoreCase(value)) { + return TransportPreference.REST; + } + if ("ws".equalsIgnoreCase(value) || "websocket".equalsIgnoreCase(value)) { + return TransportPreference.WEBSOCKET; + } + } + return TransportPreference.AUTO; + } + + private static String normalizeQueryString(String rawQuery) { + String query = rawQuery == null ? "" : rawQuery.trim(); + if (query.startsWith("?")) { + query = query.substring(1); + } + if (query.isBlank()) { + return ""; + } + String[] parts = query.split("&"); + List kept = new ArrayList<>(); + for (String part : parts) { + if (part == null || part.isBlank()) { + continue; + } + int index = part.indexOf('='); + String key = index < 0 ? part.trim() : part.substring(0, index).trim(); + if (PARAM_TRANSPORT.equalsIgnoreCase(key) || PARAM_DBX_TRANSPORT.equalsIgnoreCase(key)) { + continue; + } + kept.add(part); + } + return String.join("&", kept); + } +} + +enum TDengineTransport { + WEBSOCKET("jdbc:TAOS-WS://", "com.taosdata.jdbc.ws.WebSocketDriver"), + REST("jdbc:TAOS-RS://", "com.taosdata.jdbc.rs.RestfulDriver"); + + private final String urlPrefix; + private final String driverClass; + + TDengineTransport(String urlPrefix, String driverClass) { + this.urlPrefix = urlPrefix; + this.driverClass = driverClass; + } + + String urlPrefix() { + return urlPrefix; + } + + String driverClass() { + return driverClass; + } +} + +final class TDengineConnectionFactory { + private static final int AUTO_TRANSPORT_ATTEMPT_TIMEOUT_SECONDS = 8; + + private TDengineConnectionFactory() { + } + + static Connection open(ConnectParams params) throws Exception { + String explicitConnectionString = params.getConnection_string() == null ? "" : params.getConnection_string().trim(); + if (!explicitConnectionString.isBlank()) { + String sanitizedConnectionString = TDengineJdbcUrl.sanitizeConnectionString(explicitConnectionString); + Class.forName(driverClassFromConnectionString(sanitizedConnectionString)); + return DriverManager.getConnection(sanitizedConnectionString, params.getUsername(), params.getPassword()); + } + + TDengineJdbcUrl.TransportPreference preference = TDengineJdbcUrl.transportPreference(params.getUrl_params()); + TDengineTransport[] candidates = transportsFor(preference); + Exception firstError = null; + for (TDengineTransport transport : candidates) { + try { + Connection connection = preference == TDengineJdbcUrl.TransportPreference.AUTO + ? openWithAttemptTimeout(params, transport) + : openDirect(params, transport); + return connection; + } catch (Exception e) { + if (firstError == null) { + firstError = e; + } else { + firstError.addSuppressed(e); + } + } + } + if (firstError != null) { + throw new RuntimeException("Failed to connect TDengine using transports: " + candidateNames(candidates), firstError); + } + throw new IllegalStateException("No TDengine transport available."); + } + + private static Connection openDirect(ConnectParams params, TDengineTransport transport) throws Exception { + Class.forName(transport.driverClass()); + String url = TDengineJdbcUrl.from(params, transport); + return DriverManager.getConnection(url, params.getUsername(), params.getPassword()); + } + + private static Connection openWithAttemptTimeout(ConnectParams params, TDengineTransport transport) throws Exception { + String threadName = "tdengine-connect-" + transport.name().toLowerCase(Locale.ROOT); + ThreadFactory factory = runnable -> { + Thread thread = new Thread(runnable, threadName); + thread.setDaemon(true); + return thread; + }; + ExecutorService executor = Executors.newSingleThreadExecutor(factory); + try { + Future future = executor.submit(new Callable() { + @Override + public Connection call() throws Exception { + return openDirect(params, transport); + } + }); + return future.get(AUTO_TRANSPORT_ATTEMPT_TIMEOUT_SECONDS, TimeUnit.SECONDS); + } catch (TimeoutException e) { + throw new RuntimeException( + "TDengine " + transport.name().toLowerCase(Locale.ROOT) + + " transport connect timed out after " + AUTO_TRANSPORT_ATTEMPT_TIMEOUT_SECONDS + "s", + e + ); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Interrupted while connecting TDengine via " + transport.name().toLowerCase(Locale.ROOT), e); + } catch (ExecutionException e) { + Throwable cause = e.getCause(); + if (cause instanceof Exception exception) { + throw exception; + } + throw new RuntimeException(cause); + } finally { + executor.shutdownNow(); + } + } + + private static TDengineTransport[] transportsFor(TDengineJdbcUrl.TransportPreference preference) { + return switch (preference) { + case REST -> new TDengineTransport[] {TDengineTransport.REST}; + case WEBSOCKET -> new TDengineTransport[] {TDengineTransport.WEBSOCKET}; + case AUTO -> new TDengineTransport[] {TDengineTransport.WEBSOCKET, TDengineTransport.REST}; + }; + } + + private static String candidateNames(TDengineTransport[] candidates) { + List names = new ArrayList<>(); + for (TDengineTransport candidate : candidates) { + names.add(candidate.name().toLowerCase(Locale.ROOT)); + } + return String.join(" -> ", names); + } + + private static String driverClassFromConnectionString(String connectionString) { + if (connectionString.regionMatches(true, 0, TDengineTransport.REST.urlPrefix(), 0, TDengineTransport.REST.urlPrefix().length())) { + return TDengineTransport.REST.driverClass(); + } + if (connectionString.regionMatches(true, 0, TDengineTransport.WEBSOCKET.urlPrefix(), 0, TDengineTransport.WEBSOCKET.urlPrefix().length())) { + return TDengineTransport.WEBSOCKET.driverClass(); + } + return TDengineTransport.WEBSOCKET.driverClass(); + } +} diff --git a/agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentPagingTest.java b/agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentPagingTest.java new file mode 100644 index 0000000..91ef0b9 --- /dev/null +++ b/agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentPagingTest.java @@ -0,0 +1,178 @@ +package com.dbx.agent.tdengine; + +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.sql.Types; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class TDengineAgentPagingTest { + @Test + void executeQueryPageDecodesBinaryVarcharValuesAsStrings() { + TDengineAgent agent = new TDengineAgent(); + TestSupport.setPrivateConnection(agent, binaryVarcharConnection()); + JsonRpcServer server = new JsonRpcServer(agent); + + String response = handleRequest(server, """ + { + "jsonrpc": "2.0", + "id": 1, + "method": "execute_query_page", + "params": { + "sql": "SELECT v FROM sample", + "schema": "power", + "pageSize": 100 + } + } + """); + + assertFalse(response.contains("\"error\""), response); + assertTrue(response.contains("\"hello\""), response); + assertFalse(response.contains("[104,101,108,108,111]"), response); + } + + private static Connection binaryVarcharConnection() { + Statement statement = binaryVarcharStatement(); + return proxy(Connection.class, (method, args) -> { + String name = method.getName(); + if ("createStatement".equals(name)) { + return statement; + } + if ("getAutoCommit".equals(name)) { + return true; + } + if ("setAutoCommit".equals(name) || "commit".equals(name) || "rollback".equals(name) || "close".equals(name)) { + return null; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + }); + } + + private static Statement binaryVarcharStatement() { + ResultSet resultSet = binaryVarcharResultSet(); + return proxy(Statement.class, (method, args) -> { + String name = method.getName(); + if ("execute".equals(name)) { + return true; + } + if ("getResultSet".equals(name)) { + return resultSet; + } + if ("getUpdateCount".equals(name)) { + return 0; + } + if ("setMaxRows".equals(name) || "setFetchSize".equals(name) || "close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet binaryVarcharResultSet() { + final int[] index = {-1}; + ResultSetMetaData metadata = binaryVarcharMetadata(); + byte[] value = "hello".getBytes(StandardCharsets.UTF_8); + return proxy(ResultSet.class, (method, args) -> { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] == 0; + } + if ("getMetaData".equals(name)) { + return metadata; + } + if ("getObject".equals(name)) { + return value; + } + if ("wasNull".equals(name)) { + return false; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSetMetaData binaryVarcharMetadata() { + return proxy(ResultSetMetaData.class, (method, args) -> { + String name = method.getName(); + if ("getColumnCount".equals(name)) { + return 1; + } + if ("getColumnLabel".equals(name)) { + return "v"; + } + if ("getColumnType".equals(name)) { + return Types.VARCHAR; + } + return defaultValue(method.getReturnType()); + }); + } + + private static String handleRequest(JsonRpcServer server, String request) { + try { + Method method = JsonRpcServer.class.getDeclaredMethod("handleRequest", String.class); + method.setAccessible(true); + return (String) method.invoke(server, request); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static T proxy(Class type, MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentTest.java b/agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentTest.java new file mode 100644 index 0000000..b606577 --- /dev/null +++ b/agents/drivers/tdengine/src/test/java/com/dbx/agent/tdengine/TDengineAgentTest.java @@ -0,0 +1,347 @@ +package com.dbx.agent.tdengine; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.TableInfo; +import com.dbx.agent.test.JdbcAgentFake; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.test.TestSupport; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Proxy; +import java.nio.charset.StandardCharsets; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class TDengineAgentExecutionTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new TDengineAgent(); + } + + @Override + protected String resultSetSql() { + return "SHOW DATABASES"; + } +} + +class TDengineAgentMetadataTest { + @Test + void buildsWebsocketJdbcUrlWithDefaultPortAndDatabase() { + String url = TDengineJdbcUrl.from( + new ConnectParams("127.0.0.1", 0, "meters", "root", "taosdata", "", "", false) + ); + + Assertions.assertEquals("jdbc:TAOS-WS://127.0.0.1:6041/meters", url); + } + + @Test + void preservesCustomWebsocketPortAndUrlParams() { + String url = TDengineJdbcUrl.from( + new ConnectParams("td.local", 6042, "", "", "", "timezone=UTC&charset=UTF-8", "", false) + ); + + Assertions.assertEquals("jdbc:TAOS-WS://td.local:6042/?timezone=UTC&charset=UTF-8", url); + } + + @Test + void supportsRestTransportViaCompatibilityUrlParam() { + String url = TDengineJdbcUrl.from( + new ConnectParams("127.0.0.1", 0, "testdb", "", "", "dbx.transport=rest&charset=UTF-8", "", false) + ); + + Assertions.assertEquals("jdbc:TAOS-RS://127.0.0.1:6041/testdb?charset=UTF-8", url); + } + + @Test + void stripsTransportControlParamFromJdbcQuery() { + String url = TDengineJdbcUrl.from( + new ConnectParams("127.0.0.1", 6041, "", "", "", "transport=ws&timezone=UTC", "", false) + ); + + Assertions.assertEquals("jdbc:TAOS-WS://127.0.0.1:6041/?timezone=UTC", url); + } + + @Test + void usesTdengineMetadataStatements() { + TDengineAgent agent = new TDengineAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listDatabases(); + agent.listTables("power"); + agent.getColumns("power", "meters"); + + Assertions.assertEquals("SHOW DATABASES", JdbcMetadataSqlFake.statements.get(0)); + Assertions.assertTrue(JdbcMetadataSqlFake.statements.get(1).contains("FROM information_schema.ins_stables")); + Assertions.assertTrue(JdbcMetadataSqlFake.statements.get(1).contains("FROM information_schema.ins_tables")); + Assertions.assertEquals("param:1=power", JdbcMetadataSqlFake.statements.get(2)); + Assertions.assertEquals("param:2=power", JdbcMetadataSqlFake.statements.get(3)); + Assertions.assertEquals("DESCRIBE `power`.`meters`", JdbcMetadataSqlFake.statements.get(4)); + } + + @Test + void constrainedMetadataUsesRequestedDatabaseAndPushesFilterAndPaging() { + TDengineAgent agent = new TDengineAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables( + "dbx_alpha", + new MetadataListConstraints("ord", 25, 50, List.of("TABLE")) + ); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertFalse(sql.contains("DATABASE()"), sql); + Assertions.assertTrue(sql.contains("FROM information_schema.ins_stables"), sql); + Assertions.assertTrue(sql.contains("FROM information_schema.ins_tables"), sql); + Assertions.assertTrue(sql.contains("WHERE db_name = ?"), sql); + Assertions.assertTrue(sql.contains("table_name LIKE ? OR table_comment LIKE ?"), sql); + Assertions.assertTrue(sql.contains("ORDER BY hierarchy_name, hierarchy_rank, table_name"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 25 OFFSET 50"), sql); + Assertions.assertEquals( + List.of( + "param:1=dbx_alpha", + "param:2=dbx_alpha", + "param:3=%o%r%d%", + "param:4=%o%r%d%" + ), + JdbcMetadataSqlFake.statements.subList(1, 5) + ); + } + + @Test + void constrainedMetadataPagesDoNotRepeatOrSkipTables() { + List metadata = List.of( + new TableInfo("meters", "STABLE", null), + new TableInfo("device_a", "TABLE", null, null, "meters"), + new TableInfo("device_b", "TABLE", null, null, "meters"), + new TableInfo("standalone", "TABLE", null), + new TableInfo("weather", "STABLE", null) + ); + List statements = new ArrayList<>(); + TDengineAgent agent = new TDengineAgent(); + TestSupport.setPrivateConnection(agent, pagedMetadataConnection(metadata, statements)); + + List combined = new ArrayList<>(); + combined.addAll(agent.listTables("dbx_alpha", new MetadataListConstraints(null, 2, null, List.of("TABLE")))); + combined.addAll(agent.listTables("dbx_alpha", new MetadataListConstraints(null, 2, 2, List.of("TABLE")))); + combined.addAll(agent.listTables("dbx_alpha", new MetadataListConstraints(null, 2, 4, List.of("TABLE")))); + + Assertions.assertEquals(metadata.stream().map(TableInfo::getName).toList(), combined.stream().map(TableInfo::getName).toList()); + Set distinctNames = new HashSet<>(combined.stream().map(TableInfo::getName).toList()); + Assertions.assertEquals(metadata.size(), distinctNames.size()); + Assertions.assertTrue(statements.get(0).endsWith("LIMIT 2"), statements.get(0)); + Assertions.assertTrue(statements.get(1).endsWith("LIMIT 2 OFFSET 2"), statements.get(1)); + Assertions.assertTrue(statements.get(2).endsWith("LIMIT 2 OFFSET 4"), statements.get(2)); + } + + @Test + void sortsSupertablesBeforeTheirChildTables() { + List tables = new ArrayList<>(Arrays.asList( + new TableInfo("device_b", "TABLE", null, null, "meters"), + new TableInfo("standalone", "TABLE", null), + new TableInfo("meters", "STABLE", null), + new TableInfo("device_a", "TABLE", null, null, "meters") + )); + + TDengineAgent.sortTablesForHierarchy(tables); + + Assertions.assertEquals( + Arrays.asList("meters", "device_a", "device_b", "standalone"), + tables.stream().map(TableInfo::getName).toList() + ); + Assertions.assertEquals("meters", tables.get(1).getParent_name()); + } + + @Test + void marksTimestampAndCompositeKeyDescribeColumnsAsPrimaryKeys() throws Exception { + ResultSet resultSet = describeResultSet(new String[][] { + {"ts", "TIMESTAMP", "8", ""}, + {"seq", "INT", "4", "COMPOSITE KEY"}, + {"voltage", "FLOAT", "4", ""}, + {"site", "VARCHAR(32)", "32", "TAG"} + }); + + List columns = TDengineAgent.readDescribeColumns(resultSet); + + Assertions.assertTrue(columns.get(0).getIs_primary_key()); + Assertions.assertFalse(columns.get(0).getIs_nullable()); + Assertions.assertTrue(columns.get(1).getIs_primary_key()); + Assertions.assertFalse(columns.get(1).getIs_nullable()); + Assertions.assertFalse(columns.get(2).getIs_primary_key()); + Assertions.assertFalse(columns.get(3).getIs_primary_key()); + Assertions.assertEquals("TAG", columns.get(3).getExtra()); + } + + @Test + void doesNotExposeDatabasesAsSchemas() { + TDengineAgent agent = new TDengineAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + Assertions.assertTrue(agent.listSchemas().isEmpty()); + Assertions.assertTrue(JdbcMetadataSqlFake.statements.isEmpty()); + } + + private static Connection pagedMetadataConnection(List metadata, List statements) { + return proxy(Connection.class, (proxy, method, args) -> { + String name = method.getName(); + if ("prepareStatement".equals(name)) { + String sql = (String) args[0]; + statements.add(sql); + return pagedMetadataStatement(sql, metadata); + } + if ("isClosed".equals(name)) return false; + if ("close".equals(name)) return null; + return defaultValue(method.getReturnType()); + }); + } + + private static PreparedStatement pagedMetadataStatement(String sql, List metadata) { + return proxy(PreparedStatement.class, (proxy, method, args) -> { + String name = method.getName(); + if ("executeQuery".equals(name)) { + int limit = sqlClauseValue(sql, "LIMIT", metadata.size()); + int offset = sqlClauseValue(sql, "OFFSET", 0); + int from = Math.min(offset, metadata.size()); + int to = Math.min(from + limit, metadata.size()); + return tableInfoResultSet(metadata.subList(from, to)); + } + if ("setString".equals(name) || "setInt".equals(name) || "setObject".equals(name) || "close".equals(name)) return null; + return defaultValue(method.getReturnType()); + }); + } + + private static ResultSet tableInfoResultSet(List tables) { + int[] index = {-1}; + return proxy(ResultSet.class, (proxy, method, args) -> { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] < tables.size(); + } + if ("getString".equals(name)) { + TableInfo table = tables.get(index[0]); + int column = (Integer) args[0]; + if (column == 1) return table.getName(); + if (column == 2) return table.getTable_type(); + if (column == 3) return table.getComment(); + if (column == 4) return table.getParent_name(); + } + if ("close".equals(name)) return null; + return defaultValue(method.getReturnType()); + }); + } + + private static int sqlClauseValue(String sql, String clause, int fallback) { + Matcher matcher = Pattern.compile("\\b" + clause + "\\s+(\\d+)").matcher(sql); + return matcher.find() ? Integer.parseInt(matcher.group(1)) : fallback; + } + + private static T proxy(Class type, InvocationHandler handler) { + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, handler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) return false; + if (Integer.TYPE.equals(type)) return 0; + if (Long.TYPE.equals(type)) return 0L; + if (Double.TYPE.equals(type)) return 0.0d; + if (Float.TYPE.equals(type)) return 0.0f; + if (Short.TYPE.equals(type)) return (short) 0; + if (Byte.TYPE.equals(type)) return (byte) 0; + if (Character.TYPE.equals(type)) return '\0'; + return null; + } + + @Test + void setsDatabaseBeforeExecutionWhenSchemaIsProvided() { + TDengineAgent agent = new TDengineAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + agent.executeQuery("SELECT 1", "power", new ExecuteQueryOptions()); + + // JdbcSchemaSwitcher executes the USE statement (recorded as "execute") + // before the query runs, so the database is switched prior to execution. + Assertions.assertEquals( + Arrays.asList("execute", "setMaxRows:10001", "execute"), + JdbcAgentFake.calls + ); + } + + @Test + void decodesTdengineByteArrayTextValues() { + Assertions.assertEquals( + "d1001", + TDengineAgent.decodeTdengineValue("d1001".getBytes(StandardCharsets.UTF_8)) + ); + } + + @Test + void formatsTdengineTimestampsAsSqlLiterals() { + Assertions.assertEquals( + "2026-05-16 09:35:58.123", + TDengineAgent.decodeTdengineValue(Timestamp.valueOf("2026-05-16 09:35:58.123")) + ); + } + + @Test + void unknownTransportValueDefaultsToWebsocketAndKeepsOtherParams() { + String url = TDengineJdbcUrl.from( + new ConnectParams("127.0.0.1", 6041, "", "", "", "transport=foo&timezone=UTC", "", false) + ); + + Assertions.assertEquals("jdbc:TAOS-WS://127.0.0.1:6041/?timezone=UTC", url); + } + + @Test + void sanitizeConnectionStringStripsTransportControlParams() { + String sanitized = TDengineJdbcUrl.sanitizeConnectionString( + "jdbc:TAOS-WS://127.0.0.1:6041/db?dbx.transport=rest&charset=UTF-8&transport=ws" + ); + + Assertions.assertEquals("jdbc:TAOS-WS://127.0.0.1:6041/db?charset=UTF-8", sanitized); + } + + @Test + void sanitizeConnectionStringKeepsFragmentAndNonControlParams() { + String sanitized = TDengineJdbcUrl.sanitizeConnectionString( + "jdbc:TAOS-RS://127.0.0.1:6041/db?timezone=UTC&dbx.transport=rest#anchor" + ); + + Assertions.assertEquals("jdbc:TAOS-RS://127.0.0.1:6041/db?timezone=UTC#anchor", sanitized); + } + + private static ResultSet describeResultSet(String[][] rows) { + int[] rowIndex = {-1}; + return (ResultSet) Proxy.newProxyInstance( + ResultSet.class.getClassLoader(), + new Class[] {ResultSet.class}, + (proxy, method, args) -> { + if ("next".equals(method.getName())) { + rowIndex[0] += 1; + return rowIndex[0] < rows.length; + } + if ("getString".equals(method.getName())) { + return rows[rowIndex[0]][((Integer) args[0]) - 1]; + } + if ("close".equals(method.getName())) { + return null; + } + throw new UnsupportedOperationException(method.getName()); + } + ); + } +} diff --git a/agents/drivers/teradata/build.gradle b/agents/drivers/teradata/build.gradle new file mode 100644 index 0000000..73c6bad --- /dev/null +++ b/agents/drivers/teradata/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.teradata.jdbc:terajdbc:20.00.00.56' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Teradata', 'Main-Class': 'com.dbx.agent.teradata.TeradataAgent') + } +} diff --git a/agents/drivers/teradata/src/main/java/com/dbx/agent/teradata/TeradataAgent.java b/agents/drivers/teradata/src/main/java/com/dbx/agent/teradata/TeradataAgent.java new file mode 100644 index 0000000..f24aafc --- /dev/null +++ b/agents/drivers/teradata/src/main/java/com/dbx/agent/teradata/TeradataAgent.java @@ -0,0 +1,21 @@ +package com.dbx.agent.teradata; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +public final class TeradataAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile TERADATA_PROFILE = new JdbcAgentProfile( + "com.teradata.jdbc.TeraDriver", + "jdbc:teradata://{host}/DBS_PORT={port},DATABASE={database}", + 1025 + ); + + public TeradataAgent() { + super(TERADATA_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new TeradataAgent()).run(); + } +} diff --git a/agents/drivers/trino/build.gradle b/agents/drivers/trino/build.gradle new file mode 100644 index 0000000..28b6cd8 --- /dev/null +++ b/agents/drivers/trino/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'io.trino:trino-jdbc:471' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Trino (Presto)', 'Main-Class': 'com.dbx.agent.trino.TrinoAgent') + } +} diff --git a/agents/drivers/trino/src/main/java/com/dbx/agent/trino/TrinoAgent.java b/agents/drivers/trino/src/main/java/com/dbx/agent/trino/TrinoAgent.java new file mode 100644 index 0000000..e0e348a --- /dev/null +++ b/agents/drivers/trino/src/main/java/com/dbx/agent/trino/TrinoAgent.java @@ -0,0 +1,345 @@ +package com.dbx.agent.trino; + +import com.dbx.agent.AbstractJdbcAgent; +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.ConnectParams; +import com.dbx.agent.DatabaseInfo; +import com.dbx.agent.ForeignKeyInfo; +import com.dbx.agent.IndexInfo; +import com.dbx.agent.JdbcIdentifiers; +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.MetadataSqlSupport; +import com.dbx.agent.TableInfo; +import com.dbx.agent.TriggerInfo; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.sql.Types; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class TrinoAgent extends AbstractJdbcAgent { + private static final Pattern NUMERIC_PRECISION_PATTERN = Pattern.compile("(?i)^(decimal|numeric)\\((\\d+)(?:,\\s*\\d+)?\\)"); + private static final Pattern NUMERIC_SCALE_PATTERN = Pattern.compile("(?i)^(decimal|numeric)\\(\\d+,\\s*(\\d+)\\)"); + private static final Pattern CHARACTER_LENGTH_PATTERN = Pattern.compile("(?i)^(char|varchar)\\((\\d+)\\)"); + + @Override + protected String driverClass() { + return "io.trino.jdbc.TrinoDriver"; + } + + @Override + protected String buildJdbcUrl(ConnectParams params) { + return buildUrl(params); + } + + @Override + public List listDatabases() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW CATALOGS")) { + while (rs.next()) { + result.add(new DatabaseInfo(rs.getString(1))); + } + } + return result; + }); + } + + @Override + public List listSchemas() { + return unchecked(() -> { + List result = new ArrayList<>(); + try (java.sql.Statement stmt = requireConnected().createStatement(); + ResultSet rs = stmt.executeQuery("SHOW SCHEMAS")) { + while (rs.next()) { + result.add(rs.getString(1)); + } + } + return result; + }); + } + + @Override + public List listTables(String schema) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "SELECT table_name, table_type " + + "FROM information_schema.tables " + + "WHERE table_schema = ? " + + "ORDER BY table_name"; + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql)) { + stmt.setString(1, schema); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("table_name"), + normalizeTableType(rs.getString("table_type")), + null + )); + } + } + } + return result; + }); + } + + @Override + public List listTables(String schema, MetadataListConstraints constraints) { + MetadataListConstraints normalized = MetadataListConstraints.orNone(constraints); + if (isUnconstrained(normalized)) { + return listTables(schema); + } + if (!normalized.includesTableLikeTypes()) { + return List.of(); + } + try { + return queryConstrainedTables(schema, normalized); + } catch (RuntimeException e) { + return normalized.filterTables(listTables(schema)); + } + } + + private List queryConstrainedTables(String schema, MetadataListConstraints constraints) { + return unchecked(() -> { + List result = new ArrayList<>(); + List args = new ArrayList<>(); + StringBuilder sql = new StringBuilder("SELECT table_name, table_type FROM information_schema.tables WHERE table_schema = ?"); + args.add(schema); + appendTrinoTableTypePredicate(sql, args, constraints); + MetadataSqlSupport.appendNameFilter(sql, args, "table_name", constraints); + sql.append(" ORDER BY table_name"); + MetadataSqlSupport.appendLiteralLimitOffset(sql, constraints); + try (java.sql.PreparedStatement stmt = requireConnected().prepareStatement(sql.toString())) { + MetadataSqlSupport.bind(stmt, args); + try (ResultSet rs = stmt.executeQuery()) { + while (rs.next()) { + result.add(new TableInfo( + rs.getString("table_name"), + normalizeTableType(rs.getString("table_type")), + null + )); + } + } + } + return constraints.withoutPaging().filterTables(result); + }); + } + + @Override + public List getColumns(String schema, String table) { + Connection conn = requireConnected(); + List metadataColumns; + try { + metadataColumns = getColumnsFromMetadata(conn, schema, table); + } catch (RuntimeException e) { + metadataColumns = Collections.emptyList(); + } + return metadataColumns.isEmpty() ? getColumnsFromDescribe(conn, schema, table) : metadataColumns; + } + + @Override + public List listIndexes(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listForeignKeys(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public List listTriggers(String schema, String table) { + return Collections.emptyList(); + } + + @Override + public String setSchemaSQL(String schema) { + return "USE " + JdbcIdentifiers.INSTANCE.doubleQuote(schema); + } + + private List getColumnsFromMetadata(Connection conn, String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String catalog = blankToNull(conn.getCatalog()); + try (ResultSet rs = conn.getMetaData().getColumns(catalog, schema, table, null)) { + while (rs.next()) { + int sqlType = rs.getInt("DATA_TYPE"); + Integer size = intOrNull(rs, "COLUMN_SIZE"); + Integer scale = intOrNull(rs, "DECIMAL_DIGITS"); + result.add(new ColumnInfo( + rs.getString("COLUMN_NAME"), + coalesce(rs.getString("TYPE_NAME")), + rs.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls, + rs.getString("COLUMN_DEF"), + false, + null, + rs.getString("REMARKS"), + isNumericType(sqlType) ? size : null, + isNumericType(sqlType) ? scale : null, + isCharacterType(sqlType) ? size : null + )); + } + } + return result; + }); + } + + private List getColumnsFromDescribe(Connection conn, String schema, String table) { + return unchecked(() -> { + List result = new ArrayList<>(); + String sql = "DESCRIBE " + quoteIdentifier(schema) + "." + quoteIdentifier(table); + try (java.sql.Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String dataType = rs.getString(2); + String extra = rs.getString(3); + result.add(new ColumnInfo( + rs.getString(1), + dataType, + !coalesce(extra).toLowerCase(java.util.Locale.ROOT).contains("not null"), + null, + false, + extra, + rs.getString(4), + parseNumericPrecision(dataType), + parseNumericScale(dataType), + parseCharacterMaximumLength(dataType) + )); + } + } + return result; + }); + } + + @Override + protected Object resultValue(ResultSet rs, int index, int sqlType) { + return unchecked(() -> { + Object value = rs.getObject(index); + return rs.wasNull() ? null : value == null ? null : value.toString(); + }); + } + + private static String buildUrl(ConnectParams params) { + if (params.getConnection_string() != null && !params.getConnection_string().isBlank()) { + return params.getConnection_string(); + } + return "jdbc:trino://" + params.getHost() + ":" + params.getPort() + "/" + params.getDatabase(); + } + + private static boolean isUnconstrained(MetadataListConstraints constraints) { + return !constraints.hasFilter() && !constraints.hasLimit() && !constraints.hasOffset() && !constraints.hasObjectTypes(); + } + + private static void appendTrinoTableTypePredicate(StringBuilder sql, List args, MetadataListConstraints constraints) { + if (!constraints.hasObjectTypes()) { + return; + } + List types = new ArrayList<>(); + if (constraints.tableTypeAllowed("TABLE")) { + types.add("BASE TABLE"); + } + if (constraints.tableTypeAllowed("VIEW")) { + types.add("VIEW"); + } + if (constraints.tableTypeAllowed("MATERIALIZED_VIEW")) { + types.add("MATERIALIZED VIEW"); + } + if (types.isEmpty()) { + sql.append(" AND 1 = 0"); + return; + } + sql.append(" AND table_type IN (").append(MetadataSqlSupport.placeholders(types.size())).append(")"); + args.addAll(types); + } + + private static String quoteIdentifier(String identifier) { + return "\"" + identifier.replace("\"", "\"\"") + "\""; + } + + private static boolean isNumericType(int sqlType) { + switch (sqlType) { + case Types.BIGINT: + case Types.DECIMAL: + case Types.DOUBLE: + case Types.FLOAT: + case Types.INTEGER: + case Types.NUMERIC: + case Types.REAL: + case Types.SMALLINT: + case Types.TINYINT: + return true; + default: + return false; + } + } + + private static boolean isCharacterType(int sqlType) { + switch (sqlType) { + case Types.CHAR: + case Types.LONGNVARCHAR: + case Types.LONGVARCHAR: + case Types.NCHAR: + case Types.NVARCHAR: + case Types.VARCHAR: + return true; + default: + return false; + } + } + + private static Integer parseNumericPrecision(String dataType) { + return firstIntGroup(NUMERIC_PRECISION_PATTERN, dataType, 2); + } + + private static Integer parseNumericScale(String dataType) { + return firstIntGroup(NUMERIC_SCALE_PATTERN, dataType, 1); + } + + private static Integer parseCharacterMaximumLength(String dataType) { + return firstIntGroup(CHARACTER_LENGTH_PATTERN, dataType, 2); + } + + private static Integer firstIntGroup(Pattern pattern, String value, int group) { + if (value == null) { + return null; + } + Matcher matcher = pattern.matcher(value); + if (!matcher.find()) { + return null; + } + return Integer.valueOf(matcher.group(group)); + } + + private static Integer intOrNull(ResultSet rs, String column) throws Exception { + Object value = rs.getObject(column); + return value instanceof Number ? ((Number) value).intValue() : null; + } + + private static String normalizeTableType(String type) { + if ("BASE TABLE".equals(type)) { + return "TABLE"; + } + if ("MATERIALIZED VIEW".equals(type)) { + return "MATERIALIZED_VIEW"; + } + return type; + } + + private static String blankToNull(String value) { + return value == null || value.trim().isEmpty() ? null : value; + } + + private static String coalesce(String value) { + return value == null ? "" : value; + } + + public static void main(String[] args) { + new JsonRpcServer(new TrinoAgent()).run(); + } +} diff --git a/agents/drivers/trino/src/test/java/com/dbx/agent/trino/TrinoAgentTest.java b/agents/drivers/trino/src/test/java/com/dbx/agent/trino/TrinoAgentTest.java new file mode 100644 index 0000000..9b8943d --- /dev/null +++ b/agents/drivers/trino/src/test/java/com/dbx/agent/trino/TrinoAgentTest.java @@ -0,0 +1,37 @@ +package com.dbx.agent.trino; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.MetadataListConstraints; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import com.dbx.agent.test.JdbcMetadataSqlFake; +import com.dbx.agent.test.TestSupport; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.List; + +class TrinoAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new TrinoAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL system.runtime.nodes()"; + } + + @Test + void constrainedTableMetadataPushesFilterTypesAndPaging() { + TrinoAgent agent = new TrinoAgent(); + TestSupport.setPrivateConnection(agent, JdbcMetadataSqlFake.connection()); + + agent.listTables("public", new MetadataListConstraints("ord", 25, 50, List.of("TABLE", "VIEW"))); + + String sql = JdbcMetadataSqlFake.statements.get(0); + Assertions.assertTrue(sql.contains("FROM information_schema.tables"), sql); + Assertions.assertTrue(sql.contains("table_type IN (?, ?)"), sql); + Assertions.assertTrue(sql.contains("UPPER(table_name) LIKE ? ESCAPE '\\\\'"), sql); + Assertions.assertTrue(sql.endsWith("LIMIT 25 OFFSET 50"), sql); + } +} diff --git a/agents/drivers/vastbase/build.gradle b/agents/drivers/vastbase/build.gradle new file mode 100644 index 0000000..11ece4a --- /dev/null +++ b/agents/drivers/vastbase/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'cn.com.vastdata:vastbase-jdbc:2.11v' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Vastbase', 'Main-Class': 'com.dbx.agent.vastbase.VastbaseAgent') + } +} diff --git a/agents/drivers/vastbase/libs/.gitkeep b/agents/drivers/vastbase/libs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/agents/drivers/vastbase/src/main/java/com/dbx/agent/vastbase/VastbaseAgent.java b/agents/drivers/vastbase/src/main/java/com/dbx/agent/vastbase/VastbaseAgent.java new file mode 100644 index 0000000..920db9b --- /dev/null +++ b/agents/drivers/vastbase/src/main/java/com/dbx/agent/vastbase/VastbaseAgent.java @@ -0,0 +1,61 @@ +package com.dbx.agent.vastbase; + +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.ObjectSource; +import com.dbx.agent.PostgresLikeAgent; +import com.dbx.agent.PostgresLikeAgentProfile; + +public final class VastbaseAgent extends PostgresLikeAgent { + public static final PostgresLikeAgentProfile VASTBASE_PROFILE = new PostgresLikeAgentProfile( + "cn.com.vastbase.Driver", + "jdbc:vastbase://{host}:{port}/{database}" + ); + + public VastbaseAgent() { + super(VASTBASE_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new VastbaseAgent()).run(); + } + + @Override + public ObjectSource getObjectSource(String schema, String name, String objectType) { + ObjectSource result = super.getObjectSource(schema, name, objectType); + String source = unwrapRecordText(result.getSource()); + return new ObjectSource(result.getName(), result.getObject_type(), result.getSchema(), source); + } + + /** + * Vastbase 的 pg_get_functiondef 在 SQL Server 兼容模式下返回的是 + * PostgreSQL 行记录文本格式 {@code (1,"source text")} 而非纯文本。 + * 此方法剥离行记录包装,提取实际的源码内容。 + */ + static String unwrapRecordText(String source) { + if (source == null || source.isEmpty()) { + return source; + } + String trimmed = source.trim(); + if (!trimmed.startsWith("(") || !trimmed.endsWith(")")) { + return source; + } + // 格式: (field1,field2,...),第一个字段通常是整数,第二个是源码文本 + String inner = trimmed.substring(1, trimmed.length() - 1); + int commaIdx = inner.indexOf(','); + if (commaIdx <= 0) { + // 单字段行记录: (source_text) + return unquoteRecordField(inner); + } + // 多字段行记录: 跳过第一个字段,提取第二个字段及之后的内容 + String rest = inner.substring(commaIdx + 1); + return unquoteRecordField(rest); + } + + private static String unquoteRecordField(String value) { + String trimmed = value.trim(); + if (trimmed.startsWith("\"") && trimmed.endsWith("\"")) { + return trimmed.substring(1, trimmed.length() - 1).replace("\"\"", "\""); + } + return trimmed; + } +} diff --git a/agents/drivers/vastbase/src/test/java/com/dbx/agent/vastbase/VastbaseAgentTest.java b/agents/drivers/vastbase/src/test/java/com/dbx/agent/vastbase/VastbaseAgentTest.java new file mode 100644 index 0000000..ab8cb9a --- /dev/null +++ b/agents/drivers/vastbase/src/test/java/com/dbx/agent/vastbase/VastbaseAgentTest.java @@ -0,0 +1,26 @@ +package com.dbx.agent.vastbase; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class VastbaseAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new VastbaseAgent(); + } + + @Override + protected String resultSetSql() { + return "CALL sample_proc()"; + } + + @Test + void declaresVastbasePostgresLikeProfile() { + VastbaseAgent agent = new VastbaseAgent(); + + Assertions.assertEquals("cn.com.vastbase.Driver", agent.getProfile().getDriverClass()); + Assertions.assertEquals("jdbc:vastbase://{host}:{port}/{database}", agent.getProfile().getUrlTemplate()); + } +} diff --git a/agents/drivers/vertica/build.gradle b/agents/drivers/vertica/build.gradle new file mode 100644 index 0000000..fc1e0cf --- /dev/null +++ b/agents/drivers/vertica/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.vertica.jdbc:vertica-jdbc:25.3.0-0' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'Vertica', 'Main-Class': 'com.dbx.agent.vertica.VerticaAgent') + } +} diff --git a/agents/drivers/vertica/src/main/java/com/dbx/agent/vertica/VerticaAgent.java b/agents/drivers/vertica/src/main/java/com/dbx/agent/vertica/VerticaAgent.java new file mode 100644 index 0000000..05cef7a --- /dev/null +++ b/agents/drivers/vertica/src/main/java/com/dbx/agent/vertica/VerticaAgent.java @@ -0,0 +1,21 @@ +package com.dbx.agent.vertica; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +public final class VerticaAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile VERTICA_PROFILE = new JdbcAgentProfile( + "com.vertica.jdbc.Driver", + "jdbc:vertica://{host}:{port}/{database}", + 5433 + ); + + public VerticaAgent() { + super(VERTICA_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new VerticaAgent()).run(); + } +} diff --git a/agents/drivers/xugu/README.md b/agents/drivers/xugu/README.md new file mode 100644 index 0000000..09631c3 --- /dev/null +++ b/agents/drivers/xugu/README.md @@ -0,0 +1,36 @@ +# DBX Xugu Agent + +Native XuguDB agent for DBX using `gitee.com/XuguDB/go-xugu-driver`. + +## Build + +```bash +go build -o agent . +``` + +Cross-compile release builds use pure Go output: + +```bash +CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o dbx-agent-xugu-linux-x64 . +CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-s -w" -o dbx-agent-xugu-macos-aarch64 . +CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o dbx-agent-xugu-windows-x64.exe . +``` + +## Local DBX Test + +Build the binary, then copy it into DBX's installed XuguDB driver directory: + +```bash +mkdir -p ~/.dbx/agents/drivers/xugu +cp agent ~/.dbx/agents/drivers/xugu/agent +chmod +x ~/.dbx/agents/drivers/xugu/agent +``` + +DBX prefers `agent` over `agent.jar`, so XuguDB connections will use this Go +agent until the file is removed. + +To restore the Java/JDBC agent: + +```bash +rm ~/.dbx/agents/drivers/xugu/agent +``` diff --git a/agents/drivers/xugu/go.mod b/agents/drivers/xugu/go.mod new file mode 100644 index 0000000..acc7048 --- /dev/null +++ b/agents/drivers/xugu/go.mod @@ -0,0 +1,5 @@ +module github.com/t8y2/dbx/agents/drivers/xugu + +go 1.22 + +require gitee.com/XuguDB/go-xugu-driver v1.0.12 diff --git a/agents/drivers/xugu/go.sum b/agents/drivers/xugu/go.sum new file mode 100644 index 0000000..7b5f9a2 --- /dev/null +++ b/agents/drivers/xugu/go.sum @@ -0,0 +1,2 @@ +gitee.com/XuguDB/go-xugu-driver v1.0.12 h1:Le49iCI5YJBmQDJUUWx2SHHR3aYio0CTFjNx5O8m2Ew= +gitee.com/XuguDB/go-xugu-driver v1.0.12/go.mod h1:VJlSyp+6BjYL1US00cVb4traVISlm8iGywYe3viLPbE= diff --git a/agents/drivers/xugu/main.go b/agents/drivers/xugu/main.go new file mode 100644 index 0000000..3ee35ef --- /dev/null +++ b/agents/drivers/xugu/main.go @@ -0,0 +1,2052 @@ +package main + +import ( + "bufio" + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "regexp" + "sort" + "strconv" + "strings" + "time" + + _ "gitee.com/XuguDB/go-xugu-driver" +) + +const protocolVersion = 1 +const defaultMaxRows = 1000 +const defaultXuguPort = 5138 +const xuguListDatabasesSQL = ` +SELECT DB_NAME +FROM ALL_DATABASES +ORDER BY DB_NAME` +const xuguListSchemasSQL = ` +SELECT SCHEMA_NAME +FROM ALL_SCHEMAS +ORDER BY SCHEMA_NAME` +const xuguPrimaryKeyColumnsSQL = ` +SELECT c.DEFINE +FROM ALL_CONSTRAINTS c +JOIN ALL_TABLES t ON t.DB_ID = c.DB_ID AND t.TABLE_ID = c.TABLE_ID +JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) + AND UPPER(t.TABLE_NAME) = UPPER(?) + AND c.CONS_TYPE = 'P'` +const xuguListColumnsSQL = ` +SELECT c.COL_NAME, c.TYPE_NAME, c.NOT_NULL, c.DEF_VAL, c.COMMENTS, c.SCALE, c."VARYING" +FROM ALL_COLUMNS c +JOIN ALL_TABLES t ON t.DB_ID = c.DB_ID AND t.TABLE_ID = c.TABLE_ID +JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) + AND UPPER(t.TABLE_NAME) = UPPER(?) + AND (c.IS_HIDE IS NULL OR c.IS_HIDE = FALSE) +ORDER BY c.COL_NO` +const xuguListIndexesSQL = ` +SELECT i.INDEX_NAME, i.KEYS, i.IS_UNIQUE, i.IS_PRIMARY, i.INDEX_TYPE, i.FILTER +FROM ALL_INDEXES i +JOIN ALL_TABLES t ON t.DB_ID = i.DB_ID AND t.TABLE_ID = i.TABLE_ID +JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) + AND UPPER(t.TABLE_NAME) = UPPER(?) +ORDER BY i.INDEX_NAME` + +var xuguDataTypes = []string{ + "BOOLEAN", + "INTEGER", + "SMALLINT", + "BIGINT", + "FLOAT", + "NUMERIC", + "CHAR", + "VARCHAR", + "CLOB", + "DATE", + "TIME", + "TIMESTAMP", + "BINARY", + "VARBINARY", + "BLOB", + "XML", + "BOOL", + "INT", + "SHORT", + "LONGINT", + "LONG", + "REAL", + "DECIMAL", + "TEXT", + "NCHAR", + "NVARCHAR", + "NVARCHAR2", +} + +type request struct { + ID json.RawMessage `json:"id"` + Method string `json:"method"` + Params map[string]json.RawMessage `json:"params"` +} + +type response struct { + JSONRPC string `json:"jsonrpc,omitempty"` + ID json.RawMessage `json:"id,omitempty"` + Result any `json:"result,omitempty"` + Error *rpcError `json:"error,omitempty"` +} + +type rpcError struct { + Code int `json:"code"` + Message string `json:"message"` +} + +type connectParams struct { + Host string `json:"host"` + Port int `json:"port"` + Database string `json:"database"` + Username string `json:"username"` + Password string `json:"password"` + SysDBA bool `json:"sysdba"` + URLParams string `json:"url_params"` + ConnectionString string `json:"connection_string"` +} + +type queryOptions struct { + SQL string `json:"sql"` + Database string `json:"database"` + Schema string `json:"schema"` + MaxRows int `json:"maxRows"` + FetchSize int `json:"fetchSize"` +} + +type queryResult struct { + Columns []string `json:"columns"` + ColumnTypes []string `json:"column_types"` + Rows [][]any `json:"rows"` + AffectedRows int64 `json:"affected_rows"` + ExecutionTimeMS int64 `json:"execution_time_ms"` + Truncated bool `json:"truncated"` +} + +func (r queryResult) MarshalJSON() ([]byte, error) { + type alias queryResult + value := alias(r) + if value.Columns == nil { + value.Columns = []string{} + } + if value.ColumnTypes == nil { + value.ColumnTypes = []string{} + } + if value.Rows == nil { + value.Rows = [][]any{} + } + return json.Marshal(value) +} + +type queryPageResult struct { + Columns []string `json:"columns"` + ColumnTypes []string `json:"column_types"` + Rows [][]any `json:"rows"` + AffectedRows int64 `json:"affected_rows"` + ExecutionTimeMS int64 `json:"execution_time_ms"` + Truncated bool `json:"truncated"` + SessionID *string `json:"session_id"` + HasMore bool `json:"has_more"` +} + +func (r queryPageResult) MarshalJSON() ([]byte, error) { + type alias queryPageResult + value := alias(r) + if value.Columns == nil { + value.Columns = []string{} + } + if value.ColumnTypes == nil { + value.ColumnTypes = []string{} + } + if value.Rows == nil { + value.Rows = [][]any{} + } + return json.Marshal(value) +} + +type querySession struct { + rows *sql.Rows + columns []string + columnTypes []string + pending []any + remaining int +} + +type databaseInfo struct { + Name string `json:"name"` +} + +type tableInfo struct { + Name string `json:"name"` + TableType string `json:"table_type"` + Comment *string `json:"comment"` +} + +type objectInfo struct { + Name string `json:"name"` + ObjectType string `json:"object_type"` + Schema string `json:"schema"` + Comment *string `json:"comment"` +} + +type metadataListConstraints struct { + Filter string + Limit int + Offset int + ObjectTypes []string +} + +type xuguMetadataListQuery struct { + SQL string + Args []any +} + +type columnInfo struct { + Name string `json:"name"` + DataType string `json:"data_type"` + IsNullable bool `json:"is_nullable"` + ColumnDefault *string `json:"column_default"` + IsPrimaryKey bool `json:"is_primary_key"` + Extra *string `json:"extra"` + Comment *string `json:"comment"` + NumericPrecision *int `json:"numeric_precision"` + NumericScale *int `json:"numeric_scale"` + CharacterMaximumLength *int `json:"character_maximum_length"` +} + +type indexInfo struct { + Name string `json:"name"` + Columns []string `json:"columns"` + IsUnique bool `json:"is_unique"` + IsPrimary bool `json:"is_primary"` + Filter *string `json:"filter"` + IndexType *string `json:"index_type"` + IncludedColumns []string `json:"included_columns"` + Comment *string `json:"comment"` +} + +func (i indexInfo) MarshalJSON() ([]byte, error) { + type alias indexInfo + value := alias(i) + if value.Columns == nil { + value.Columns = []string{} + } + if value.IncludedColumns == nil { + value.IncludedColumns = []string{} + } + return json.Marshal(value) +} + +type foreignKeyInfo struct { + Name string `json:"name"` + Column string `json:"column"` + RefTable string `json:"ref_table"` + RefColumn string `json:"ref_column"` +} + +type triggerInfo struct { + Name string `json:"name"` + Event string `json:"event"` + Timing string `json:"timing"` +} + +type server struct { + db *sql.DB + params connectParams + sessions map[string]*querySession + nextSessionID int64 +} + +func main() { + s := newServer() + encoder := json.NewEncoder(os.Stdout) + fmt.Fprintln(os.Stdout, `{"ready":true}`) + + scanner := bufio.NewScanner(os.Stdin) + scanner.Buffer(make([]byte, 0, 64*1024), 512*1024*1024) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" { + continue + } + resp, shutdown := s.handleLine(line) + if err := encoder.Encode(resp); err != nil { + fmt.Fprintf(os.Stderr, "failed to write response: %v\n", err) + return + } + if shutdown { + return + } + } + if err := scanner.Err(); err != nil && !errors.Is(err, io.EOF) { + fmt.Fprintf(os.Stderr, "failed to read stdin: %v\n", err) + } +} + +func newServer() *server { + return &server{sessions: map[string]*querySession{}} +} + +func (s *server) handleLine(line string) (response, bool) { + var req request + if err := json.Unmarshal([]byte(line), &req); err != nil { + return errorResponse(nil, err), false + } + if len(req.ID) == 0 { + req.ID = json.RawMessage("1") + } + result, shutdown, err := s.dispatch(req.Method, req.Params) + if err != nil { + return errorResponse(req.ID, err), false + } + return response{JSONRPC: "2.0", ID: req.ID, Result: result}, shutdown +} + +func (s *server) dispatch(method string, params map[string]json.RawMessage) (any, bool, error) { + switch method { + case "handshake": + return map[string]any{ + "protocolVersion": protocolVersion, + "agentProtocolVersion": protocolVersion, + "capabilities": []string{"connect", "test_connection", "metadata", "query", "ddl"}, + }, false, nil + case "connect": + var cp connectParams + if err := decodeParams(params, &cp); err != nil { + return nil, false, err + } + return map[string]bool{"ok": true}, false, s.connect(cp) + case "test_connection": + var cp connectParams + if err := decodeParams(params, &cp); err != nil { + return nil, false, err + } + db, err := openDB(cp) + if err != nil { + return nil, false, err + } + defer db.Close() + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + if err := db.PingContext(ctx); err != nil { + return nil, false, err + } + return map[string]bool{"ok": true}, false, nil + case "list_databases": + result, err := s.listDatabases() + return result, false, err + case "list_schemas": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + result, err := s.listSchemas() + return result, false, err + case "list_tables": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + result, err := s.listTables(schema, metadataListConstraintsFromParams(params)) + return result, false, err + case "list_objects": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + result, err := s.listObjects(schema, metadataListConstraintsFromParams(params)) + return result, false, err + case "list_data_types": + return xuguDataTypes, false, nil + case "get_columns": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.getColumns(schema, table) + return result, false, err + case "get_object_source": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + name := stringParam(params, "name") + objectType := stringParam(params, "object_type") + source, err := s.getObjectSource(schema, name, objectType) + return source, false, err + case "get_table_ddl": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + table := stringParam(params, "table") + ddl, err := s.getTableDDL(schema, table) + return ddl, false, err + case "execute_query": + var opts queryOptions + if err := decodeParams(params, &opts); err != nil { + return nil, false, err + } + result, err := s.executeQuery(opts) + return result, false, err + case "execute_query_page": + var opts queryOptions + if err := decodeParams(params, &opts); err != nil { + return nil, false, err + } + result, err := s.executeQueryPage(opts, intParam(params, "pageSize")) + return result, false, err + case "fetch_query_page": + result, err := s.fetchQueryPage(stringParam(params, "sessionId"), intParam(params, "pageSize")) + return result, false, err + case "close_query_session": + return s.closeQuerySession(stringParam(params, "sessionId")), false, nil + case "list_indexes": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.listIndexes(schema, table) + return result, false, err + case "list_foreign_keys": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.listForeignKeys(schema, table) + return result, false, err + case "list_triggers": + if err := s.useDatabase(stringParam(params, "database")); err != nil { + return nil, false, err + } + schema := stringParam(params, "schema") + table := stringParam(params, "table") + result, err := s.listTriggers(schema, table) + return result, false, err + case "get_explain_info": + sqlText := stringParam(params, "sql") + plan, err := s.getExplainInfo(sqlText) + return map[string]any{"plan": plan, "has_actual_stats": false}, false, err + case "execute_transaction": + result, err := s.executeTransaction(params) + return result, false, err + case "disconnect": + return map[string]bool{"ok": true}, false, s.disconnect() + case "shutdown": + _ = s.disconnect() + return map[string]bool{"ok": true}, true, nil + default: + return nil, false, fmt.Errorf("unknown method: %s", method) + } +} + +func (s *server) connect(params connectParams) error { + _ = s.disconnect() + db, err := openDB(params) + if err != nil { + return err + } + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + if err := db.PingContext(ctx); err != nil { + db.Close() + return err + } + s.db = db + s.params = params + return nil +} + +func (s *server) disconnect() error { + s.closeAllQuerySessions() + if s.db == nil { + return nil + } + err := s.db.Close() + s.db = nil + return err +} + +func openDB(params connectParams) (*sql.DB, error) { + dsn := buildDSN(params) + db, err := sql.Open("xugu", dsn) + if err != nil { + return nil, err + } + db.SetMaxOpenConns(4) + db.SetMaxIdleConns(1) + db.SetConnMaxLifetime(30 * time.Minute) + return db, nil +} + +func buildDSN(params connectParams) string { + connectionString := strings.TrimSpace(params.ConnectionString) + if looksLikeXuguDSN(connectionString) { + return connectionString + } + if parsed := parseXuguURL(connectionString); parsed.Host != "" { + if parsed.Database == "" { + parsed.Database = params.Database + } + if parsed.Username == "" { + parsed.Username = params.Username + } + if parsed.Password == "" { + parsed.Password = params.Password + } + return buildXuguDSN(parsed.Host, parsed.Port, parsed.Database, parsed.Username, parsed.Password, params.URLParams) + } + + if jdbc := parseXuguJDBCURL(connectionString); jdbc.Host != "" { + return buildXuguDSN(jdbc.Host, jdbc.Port, jdbc.Database, params.Username, params.Password, params.URLParams) + } + + return buildXuguDSN(params.Host, params.Port, params.Database, params.Username, params.Password, params.URLParams) +} + +func looksLikeXuguDSN(value string) bool { + upper := strings.ToUpper(value) + return strings.Contains(upper, "IP=") && strings.Contains(upper, "DB=") && strings.Contains(upper, "USER=") +} + +type xuguURLInfo struct { + Host string + Port int + Database string + Username string + Password string +} + +var xuguJDBCRegexp = regexp.MustCompile(`(?i)^jdbc:xugu://([^/:]+)(?::([0-9]+))?/([^?;]+)`) + +func parseXuguJDBCURL(value string) xuguURLInfo { + value = strings.TrimSpace(value) + match := xuguJDBCRegexp.FindStringSubmatch(value) + if len(match) != 4 { + return xuguURLInfo{} + } + return xuguURLInfo{Host: match[1], Port: parsePort(match[2]), Database: match[3]} +} + +func parseXuguURL(value string) xuguURLInfo { + value = strings.TrimSpace(value) + if !strings.HasPrefix(strings.ToLower(value), "xugu://") { + return xuguURLInfo{} + } + withoutScheme := value[len("xugu://"):] + var userInfo string + hostPart := withoutScheme + if at := strings.LastIndex(hostPart, "@"); at >= 0 { + userInfo = hostPart[:at] + hostPart = hostPart[at+1:] + } + if slash := strings.IndexAny(hostPart, "/?"); slash >= 0 { + databasePart := strings.TrimLeft(hostPart[slash:], "/") + hostPart = hostPart[:slash] + if q := strings.Index(databasePart, "?"); q >= 0 { + databasePart = databasePart[:q] + } + info := parseHostPort(hostPart) + info.Database = databasePart + if userInfo != "" { + info.Username, info.Password = splitUserInfo(userInfo) + } + return info + } + info := parseHostPort(hostPart) + if userInfo != "" { + info.Username, info.Password = splitUserInfo(userInfo) + } + return info +} + +func parseHostPort(value string) xuguURLInfo { + host := strings.TrimSpace(value) + port := 0 + if idx := strings.LastIndex(host, ":"); idx > 0 { + port = parsePort(host[idx+1:]) + host = host[:idx] + } + return xuguURLInfo{Host: host, Port: port} +} + +func splitUserInfo(value string) (string, string) { + if idx := strings.Index(value, ":"); idx >= 0 { + return value[:idx], value[idx+1:] + } + return value, "" +} + +func buildXuguDSN(host string, port int, database, username, password, urlParams string) string { + if port <= 0 { + port = defaultXuguPort + } + parts := []string{ + "IP=" + host, + "DB=" + strings.TrimSpace(database), + "User=" + strings.TrimSpace(username), + "PWD=" + strings.TrimSpace(password), + "Port=" + strconv.Itoa(port), + } + if !hasDSNParam(urlParams, "CHAR_SET") && !hasDSNParam(urlParams, "CHARSET") { + parts = append(parts, "CHAR_SET=UTF8") + } + for _, param := range splitDSNParams(urlParams) { + parts = append(parts, param) + } + return strings.Join(parts, ";") +} + +func hasDSNParam(raw, key string) bool { + key = strings.ToUpper(strings.TrimSpace(key)) + for _, param := range splitDSNParams(raw) { + name, _, _ := strings.Cut(param, "=") + if strings.ToUpper(strings.TrimSpace(name)) == key { + return true + } + } + return false +} + +func splitDSNParams(raw string) []string { + raw = strings.TrimSpace(strings.Trim(raw, ";")) + if raw == "" { + return nil + } + if strings.Contains(raw, ";") { + items := strings.Split(raw, ";") + result := make([]string, 0, len(items)) + for _, item := range items { + item = strings.TrimSpace(item) + if item != "" { + result = append(result, item) + } + } + return result + } + if strings.Contains(raw, "&") { + items := strings.Split(raw, "&") + result := make([]string, 0, len(items)) + for _, item := range items { + item = strings.TrimSpace(item) + if item != "" { + result = append(result, item) + } + } + return result + } + return []string{raw} +} + +func parsePort(value string) int { + port, _ := strconv.Atoi(value) + return port +} + +func (s *server) requireDB() (*sql.DB, error) { + if s.db == nil { + return nil, errors.New("agent is not connected") + } + return s.db, nil +} + +func (s *server) useDatabase(database string) error { + database = strings.TrimSpace(database) + if database == "" { + return nil + } + if strings.EqualFold(database, configuredDatabaseName(s.params)) { + return nil + } + db, err := s.requireDB() + if err != nil { + return err + } + _, err = db.Exec("USE " + quoteIdentifier(database)) + return err +} + +func (s *server) listDatabases() ([]databaseInfo, error) { + rows, err := s.queryRows(xuguListDatabasesSQL, nil) + if err != nil { + if fallback := fallbackDatabasesFromParams(s.params); len(fallback) > 0 && isXuguMetadataAccessError(err) { + return fallback, nil + } + return nil, err + } + defer rows.Close() + var result []databaseInfo + for rows.Next() { + var name string + if err := rows.Scan(&name); err != nil { + return nil, err + } + result = append(result, databaseInfo{Name: name}) + } + return emptyIfNil(result), rows.Err() +} + +func fallbackDatabasesFromParams(params connectParams) []databaseInfo { + if name := configuredDatabaseName(params); name != "" { + return []databaseInfo{{Name: name}} + } + return nil +} + +func configuredDatabaseName(params connectParams) string { + if name := strings.TrimSpace(params.Database); name != "" { + return name + } + connectionString := strings.TrimSpace(params.ConnectionString) + if parsed := parseXuguURL(connectionString); parsed.Database != "" { + return parsed.Database + } + if jdbc := parseXuguJDBCURL(connectionString); jdbc.Database != "" { + return jdbc.Database + } + if value := xuguDSNValue(connectionString, "DB"); value != "" { + return value + } + return "" +} + +func isXuguMetadataAccessError(err error) bool { + message := strings.ToUpper(err.Error()) + return strings.Contains(message, "E18012") || + strings.Contains(message, "权限不够") || + strings.Contains(message, "ALL_DATABASES") || + strings.Contains(message, "SYS_DATABASES") || + strings.Contains(message, "ALL_SCHEMAS") || + strings.Contains(message, "SYS_SCHEMAS") || + strings.Contains(message, "ALL_TABLES") || + strings.Contains(message, "SYS_TABLES") || + strings.Contains(message, "ALL_VIEWS") || + strings.Contains(message, "SYS_VIEWS") || + strings.Contains(message, "ALL_COLUMNS") || + strings.Contains(message, "ALL_CONSTRAINTS") || + strings.Contains(message, "ALL_INDEXES") || + strings.Contains(message, "SYS_COLUMNS") || + strings.Contains(message, "SYS_CONSTRAINTS") || + strings.Contains(message, "SYS_INDEXES") || + strings.Contains(message, "SYS_TRIGGERS") +} + +func xuguDSNValue(dsn string, key string) string { + for _, part := range strings.Split(dsn, ";") { + name, value, ok := strings.Cut(part, "=") + if ok && strings.EqualFold(strings.TrimSpace(name), key) { + return strings.TrimSpace(value) + } + } + return "" +} + +func (s *server) listSchemas() ([]string, error) { + rows, err := s.queryRows(xuguListSchemasSQL, nil) + if err != nil { + if fallback := strings.ToUpper(strings.TrimSpace(s.params.Username)); fallback != "" && isXuguMetadataAccessError(err) { + return []string{fallback}, nil + } + return nil, err + } + defer rows.Close() + var result []string + for rows.Next() { + var schema string + if err := rows.Scan(&schema); err != nil { + return nil, err + } + result = append(result, schema) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) currentSchema() (string, error) { + rows, err := s.queryRows(` +SELECT s.SCHEMA_NAME +FROM SYS_SCHEMAS s +JOIN SYS_USERS u ON u.DB_ID = s.DB_ID AND u.USER_ID = s.USER_ID +WHERE UPPER(u.USER_NAME) = UPPER(?) +ORDER BY CASE WHEN UPPER(s.SCHEMA_NAME) = UPPER(?) THEN 0 ELSE 1 END, s.SCHEMA_NAME`, []any{s.params.Username, s.params.Username}) + if err != nil { + if fallback := strings.ToUpper(strings.TrimSpace(s.params.Username)); fallback != "" && isXuguMetadataAccessError(err) { + return fallback, nil + } + return "", err + } + defer rows.Close() + if rows.Next() { + var schema string + if err := rows.Scan(&schema); err != nil { + return "", err + } + return strings.ToUpper(schema), nil + } + if err := rows.Err(); err != nil { + return "", err + } + return strings.ToUpper(strings.TrimSpace(s.params.Username)), nil +} + +func (s *server) normalizeSchema(schema string) (string, error) { + schema = strings.TrimSpace(schema) + if schema == "" { + return s.currentSchema() + } + return strings.ToUpper(schema), nil +} + +func (s *server) listTables(schema string, constraints metadataListConstraints) ([]tableInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + query := xuguListTablesQuery(schema, constraints) + rows, err := s.queryRows(query.SQL, query.Args) + if err != nil { + return nil, err + } + defer rows.Close() + var result []tableInfo + for rows.Next() { + var item tableInfo + if err := rows.Scan(&item.Name, &item.TableType, &item.Comment); err != nil { + return nil, err + } + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) listObjects(schema string, constraints metadataListConstraints) ([]objectInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + query := xuguListObjectsQuery(schema, constraints) + rows, err := s.queryRows(query.SQL, query.Args) + if err != nil { + return nil, err + } + defer rows.Close() + var result []objectInfo + for rows.Next() { + var item objectInfo + item.Schema = schema + if err := rows.Scan(&item.Name, &item.ObjectType, &item.Comment); err != nil { + return nil, err + } + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func metadataListConstraintsFromParams(params map[string]json.RawMessage) metadataListConstraints { + objectTypes := stringSliceParam(params, "object_types") + if len(objectTypes) == 0 { + objectTypes = stringSliceParam(params, "objectTypes") + } + limit := intParam(params, "limit") + offset := intParam(params, "offset") + if limit < 0 { + limit = 0 + } + if offset < 0 { + offset = 0 + } + return metadataListConstraints{ + Filter: stringParam(params, "filter"), + Limit: limit, + Offset: offset, + ObjectTypes: objectTypes, + } +} + +func xuguListTablesQuery(schema string, constraints metadataListConstraints) xuguMetadataListQuery { + return xuguConstrainedMetadataListQuery( + ` +SELECT t.TABLE_NAME, 'TABLE' AS TABLE_TYPE, t.COMMENTS +FROM ALL_TABLES t +JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) +UNION ALL +SELECT v.VIEW_NAME, 'VIEW' AS TABLE_TYPE, v.COMMENTS +FROM ALL_VIEWS v +JOIN ALL_SCHEMAS s ON s.DB_ID = v.DB_ID AND s.SCHEMA_ID = v.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?)`, + "TABLE_NAME, TABLE_TYPE, COMMENTS", + "TABLE_NAME", + "TABLE_TYPE", + []any{schema, schema}, + constraints, + ) +} + +func xuguListObjectsQuery(schema string, constraints metadataListConstraints) xuguMetadataListQuery { + return xuguConstrainedMetadataListQuery( + ` +SELECT t.TABLE_NAME AS OBJECT_NAME, 'TABLE' AS OBJECT_TYPE, t.COMMENTS +FROM ALL_TABLES t +JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) +UNION ALL +SELECT v.VIEW_NAME AS OBJECT_NAME, 'VIEW' AS OBJECT_TYPE, v.COMMENTS +FROM ALL_VIEWS v +JOIN ALL_SCHEMAS s ON s.DB_ID = v.DB_ID AND s.SCHEMA_ID = v.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?)`, + "OBJECT_NAME, OBJECT_TYPE, COMMENTS", + "OBJECT_NAME", + "OBJECT_TYPE", + []any{schema, schema}, + constraints, + ) +} + +func xuguConstrainedMetadataListQuery(baseSQL, selectList, nameColumn, typeColumn string, baseArgs []any, constraints metadataListConstraints) xuguMetadataListQuery { + args := append([]any{}, baseArgs...) + where := make([]string, 0, 2) + if filter := strings.TrimSpace(constraints.Filter); filter != "" { + args = append(args, strings.ToUpper(xuguFuzzyLikePattern(filter))) + where = append(where, fmt.Sprintf("UPPER(%s) LIKE ? ESCAPE '\\'", nameColumn)) + } + if len(constraints.ObjectTypes) > 0 { + objectTypes := normalizedXuguObjectTypes(constraints.ObjectTypes) + if len(objectTypes) == 0 { + where = append(where, "1 = 0") + } else { + placeholders := make([]string, 0, len(objectTypes)) + for _, objectType := range objectTypes { + args = append(args, objectType) + placeholders = append(placeholders, "?") + } + where = append(where, fmt.Sprintf("%s IN (%s)", typeColumn, strings.Join(placeholders, ","))) + } + } + + sqlText := fmt.Sprintf("SELECT %s\nFROM (\n%s\n)", selectList, baseSQL) + if len(where) > 0 { + sqlText += "\nWHERE " + strings.Join(where, " AND ") + } + sqlText += fmt.Sprintf("\nORDER BY %s, %s", typeColumn, nameColumn) + + // Xugu documents ROWNUM as the safe pagination path when ORDER BY belongs + // to an inner query; LIMIT is not portable for this UNION metadata query. + if constraints.Limit > 0 { + args = append(args, constraints.Offset+constraints.Limit, constraints.Offset) + sqlText = fmt.Sprintf( + "SELECT %s\nFROM (\n SELECT DBX_Q.*, ROWNUM AS DBX_RN\n FROM (\n%s\n ) DBX_Q\n WHERE ROWNUM <= ?\n)\nWHERE DBX_RN > ?", + selectList, + sqlText, + ) + } else if constraints.Offset > 0 { + args = append(args, constraints.Offset) + sqlText = fmt.Sprintf( + "SELECT %s\nFROM (\n SELECT DBX_Q.*, ROWNUM AS DBX_RN\n FROM (\n%s\n ) DBX_Q\n)\nWHERE DBX_RN > ?", + selectList, + sqlText, + ) + } + + return xuguMetadataListQuery{SQL: sqlText, Args: args} +} + +func normalizedXuguObjectTypes(values []string) []string { + seen := map[string]bool{} + result := make([]string, 0, len(values)) + for _, value := range values { + normalized := strings.ToUpper(strings.TrimSpace(value)) + normalized = strings.ReplaceAll(normalized, "-", "_") + normalized = strings.ReplaceAll(normalized, " ", "_") + switch normalized { + case "TABLE", "BASE_TABLE": + normalized = "TABLE" + case "VIEW": + normalized = "VIEW" + default: + continue + } + if seen[normalized] { + continue + } + seen[normalized] = true + result = append(result, normalized) + } + sort.Strings(result) + return result +} + +func xuguFuzzyLikePattern(value string) string { + value = strings.TrimSpace(value) + if value == "" { + return "%%" + } + var builder strings.Builder + builder.Grow(len(value)*2 + 2) + builder.WriteByte('%') + for _, ch := range value { + switch ch { + case '\\', '%', '_': + builder.WriteByte('\\') + } + builder.WriteRune(ch) + builder.WriteByte('%') + } + return builder.String() +} + +func (s *server) getColumns(schema, table string) ([]columnInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + primaryKeys, err := s.primaryKeyColumns(schema, table) + if err != nil { + return nil, err + } + rows, err := s.queryRows(xuguListColumnsSQL, []any{schema, table}) + if err != nil { + if isXuguMetadataAccessError(err) { + return s.columnsFromSelect(schema, table, primaryKeys) + } + return nil, err + } + defer rows.Close() + var result []columnInfo + for rows.Next() { + var item columnInfo + var notNull any + var scale *int + var varying any + if err := rows.Scan( + &item.Name, + &item.DataType, + ¬Null, + &item.ColumnDefault, + &item.Comment, + &scale, + &varying, + ); err != nil { + return nil, err + } + item.DataType = normalizeXuguColumnType(item.DataType, varying) + item.IsNullable = !truthy(notNull) + item.IsPrimaryKey = primaryKeys[strings.ToUpper(item.Name)] + item.NumericPrecision, item.NumericScale, item.CharacterMaximumLength = decodeXuguScale(item.DataType, scale) + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) columnsFromSelect(schema, table string, primaryKeys map[string]bool) ([]columnInfo, error) { + rows, err := s.queryRows( + "SELECT * FROM "+quoteIdentifier(schema)+"."+quoteIdentifier(table)+" WHERE 1 = 0", + nil, + ) + if err != nil { + return nil, err + } + defer rows.Close() + types, err := rows.ColumnTypes() + if err != nil { + return nil, err + } + result := make([]columnInfo, 0, len(types)) + for _, columnType := range types { + item := columnInfo{ + Name: columnType.Name(), + DataType: columnType.DatabaseTypeName(), + IsPrimaryKey: primaryKeys[strings.ToUpper(columnType.Name())], + } + if nullable, ok := columnType.Nullable(); ok { + item.IsNullable = nullable + } else { + item.IsNullable = true + } + if length, ok := columnType.Length(); ok { + value := int(length) + item.CharacterMaximumLength = &value + } + result = append(result, item) + } + return emptyIfNil(result), nil +} + +func (s *server) primaryKeyColumns(schema, table string) (map[string]bool, error) { + rows, err := s.queryRows(xuguPrimaryKeyColumnsSQL, []any{schema, table}) + if err != nil { + if isXuguMetadataAccessError(err) { + return map[string]bool{}, nil + } + return nil, err + } + defer rows.Close() + result := map[string]bool{} + for rows.Next() { + var define string + if err := rows.Scan(&define); err != nil { + return nil, err + } + for _, column := range parseQuotedIdentifiers(define) { + result[strings.ToUpper(column)] = true + } + } + return result, rows.Err() +} + +func (s *server) listIndexes(schema, table string) ([]indexInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(xuguListIndexesSQL, []any{schema, table}) + if err != nil { + if isXuguMetadataAccessError(err) { + return []indexInfo{}, nil + } + return nil, err + } + defer rows.Close() + + var result []indexInfo + for rows.Next() { + var item indexInfo + var keys string + var unique, primary any + var indexType any + if err := rows.Scan(&item.Name, &keys, &unique, &primary, &indexType, &item.Filter); err != nil { + return nil, err + } + item.Columns = parseIndexKeys(keys) + item.IsUnique = truthy(unique) + item.IsPrimary = truthy(primary) + item.IndexType = stringPtr(indexTypeName(indexType)) + item.IncludedColumns = []string{} + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) listForeignKeys(schema, table string) ([]foreignKeyInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT c.CONS_NAME, c.DEFINE, rt.TABLE_NAME +FROM SYS_CONSTRAINTS c +JOIN SYS_TABLES t ON t.DB_ID = c.DB_ID AND t.TABLE_ID = c.TABLE_ID +JOIN SYS_TABLES rt ON rt.DB_ID = c.DB_ID AND rt.TABLE_ID = c.REF_TABLE_ID +JOIN SYS_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) + AND UPPER(t.TABLE_NAME) = UPPER(?) + AND c.CONS_TYPE = 'F' +ORDER BY c.CONS_NAME`, []any{schema, table}) + if err != nil { + if isXuguMetadataAccessError(err) { + return []foreignKeyInfo{}, nil + } + return nil, err + } + defer rows.Close() + var result []foreignKeyInfo + for rows.Next() { + var name, define, refTable string + if err := rows.Scan(&name, &define, &refTable); err != nil { + return nil, err + } + local, ref := parseForeignKeyColumns(define) + for i, column := range local { + item := foreignKeyInfo{Name: name, Column: column, RefTable: refTable} + if i < len(ref) { + item.RefColumn = ref[i] + } + result = append(result, item) + } + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) listTriggers(schema, table string) ([]triggerInfo, error) { + schema, err := s.normalizeSchema(schema) + if err != nil { + return nil, err + } + table = strings.ToUpper(strings.TrimSpace(table)) + rows, err := s.queryRows(` +SELECT tr.TRIG_NAME, tr.TRIG_EVENT, tr.TRIG_TIME +FROM SYS_TRIGGERS tr +JOIN SYS_TABLES t ON t.DB_ID = tr.DB_ID AND t.TABLE_ID = tr.OBJ_ID +JOIN SYS_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) + AND UPPER(t.TABLE_NAME) = UPPER(?) +ORDER BY tr.TRIG_NAME`, []any{schema, table}) + if err != nil { + if isXuguMetadataAccessError(err) { + return []triggerInfo{}, nil + } + return nil, err + } + defer rows.Close() + var result []triggerInfo + for rows.Next() { + var item triggerInfo + var event, timing any + if err := rows.Scan(&item.Name, &event, &timing); err != nil { + return nil, err + } + item.Event = triggerEventName(event) + item.Timing = triggerTimingName(timing) + result = append(result, item) + } + return emptyIfNil(result), rows.Err() +} + +func (s *server) getObjectSource(schema, name, objectType string) (map[string]any, error) { + var err error + schema, err = s.normalizeSchema(schema) + if err != nil { + return nil, err + } + sourceSQL, args, err := objectSourceQuery(schema, name, objectType) + if err != nil { + return nil, err + } + rows, err := s.queryRows(sourceSQL, args) + if err != nil { + return nil, err + } + defer rows.Close() + var builder strings.Builder + for rows.Next() { + var line string + if err := rows.Scan(&line); err != nil { + return nil, err + } + builder.WriteString(line) + } + return map[string]any{"name": name, "object_type": objectType, "schema": schema, "source": builder.String()}, rows.Err() +} + +func (s *server) getTableDDL(schema, table string) (string, error) { + var err error + schema, err = s.normalizeSchema(schema) + if err != nil { + return "", err + } + var ddl string + rows, err := s.queryRows("SELECT TO_CHAR(DBMS_METADATA.GET_DDL('TABLE', ?, ?)) FROM DUAL", []any{strings.ToUpper(table), schema}) + if err == nil { + defer rows.Close() + if rows.Next() { + if scanErr := rows.Scan(&ddl); scanErr == nil && strings.TrimSpace(ddl) != "" { + if err := rows.Err(); err != nil { + return "", err + } + return s.appendTableIndexDDL(schema, table, ddl), nil + } + } + } + ddl, err = s.buildTableDDL(schema, table) + if err != nil { + return "", err + } + return s.appendTableIndexDDL(schema, table, ddl), nil +} + +func (s *server) getExplainInfo(sqlText string) (string, error) { + if strings.TrimSpace(sqlText) == "" { + return "", errors.New("sql is required") + } + rows, err := s.queryRows("EXPLAIN "+trimStatementSQL(sqlText), nil) + if err != nil { + return "", err + } + defer rows.Close() + columns, err := rows.Columns() + if err != nil { + return "", err + } + var builder strings.Builder + for rows.Next() { + values, err := scanRow(rows, len(columns)) + if err != nil { + return "", err + } + builder.WriteString(joinValues(values, "\t")) + builder.WriteByte('\n') + } + return strings.TrimSpace(builder.String()), rows.Err() +} + +func (s *server) executeTransaction(params map[string]json.RawMessage) (queryResult, error) { + var payload struct { + Statements []string `json:"statements"` + Schema string `json:"schema"` + } + if err := decodeParams(params, &payload); err != nil { + return queryResult{}, err + } + db, err := s.requireDB() + if err != nil { + return queryResult{}, err + } + tx, err := db.Begin() + if err != nil { + return queryResult{}, err + } + if strings.TrimSpace(payload.Schema) != "" { + if _, err := tx.Exec("SET SCHEMA " + quoteIdentifier(payload.Schema)); err != nil { + tx.Rollback() + return queryResult{}, err + } + } + var affected int64 + start := time.Now() + for _, statement := range payload.Statements { + statement = trimStatementSQL(statement) + if statement == "" { + continue + } + result, err := tx.Exec(statement) + if err != nil { + tx.Rollback() + return queryResult{}, err + } + count, _ := result.RowsAffected() + affected += count + } + if err := tx.Commit(); err != nil { + return queryResult{}, err + } + return queryResult{ + Columns: []string{}, + ColumnTypes: []string{}, + Rows: [][]any{}, + AffectedRows: affected, + ExecutionTimeMS: time.Since(start).Milliseconds(), + }, nil +} + +func (s *server) executeQueryPage(opts queryOptions, pageSize int) (queryPageResult, error) { + start := time.Now() + if err := s.useDatabase(opts.Database); err != nil { + return queryPageResult{}, err + } + if strings.TrimSpace(opts.Schema) != "" { + if err := s.setSchema(opts.Schema); err != nil { + return queryPageResult{}, err + } + } + sqlText := trimStatementSQL(opts.SQL) + if !isQuerySQL(sqlText) { + result, err := s.executeQuery(opts) + return queryPageResult{ + Columns: result.Columns, + ColumnTypes: result.ColumnTypes, + Rows: result.Rows, + AffectedRows: result.AffectedRows, + ExecutionTimeMS: result.ExecutionTimeMS, + Truncated: result.Truncated, + SessionID: nil, + HasMore: false, + }, err + } + rows, err := s.queryRows(sqlText, nil) + if err != nil { + return queryPageResult{}, err + } + columns, err := rows.Columns() + if err != nil { + rows.Close() + return queryPageResult{}, err + } + columnTypes := columnTypeNames(rows) + maxRows := opts.MaxRows + if maxRows <= 0 { + maxRows = defaultMaxRows + } + session := &querySession{rows: rows, columns: columns, columnTypes: columnTypes, remaining: maxRows} + result, err := readQuerySessionPage(session, pageSize) + result.ExecutionTimeMS = time.Since(start).Milliseconds() + if err != nil { + rows.Close() + return queryPageResult{}, err + } + if result.HasMore { + sessionID := s.storeQuerySession(session) + result.SessionID = &sessionID + } else { + rows.Close() + } + return result, nil +} + +func (s *server) fetchQueryPage(sessionID string, pageSize int) (queryPageResult, error) { + session := s.sessions[sessionID] + if session == nil { + return queryPageResult{Columns: []string{}, ColumnTypes: []string{}, Rows: [][]any{}, SessionID: nil, HasMore: false}, nil + } + result, err := readQuerySessionPage(session, pageSize) + if err != nil { + s.closeQuerySession(sessionID) + return queryPageResult{}, err + } + if result.HasMore { + result.SessionID = &sessionID + } else { + s.closeQuerySession(sessionID) + } + return result, nil +} + +func (s *server) storeQuerySession(session *querySession) string { + s.nextSessionID++ + sessionID := fmt.Sprintf("xugu-%d", s.nextSessionID) + s.sessions[sessionID] = session + return sessionID +} + +func (s *server) closeQuerySession(sessionID string) bool { + session := s.sessions[sessionID] + if session == nil { + return false + } + session.rows.Close() + delete(s.sessions, sessionID) + return true +} + +func (s *server) closeAllQuerySessions() { + for sessionID := range s.sessions { + s.closeQuerySession(sessionID) + } +} + +func readQuerySessionPage(session *querySession, pageSize int) (queryPageResult, error) { + if pageSize <= 0 { + pageSize = defaultMaxRows + } + result := queryPageResult{Columns: session.columns, ColumnTypes: session.columnTypes, Rows: [][]any{}, SessionID: nil, HasMore: false} + for len(result.Rows) < pageSize && session.remaining > 0 { + if session.pending != nil { + result.Rows = append(result.Rows, session.pending) + session.pending = nil + session.remaining-- + continue + } + if !session.rows.Next() { + return result, session.rows.Err() + } + row, err := scanRow(session.rows, len(session.columns)) + if err != nil { + return queryPageResult{}, err + } + result.Rows = append(result.Rows, row) + session.remaining-- + } + if session.remaining <= 0 { + result.Truncated = true + return result, nil + } + if session.rows.Next() { + row, err := scanRow(session.rows, len(session.columns)) + if err != nil { + return queryPageResult{}, err + } + session.pending = row + result.HasMore = true + return result, nil + } + return result, session.rows.Err() +} + +func (s *server) executeQuery(opts queryOptions) (queryResult, error) { + start := time.Now() + if err := s.useDatabase(opts.Database); err != nil { + return queryResult{}, err + } + if strings.TrimSpace(opts.Schema) != "" { + if err := s.setSchema(opts.Schema); err != nil { + return queryResult{}, err + } + } + sqlText := trimStatementSQL(opts.SQL) + maxRows := opts.MaxRows + if maxRows <= 0 { + maxRows = defaultMaxRows + } + if isQuerySQL(sqlText) { + result, err := s.executeSelect(sqlText, maxRows) + result.ExecutionTimeMS = time.Since(start).Milliseconds() + return result, err + } + db, err := s.requireDB() + if err != nil { + return queryResult{}, err + } + execResult, err := db.Exec(sqlText) + if err != nil { + return queryResult{}, err + } + affected, _ := execResult.RowsAffected() + return queryResult{Columns: []string{}, ColumnTypes: []string{}, Rows: [][]any{}, AffectedRows: affected, ExecutionTimeMS: time.Since(start).Milliseconds()}, nil +} + +func (s *server) executeSelect(sqlText string, maxRows int) (queryResult, error) { + rows, err := s.queryRows(sqlText, nil) + if err != nil { + return queryResult{}, err + } + defer rows.Close() + columns, err := rows.Columns() + if err != nil { + return queryResult{}, err + } + result := queryResult{Columns: columns, ColumnTypes: columnTypeNames(rows), Rows: [][]any{}} + for rows.Next() { + if len(result.Rows) >= maxRows { + result.Truncated = true + break + } + values, err := scanRow(rows, len(columns)) + if err != nil { + return queryResult{}, err + } + result.Rows = append(result.Rows, values) + } + return result, rows.Err() +} + +func scanRow(rows *sql.Rows, columnCount int) ([]any, error) { + values := make([]any, columnCount) + scanTargets := make([]any, columnCount) + for i := range values { + scanTargets[i] = &values[i] + } + if err := rows.Scan(scanTargets...); err != nil { + return nil, err + } + for i, value := range values { + values[i] = normalizeValue(value) + } + return values, nil +} + +func columnTypeNames(rows *sql.Rows) []string { + types, err := rows.ColumnTypes() + if err != nil { + return []string{} + } + result := make([]string, 0, len(types)) + for _, columnType := range types { + result = append(result, columnType.DatabaseTypeName()) + } + return result +} + +func (s *server) setSchema(schema string) error { + db, err := s.requireDB() + if err != nil { + return err + } + _, err = db.Exec("SET SCHEMA " + quoteIdentifier(schema)) + return err +} + +func (s *server) queryRows(sqlText string, args []any) (*sql.Rows, error) { + db, err := s.requireDB() + if err != nil { + return nil, err + } + if len(args) == 0 { + return db.Query(sqlText) + } + return db.Query(sqlText, args...) +} + +func objectSourceQuery(schema, name, objectType string) (string, []any, error) { + objectType = strings.ToUpper(strings.TrimSpace(objectType)) + name = strings.ToUpper(strings.TrimSpace(name)) + switch objectType { + case "VIEW": + return ` +SELECT TO_CHAR(v.DEFINE) +FROM SYS_VIEWS v +JOIN SYS_SCHEMAS s ON s.DB_ID = v.DB_ID AND s.SCHEMA_ID = v.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) AND UPPER(v.VIEW_NAME) = UPPER(?)`, []any{schema, name}, nil + case "TRIGGER": + return ` +SELECT TO_CHAR(t.DEFINE) +FROM SYS_TRIGGERS t +JOIN SYS_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) AND UPPER(t.TRIG_NAME) = UPPER(?)`, []any{schema, name}, nil + case "PROCEDURE", "FUNCTION": + return ` +SELECT TO_CHAR(p.DEFINE) +FROM SYS_PROCEDURES p +JOIN SYS_SCHEMAS s ON s.DB_ID = p.DB_ID AND s.SCHEMA_ID = p.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) AND UPPER(p.PROC_NAME) = UPPER(?)`, []any{schema, name}, nil + case "PACKAGE", "PACKAGE BODY": + return ` +SELECT COALESCE(TO_CHAR(k.SPEC), '') || COALESCE(TO_CHAR(k.BODY), '') +FROM SYS_PACKAGES k +JOIN SYS_SCHEMAS s ON s.DB_ID = k.DB_ID AND s.SCHEMA_ID = k.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) AND UPPER(k.PACK_NAME) = UPPER(?)`, []any{schema, name}, nil + default: + return "", nil, fmt.Errorf("object source is not supported for %s", objectType) + } +} + +func (s *server) buildTableDDL(schema, table string) (string, error) { + columns, err := s.getColumns(schema, table) + if err != nil { + return "", err + } + if len(columns) == 0 { + return "", fmt.Errorf("table not found: %s.%s", schema, table) + } + var builder strings.Builder + builder.WriteString("CREATE TABLE ") + builder.WriteString(quoteIdentifier(schema)) + builder.WriteByte('.') + builder.WriteString(quoteIdentifier(table)) + builder.WriteString(" (\n") + for i, column := range columns { + if i > 0 { + builder.WriteString(",\n") + } + builder.WriteString(" ") + builder.WriteString(quoteIdentifier(column.Name)) + builder.WriteByte(' ') + builder.WriteString(columnTypeDDL(column)) + if column.ColumnDefault != nil && strings.TrimSpace(*column.ColumnDefault) != "" { + builder.WriteString(" DEFAULT ") + builder.WriteString(strings.TrimSpace(*column.ColumnDefault)) + } + if !column.IsNullable { + builder.WriteString(" NOT NULL") + } + if column.Comment != nil && strings.TrimSpace(*column.Comment) != "" { + builder.WriteString(" COMMENT ") + builder.WriteString(quoteStringLiteral(strings.TrimSpace(*column.Comment))) + } + } + primary := make([]string, 0) + for _, column := range columns { + if column.IsPrimaryKey { + primary = append(primary, quoteIdentifier(column.Name)) + } + } + if len(primary) > 0 { + builder.WriteString(",\n PRIMARY KEY (") + builder.WriteString(strings.Join(primary, ", ")) + builder.WriteByte(')') + } + builder.WriteString("\n)") + if comment, err := s.tableComment(schema, table); err == nil && strings.TrimSpace(comment) != "" { + builder.WriteString("\nCOMMENT ") + builder.WriteString(quoteStringLiteral(strings.TrimSpace(comment))) + } + return builder.String(), nil +} + +func (s *server) appendTableIndexDDL(schema, table, ddl string) string { + indexDDL, err := s.tableIndexDDL(schema, table) + if err == nil && strings.TrimSpace(indexDDL) != "" { + return appendDDLStatement(ddl, indexDDL) + } + indexes, err := s.listIndexes(schema, table) + if err != nil || len(indexes) == 0 { + return ddl + } + var builder strings.Builder + for _, index := range indexes { + if index.IsPrimary || len(index.Columns) == 0 { + continue + } + if builder.Len() > 0 { + builder.WriteString("\n") + } + if index.IsUnique { + builder.WriteString("CREATE UNIQUE INDEX ") + } else { + builder.WriteString("CREATE INDEX ") + } + builder.WriteString(quoteIdentifier(index.Name)) + builder.WriteString(" ON ") + builder.WriteString(quoteIdentifier(schema)) + builder.WriteByte('.') + builder.WriteString(quoteIdentifier(table)) + builder.WriteByte('(') + for i, column := range index.Columns { + if i > 0 { + builder.WriteString(", ") + } + builder.WriteString(quoteIdentifier(column)) + } + builder.WriteByte(')') + if index.IndexType != nil && strings.TrimSpace(*index.IndexType) != "" { + builder.WriteString(" INDEXTYPE IS ") + builder.WriteString(strings.TrimSpace(*index.IndexType)) + } + builder.WriteByte(';') + } + if builder.Len() == 0 { + return ddl + } + return appendDDLStatement(ddl, builder.String()) +} + +func (s *server) tableIndexDDL(schema, table string) (string, error) { + rows, err := s.queryRows( + "SELECT TO_CHAR(DBMS_METADATA.GET_DDL('INDEX', ?, ?)) FROM DUAL", + []any{strings.ToUpper(strings.TrimSpace(table)), schema}, + ) + if err != nil { + return "", err + } + defer rows.Close() + var ddl string + if rows.Next() { + if err := rows.Scan(&ddl); err != nil { + return "", err + } + } + if err := rows.Err(); err != nil { + return "", err + } + return ddl, nil +} + +func (s *server) tableComment(schema, table string) (string, error) { + rows, err := s.queryRows(` +SELECT t.COMMENTS +FROM ALL_TABLES t +JOIN ALL_SCHEMAS s ON s.DB_ID = t.DB_ID AND s.SCHEMA_ID = t.SCHEMA_ID +WHERE UPPER(s.SCHEMA_NAME) = UPPER(?) + AND UPPER(t.TABLE_NAME) = UPPER(?)`, []any{schema, table}) + if err != nil { + return "", err + } + defer rows.Close() + var comment *string + if rows.Next() { + if err := rows.Scan(&comment); err != nil { + return "", err + } + } + if err := rows.Err(); err != nil { + return "", err + } + if comment == nil { + return "", nil + } + return *comment, nil +} + +func appendDDLStatement(ddl, extra string) string { + ddl = strings.TrimRight(ddl, "\r\n\t ") + extra = strings.TrimSpace(extra) + if extra == "" { + return ddl + } + if !strings.HasSuffix(ddl, ";") { + ddl += ";" + } + return ddl + "\n\n" + extra +} + +func columnTypeDDL(column columnInfo) string { + dataType := strings.ToUpper(strings.TrimSpace(column.DataType)) + if column.CharacterMaximumLength != nil { + return fmt.Sprintf("%s(%d)", dataType, *column.CharacterMaximumLength) + } + if column.NumericPrecision != nil && column.NumericScale != nil { + return fmt.Sprintf("%s(%d,%d)", dataType, *column.NumericPrecision, *column.NumericScale) + } + return dataType +} + +func decodeXuguScale(dataType string, scale *int) (*int, *int, *int) { + if scale == nil || *scale < 0 { + return nil, nil, nil + } + upper := strings.ToUpper(dataType) + if strings.Contains(upper, "CHAR") || strings.Contains(upper, "BINARY") { + length := *scale + return nil, nil, &length + } + if strings.Contains(upper, "NUM") || strings.Contains(upper, "DECIMAL") { + precision := *scale / 65536 + numericScale := *scale % 65536 + return &precision, &numericScale, nil + } + return nil, nil, nil +} + +func normalizeXuguColumnType(dataType string, varying any) string { + upper := strings.ToUpper(strings.TrimSpace(dataType)) + if !truthy(varying) { + return dataType + } + switch upper { + case "CHAR": + return "VARCHAR" + case "BINARY": + return "VARBINARY" + default: + return dataType + } +} + +var quotedIdentifierRegexp = regexp.MustCompile(`"([^"]+)"`) + +func parseQuotedIdentifiers(value string) []string { + matches := quotedIdentifierRegexp.FindAllStringSubmatch(value, -1) + result := make([]string, 0, len(matches)) + for _, match := range matches { + if len(match) == 2 { + result = append(result, match[1]) + } + } + return result +} + +func parseIndexKeys(value string) []string { + quoted := parseQuotedIdentifiers(value) + if len(quoted) > 0 { + return quoted + } + parts := strings.Split(value, ",") + result := make([]string, 0, len(parts)) + for _, part := range parts { + part = strings.Trim(strings.TrimSpace(part), `"`) + if part != "" { + result = append(result, part) + } + } + return result +} + +func parseForeignKeyColumns(define string) ([]string, []string) { + groups := regexp.MustCompile(`\(([^()]*)\)`).FindAllStringSubmatch(define, -1) + if len(groups) < 2 { + columns := parseQuotedIdentifiers(define) + if len(columns)%2 == 0 { + mid := len(columns) / 2 + return columns[:mid], columns[mid:] + } + return columns, nil + } + return parseQuotedIdentifiers(groups[0][1]), parseQuotedIdentifiers(groups[1][1]) +} + +func truthy(value any) bool { + switch v := normalizeValue(value).(type) { + case bool: + return v + case int64: + return v != 0 + case float64: + return v != 0 + case string: + upper := strings.ToUpper(strings.TrimSpace(v)) + return upper == "T" || upper == "TRUE" || upper == "1" || upper == "Y" || upper == "YES" + default: + return false + } +} + +func stringPtr(value string) *string { + if strings.TrimSpace(value) == "" { + return nil + } + return &value +} + +func quoteStringLiteral(value string) string { + return "'" + strings.ReplaceAll(value, "'", "''") + "'" +} + +func indexTypeName(value any) string { + switch fmt.Sprint(normalizeValue(value)) { + case "0": + return "BTREE" + case "1": + return "RTREE" + case "2": + return "FULLTEXT" + case "3": + return "BITMAP" + default: + return fmt.Sprint(normalizeValue(value)) + } +} + +func triggerEventName(value any) string { + switch fmt.Sprint(normalizeValue(value)) { + case "1": + return "INSERT" + case "2": + return "UPDATE" + case "3": + return "INSERT OR UPDATE" + case "4": + return "DELETE" + case "5": + return "INSERT OR DELETE" + case "6": + return "UPDATE OR DELETE" + case "7": + return "INSERT OR UPDATE OR DELETE" + case "8": + return "LOGON" + default: + return fmt.Sprint(normalizeValue(value)) + } +} + +func triggerTimingName(value any) string { + switch fmt.Sprint(normalizeValue(value)) { + case "1": + return "BEFORE" + case "2": + return "INSTEAD" + case "4": + return "AFTER" + default: + return fmt.Sprint(normalizeValue(value)) + } +} + +func joinValues(values []any, sep string) string { + parts := make([]string, len(values)) + for i, value := range values { + if value == nil { + parts[i] = "" + } else { + parts[i] = fmt.Sprint(value) + } + } + return strings.Join(parts, sep) +} + +func decodeParams(params map[string]json.RawMessage, target any) error { + if params == nil { + params = map[string]json.RawMessage{} + } + data, err := json.Marshal(params) + if err != nil { + return err + } + return json.Unmarshal(data, target) +} + +func stringParam(params map[string]json.RawMessage, key string) string { + if params == nil || len(params[key]) == 0 { + return "" + } + var value string + _ = json.Unmarshal(params[key], &value) + return value +} + +func intParam(params map[string]json.RawMessage, key string) int { + if params == nil || len(params[key]) == 0 { + return 0 + } + var value int + _ = json.Unmarshal(params[key], &value) + return value +} + +func stringSliceParam(params map[string]json.RawMessage, key string) []string { + if params == nil || len(params[key]) == 0 { + return nil + } + var values []string + if err := json.Unmarshal(params[key], &values); err == nil { + return values + } + var single string + if err := json.Unmarshal(params[key], &single); err == nil && strings.TrimSpace(single) != "" { + return []string{single} + } + return nil +} + +func errorResponse(id json.RawMessage, err error) response { + return response{JSONRPC: "2.0", ID: id, Error: &rpcError{Code: -1, Message: err.Error()}} +} + +func trimStatementSQL(sqlText string) string { + return strings.TrimRight(strings.TrimSpace(sqlText), "; \t\r\n") +} + +func isQuerySQL(sqlText string) bool { + lower := strings.ToLower(strings.TrimSpace(sqlText)) + return strings.HasPrefix(lower, "select") || strings.HasPrefix(lower, "with") +} + +func quoteIdentifier(value string) string { + return `"` + strings.ReplaceAll(value, `"`, `""`) + `"` +} + +func normalizeValue(value any) any { + switch v := value.(type) { + case nil: + return nil + case []byte: + return string(v) + case time.Time: + return v.Format(time.RFC3339Nano) + case int: + return int64(v) + case int8: + return int64(v) + case int16: + return int64(v) + case int32: + return int64(v) + case int64: + return v + case uint: + return uint64(v) + case uint8: + return uint64(v) + case uint16: + return uint64(v) + case uint32: + return uint64(v) + case uint64: + return v + case float32: + return float64(v) + case float64, bool, string: + return v + case fmt.Stringer: + return v.String() + default: + return fmt.Sprint(v) + } +} + +func emptyIfNil[T any](values []T) []T { + if values == nil { + return []T{} + } + return values +} diff --git a/agents/drivers/xugu/main_test.go b/agents/drivers/xugu/main_test.go new file mode 100644 index 0000000..89f3f41 --- /dev/null +++ b/agents/drivers/xugu/main_test.go @@ -0,0 +1,529 @@ +package main + +import ( + "encoding/json" + "errors" + "os" + "strings" + "testing" +) + +func TestHandshakeResponse(t *testing.T) { + s := newServer() + resp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":7,"method":"handshake","params":{"appVersion":"dev"}}`) + if shutdown { + t.Fatal("handshake should not shut down the server") + } + if resp.Error != nil { + t.Fatalf("unexpected error: %v", resp.Error) + } + data, err := json.Marshal(resp.Result) + if err != nil { + t.Fatal(err) + } + var result struct { + ProtocolVersion int `json:"protocolVersion"` + AgentProtocolVersion int `json:"agentProtocolVersion"` + Capabilities []string `json:"capabilities"` + } + if err := json.Unmarshal(data, &result); err != nil { + t.Fatal(err) + } + if result.ProtocolVersion != 1 || result.AgentProtocolVersion != 1 { + t.Fatalf("unexpected protocol versions: %+v", result) + } + contract := protocolContract(t) + if result.ProtocolVersion != contract.ProtocolVersion || result.AgentProtocolVersion != contract.ProtocolVersion { + t.Fatalf("handshake protocol versions do not match contract: result=%+v contract=%+v", result, contract) + } + for _, capability := range result.Capabilities { + if !contains(contract.AllCapabilities, capability) { + t.Fatalf("handshake returned capability %q outside protocol contract %v", capability, contract.AllCapabilities) + } + } + if !contains(result.Capabilities, "query") || !contains(result.Capabilities, "metadata") { + t.Fatalf("expected query and metadata capabilities, got %v", result.Capabilities) + } +} + +func TestCloseMissingQuerySessionReturnsFalse(t *testing.T) { + s := newServer() + resp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":8,"method":"close_query_session","params":{"sessionId":"missing"}}`) + if shutdown { + t.Fatal("close_query_session should not shut down the server") + } + if resp.Error != nil { + t.Fatalf("unexpected error: %v", resp.Error) + } + if resp.Result != false { + t.Fatalf("expected false result, got %#v", resp.Result) + } +} + +func TestListDataTypesReturnsXuguTypes(t *testing.T) { + s := newServer() + resp, shutdown := s.handleLine(`{"jsonrpc":"2.0","id":9,"method":"list_data_types","params":{"database":"demo"}}`) + if shutdown { + t.Fatal("list_data_types should not shut down the server") + } + if resp.Error != nil { + t.Fatalf("unexpected error: %v", resp.Error) + } + data, err := json.Marshal(resp.Result) + if err != nil { + t.Fatal(err) + } + var result []string + if err := json.Unmarshal(data, &result); err != nil { + t.Fatal(err) + } + for _, want := range []string{"INTEGER", "VARCHAR", "NUMERIC", "INT"} { + if !contains(result, want) { + t.Fatalf("expected data type %q in %v", want, result) + } + } +} + +func TestEmptyResultSlicesMarshalAsArrays(t *testing.T) { + data, err := json.Marshal(queryResult{}) + if err != nil { + t.Fatal(err) + } + text := string(data) + if strings.Contains(text, `"columns":null`) || strings.Contains(text, `"column_types":null`) || strings.Contains(text, `"rows":null`) { + t.Fatalf("query result should marshal nil slices as arrays: %s", text) + } + + data, err = json.Marshal(indexInfo{}) + if err != nil { + t.Fatal(err) + } + text = string(data) + if strings.Contains(text, `"columns":null`) || strings.Contains(text, `"included_columns":null`) { + t.Fatalf("index info should marshal nil slices as arrays: %s", text) + } +} + +func TestGetTableDDLResultMarshalsAsString(t *testing.T) { + data, err := json.Marshal("CREATE TABLE SYSDBA.ORDERS (ID INT)") + if err != nil { + t.Fatal(err) + } + var ddl string + if err := json.Unmarshal(data, &ddl); err != nil { + t.Fatalf("get_table_ddl result must deserialize as a string: %v", err) + } +} + +func TestBuildDSNUsesConnectionStringWhenProvided(t *testing.T) { + dsn := buildDSN(connectParams{ConnectionString: "IP=db.example.com;DB=SYSTEM;User=SYSDBA;PWD=secret;Port=5138"}) + + if dsn != "IP=db.example.com;DB=SYSTEM;User=SYSDBA;PWD=secret;Port=5138" { + t.Fatalf("unexpected dsn: %s", dsn) + } +} + +func protocolContract(t *testing.T) struct { + ProtocolVersion int `json:"protocolVersion"` + AllCapabilities []string `json:"allCapabilities"` +} { + t.Helper() + data, err := os.ReadFile("../../common/src/main/resources/agent-protocol-v1.json") + if err != nil { + t.Fatal(err) + } + var contract struct { + ProtocolVersion int `json:"protocolVersion"` + AllCapabilities []string `json:"allCapabilities"` + } + if err := json.Unmarshal(data, &contract); err != nil { + t.Fatal(err) + } + return contract +} + +func TestBuildDSNUsesConnectionFields(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Port: 15138, + Database: "demo", + Username: "sysdba", + Password: "secret", + }) + + for _, part := range []string{"IP=db.example.com", "DB=demo", "User=sysdba", "PWD=secret", "Port=15138"} { + if !strings.Contains(dsn, part) { + t.Fatalf("dsn should contain %s, got: %s", part, dsn) + } + } +} + +func TestBuildDSNUsesDefaultPort(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Database: "demo", + Username: "sysdba", + Password: "secret", + }) + + if !strings.Contains(dsn, "Port=5138") { + t.Fatalf("dsn should default to Xugu port, got: %s", dsn) + } +} + +func TestBuildDSNParsesJdbcURL(t *testing.T) { + dsn := buildDSN(connectParams{ + Username: "sysdba", + Password: "secret", + ConnectionString: "jdbc:xugu://db.example.com:15138/demo", + }) + + for _, part := range []string{"IP=db.example.com", "DB=demo", "User=sysdba", "PWD=secret", "Port=15138"} { + if !strings.Contains(dsn, part) { + t.Fatalf("dsn should contain %s, got: %s", part, dsn) + } + } +} + +func TestBuildDSNParsesDBXURL(t *testing.T) { + dsn := buildDSN(connectParams{ + ConnectionString: "xugu://sysdba:secret@db.example.com:15138/demo", + }) + + for _, part := range []string{"IP=db.example.com", "DB=demo", "User=sysdba", "PWD=secret", "Port=15138"} { + if !strings.Contains(dsn, part) { + t.Fatalf("dsn should contain %s, got: %s", part, dsn) + } + } +} + +func TestBuildDSNAppendsURLParams(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Database: "demo", + Username: "sysdba", + Password: "secret", + URLParams: "AUTO_COMMIT=on;CHAR_SET=UTF8", + }) + + for _, part := range []string{"AUTO_COMMIT=on", "CHAR_SET=UTF8"} { + if !strings.Contains(dsn, part) { + t.Fatalf("dsn should contain %s, got: %s", part, dsn) + } + } +} + +func TestBuildDSNDefaultsToUTF8(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Database: "demo", + Username: "sysdba", + Password: "secret", + }) + + if !strings.Contains(dsn, "CHAR_SET=UTF8") { + t.Fatalf("dsn should default to UTF8, got: %s", dsn) + } +} + +func TestBuildDSNRespectsExplicitCharset(t *testing.T) { + dsn := buildDSN(connectParams{ + Host: "db.example.com", + Database: "demo", + Username: "sysdba", + Password: "secret", + URLParams: "CHAR_SET=GBK", + }) + + if strings.Contains(dsn, "CHAR_SET=UTF8") || !strings.Contains(dsn, "CHAR_SET=GBK") { + t.Fatalf("dsn should respect explicit charset, got: %s", dsn) + } +} + +func TestListDatabasesSQLUsesXuguDictionary(t *testing.T) { + sqlText := strings.ToUpper(xuguListDatabasesSQL) + + if !strings.Contains(sqlText, "ALL_DATABASES") || strings.Contains(sqlText, "SYS_DATABASES") { + t.Fatalf("database listing should query low-privilege ALL_DATABASES, got: %s", xuguListDatabasesSQL) + } +} + +func TestFallbackDatabasesFromParams(t *testing.T) { + cases := []struct { + name string + params connectParams + want string + }{ + { + name: "database field", + params: connectParams{ + Database: "LOWPRIV", + }, + want: "LOWPRIV", + }, + { + name: "dbx url", + params: connectParams{ + ConnectionString: "xugu://user:secret@db.example.com:5138/demo", + }, + want: "demo", + }, + { + name: "jdbc url", + params: connectParams{ + ConnectionString: "jdbc:xugu://db.example.com:5138/reporting", + }, + want: "reporting", + }, + { + name: "native dsn", + params: connectParams{ + ConnectionString: "IP=db.example.com;DB=SYSTEM;User=SYSDBA;PWD=secret;Port=5138", + }, + want: "SYSTEM", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got := fallbackDatabasesFromParams(tc.params) + if len(got) != 1 || got[0].Name != tc.want { + t.Fatalf("unexpected fallback databases: got=%v want=%s", got, tc.want) + } + }) + } +} + +func TestUseDatabaseSkipsConfiguredDatabase(t *testing.T) { + s := newServer() + s.params = connectParams{Database: "SYSTEM"} + + if err := s.useDatabase("system"); err != nil { + t.Fatalf("expected configured database USE to be skipped, got: %v", err) + } +} + +func TestConfiguredDatabaseName(t *testing.T) { + cases := []struct { + params connectParams + want string + }{ + {params: connectParams{Database: "SYSTEM"}, want: "SYSTEM"}, + {params: connectParams{ConnectionString: "xugu://user:secret@db.example.com:5138/demo"}, want: "demo"}, + {params: connectParams{ConnectionString: "jdbc:xugu://db.example.com:5138/reporting"}, want: "reporting"}, + {params: connectParams{ConnectionString: "IP=db.example.com;DB=SYSTEM;User=SYSDBA;PWD=secret"}, want: "SYSTEM"}, + } + + for _, tc := range cases { + if got := configuredDatabaseName(tc.params); got != tc.want { + t.Fatalf("configuredDatabaseName(%+v) = %q, want %q", tc.params, got, tc.want) + } + } +} + +func TestSchemaListingSQLUsesLowPrivilegeDictionary(t *testing.T) { + sqlText := strings.ToUpper(xuguListSchemasSQL) + + if !strings.Contains(sqlText, "ALL_SCHEMAS") || strings.Contains(sqlText, "SYS_SCHEMAS") { + t.Fatalf("schema listing should query low-privilege ALL_SCHEMAS, got: %s", xuguListSchemasSQL) + } +} + +func TestPrimaryKeySQLUsesLowPrivilegeDictionary(t *testing.T) { + sqlText := strings.ToUpper(xuguPrimaryKeyColumnsSQL) + + for _, want := range []string{"ALL_CONSTRAINTS", "ALL_TABLES", "ALL_SCHEMAS"} { + if !strings.Contains(sqlText, want) { + t.Fatalf("primary key listing should query %s, got: %s", want, xuguPrimaryKeyColumnsSQL) + } + } + for _, forbidden := range []string{"SYS_CONSTRAINTS", "SYS_TABLES", "SYS_SCHEMAS"} { + if strings.Contains(sqlText, forbidden) { + t.Fatalf("primary key listing should not query %s, got: %s", forbidden, xuguPrimaryKeyColumnsSQL) + } + } +} + +func TestColumnSQLUsesLowPrivilegeDictionary(t *testing.T) { + sqlText := strings.ToUpper(xuguListColumnsSQL) + + for _, want := range []string{"ALL_COLUMNS", "ALL_TABLES", "ALL_SCHEMAS", "COMMENTS", `"VARYING"`} { + if !strings.Contains(sqlText, want) { + t.Fatalf("column listing should query %s, got: %s", want, xuguListColumnsSQL) + } + } + for _, forbidden := range []string{"SYS_COLUMNS", "SYS_TABLES", "SYS_SCHEMAS"} { + if strings.Contains(sqlText, forbidden) { + t.Fatalf("column listing should not query %s, got: %s", forbidden, xuguListColumnsSQL) + } + } +} + +func TestIndexSQLUsesLowPrivilegeDictionary(t *testing.T) { + sqlText := strings.ToUpper(xuguListIndexesSQL) + + for _, want := range []string{"ALL_INDEXES", "ALL_TABLES", "ALL_SCHEMAS", "KEYS"} { + if !strings.Contains(sqlText, want) { + t.Fatalf("index listing should query %s, got: %s", want, xuguListIndexesSQL) + } + } + for _, forbidden := range []string{"SYS_INDEXES", "SYS_TABLES", "SYS_SCHEMAS"} { + if strings.Contains(sqlText, forbidden) { + t.Fatalf("index listing should not query %s, got: %s", forbidden, xuguListIndexesSQL) + } + } +} + +func TestXuguMetadataAccessErrorDetection(t *testing.T) { + if !isXuguMetadataAccessError(errors.New("[E18012] 权限不够")) { + t.Fatal("expected E18012 permission error to be treated as metadata access error") + } + if isXuguMetadataAccessError(errors.New("network timeout")) { + t.Fatal("network errors should not trigger database-list fallback") + } +} + +func TestXuguListTablesQueryAppliesMetadataConstraints(t *testing.T) { + query := xuguListTablesQuery("APP", metadataListConstraints{ + Filter: "ord_", + ObjectTypes: []string{"view", "table", "VIEW"}, + Limit: 25, + Offset: 50, + }) + + for _, want := range []string{ + "UPPER(TABLE_NAME) LIKE ? ESCAPE '\\'", + "TABLE_TYPE IN (?,?)", + "ORDER BY TABLE_TYPE, TABLE_NAME", + "ROWNUM <= ?", + "DBX_RN > ?", + } { + if !strings.Contains(query.SQL, want) { + t.Fatalf("expected SQL to contain %q:\n%s", want, query.SQL) + } + } + + wantArgs := []any{"APP", "APP", `%O%R%D%\_%`, "TABLE", "VIEW", 75, 50} + assertArgs(t, query.Args, wantArgs) +} + +func TestXuguListObjectsQueryRejectsUnsupportedObjectTypes(t *testing.T) { + query := xuguListObjectsQuery("APP", metadataListConstraints{ + ObjectTypes: []string{"INDEX"}, + Limit: 10, + }) + + if !strings.Contains(query.SQL, "1 = 0") { + t.Fatalf("unsupported object type should produce empty-result predicate:\n%s", query.SQL) + } + + wantArgs := []any{"APP", "APP", 10, 0} + assertArgs(t, query.Args, wantArgs) +} + +func TestMetadataListConstraintsFromParams(t *testing.T) { + params := map[string]json.RawMessage{ + "filter": json.RawMessage(`"tab"`), + "limit": json.RawMessage(`30`), + "offset": json.RawMessage(`5`), + "object_types": json.RawMessage(`["TABLE","VIEW"]`), + } + + constraints := metadataListConstraintsFromParams(params) + if constraints.Filter != "tab" || constraints.Limit != 30 || constraints.Offset != 5 { + t.Fatalf("unexpected constraints: %+v", constraints) + } + if len(constraints.ObjectTypes) != 2 || constraints.ObjectTypes[0] != "TABLE" || constraints.ObjectTypes[1] != "VIEW" { + t.Fatalf("unexpected object types: %+v", constraints.ObjectTypes) + } +} + +func assertArgs(t *testing.T, got []any, want []any) { + t.Helper() + if len(got) != len(want) { + t.Fatalf("args length = %d, want %d: got=%#v want=%#v", len(got), len(want), got, want) + } + for i := range want { + if got[i] != want[i] { + t.Fatalf("arg %d = %#v, want %#v; args=%#v", i, got[i], want[i], got) + } + } +} + +func TestParseForeignKeyColumns(t *testing.T) { + local, ref := parseForeignKeyColumns(`("C1","C2")("ID1","ID2")`) + + if strings.Join(local, ",") != "C1,C2" || strings.Join(ref, ",") != "ID1,ID2" { + t.Fatalf("unexpected foreign key columns: local=%v ref=%v", local, ref) + } +} + +func TestDecodeXuguScale(t *testing.T) { + numericScale := 32*65536 + 6 + precision, scale, length := decodeXuguScale("NUMERIC", &numericScale) + if precision == nil || *precision != 32 || scale == nil || *scale != 6 || length != nil { + t.Fatalf("unexpected numeric scale decode: precision=%v scale=%v length=%v", precision, scale, length) + } + + charScale := 128 + precision, scale, length = decodeXuguScale("VARCHAR", &charScale) + if precision != nil || scale != nil || length == nil || *length != 128 { + t.Fatalf("unexpected char scale decode: precision=%v scale=%v length=%v", precision, scale, length) + } +} + +func TestNormalizeXuguColumnTypeUsesVaryingFlag(t *testing.T) { + tests := []struct { + name string + dataType string + varying any + want string + }{ + {name: "varying char", dataType: "CHAR", varying: true, want: "VARCHAR"}, + {name: "fixed char", dataType: "CHAR", varying: false, want: "CHAR"}, + {name: "varying binary", dataType: "BINARY", varying: true, want: "VARBINARY"}, + {name: "fixed binary", dataType: "BINARY", varying: false, want: "BINARY"}, + {name: "other varying type", dataType: "NUMERIC", varying: true, want: "NUMERIC"}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := normalizeXuguColumnType(tt.dataType, tt.varying); got != tt.want { + t.Fatalf("normalizeXuguColumnType(%q, %v) = %q, want %q", tt.dataType, tt.varying, got, tt.want) + } + }) + } +} + +func TestAppendDDLStatement(t *testing.T) { + got := appendDDLStatement("CREATE TABLE \"T\" (\"ID\" INT)\n", "CREATE INDEX \"IDX\" ON \"T\"(\"ID\");") + want := "CREATE TABLE \"T\" (\"ID\" INT);\n\nCREATE INDEX \"IDX\" ON \"T\"(\"ID\");" + + if got != want { + t.Fatalf("unexpected DDL append:\ngot: %q\nwant: %q", got, want) + } +} + +func TestQuoteStringLiteralEscapesSingleQuotes(t *testing.T) { + if got := quoteStringLiteral("owner's note"); got != "'owner''s note'" { + t.Fatalf("unexpected quoted string: %s", got) + } +} + +func TestNormalizeValuePreservesDriverNumericTypes(t *testing.T) { + if value := normalizeValue(int32(7)); value != int64(7) { + t.Fatalf("expected int32 to normalize to int64, got %#v", value) + } + if value := normalizeValue(float32(1.25)); value != float64(float32(1.25)) { + t.Fatalf("expected float32 to normalize to float64, got %#v", value) + } +} + +func contains(values []string, target string) bool { + for _, value := range values { + if value == target { + return true + } + } + return false +} diff --git a/agents/drivers/yashandb/build.gradle b/agents/drivers/yashandb/build.gradle new file mode 100644 index 0000000..5a80412 --- /dev/null +++ b/agents/drivers/yashandb/build.gradle @@ -0,0 +1,9 @@ +dependencies { + implementation 'com.yashandb:yashandb-jdbc:1.9.27' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': '崖山 YashanDB', 'Main-Class': 'com.dbx.agent.yashandb.YashandbAgent') + } +} diff --git a/agents/drivers/yashandb/src/main/java/com/dbx/agent/yashandb/YashandbAgent.java b/agents/drivers/yashandb/src/main/java/com/dbx/agent/yashandb/YashandbAgent.java new file mode 100644 index 0000000..cf11cc0 --- /dev/null +++ b/agents/drivers/yashandb/src/main/java/com/dbx/agent/yashandb/YashandbAgent.java @@ -0,0 +1,22 @@ +package com.dbx.agent.yashandb; + +import com.dbx.agent.ConfiguredJdbcAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.JsonRpcServer; + +public final class YashandbAgent extends ConfiguredJdbcAgent { + public static final JdbcAgentProfile YASHANDB_PROFILE = new JdbcAgentProfile( + "com.yashandb.jdbc.Driver", + "jdbc:yasdb://{host}:{port}/{database}", + 1688, + true + ); + + public YashandbAgent() { + super(YASHANDB_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new YashandbAgent()).run(); + } +} diff --git a/agents/drivers/yashandb/src/test/java/com/dbx/agent/yashandb/YashandbAgentTest.java b/agents/drivers/yashandb/src/test/java/com/dbx/agent/yashandb/YashandbAgentTest.java new file mode 100644 index 0000000..0ae5c64 --- /dev/null +++ b/agents/drivers/yashandb/src/test/java/com/dbx/agent/yashandb/YashandbAgentTest.java @@ -0,0 +1,30 @@ +package com.dbx.agent.yashandb; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.JdbcAgentProfile; +import com.dbx.agent.test.JdbcFakeExecutionBehaviorTest; +import java.util.Collections; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class YashandbAgentTest extends JdbcFakeExecutionBehaviorTest { + @Override + protected DatabaseAgent createAgent() { + return new YashandbAgent(); + } + + @Override + protected String resultSetSql() { + return "SELECT 1 FROM DUAL"; + } + + @Test + void declaresYashandbJdbcProfile() { + JdbcAgentProfile profile = YashandbAgent.YASHANDB_PROFILE; + + Assertions.assertEquals("com.yashandb.jdbc.Driver", profile.getDriverClass()); + Assertions.assertEquals("jdbc:yasdb://{host}:{port}/{database}", profile.getUrlTemplate()); + Assertions.assertTrue(profile.getSkipExecutionContext()); + Assertions.assertEquals(Collections.emptySet(), profile.getExcludedSchemas()); + } +} diff --git a/agents/drivers/zookeeper/build.gradle b/agents/drivers/zookeeper/build.gradle new file mode 100644 index 0000000..f679c11 --- /dev/null +++ b/agents/drivers/zookeeper/build.gradle @@ -0,0 +1,13 @@ +dependencies { + implementation 'com.google.code.gson:gson:2.12.1' + implementation 'org.apache.curator:curator-framework:5.9.0' + runtimeOnly 'org.slf4j:slf4j-simple:1.7.36' + testImplementation 'org.apache.curator:curator-test:5.9.0' +} + +tasks.named('shadowJar') { + mergeServiceFiles() + manifest { + attributes('Agent-Label': 'Apache ZooKeeper', 'Main-Class': 'com.dbx.agent.zookeeper.ZooKeeperAgent') + } +} diff --git a/agents/drivers/zookeeper/src/main/java/com/dbx/agent/zookeeper/ZooKeeperAgent.java b/agents/drivers/zookeeper/src/main/java/com/dbx/agent/zookeeper/ZooKeeperAgent.java new file mode 100644 index 0000000..72b4329 --- /dev/null +++ b/agents/drivers/zookeeper/src/main/java/com/dbx/agent/zookeeper/ZooKeeperAgent.java @@ -0,0 +1,664 @@ +package com.dbx.agent.zookeeper; + +import com.dbx.agent.AgentProtocol; +import com.google.gson.*; +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.retry.ExponentialBackoffRetry; +import org.apache.zookeeper.CreateMode; +import org.apache.zookeeper.KeeperException; +import org.apache.zookeeper.data.Stat; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.ByteBuffer; +import java.nio.charset.CharacterCodingException; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CodingErrorAction; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +public final class ZooKeeperAgent { + private static final Gson GSON = new GsonBuilder().serializeNulls().create(); + private static final int DEFAULT_LIMIT = 100; + private static final int DEFAULT_SESSION_TIMEOUT_MS = 30000; + private static final int DEFAULT_CONNECTION_TIMEOUT_MS = 15000; + private static final int DEFAULT_BASE_SLEEP_TIME_MS = 1000; + private static final int DEFAULT_MAX_RETRIES = 3; + private static final String STAT_LOOKUP_CONCURRENCY_PROPERTY = "dbx.zookeeper.statLookupConcurrency"; + private static final String STAT_LOOKUP_CONCURRENCY_ENV = "DBX_ZOOKEEPER_STAT_LOOKUP_CONCURRENCY"; + private static final int DEFAULT_STAT_LOOKUP_CONCURRENCY = 16; + private static final int MIN_STAT_LOOKUP_CONCURRENCY = 1; + private static final int MAX_STAT_LOOKUP_CONCURRENCY = 64; + private static final int STAT_LOOKUP_CONCURRENCY = configuredStatLookupConcurrency(); + private static final ExecutorService STAT_LOOKUP_EXECUTOR = Executors.newFixedThreadPool( + STAT_LOOKUP_CONCURRENCY, + daemonThreadFactory("dbx-zookeeper-stat-lookup-") + ); + private static final List CAPABILITIES = Collections.unmodifiableList(Arrays.asList( + AgentProtocol.CAPABILITY_CONNECT, + AgentProtocol.CAPABILITY_TEST_CONNECTION, + AgentProtocol.CAPABILITY_KV + )); + private static CuratorFramework client; + + private ZooKeeperAgent() { + } + + private static Object handshakeResult() { + return new HandshakeResult(AgentProtocol.PROTOCOL_VERSION, AgentProtocol.PROTOCOL_VERSION, CAPABILITIES); + } + + private static Object connect(JsonObject params) throws Exception { + JsonObject connection = connectionObject(params); + CuratorFramework nextClient = buildClient(connection); + try { + startAndVerify(nextClient, connection); + closeClient(); + client = nextClient; + return Collections.singletonMap("ok", true); + } catch (Exception e) { + nextClient.close(); + throw e; + } + } + + private static Object testConnection(JsonObject params) throws Exception { + JsonObject connection = connectionObject(params); + CuratorFramework probe = buildClient(connection); + try { + startAndVerify(probe, connection); + return Collections.singletonMap("ok", true); + } finally { + probe.close(); + } + } + + static CuratorFramework buildClient(JsonObject connection) { + if (hasTlsOptions(connection)) { + throw new IllegalArgumentException("ZooKeeper TLS is not supported"); + } + + int baseSleepTimeMs = intOrDefault(connection, "base_sleep_time_ms", DEFAULT_BASE_SLEEP_TIME_MS); + int maxRetries = intOrDefault(connection, "max_retries", DEFAULT_MAX_RETRIES); + CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder() + .connectString(connectString(connection)) + .sessionTimeoutMs(intOrDefault(connection, "session_timeout_ms", DEFAULT_SESSION_TIMEOUT_MS)) + .connectionTimeoutMs(intOrDefault(connection, "connection_timeout_ms", DEFAULT_CONNECTION_TIMEOUT_MS)) + .retryPolicy(new ExponentialBackoffRetry(baseSleepTimeMs, maxRetries)); + + String namespace = trimSlashes(stringOrEmpty(connection, "namespace")); + if (!namespace.isBlank()) { + builder.namespace(namespace); + } + + String username = stringOrEmpty(connection, "username"); + String password = stringOrEmpty(connection, "password"); + if (!username.isBlank()) { + builder.authorization("digest", (username + ":" + password).getBytes(StandardCharsets.UTF_8)); + } + + return builder.build(); + } + + static String connectString(JsonObject connection) { + String configured = firstNonBlank( + stringOrNull(connection, "zookeeper_connect_string"), + stringOrNull(connection, "connect_string"), + stringOrNull(connection, "connection_string") + ); + if (configured != null) { + return configured; + } + return stringOrDefault(connection, "host", "127.0.0.1") + ":" + + intOrDefault(connection, "port", 2181); + } + + private static void startAndVerify(CuratorFramework active, JsonObject connection) throws Exception { + active.start(); + int timeoutMs = intOrDefault(connection, "connection_timeout_ms", DEFAULT_CONNECTION_TIMEOUT_MS); + if (!active.blockUntilConnected(timeoutMs, TimeUnit.MILLISECONDS)) { + throw new IllegalStateException("Connection timed out"); + } + if (active.checkExists().forPath("/") == null) { + throw new IllegalStateException("Root znode is not readable"); + } + } + + private static Object listPrefix(JsonObject params) throws Exception { + CuratorFramework active = requireClient(); + String root = normalizePath(stringOrDefault(params, "prefix", "/")); + boolean recursive = boolOrDefault(params, "recursive", true); + int limit = Math.max(1, intOrDefault(params, "limit", DEFAULT_LIMIT)); + Cursor cursor = null; + String continuation = stringOrNull(params, "continuation"); + if (continuation != null && !continuation.isBlank()) { + cursor = decodeCursor(continuation); + if (!root.equals(cursor.root) || recursive != cursor.recursive) { + throw new IllegalArgumentException("Continuation does not match request"); + } + } + + Map result = new LinkedHashMap<>(); + List> keys = new ArrayList<>(); + Stat rootStat = active.checkExists().forPath(root); + if (rootStat == null) { + result.put("keys", keys); + result.put("continuation", null); + return result; + } + + List paths = recursive ? listRecursive(active, root) : listDirectChildren(active, root); + Collections.sort(paths); + int offset = cursor == null ? 0 : Math.max(0, cursor.offset); + int end = Math.min(paths.size(), offset + limit); + keys.addAll(listRowsWithMetadata(active, paths.subList(offset, end))); + + result.put("keys", keys); + result.put("continuation", end < paths.size() ? encodeCursor(new Cursor(root, recursive, end)) : null); + return result; + } + + private static Object get(JsonObject params) throws Exception { + CuratorFramework active = requireClient(); + String path = normalizePath(stringOrDefault(params, "key", "")); + Map result = new LinkedHashMap<>(); + Stat exists = active.checkExists().forPath(path); + if (exists == null) { + result.put("found", false); + result.put("key", path); + result.put("value", null); + result.put("metadata", null); + return result; + } + + Stat stat = new Stat(); + byte[] bytes = active.getData().storingStatIn(stat).forPath(path); + result.put("found", true); + result.put("key", path); + result.put("value", valueObject(bytes)); + result.put("metadata", statMetadata(stat)); + return result; + } + + private static Object put(JsonObject params) throws Exception { + CuratorFramework active = requireClient(); + String path = normalizePath(stringOrDefault(params, "key", "")); + requireMutablePath(path, "modified"); + byte[] bytes = parseValue(params.getAsJsonObject("value")); + + String writeMode = stringOrDefault(params, "writeMode", "upsert"); + return switch (writeMode) { + case "create" -> create(active, path, bytes, createMode(params)); + case "update" -> update(active, path, bytes); + case "upsert" -> upsert(active, path, bytes); + default -> throw new IllegalArgumentException("Unsupported writeMode: " + writeMode); + }; + } + + private static Object upsert(CuratorFramework active, String path, byte[] bytes) throws Exception { + Stat stat = active.checkExists().forPath(path); + if (stat == null) { + active.create().creatingParentsIfNeeded().forPath(path, bytes); + stat = active.checkExists().forPath(path); + } else { + stat = active.setData().forPath(path, bytes); + } + return putResult(stat); + } + + private static Object create(CuratorFramework active, String path, byte[] bytes, CreateMode createMode) throws Exception { + String createdPath = active.create() + .creatingParentsIfNeeded() + .withMode(createMode) + .forPath(path, bytes); + Stat stat = active.checkExists().forPath(createdPath); + Map result = putResult(stat); + result.put("key", createdPath); + result.put("createdKey", createdPath); + return result; + } + + private static Object update(CuratorFramework active, String path, byte[] bytes) throws Exception { + return putResult(active.setData().forPath(path, bytes)); + } + + private static Map putResult(Stat stat) { + Map result = new LinkedHashMap<>(); + result.put("version", stat.getVersion()); + result.put("mtime", stat.getMtime()); + return result; + } + + private static CreateMode createMode(JsonObject params) { + String createMode = stringOrDefault(params, "createMode", "persistent"); + return switch (createMode) { + case "persistent" -> CreateMode.PERSISTENT; + case "ephemeral" -> CreateMode.EPHEMERAL; + case "persistent_sequential" -> CreateMode.PERSISTENT_SEQUENTIAL; + case "ephemeral_sequential" -> CreateMode.EPHEMERAL_SEQUENTIAL; + default -> throw new IllegalArgumentException("Unsupported createMode: " + createMode); + }; + } + + private static Object delete(JsonObject params) throws Exception { + CuratorFramework active = requireClient(); + String path = normalizePath(stringOrDefault(params, "key", "")); + requireMutablePath(path, "deleted"); + boolean recursive = boolOrDefault(params, "recursive", false); + int deleted; + try { + if (active.checkExists().forPath(path) == null) { + deleted = 0; + } else if (recursive) { + deleted = countSubtree(active, path); + active.delete().deletingChildrenIfNeeded().forPath(path); + } else { + active.delete().forPath(path); + deleted = 1; + } + } catch (KeeperException.NoNodeException e) { + deleted = 0; + } + return Collections.singletonMap("deleted", deleted); + } + + private static Object dispatch(String method, JsonObject params) throws Exception { + return switch (method) { + case AgentProtocol.METHOD_HANDSHAKE -> handshakeResult(); + case AgentProtocol.METHOD_CONNECT -> connect(params); + case AgentProtocol.METHOD_TEST_CONNECTION -> testConnection(params); + case AgentProtocol.KV_METHOD_LIST_PREFIX -> listPrefix(params); + case AgentProtocol.KV_METHOD_GET -> get(params); + case AgentProtocol.KV_METHOD_PUT -> put(params); + case AgentProtocol.KV_METHOD_DELETE -> delete(params); + case AgentProtocol.METHOD_DISCONNECT -> { + closeClient(); + yield Collections.singletonMap("ok", true); + } + case AgentProtocol.METHOD_SHUTDOWN -> { + closeClient(); + STAT_LOOKUP_EXECUTOR.shutdownNow(); + System.exit(0); + yield Collections.singletonMap("ok", true); + } + default -> throw new IllegalArgumentException("Unknown method: " + method); + }; + } + + static String handleRequest(String line) { + JsonObject req = JsonParser.parseString(line).getAsJsonObject(); + JsonElement id = req.get("id"); + String method = req.get("method").getAsString(); + JsonObject params = req.has("params") && req.get("params").isJsonObject() + ? req.getAsJsonObject("params") + : new JsonObject(); + + JsonObject response = new JsonObject(); + response.addProperty("jsonrpc", "2.0"); + response.add("id", id); + + try { + Object result = dispatch(method, params); + response.add("result", GSON.toJsonTree(result)); + } catch (Exception e) { + JsonObject error = new JsonObject(); + error.addProperty("code", -1); + error.addProperty("message", e.getMessage() == null ? "Unknown error" : e.getMessage()); + response.add("error", error); + } + + return GSON.toJson(response); + } + + private static JsonObject connectionObject(JsonObject params) { + JsonElement connection = params.get("connection"); + return connection != null && connection.isJsonObject() ? connection.getAsJsonObject() : params; + } + + private static CuratorFramework requireClient() { + if (client == null) { + throw new IllegalStateException("Not connected"); + } + return client; + } + + private static void closeClient() { + if (client != null) { + client.close(); + client = null; + } + } + + static String normalizePath(String path) { + String normalized = path == null ? "" : path; + if (normalized.isEmpty() || "/".equals(normalized)) { + return "/"; + } + if (!normalized.startsWith("/")) { + normalized = "/" + normalized; + } + while (normalized.length() > 1 && normalized.endsWith("/")) { + normalized = normalized.substring(0, normalized.length() - 1); + } + return normalized; + } + + private static String childPath(String parent, String child) { + return "/".equals(parent) ? "/" + child : parent + "/" + child; + } + + private static void requireMutablePath(String path, String action) { + if ("/".equals(path)) { + throw new IllegalArgumentException("Root znode cannot be " + action); + } + } + + private static Map statMetadata(Stat stat) { + Map metadata = new LinkedHashMap<>(); + long czxid = stat.getCzxid(); + long mzxid = stat.getMzxid(); + long pzxid = stat.getPzxid(); + int dataLength = stat.getDataLength(); + metadata.put("czxid", czxid); + metadata.put("mzxid", mzxid); + metadata.put("pzxid", pzxid); + metadata.put("ctime", stat.getCtime()); + metadata.put("mtime", stat.getMtime()); + metadata.put("version", stat.getVersion()); + metadata.put("cversion", stat.getCversion()); + metadata.put("aversion", stat.getAversion()); + metadata.put("ephemeralOwner", stat.getEphemeralOwner()); + metadata.put("dataLength", dataLength); + metadata.put("numChildren", stat.getNumChildren()); + metadata.put("createRevision", czxid); + metadata.put("modRevision", mzxid); + metadata.put("valueSize", dataLength); + return metadata; + } + + private static Map valueObject(byte[] bytes) { + Map value = new LinkedHashMap<>(); + String utf8 = strictUtf8(bytes); + if (utf8 != null) { + value.put("encoding", "utf8"); + value.put("data", utf8); + } else { + value.put("encoding", "base64"); + value.put("data", Base64.getEncoder().encodeToString(bytes)); + } + return value; + } + + private static byte[] parseValue(JsonObject value) { + if (value == null) { + return new byte[0]; + } + String encoding = stringOrDefault(value, "encoding", "utf8"); + String data = stringOrDefault(value, "data", ""); + if ("base64".equals(encoding)) { + return Base64.getDecoder().decode(data); + } + if (!"utf8".equals(encoding)) { + throw new IllegalArgumentException("Unsupported value encoding: " + encoding); + } + return data.getBytes(StandardCharsets.UTF_8); + } + + private static String strictUtf8(byte[] bytes) { + CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder() + .onMalformedInput(CodingErrorAction.REPORT) + .onUnmappableCharacter(CodingErrorAction.REPORT); + try { + return decoder.decode(ByteBuffer.wrap(bytes)).toString(); + } catch (CharacterCodingException e) { + return null; + } + } + + private static String encodeCursor(Cursor cursor) { + JsonObject object = new JsonObject(); + object.addProperty("root", cursor.root); + object.addProperty("recursive", cursor.recursive); + object.addProperty("offset", cursor.offset); + return Base64.getEncoder().encodeToString(GSON.toJson(object).getBytes(StandardCharsets.UTF_8)); + } + + private static Cursor decodeCursor(String continuation) { + String json = new String(Base64.getDecoder().decode(continuation), StandardCharsets.UTF_8); + JsonObject object = JsonParser.parseString(json).getAsJsonObject(); + return new Cursor( + object.get("root").getAsString(), + object.get("recursive").getAsBoolean(), + object.get("offset").getAsInt() + ); + } + + private static List listDirectChildren(CuratorFramework active, String root) throws Exception { + List paths = new ArrayList<>(); + List children = new ArrayList<>(active.getChildren().forPath(root)); + Collections.sort(children); + for (String child : children) { + paths.add(childPath(root, child)); + } + return paths; + } + + private static List listRecursive(CuratorFramework active, String root) throws Exception { + List result = new ArrayList<>(); + collectRecursive(active, root, result); + return result; + } + + private static List> listRowsWithMetadata(CuratorFramework active, List paths) throws Exception { + if (paths.isEmpty()) { + return Collections.emptyList(); + } + + try { + List>> futures = new ArrayList<>(); + for (String path : paths) { + futures.add(STAT_LOOKUP_EXECUTOR.submit(() -> rowWithMetadata(active, path))); + } + + List> rows = new ArrayList<>(); + for (Future> future : futures) { + Map row = future.get(); + if (row != null) { + rows.add(row); + } + } + return rows; + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw e; + } catch (ExecutionException e) { + Throwable cause = e.getCause(); + if (cause instanceof Exception exception) { + throw exception; + } + if (cause instanceof Error error) { + throw error; + } + throw new RuntimeException(cause); + } + } + + private static Map rowWithMetadata(CuratorFramework active, String path) throws Exception { + try { + Stat stat = active.checkExists().forPath(path); + if (stat == null) { + return null; + } + Map row = new LinkedHashMap<>(); + row.put("key", path); + row.putAll(statMetadata(stat)); + return row; + } catch (KeeperException.NoNodeException e) { + return null; + } + } + + private static void collectRecursive(CuratorFramework active, String path, List result) throws Exception { + List children; + try { + children = new ArrayList<>(active.getChildren().forPath(path)); + } catch (KeeperException.NoNodeException e) { + return; + } + Collections.sort(children); + for (String child : children) { + String childPath = childPath(path, child); + result.add(childPath); + collectRecursive(active, childPath, result); + } + } + + private static int countSubtree(CuratorFramework active, String path) throws Exception { + try { + if (active.checkExists().forPath(path) == null) { + return 0; + } + int count = 1; + for (String child : active.getChildren().forPath(path)) { + count += countSubtree(active, childPath(path, child)); + } + return count; + } catch (KeeperException.NoNodeException e) { + return 0; + } + } + + private static boolean hasTlsOptions(JsonObject connection) { + return boolOrDefault(connection, "ssl", false) + || firstNonBlank( + stringOrNull(connection, "ca_cert_path"), + stringOrNull(connection, "client_cert_path"), + stringOrNull(connection, "client_key_path"), + stringOrNull(connection, "cert_path"), + stringOrNull(connection, "key_path") + ) != null; + } + + private static String trimSlashes(String value) { + String trimmed = value.trim(); + while (trimmed.startsWith("/")) { + trimmed = trimmed.substring(1); + } + while (trimmed.endsWith("/")) { + trimmed = trimmed.substring(0, trimmed.length() - 1); + } + return trimmed; + } + + private static String stringOrNull(JsonObject object, String key) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? null : element.getAsString(); + } + + private static String stringOrEmpty(JsonObject object, String key) { + return stringOrDefault(object, key, ""); + } + + private static String stringOrDefault(JsonObject object, String key, String fallback) { + String value = stringOrNull(object, key); + return value == null ? fallback : value; + } + + private static int intOrDefault(JsonObject object, String key, int fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsInt(); + } + + private static boolean boolOrDefault(JsonObject object, String key, boolean fallback) { + JsonElement element = object.get(key); + return element == null || element.isJsonNull() ? fallback : element.getAsBoolean(); + } + + static int configuredStatLookupConcurrency(String propertyValue, String envValue) { + String configured = firstNonBlank(propertyValue, envValue); + if (configured == null) { + return DEFAULT_STAT_LOOKUP_CONCURRENCY; + } + try { + int parsed = Integer.parseInt(configured.trim()); + return Math.max(MIN_STAT_LOOKUP_CONCURRENCY, Math.min(MAX_STAT_LOOKUP_CONCURRENCY, parsed)); + } catch (NumberFormatException e) { + return DEFAULT_STAT_LOOKUP_CONCURRENCY; + } + } + + private static int configuredStatLookupConcurrency() { + return configuredStatLookupConcurrency( + System.getProperty(STAT_LOOKUP_CONCURRENCY_PROPERTY), + System.getenv(STAT_LOOKUP_CONCURRENCY_ENV) + ); + } + + private static ThreadFactory daemonThreadFactory(String prefix) { + AtomicInteger sequence = new AtomicInteger(1); + return runnable -> { + Thread thread = new Thread(runnable, prefix + sequence.getAndIncrement()); + thread.setDaemon(true); + return thread; + }; + } + + private static String firstNonBlank(String... values) { + for (String value : values) { + if (value != null && !value.isBlank()) { + return value; + } + } + return null; + } + + public static void main(String[] args) throws Exception { + // Entry point for the standalone DBX agent process. + System.setProperty("org.slf4j.simpleLogger.logFile", "System.err"); + System.out.println("{\"ready\":true}"); + System.out.flush(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + while (true) { + String line = reader.readLine(); + if (line == null) { + break; + } + + System.out.println(handleRequest(line)); + System.out.flush(); + } + } + + private static final class Cursor { + private final String root; + private final boolean recursive; + private final int offset; + + private Cursor(String root, boolean recursive, int offset) { + this.root = root; + this.recursive = recursive; + this.offset = offset; + } + } + + private static final class HandshakeResult { + private final int protocolVersion; + private final int agentProtocolVersion; + private final List capabilities; + + private HandshakeResult(int protocolVersion, int agentProtocolVersion, List capabilities) { + this.protocolVersion = protocolVersion; + this.agentProtocolVersion = agentProtocolVersion; + this.capabilities = capabilities; + } + } +} diff --git a/agents/drivers/zookeeper/src/test/java/com/dbx/agent/zookeeper/ZooKeeperAgentTest.java b/agents/drivers/zookeeper/src/test/java/com/dbx/agent/zookeeper/ZooKeeperAgentTest.java new file mode 100644 index 0000000..c50f351 --- /dev/null +++ b/agents/drivers/zookeeper/src/test/java/com/dbx/agent/zookeeper/ZooKeeperAgentTest.java @@ -0,0 +1,596 @@ +package com.dbx.agent.zookeeper; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import org.apache.curator.test.TestingServer; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +final class ZooKeeperAgentTest { + @AfterEach + void disconnect() { + ZooKeeperAgent.handleRequest("{\"jsonrpc\":\"2.0\",\"id\":999,\"method\":\"disconnect\",\"params\":{}}"); + } + + @Test + void handshakeAdvertisesKvCapability() { + String response = ZooKeeperAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"handshake\",\"params\":{}}" + ); + + JsonObject result = JsonParser.parseString(response).getAsJsonObject().getAsJsonObject("result"); + + Assertions.assertEquals(1, result.get("protocolVersion").getAsInt()); + Assertions.assertTrue(result.getAsJsonArray("capabilities").contains(JsonParser.parseString("\"kv\""))); + Assertions.assertTrue(result.getAsJsonArray("capabilities").contains(JsonParser.parseString("\"connect\""))); + Assertions.assertTrue(result.getAsJsonArray("capabilities").contains(JsonParser.parseString("\"test_connection\""))); + } + + @Test + void kvMethodDispatchReturnsJsonRpcErrorWhenDisconnected() { + String response = ZooKeeperAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"kv_get\",\"params\":{\"key\":\"/app/name\"}}" + ); + + JsonObject error = JsonParser.parseString(response).getAsJsonObject().getAsJsonObject("error"); + + Assertions.assertEquals(-1, error.get("code").getAsInt()); + Assertions.assertEquals("Not connected", error.get("message").getAsString()); + } + + @Test + void unknownMethodReturnsJsonRpcError() { + String response = ZooKeeperAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"missing_method\",\"params\":{}}" + ); + + JsonObject error = JsonParser.parseString(response).getAsJsonObject().getAsJsonObject("error"); + + Assertions.assertEquals(-1, error.get("code").getAsInt()); + Assertions.assertEquals("Unknown method: missing_method", error.get("message").getAsString()); + } + + @Test + void connectStringUsesConfiguredValuesAndHostPortFallback() { + Assertions.assertEquals( + "zk-1:2181,zk-2:2181", + ZooKeeperAgent.connectString( + JsonParser.parseString("{\"connect_string\":\"zk-1:2181,zk-2:2181\"}").getAsJsonObject() + ) + ); + Assertions.assertEquals( + "zk-main:2181", + ZooKeeperAgent.connectString( + JsonParser.parseString("{\"zookeeper_connect_string\":\"zk-main:2181\"}").getAsJsonObject() + ) + ); + Assertions.assertEquals( + "127.0.0.1:2181", + ZooKeeperAgent.connectString(JsonParser.parseString("{}").getAsJsonObject()) + ); + Assertions.assertEquals( + "zk.local:2281", + ZooKeeperAgent.connectString(JsonParser.parseString("{\"host\":\"zk.local\",\"port\":2281}").getAsJsonObject()) + ); + } + + @Test + void buildClientRejectsTlsOptionsUntilTlsIsSupported() { + JsonObject connection = JsonParser.parseString( + "{\"ssl\":true,\"ca_cert_path\":\"ca.pem\",\"client_cert_path\":\"client.pem\",\"client_key_path\":\"client.key\"}" + ).getAsJsonObject(); + + IllegalArgumentException error = Assertions.assertThrows( + IllegalArgumentException.class, + () -> ZooKeeperAgent.buildClient(connection) + ); + + Assertions.assertEquals("ZooKeeper TLS is not supported", error.getMessage()); + } + + @Test + void normalizePathStandardizesPublicPaths() { + Assertions.assertEquals("/", ZooKeeperAgent.normalizePath("")); + Assertions.assertEquals("/", ZooKeeperAgent.normalizePath("/")); + Assertions.assertEquals("/app", ZooKeeperAgent.normalizePath("app")); + Assertions.assertEquals("/app", ZooKeeperAgent.normalizePath("/app/")); + Assertions.assertEquals("/app/name", ZooKeeperAgent.normalizePath("/app/name")); + } + + @Test + void statLookupConcurrencyUsesConservativeDefaultsAndOverrides() { + Assertions.assertEquals(16, ZooKeeperAgent.configuredStatLookupConcurrency(null, null)); + Assertions.assertEquals(20, ZooKeeperAgent.configuredStatLookupConcurrency("20", "12")); + Assertions.assertEquals(12, ZooKeeperAgent.configuredStatLookupConcurrency(null, "12")); + Assertions.assertEquals(1, ZooKeeperAgent.configuredStatLookupConcurrency("0", null)); + Assertions.assertEquals(64, ZooKeeperAgent.configuredStatLookupConcurrency("128", null)); + Assertions.assertEquals(16, ZooKeeperAgent.configuredStatLookupConcurrency("not-a-number", null)); + } + + @Test + void connectAndTestConnectionWorkAgainstTestingServer() throws Exception { + try (TestingServer server = new TestingServer()) { + JsonObject connect = result(request( + 1, + "connect", + "{\"connection\":{\"connect_string\":\"" + server.getConnectString() + "\"}}" + )); + Assertions.assertTrue(connect.get("ok").getAsBoolean()); + + JsonObject test = result(request( + 2, + "test_connection", + "{\"connection\":{\"connect_string\":\"" + server.getConnectString() + "\"}}" + )); + Assertions.assertTrue(test.get("ok").getAsBoolean()); + } + } + + @Test + void testConnectionDoesNotReplaceActiveClient() throws Exception { + try (TestingServer active = new TestingServer(); TestingServer probe = new TestingServer()) { + result(request(1, "connect", "{\"connection\":{\"connect_string\":\"" + active.getConnectString() + "\"}}")); + result(request( + 2, + "kv_put", + "{\"key\":\"/active\",\"value\":{\"encoding\":\"utf8\",\"data\":\"still-here\"}}" + )); + + result(request(3, "test_connection", "{\"connection\":{\"connect_string\":\"" + probe.getConnectString() + "\"}}")); + + JsonObject get = result(request(4, "kv_get", "{\"key\":\"/active\"}")); + Assertions.assertTrue(get.get("found").getAsBoolean()); + Assertions.assertEquals("still-here", get.getAsJsonObject("value").get("data").getAsString()); + } + } + + @Test + void kvPutCreatesMissingParentsAndGetReadsUtf8Value() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject put = result(request( + 2, + "kv_put", + "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}" + )); + Assertions.assertTrue(put.has("version")); + + JsonObject get = result(request(3, "kv_get", "{\"key\":\"/app/name\"}")); + + Assertions.assertTrue(get.get("found").getAsBoolean()); + Assertions.assertEquals("utf8", get.getAsJsonObject("value").get("encoding").getAsString()); + Assertions.assertEquals("dbx", get.getAsJsonObject("value").get("data").getAsString()); + JsonObject metadata = get.getAsJsonObject("metadata"); + Assertions.assertEquals(0, metadata.get("numChildren").getAsInt()); + Assertions.assertEquals(metadata.get("czxid").getAsLong(), metadata.get("createRevision").getAsLong()); + Assertions.assertEquals(metadata.get("mzxid").getAsLong(), metadata.get("modRevision").getAsLong()); + Assertions.assertEquals(metadata.get("dataLength").getAsInt(), metadata.get("valueSize").getAsInt()); + } + } + + @Test + void kvPutUpdatesExistingZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + result(request( + 3, + "kv_put", + "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx-updated\"}}" + )); + + JsonObject value = result(request(4, "kv_get", "{\"key\":\"/app/name\"}")).getAsJsonObject("value"); + Assertions.assertEquals("dbx-updated", value.get("data").getAsString()); + } + } + + @Test + void kvPutCreatePersistentCreatesOnlyMissingZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject created = result(request( + 2, + "kv_put", + "{\"key\":\"/app/created\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}," + + "\"writeMode\":\"create\",\"createMode\":\"persistent\"}" + )); + JsonObject get = result(request(3, "kv_get", "{\"key\":\"/app/created\"}")); + JsonObject duplicate = error(request( + 4, + "kv_put", + "{\"key\":\"/app/created\",\"value\":{\"encoding\":\"utf8\",\"data\":\"again\"}," + + "\"writeMode\":\"create\",\"createMode\":\"persistent\"}" + )); + + Assertions.assertEquals("/app/created", requiredString(created, "key")); + Assertions.assertEquals("/app/created", requiredString(created, "createdKey")); + Assertions.assertEquals("dbx", get.getAsJsonObject("value").get("data").getAsString()); + Assertions.assertTrue(duplicate.get("message").getAsString().contains("NodeExists")); + } + } + + @Test + void kvPutCreateEphemeralCreatesEphemeralZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject created = result(request( + 2, + "kv_put", + "{\"key\":\"/session/node\",\"value\":{\"encoding\":\"utf8\",\"data\":\"temporary\"}," + + "\"writeMode\":\"create\",\"createMode\":\"ephemeral\"}" + )); + JsonObject get = result(request(3, "kv_get", "{\"key\":\"/session/node\"}")); + + Assertions.assertEquals("/session/node", requiredString(created, "createdKey")); + Assertions.assertEquals("temporary", get.getAsJsonObject("value").get("data").getAsString()); + Assertions.assertTrue(get.getAsJsonObject("metadata").get("ephemeralOwner").getAsLong() > 0); + } + } + + @Test + void kvPutCreatePersistentSequentialReturnsGeneratedPath() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject created = result(request( + 2, + "kv_put", + "{\"key\":\"/jobs/job-\",\"value\":{\"encoding\":\"utf8\",\"data\":\"one\"}," + + "\"writeMode\":\"create\",\"createMode\":\"persistent_sequential\"}" + )); + String createdKey = requiredString(created, "createdKey"); + JsonObject get = result(request(3, "kv_get", "{\"key\":\"" + createdKey + "\"}")); + + Assertions.assertEquals(createdKey, requiredString(created, "key")); + Assertions.assertTrue(createdKey.startsWith("/jobs/job-")); + Assertions.assertTrue(createdKey.length() > "/jobs/job-".length()); + Assertions.assertEquals("one", get.getAsJsonObject("value").get("data").getAsString()); + Assertions.assertEquals(0, get.getAsJsonObject("metadata").get("ephemeralOwner").getAsLong()); + } + } + + @Test + void kvPutCreateEphemeralSequentialReturnsGeneratedEphemeralPath() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject created = result(request( + 2, + "kv_put", + "{\"key\":\"/sessions/member-\",\"value\":{\"encoding\":\"utf8\",\"data\":\"online\"}," + + "\"writeMode\":\"create\",\"createMode\":\"ephemeral_sequential\"}" + )); + String createdKey = requiredString(created, "createdKey"); + JsonObject get = result(request(3, "kv_get", "{\"key\":\"" + createdKey + "\"}")); + + Assertions.assertEquals(createdKey, requiredString(created, "key")); + Assertions.assertTrue(createdKey.startsWith("/sessions/member-")); + Assertions.assertEquals("online", get.getAsJsonObject("value").get("data").getAsString()); + Assertions.assertTrue(get.getAsJsonObject("metadata").get("ephemeralOwner").getAsLong() > 0); + } + } + + @Test + void kvPutUpdateOnlyUpdatesExistingZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject missing = error(request( + 2, + "kv_put", + "{\"key\":\"/app/missing\",\"value\":{\"encoding\":\"utf8\",\"data\":\"x\"},\"writeMode\":\"update\"}" + )); + result(request( + 3, + "kv_put", + "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"before\"},\"writeMode\":\"create\"}" + )); + JsonObject updated = result(request( + 4, + "kv_put", + "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"after\"},\"writeMode\":\"update\"}" + )); + JsonObject value = result(request(5, "kv_get", "{\"key\":\"/app/name\"}")).getAsJsonObject("value"); + + Assertions.assertTrue(missing.get("message").getAsString().contains("NoNode")); + Assertions.assertTrue(updated.get("version").getAsInt() > 0); + Assertions.assertEquals("after", value.get("data").getAsString()); + } + } + + @Test + void kvGetReturnsBase64ForBinaryData() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + result(request(2, "kv_put", "{\"key\":\"/bin\",\"value\":{\"encoding\":\"base64\",\"data\":\"/wAB\"}}")); + + JsonObject value = result(request(3, "kv_get", "{\"key\":\"/bin\"}")).getAsJsonObject("value"); + Assertions.assertEquals("base64", value.get("encoding").getAsString()); + Assertions.assertEquals("/wAB", value.get("data").getAsString()); + } + } + + @Test + void kvPutRejectsRootZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject error = error(request( + 2, + "kv_put", + "{\"key\":\"/\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}" + )); + + Assertions.assertEquals("Root znode cannot be modified", error.get("message").getAsString()); + } + } + + @Test + void kvDeleteReturnsZeroForMissingZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject delete = result(request(4, "kv_delete", "{\"key\":\"/missing\"}")); + + Assertions.assertEquals(0, delete.get("deleted").getAsInt()); + } + } + + @Test + void kvDeleteRemovesLeafZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/leaf\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + + JsonObject delete = result(request(3, "kv_delete", "{\"key\":\"/leaf\"}")); + JsonObject get = result(request(4, "kv_get", "{\"key\":\"/leaf\"}")); + + Assertions.assertEquals(1, delete.get("deleted").getAsInt()); + Assertions.assertFalse(get.get("found").getAsBoolean()); + } + } + + @Test + void kvDeleteRejectsNonRecursiveDeleteOfNonEmptyZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + + JsonObject error = error(request(3, "kv_delete", "{\"key\":\"/app\"}")); + + Assertions.assertTrue(error.get("message").getAsString().contains("not empty")); + } + } + + @Test + void kvDeleteRecursiveDeletesFullSubtreeAndCountsZnodes() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + result(request(3, "kv_put", "{\"key\":\"/app/config\",\"value\":{\"encoding\":\"utf8\",\"data\":\"cfg\"}}")); + + JsonObject delete = result(request(4, "kv_delete", "{\"key\":\"/app\",\"recursive\":true}")); + JsonObject get = result(request(5, "kv_get", "{\"key\":\"/app/name\"}")); + + Assertions.assertEquals(3, delete.get("deleted").getAsInt()); + Assertions.assertFalse(get.get("found").getAsBoolean()); + } + } + + @Test + void kvDeleteRejectsRootZnode() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject error = error(request(2, "kv_delete", "{\"key\":\"/\",\"recursive\":true}")); + + Assertions.assertEquals("Root znode cannot be deleted", error.get("message").getAsString()); + } + } + + @Test + void listPrefixListsDirectChildrenOfRootWhenRecursiveIsFalse() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + result(request(3, "kv_put", "{\"key\":\"/config\",\"value\":{\"encoding\":\"utf8\",\"data\":\"cfg\"}}")); + + JsonObject list = result(request(5, "kv_list_prefix", "{\"prefix\":\"/\",\"recursive\":false}")); + + Assertions.assertEquals(List.of("/app", "/config", "/zookeeper"), listedKeys(list)); + Assertions.assertTrue(list.get("continuation").isJsonNull()); + } + } + + @Test + void listPrefixKeepsDirectChildMetadataForLazyExpansion() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + result(request(3, "kv_put", "{\"key\":\"/config\",\"value\":{\"encoding\":\"utf8\",\"data\":\"cfg\"}}")); + + JsonObject list = result(request(5, "kv_list_prefix", "{\"prefix\":\"/\",\"recursive\":false}")); + JsonObject app = listedRow(list, "/app"); + JsonObject config = listedRow(list, "/config"); + + Assertions.assertEquals(1, app.get("numChildren").getAsInt()); + Assertions.assertEquals(0, config.get("numChildren").getAsInt()); + Assertions.assertEquals(3, config.get("dataLength").getAsInt()); + } + } + + @Test + void listPrefixDefaultsToRecursiveForDbxKvBrowser() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + result(request(3, "kv_put", "{\"key\":\"/config\",\"value\":{\"encoding\":\"utf8\",\"data\":\"cfg\"}}")); + + JsonObject list = result(request(5, "kv_list_prefix", "{\"prefix\":\"/\"}")); + + Assertions.assertEquals( + List.of("/app", "/app/name", "/config", "/zookeeper", "/zookeeper/config", "/zookeeper/quota"), + listedKeys(list) + ); + Assertions.assertTrue(list.get("continuation").isJsonNull()); + } + } + + @Test + void listPrefixListsRecursiveDescendantsOfRoot() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/name\",\"value\":{\"encoding\":\"utf8\",\"data\":\"dbx\"}}")); + result(request(3, "kv_put", "{\"key\":\"/config\",\"value\":{\"encoding\":\"utf8\",\"data\":\"cfg\"}}")); + + JsonObject list = result(request(6, "kv_list_prefix", "{\"prefix\":\"/\",\"recursive\":true}")); + + Assertions.assertEquals( + List.of("/app", "/app/name", "/config", "/zookeeper", "/zookeeper/config", "/zookeeper/quota"), + listedKeys(list) + ); + } + } + + @Test + void listPrefixReturnsEmptyResultForMissingPrefix() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + + JsonObject list = result(request(7, "kv_list_prefix", "{\"prefix\":\"/missing\"}")); + + Assertions.assertEquals(List.of(), listedKeys(list)); + Assertions.assertTrue(list.get("continuation").isJsonNull()); + } + } + + @Test + void listPrefixPaginatesBySortedPath() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/c\",\"value\":{\"encoding\":\"utf8\",\"data\":\"c\"}}")); + result(request(3, "kv_put", "{\"key\":\"/a\",\"value\":{\"encoding\":\"utf8\",\"data\":\"a\"}}")); + result(request(4, "kv_put", "{\"key\":\"/b\",\"value\":{\"encoding\":\"utf8\",\"data\":\"b\"}}")); + + JsonObject first = result(request(5, "kv_list_prefix", "{\"prefix\":\"/\",\"limit\":2}")); + String continuation = first.get("continuation").getAsString(); + JsonObject second = result(request( + 6, + "kv_list_prefix", + "{\"prefix\":\"/\",\"limit\":2,\"continuation\":\"" + continuation + "\"}" + )); + String secondContinuation = second.get("continuation").getAsString(); + JsonObject third = result(request( + 7, + "kv_list_prefix", + "{\"prefix\":\"/\",\"limit\":2,\"continuation\":\"" + secondContinuation + "\"}" + )); + + Assertions.assertEquals(List.of("/a", "/b"), listedKeys(first)); + Assertions.assertFalse(continuation.isBlank()); + Assertions.assertEquals(List.of("/c", "/zookeeper"), listedKeys(second)); + Assertions.assertFalse(secondContinuation.isBlank()); + Assertions.assertEquals(List.of("/zookeeper/config", "/zookeeper/quota"), listedKeys(third)); + Assertions.assertTrue(third.get("continuation").isJsonNull()); + } + } + + @Test + void listPrefixPaginatesDirectChildrenWhenRecursiveIsFalse() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/c/deep\",\"value\":{\"encoding\":\"utf8\",\"data\":\"c\"}}")); + result(request(3, "kv_put", "{\"key\":\"/app/a/deep\",\"value\":{\"encoding\":\"utf8\",\"data\":\"a\"}}")); + result(request(4, "kv_put", "{\"key\":\"/app/b/deep\",\"value\":{\"encoding\":\"utf8\",\"data\":\"b\"}}")); + + JsonObject first = result(request(5, "kv_list_prefix", "{\"prefix\":\"/app\",\"recursive\":false,\"limit\":2}")); + String continuation = first.get("continuation").getAsString(); + JsonObject second = result(request( + 6, + "kv_list_prefix", + "{\"prefix\":\"/app\",\"recursive\":false,\"limit\":2,\"continuation\":\"" + continuation + "\"}" + )); + + Assertions.assertEquals(List.of("/app/a", "/app/b"), listedKeys(first)); + Assertions.assertFalse(continuation.isBlank()); + Assertions.assertEquals(List.of("/app/c"), listedKeys(second)); + Assertions.assertTrue(second.get("continuation").isJsonNull()); + } + } + + @Test + void listPrefixRejectsContinuationForDifferentRequest() throws Exception { + try (TestingServer server = new TestingServer()) { + connect(server); + result(request(2, "kv_put", "{\"key\":\"/app/a\",\"value\":{\"encoding\":\"utf8\",\"data\":\"a\"}}")); + result(request(3, "kv_put", "{\"key\":\"/app/b\",\"value\":{\"encoding\":\"utf8\",\"data\":\"b\"}}")); + + JsonObject first = result(request(4, "kv_list_prefix", "{\"prefix\":\"/app\",\"limit\":1}")); + String continuation = first.get("continuation").getAsString(); + JsonObject error = error(request( + 5, + "kv_list_prefix", + "{\"prefix\":\"/\",\"limit\":1,\"continuation\":\"" + continuation + "\"}" + )); + + Assertions.assertEquals("Continuation does not match request", error.get("message").getAsString()); + } + } + + private static JsonObject connect(TestingServer server) { + return result(request(1, "connect", "{\"connection\":{\"connect_string\":\"" + server.getConnectString() + "\"}}")); + } + + private static String request(int id, String method, String params) { + return ZooKeeperAgent.handleRequest( + "{\"jsonrpc\":\"2.0\",\"id\":" + id + ",\"method\":\"" + method + "\",\"params\":" + params + "}" + ); + } + + private static JsonObject result(String response) { + return JsonParser.parseString(response).getAsJsonObject().getAsJsonObject("result"); + } + + private static JsonObject error(String response) { + JsonObject object = JsonParser.parseString(response).getAsJsonObject(); + Assertions.assertTrue(object.has("error"), "expected JSON-RPC error but got " + response); + return object.getAsJsonObject("error"); + } + + private static String requiredString(JsonObject object, String key) { + Assertions.assertTrue(object.has(key), "expected result to contain " + key); + return object.get(key).getAsString(); + } + + private static List listedKeys(JsonObject listResult) { + List keys = new ArrayList<>(); + JsonArray rows = listResult.getAsJsonArray("keys"); + for (JsonElement row : rows) { + keys.add(row.getAsJsonObject().get("key").getAsString()); + } + return keys; + } + + private static JsonObject listedRow(JsonObject listResult, String key) { + JsonArray rows = listResult.getAsJsonArray("keys"); + for (JsonElement row : rows) { + JsonObject object = row.getAsJsonObject(); + if (key.equals(object.get("key").getAsString())) { + return object; + } + } + Assertions.fail("expected listed row for " + key); + return new JsonObject(); + } +} diff --git a/agents/gradle/wrapper/gradle-wrapper.jar b/agents/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..b1b8ef56b44f16b14dc800fa8103a6d89abb526f GIT binary patch literal 48462 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 R2np~f1o-$>Q}y+){|A@R9n$~+ literal 0 HcmV?d00001 diff --git a/agents/gradle/wrapper/gradle-wrapper.properties b/agents/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b52fb7e --- /dev/null +++ b/agents/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,9 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip +networkTimeout=10000 +retries=0 +retryBackOffMs=500 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/agents/gradlew b/agents/gradlew new file mode 100755 index 0000000..b9bb139 --- /dev/null +++ b/agents/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/agents/gradlew.bat b/agents/gradlew.bat new file mode 100644 index 0000000..aa5f10b --- /dev/null +++ b/agents/gradlew.bat @@ -0,0 +1,82 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:execute +@rem Setup the command line + + + +@rem Execute Gradle +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel + +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/agents/metadata-constraint-coverage.tsv b/agents/metadata-constraint-coverage.tsv new file mode 100644 index 0000000..e8b59c4 --- /dev/null +++ b/agents/metadata-constraint-coverage.tsv @@ -0,0 +1,24 @@ +driver strategy scope reason +access intentional-fallback java-jdbc-metadata Uses Access JDBC metadata; no portable stable server-side paging API, common constraints filter locally. +bigquery native-pushdown java-sql Uses dataset INFORMATION_SCHEMA.TABLES with type, normal-name filter, stable order, and literal LIMIT/OFFSET. +cassandra intentional-fallback java-cql Uses Cassandra system_schema; portable LIKE/fuzzy paging is not safe across versions, common constraints filter locally. +dameng native-pushdown java-sql Uses ALL_OBJECTS with type, filter, stable order, and LIMIT/OFFSET with legacy fallback. +databend native-pushdown java-sql Uses system procedures for routine pushdown and shared table metadata constraints for table-like objects. +db2 native-pushdown java-sql Uses SYSCAT metadata with type, filter, stable order, and OFFSET/FETCH. +gbase8a native-pushdown java-sql Uses information_schema with type, filter, stable order, and LIMIT/OFFSET. +gbase8s native-pushdown java-sql Uses systables with type, filter, stable order, and SKIP/FIRST. +goldendb native-pushdown java-sql Uses information_schema with type, filter, stable order, and LIMIT/OFFSET. +h2 native-pushdown java-sql Uses INFORMATION_SCHEMA with type, filter, stable order, and LIMIT/OFFSET. +hive intentional-fallback java-sql Uses Hive metadata paths where stable server-side fuzzy paging is not portable, common constraints filter locally. +informix native-pushdown java-sql Uses systables/sysprocedures with type, filter, stable order, and SKIP/FIRST. +kingbase native-pushdown java-sql Uses sys_catalog/information_schema with type, filter, stable order, and LIMIT/OFFSET for both compatibility modes. +kylin intentional-fallback java-jdbc-metadata Uses JDBC metadata from Kylin driver; no portable server-side paging API, common constraints filter locally. +neo4j intentional-fallback java-graph-metadata Uses JDBC metadata with Cypher fallback; label discovery cannot guarantee relational-style filtered paging, common constraints filter locally. +oceanbase-oracle native-pushdown java-sql Uses Oracle-compatible metadata SQL with type, filter, stable order, and ROWNUM paging. +oracle-go native-pushdown native-go Uses Oracle-compatible metadata SQL with type, filter, stable order, and ROWNUM paging, with legacy profile guard. +snowflake native-pushdown java-sql Uses INFORMATION_SCHEMA with type, filter, stable order, and literal LIMIT/OFFSET. +spark intentional-fallback java-show-metadata Uses SHOW TABLES/SHOW DATABASES; stable server-side fuzzy paging is not portable, common constraints filter locally. +sundb native-pushdown java-sql Uses information_schema with type, filter, stable order, and LIMIT/OFFSET. +tdengine intentional-fallback java-show-metadata Uses SHOW STABLES/TABLES; stable server-side fuzzy paging is not portable, common constraints filter locally. +trino native-pushdown java-sql Uses information_schema.tables with type, filter, stable order, and literal LIMIT/OFFSET. +xugu native-pushdown native-go Uses ALL_TABLES/ALL_VIEWS metadata with type, filter, stable order, and ROWNUM paging. diff --git a/agents/opengauss/build.gradle b/agents/opengauss/build.gradle new file mode 100644 index 0000000..b8b3af7 --- /dev/null +++ b/agents/opengauss/build.gradle @@ -0,0 +1,10 @@ +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'org.opengauss:opengauss-jdbc:7.0.0-RC3-og' +} + +tasks.named('shadowJar') { + manifest { + attributes('Agent-Label': 'openGauss', 'Main-Class': 'com.dbx.agent.opengauss.OpenGaussAgent') + } +} diff --git a/agents/opengauss/src/main/java/com/dbx/agent/opengauss/OpenGaussAgent.java b/agents/opengauss/src/main/java/com/dbx/agent/opengauss/OpenGaussAgent.java new file mode 100644 index 0000000..985b964 --- /dev/null +++ b/agents/opengauss/src/main/java/com/dbx/agent/opengauss/OpenGaussAgent.java @@ -0,0 +1,20 @@ +package com.dbx.agent.opengauss; + +import com.dbx.agent.JsonRpcServer; +import com.dbx.agent.PostgresLikeAgent; +import com.dbx.agent.PostgresLikeAgentProfile; + +public final class OpenGaussAgent extends PostgresLikeAgent { + public static final PostgresLikeAgentProfile OPENGAUSS_PROFILE = new PostgresLikeAgentProfile( + "org.opengauss.Driver", + "jdbc:opengauss://{host}:{port}/{database}" + ); + + public OpenGaussAgent() { + super(OPENGAUSS_PROFILE); + } + + public static void main(String[] args) { + new JsonRpcServer(new OpenGaussAgent()).run(); + } +} diff --git a/agents/opengauss/src/test/java/com/dbx/agent/opengauss/OpenGaussAgentTest.java b/agents/opengauss/src/test/java/com/dbx/agent/opengauss/OpenGaussAgentTest.java new file mode 100644 index 0000000..8b8452d --- /dev/null +++ b/agents/opengauss/src/test/java/com/dbx/agent/opengauss/OpenGaussAgentTest.java @@ -0,0 +1,21 @@ +package com.dbx.agent.opengauss; + +import com.dbx.agent.ConnectParams; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class OpenGaussAgentTest { + @Test + void buildsOpenGaussUrl() { + ConnectParams params = new ConnectParams(); + params.setHost("db.example.com"); + params.setPort(15432); + params.setDatabase("postgres"); + + assertEquals( + "jdbc:opengauss://db.example.com:15432/postgres", + OpenGaussAgent.OPENGAUSS_PROFILE.buildUrl(params) + ); + } +} diff --git a/agents/scripts/build_offline_zip.sh b/agents/scripts/build_offline_zip.sh new file mode 100755 index 0000000..9039324 --- /dev/null +++ b/agents/scripts/build_offline_zip.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Build offline ZIP bundles for each platform. +# Usage: ./scripts/build_offline_zip.sh +# The release-dir must contain agent-registry.json, dbx-agent-*.jar, and dbx-jre-*.tar.gz + +RELEASE_DIR="$(cd "${1:?Usage: build_offline_zip.sh }" && pwd)" + +if [ ! -f "$RELEASE_DIR/agent-registry.json" ]; then + echo "ERROR: agent-registry.json not found in $RELEASE_DIR" + exit 1 +fi + +PLATFORMS=( + "macos-aarch64" + "macos-x64" + "linux-x64" + "linux-aarch64" + "windows-x64" + "windows-aarch64" +) + +STAGING=$(mktemp -d) +trap 'rm -rf "$STAGING"' EXIT + +for platform in "${PLATFORMS[@]}"; do + WORK="$STAGING/$platform" + mkdir -p "$WORK/jre" "$WORK/drivers" + + cp "$RELEASE_DIR/agent-registry.json" "$WORK/" + + # Copy all JRE archives for this platform + JRE_COUNT=0 + for jre_file in "$RELEASE_DIR"/dbx-jre-*-"$platform".tar.gz; do + [ -f "$jre_file" ] || continue + cp "$jre_file" "$WORK/jre/" + JRE_COUNT=$((JRE_COUNT + 1)) + done + + if [ "$JRE_COUNT" -eq 0 ]; then + echo "SKIP $platform (no JRE found)" + rm -rf "$WORK" + continue + fi + + # Copy all driver JARs (platform-independent) + for jar_file in "$RELEASE_DIR"/dbx-agent-*.jar; do + [ -f "$jar_file" ] || continue + cp "$jar_file" "$WORK/drivers/" + done + + for native_file in "$RELEASE_DIR"/dbx-agent-*-"$platform" "$RELEASE_DIR"/dbx-agent-*-"$platform".exe; do + [ -f "$native_file" ] || continue + cp "$native_file" "$WORK/drivers/" + done + + ZIP_NAME="dbx-agents-offline-${platform}.zip" + (cd "$WORK" && zip -r "$RELEASE_DIR/$ZIP_NAME" agent-registry.json jre/ drivers/) + SIZE=$(du -h "$RELEASE_DIR/$ZIP_NAME" | cut -f1) + echo "Created $ZIP_NAME ($SIZE)" +done + +echo "Done." diff --git a/agents/scripts/release.sh b/agents/scripts/release.sh new file mode 100755 index 0000000..2c261ba --- /dev/null +++ b/agents/scripts/release.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)" + +cd "${ROOT_DIR}" +exec node scripts/release.mjs agents "$@" diff --git a/agents/scripts/validate_agent_jars.py b/agents/scripts/validate_agent_jars.py new file mode 100644 index 0000000..a51e329 --- /dev/null +++ b/agents/scripts/validate_agent_jars.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import sys +import zipfile +from email.parser import Parser +from pathlib import Path + + +def agent_modules(root: Path) -> list[str]: + return sorted( + path.parents[2].name + for path in list(root.glob("*/build/libs/dbx-agent-*.jar")) + + list(root.glob("drivers/*/build/libs/dbx-agent-*.jar")) + if path.is_file() + ) + + +def module_dir(root: Path, module: str) -> Path: + nested = root / "drivers" / module + if nested.exists(): + return nested + return root / module + + +def validate_agent_jars(root: Path) -> list[str]: + problems: list[str] = [] + for module in agent_modules(root): + jar = module_dir(root, module) / "build/libs" / f"dbx-agent-{module}.jar" + relative = jar.relative_to(root) + try: + with zipfile.ZipFile(jar) as archive: + manifest = read_manifest(archive) + main_class = manifest.get("Main-Class") + if not main_class: + problems.append(f"{relative}: missing Main-Class manifest attribute") + continue + class_entry = main_class.replace(".", "/") + ".class" + if class_entry not in archive.namelist(): + problems.append(f"{relative}: Main-Class class not found: {class_entry}") + if not manifest.get("Agent-Label"): + problems.append(f"{relative}: missing Agent-Label manifest attribute") + except zipfile.BadZipFile: + problems.append(f"{relative}: invalid jar") + return problems + + +def read_manifest(archive: zipfile.ZipFile) -> dict[str, str]: + try: + raw = archive.read("META-INF/MANIFEST.MF").decode("utf-8") + except KeyError: + return {} + return dict(Parser().parsestr(raw)) + + +def main() -> int: + root = Path.cwd() + problems = validate_agent_jars(root) + if problems: + print("Agent jar validation failed:") + for problem in problems: + print(f"- {problem}") + return 1 + + print("Agent jar validation passed") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/agents/scripts/validate_agents.py b/agents/scripts/validate_agents.py new file mode 100644 index 0000000..33b1758 --- /dev/null +++ b/agents/scripts/validate_agents.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python3 +import json +import re +import sys +from pathlib import Path +from typing import Optional + + +INFRA_MODULES = {"common", "test-support"} +SOURCE_GLOBS = ("*/src/main/**/*.java", "drivers/*/src/main/**/*.java") +KOTLIN_FILE_SUFFIXES = (".kt", ".kts") +KOTLIN_SCAN_EXCLUDED_PARTS = {".git", ".gradle", "build"} +DEFAULT_AGENT_JRE_KEY = "21" +NON_JDBC_AGENT_MODULES = {"mongodb", "etcd", "zookeeper", "kafka"} +NATIVE_ONLY_AGENT_MODULES = { + "oracle": "drivers/oracle-go", + "xugu": "drivers/xugu", +} +JDBC_ARCHITECTURE_ALLOWLIST = { + "h2-legacy": "reuses the H2 agent implementation with an isolated legacy driver version", + "access": "custom Access metadata and URL behavior pending migration", + "dameng": "custom Dameng metadata and DDL pending migration", + "db2": "custom DB2 metadata pending migration", + "gbase8s": "custom GBase 8s metadata pending migration", + "goldendb": "custom GoldenDB metadata pending migration", + "informix": "custom Informix metadata pending migration", + "neo4j": "custom Neo4j transaction/query behavior pending migration", + "sundb": "custom SunDB metadata pending migration", + "tdengine": "custom TDengine WebSocket JDBC behavior pending migration", +} +APPROVED_JDBC_BASES = { + "AbstractJdbcAgent", + "ConfiguredJdbcAgent", + "PostgresLikeAgent", +} + +FORBIDDEN_PATTERNS = [ + (re.compile(r"private\s+val\s+QUERY_PREFIXES"), "forbidden local SQL prefix classifier"), + (re.compile(r"private\s+const\s+val\s+MAX_ROWS"), "forbidden local result row cap"), + (re.compile(r"executeUpdate\s*\(\s*trimmedSql\s*\)"), "forbidden executeUpdate(trimmedSql) in query execution"), + (re.compile(r"truncated\s*=\s*rows\.size\s*>=\s*MAX_ROWS"), "forbidden inclusive truncation check"), + (re.compile(r"val\s+truncated\s*=\s*rs\.next\s*\(\s*\)"), "forbidden extra ResultSet next() truncation probe"), +] + +COPIED_JDBC_INFRASTRUCTURE_PATTERNS = [ + (re.compile(r"\bClass\.forName\s*\("), "copied driver loading"), + (re.compile(r"\bDriverManager\.getConnection\s*\("), "copied JDBC connection creation"), + (re.compile(r"public\s+void\s+disconnect\s*\("), "copied JDBC disconnect lifecycle"), + (re.compile(r"JdbcExecutor\.INSTANCE\.execute\s*\("), "copied JDBC query execution"), + (re.compile(r"private\s+Object\s+(?:getResultValue|resultValue|stringResultValue)\s*\("), "copied result value reader"), +] + + +def included_agent_modules(root: Path) -> set[str]: + settings = (root / "settings.gradle").read_text(encoding="utf-8") + include_args = "\n".join( + parenthesized or bare + for parenthesized, bare in re.findall( + r"\binclude\b\s*(?:\((.*?)\)|([^\n]+))", settings, flags=re.S + ) + ) + included = set(re.findall(r"""['"]([^'"]+)['"]""", include_args)) + for variable in ("infrastructureModules", "driverModules"): + match = re.search(rf"\bdef\s+{variable}\s*=\s*\[(.*?)\]", settings, flags=re.S) + if match: + included.update(re.findall(r"""['"]([^'"]+)['"]""", match.group(1))) + return included - INFRA_MODULES + + +def agent_modules(root: Path) -> set[str]: + native = {name for name, path in NATIVE_ONLY_AGENT_MODULES.items() if (root / path).exists()} + return included_agent_modules(root) | native + + +def module_dir(root: Path, module: str) -> Path: + if module in NATIVE_ONLY_AGENT_MODULES: + return root / NATIVE_ONLY_AGENT_MODULES[module] + nested = root / "drivers" / module + if nested.exists(): + return nested + return root / module + + +def module_relative_path(root: Path, module: str, *parts: str) -> Path: + return module_dir(root, module).joinpath(*parts) + + +def validate_versions(root: Path) -> list[str]: + included = agent_modules(root) + versions = set(json.loads((root / "versions.json").read_text(encoding="utf-8"))) + return ( + [f"included module missing version: {name}" for name in sorted(included - versions)] + + [f"versions key not included: {name}" for name in sorted(versions - included)] + ) + + +def validate_source_patterns(root: Path) -> list[str]: + problems: list[str] = [] + sources = sorted(source for glob in SOURCE_GLOBS for source in root.glob(glob)) + for source in sources: + relative = source.relative_to(root) + text = source.read_text(encoding="utf-8") + for line_number, line in enumerate(text.splitlines(), start=1): + for pattern, message in FORBIDDEN_PATTERNS: + if pattern.search(line): + problems.append(f"{relative}:{line_number}: {message}") + return problems + + +def validate_no_kotlin_residue(root: Path) -> list[str]: + problems: list[str] = [] + for path in sorted(root.rglob("*")): + if not path.is_file(): + continue + relative = path.relative_to(root) + if any(part in KOTLIN_SCAN_EXCLUDED_PARTS for part in relative.parts): + continue + if path.suffix in KOTLIN_FILE_SUFFIXES: + problems.append(f"{relative}: forbidden Kotlin file") + return problems + + +def validate_manifest_fields(root: Path, modules: set[str]) -> list[str]: + problems: list[str] = [] + root_build_text = (root / "build.gradle").read_text(encoding="utf-8") if (root / "build.gradle").exists() else "" + archive_convention = re.search( + r"archiveBaseName\s*=\s*['\"]dbx-agent-\$\{project\.name\}['\"]", + root_build_text, + ) + for module in sorted(modules): + if module in NATIVE_ONLY_AGENT_MODULES: + continue + build_file = module_relative_path(root, module, "build.gradle") + relative = build_file.relative_to(root) + if not build_file.exists(): + problems.append(f"{module}: missing build.gradle") + continue + + text = build_file.read_text(encoding="utf-8") + expected_archive = f"archiveBaseName = 'dbx-agent-{module}'" + archive_pattern = re.compile( + rf"archiveBaseName\s*=\s*['\"]dbx-agent-{re.escape(module)}['\"]" + ) + if not archive_convention and not archive_pattern.search(text): + problems.append(f"{relative}: missing {expected_archive}") + attrs = manifest_attributes(text) + if "Agent-Label" not in attrs: + problems.append(f"{relative}: missing Agent-Label manifest attribute") + main_class = attrs.get("Main-Class") + if main_class is None: + problems.append(f"{relative}: missing Main-Class manifest attribute") + else: + main_source = module_relative_path( + root, + module, + "src/main/java", + str(Path(*main_class.split(".")).with_suffix(".java")), + ) + if not main_source.exists(): + problems.append(f"{relative}: Main-Class source not found: {main_source.relative_to(root)}") + return problems + + +def validate_jdbc_architecture(root: Path, modules: set[str]) -> list[str]: + problems: list[str] = [] + for module in sorted(modules - NON_JDBC_AGENT_MODULES - set(NATIVE_ONLY_AGENT_MODULES)): + source = main_class_source(root, module) + if source is None or not source.exists(): + continue + text = source.read_text(encoding="utf-8") + base_match = re.search(r"\bextends\s+([A-Za-z0-9_]+)", text) + base = base_match.group(1) if base_match else "" + if module not in JDBC_ARCHITECTURE_ALLOWLIST and base not in APPROVED_JDBC_BASES: + problems.append( + f"{source.relative_to(root)}: JDBC agents must extend AbstractJdbcAgent, ConfiguredJdbcAgent, or PostgresLikeAgent" + ) + if module in JDBC_ARCHITECTURE_ALLOWLIST: + continue + for line_number, line in enumerate(text.splitlines(), start=1): + for pattern, message in COPIED_JDBC_INFRASTRUCTURE_PATTERNS: + if pattern.search(line): + problems.append(f"{source.relative_to(root)}:{line_number}: {message}; use shared JDBC foundation") + return problems + + +def validate_authoring_template(root: Path) -> list[str]: + template = root / "docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java" + if not template.exists(): + return [] + text = template.read_text(encoding="utf-8") + problems: list[str] = [] + if "extends BaseDatabaseAgent" in text: + problems.append(f"{template.relative_to(root)}: template must use shared JDBC foundation") + for pattern, message in COPIED_JDBC_INFRASTRUCTURE_PATTERNS: + if pattern.search(text): + problems.append(f"{template.relative_to(root)}: template contains {message}") + return problems + + +def main_class_source(root: Path, module: str) -> Optional[Path]: + build_file = module_relative_path(root, module, "build.gradle") + if not build_file.exists(): + return None + attrs = manifest_attributes(build_file.read_text(encoding="utf-8")) + main_class = attrs.get("Main-Class") + if main_class is None: + return None + return module_relative_path(root, module, "src/main/java", str(Path(*main_class.split(".")).with_suffix(".java"))) + + +def validate_release_runtime_keys(root: Path) -> list[str]: + workflow_candidates = [ + root.parent / ".github/workflows/agents-release.yml", + root / ".github/workflows/agents-release.yml", + root / ".github/workflows/release.yml", + ] + workflow = next((candidate for candidate in workflow_candidates if candidate.exists()), workflow_candidates[-1]) + if not workflow.exists(): + return [] + text = workflow.read_text(encoding="utf-8") + problems: list[str] = [] + required_patterns = [ + ( + rf'jre-key:\s*"{DEFAULT_AGENT_JRE_KEY}"', + f"release workflow must build the default JRE with key {DEFAULT_AGENT_JRE_KEY}", + ), + ( + rf'java-version:\s*"{DEFAULT_AGENT_JRE_KEY}"', + f"release workflow must build the default JRE from Java {DEFAULT_AGENT_JRE_KEY}", + ), + ( + rf'\*\)\s*echo\s*"{DEFAULT_AGENT_JRE_KEY}"', + f"agents must use JRE key {DEFAULT_AGENT_JRE_KEY}", + ), + ( + rf'"{DEFAULT_AGENT_JRE_KEY}":\s*\{{\s*"version":\s*"{DEFAULT_AGENT_JRE_KEY}\.', + f"registry must publish Java {DEFAULT_AGENT_JRE_KEY} under JRE key {DEFAULT_AGENT_JRE_KEY}", + ), + ( + r"jdk\.security\.auth", + "release workflow JRE must include jdk.security.auth for Kafka Kerberos LoginModule support", + ), + ( + r"jdk\.security\.jgss", + "release workflow JRE must include jdk.security.jgss for Kafka GSSAPI SASL support", + ), + ( + r"legacy-placeholder\.jar", + "native-only registry entries must publish a legacy jar placeholder for older DBX clients", + ), + ] + for pattern, message in required_patterns: + if not re.search(pattern, text, flags=re.S): + problems.append(message) + forbidden_patterns = [ + (r'jre-key:\s*"17"', "release workflow must not build Java 21 under JRE key 17"), + (r'\*\)\s*echo\s*"17"', "agents must not use JRE key 17"), + (r'"17":\s*\{\s*"version":\s*"21\.', "registry must not publish Java 21 under JRE key 17"), + ] + for pattern, message in forbidden_patterns: + if re.search(pattern, text, flags=re.S): + problems.append(message) + return problems + + +def manifest_attributes(build_text: str) -> dict[str, str]: + attrs: dict[str, str] = {} + for key, value in re.findall( + r"['\"]([^'\"]+)['\"]\s*:\s*['\"]([^'\"]+)['\"]", + build_text, + ): + attrs[key] = value + return attrs + + +def validate(root: Path) -> list[str]: + modules = agent_modules(root) + return ( + validate_versions(root) + + validate_source_patterns(root) + + validate_manifest_fields(root, modules) + + validate_jdbc_architecture(root, modules) + + validate_authoring_template(root) + + validate_release_runtime_keys(root) + + validate_no_kotlin_residue(root) + ) + + +def main() -> int: + root = Path.cwd() + problems = validate(root) + if problems: + print("Agent validation failed:") + for problem in problems: + print(f"- {problem}") + return 1 + + print("Agent validation passed") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/agents/scripts/validate_agents_test.py b/agents/scripts/validate_agents_test.py new file mode 100644 index 0000000..9354375 --- /dev/null +++ b/agents/scripts/validate_agents_test.py @@ -0,0 +1,427 @@ +import json +import tempfile +import textwrap +import unittest +import zipfile +from pathlib import Path + +import validate_agents +import validate_agent_jars + + +class ValidateAgentsTest(unittest.TestCase): + def test_versions_must_match_included_agent_modules(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + (root / "settings.gradle").write_text( + "include 'common', 'test-support', 'h2', 'oracle'\n", + encoding="utf-8", + ) + (root / "versions.json").write_text( + json.dumps({"h2": "0.1.0", "mongodb": "0.1.0"}), + encoding="utf-8", + ) + + problems = validate_agents.validate_versions(root) + + self.assertEqual( + [ + "included module missing version: oracle", + "versions key not included: mongodb", + ], + problems, + ) + + def test_versions_support_driver_modules_variable(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + (root / "settings.gradle").write_text( + "def infrastructureModules = ['common', 'test-support']\n" + "def driverModules = ['h2', 'oracle']\n" + "include(*(infrastructureModules + driverModules))\n", + encoding="utf-8", + ) + (root / "versions.json").write_text( + json.dumps({"h2": "0.1.0", "oracle": "0.1.0"}), + encoding="utf-8", + ) + + self.assertEqual([], validate_agents.validate_versions(root)) + + def test_source_scan_rejects_old_execute_query_patterns(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + source = root / "h2/src/main/java/com/dbx/agent/h2/H2Agent.java" + source.parent.mkdir(parents=True) + source.write_text( + textwrap.dedent( + """ + private val QUERY_PREFIXES = listOf("SELECT") + fun executeQuery(sql: String) { + val trimmedSql = sql.trim() + stmt.executeUpdate(trimmedSql) + } + """ + ), + encoding="utf-8", + ) + + problems = validate_agents.validate_source_patterns(root) + + self.assertEqual( + [ + "h2/src/main/java/com/dbx/agent/h2/H2Agent.java:2: forbidden local SQL prefix classifier", + "h2/src/main/java/com/dbx/agent/h2/H2Agent.java:5: forbidden executeUpdate(trimmedSql) in query execution", + ], + problems, + ) + + def test_jdbc_architecture_requires_shared_base_for_new_agents(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + module = root / "example" + source = module / "src/main/java/com/dbx/agent/example/ExampleAgent.java" + source.parent.mkdir(parents=True) + (module / "build.gradle").write_text( + textwrap.dedent( + """ + tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'Example', + 'Main-Class': 'com.dbx.agent.example.ExampleAgent' + ) + } + } + """ + ), + encoding="utf-8", + ) + source.write_text( + textwrap.dedent( + """ + package com.dbx.agent.example; + + import com.dbx.agent.BaseDatabaseAgent; + import java.sql.DriverManager; + + public final class ExampleAgent extends BaseDatabaseAgent { + public void connect() throws Exception { + Class.forName("example.Driver"); + DriverManager.getConnection("jdbc:example"); + } + } + """ + ), + encoding="utf-8", + ) + + problems = validate_agents.validate_jdbc_architecture(root, {"example"}) + + self.assertEqual( + [ + "example/src/main/java/com/dbx/agent/example/ExampleAgent.java: JDBC agents must extend AbstractJdbcAgent, ConfiguredJdbcAgent, or PostgresLikeAgent", + "example/src/main/java/com/dbx/agent/example/ExampleAgent.java:9: copied driver loading; use shared JDBC foundation", + "example/src/main/java/com/dbx/agent/example/ExampleAgent.java:10: copied JDBC connection creation; use shared JDBC foundation", + ], + problems, + ) + + def test_versions_include_native_only_modules(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + (root / "settings.gradle").write_text( + "def infrastructureModules = ['common', 'test-support']\n" + "def driverModules = ['h2']\n" + "include(*(infrastructureModules + driverModules))\n", + encoding="utf-8", + ) + (root / "drivers/oracle-go").mkdir(parents=True) + (root / "versions.json").write_text( + json.dumps({"h2": "0.1.0", "oracle": "0.1.0"}), + encoding="utf-8", + ) + + self.assertEqual([], validate_agents.validate_versions(root)) + + def test_authoring_template_must_use_shared_foundation(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + template = root / "docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java" + template.parent.mkdir(parents=True) + template.write_text( + textwrap.dedent( + """ + package com.dbx.agent.template; + import com.dbx.agent.BaseDatabaseAgent; + import java.sql.DriverManager; + public final class TemplateAgent extends BaseDatabaseAgent { + void connect() throws Exception { + DriverManager.getConnection("jdbc:template"); + } + } + """ + ), + encoding="utf-8", + ) + + self.assertEqual( + [ + "docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java: template must use shared JDBC foundation", + "docs/examples/jdbc-agent-template/src/main/java/com/dbx/agent/template/TemplateAgent.java: template contains copied JDBC connection creation", + ], + validate_agents.validate_authoring_template(root), + ) + + def test_manifest_validation_requires_registry_fields(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + module = root / "h2" + module.mkdir() + (root / "build.gradle").write_text( + textwrap.dedent( + """ + configure(agentProjects) { + tasks.named('shadowJar') { + archiveBaseName = "dbx-agent-${project.name}" + } + } + """ + ), + encoding="utf-8", + ) + (module / "build.gradle").write_text( + textwrap.dedent( + """ + tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'H2' + ) + } + } + """ + ), + encoding="utf-8", + ) + + problems = validate_agents.validate_manifest_fields(root, {"h2"}) + + self.assertEqual( + ["h2/build.gradle: missing Main-Class manifest attribute"], + problems, + ) + + def test_manifest_validation_requires_main_class_source(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + module = root / "h2" + module.mkdir() + (root / "build.gradle").write_text( + 'archiveBaseName = "dbx-agent-${project.name}"\n', + encoding="utf-8", + ) + (module / "build.gradle").write_text( + textwrap.dedent( + """ + tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'H2', + 'Main-Class': 'com.dbx.agent.h2.H2Agent' + ) + } + } + """ + ), + encoding="utf-8", + ) + + problems = validate_agents.validate_manifest_fields(root, {"h2"}) + + self.assertEqual( + ["h2/build.gradle: Main-Class source not found: h2/src/main/java/com/dbx/agent/h2/H2Agent.java"], + problems, + ) + + source = module / "src/main/java/com/dbx/agent/h2/H2Agent.java" + source.parent.mkdir(parents=True) + source.write_text("package com.dbx.agent.h2; public final class H2Agent {}", encoding="utf-8") + + self.assertEqual([], validate_agents.validate_manifest_fields(root, {"h2"})) + + def test_manifest_validation_supports_drivers_directory(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + module = root / "drivers/h2" + source = module / "src/main/java/com/dbx/agent/h2/H2Agent.java" + source.parent.mkdir(parents=True) + source.write_text("package com.dbx.agent.h2; public final class H2Agent {}", encoding="utf-8") + (root / "build.gradle").write_text( + 'archiveBaseName = "dbx-agent-${project.name}"\n', + encoding="utf-8", + ) + (module / "build.gradle").write_text( + textwrap.dedent( + """ + tasks.named('shadowJar') { + manifest { + attributes( + 'Agent-Label': 'H2', + 'Main-Class': 'com.dbx.agent.h2.H2Agent' + ) + } + } + """ + ), + encoding="utf-8", + ) + + self.assertEqual([], validate_agents.validate_manifest_fields(root, {"h2"})) + + def test_kotlin_residue_scan_rejects_kt_and_kts_files_outside_build_dirs(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + forbidden_source = root / "h2/src/main/kotlin/com/dbx/agent/h2/H2Agent.kt" + forbidden_build = root / "settings.gradle.kts" + ignored_build_output = root / "h2/build/tmp/Generated.kt" + ignored_gradle_cache = root / ".gradle/caches/init.gradle.kts" + for path in ( + forbidden_source, + forbidden_build, + ignored_build_output, + ignored_gradle_cache, + ): + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text("", encoding="utf-8") + + problems = validate_agents.validate_no_kotlin_residue(root) + + self.assertEqual( + [ + "h2/src/main/kotlin/com/dbx/agent/h2/H2Agent.kt: forbidden Kotlin file", + "settings.gradle.kts: forbidden Kotlin file", + ], + problems, + ) + + def test_release_runtime_keys_match_java_21_default(self): + with tempfile.TemporaryDirectory() as tmp: + root = Path(tmp) + workflow = root / ".github/workflows/release.yml" + workflow.parent.mkdir(parents=True) + workflow.write_text( + textwrap.dedent( + ''' + strategy: + matrix: + include: + - jre-key: "21" + java-version: "21" + modules: "java.base,jdk.security.auth,jdk.security.jgss" + detect_jre_key() { + case "$name" in + *) echo "21" ;; + esac + } + cat > release/agent-registry.json < release/agent-registry.json < + project(":${name}").projectDir = file("drivers/${name}") +} diff --git a/agents/test-support/build.gradle b/agents/test-support/build.gradle new file mode 100644 index 0000000..0769fc7 --- /dev/null +++ b/agents/test-support/build.gradle @@ -0,0 +1,4 @@ +dependencies { + api 'org.junit.jupiter:junit-jupiter-api:5.11.4' + implementation project(':common') +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/JdbcAgentFake.java b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcAgentFake.java new file mode 100644 index 0000000..7665fea --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcAgentFake.java @@ -0,0 +1,177 @@ +package com.dbx.agent.test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.sql.Types; +import java.util.ArrayList; +import java.util.List; + +public final class JdbcAgentFake { + public static final JdbcAgentFake INSTANCE = new JdbcAgentFake(); + public static final List calls = new ArrayList(); + + private JdbcAgentFake() { + } + + public static Connection connection() { + calls.clear(); + Statement statement = statement(); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("createStatement".equals(name)) { + return statement; + } + if ("getAutoCommit".equals(name)) { + return true; + } + if ("setAutoCommit".equals(name) || "commit".equals(name) || "rollback".equals(name) || "close".equals(name)) { + return null; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + } + }); + } + + public List getCalls() { + return calls; + } + + private static Statement statement() { + ResultSet resultSet = resultSet(); + return proxy(Statement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("execute".equals(name)) { + calls.add("execute"); + return true; + } + if ("executeQuery".equals(name)) { + calls.add("executeQuery"); + return resultSet; + } + if ("executeUpdate".equals(name)) { + calls.add("executeUpdate"); + return 0; + } + if ("getResultSet".equals(name)) { + return resultSet; + } + if ("getUpdateCount".equals(name)) { + return 0; + } + if ("setMaxRows".equals(name)) { + calls.add("setMaxRows:" + args[0]); + return null; + } + if ("setFetchSize".equals(name)) { + calls.add("setFetchSize:" + args[0]); + return null; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet resultSet() { + final int[] index = {-1}; + ResultSetMetaData metadata = metadata(); + return proxy(ResultSet.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + index[0] += 1; + return index[0] == 0; + } + if ("getMetaData".equals(name)) { + return metadata; + } + if ("getObject".equals(name) || "getString".equals(name)) { + return "row-value"; + } + if ("wasNull".equals(name)) { + return false; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSetMetaData metadata() { + return proxy(ResultSetMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("getColumnCount".equals(name)) { + return 1; + } + if ("getColumnLabel".equals(name)) { + return "VALUE"; + } + if ("getColumnType".equals(name)) { + return Types.VARCHAR; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static T proxy(Class type, final MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/JdbcConnectedAgentTest.java b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcConnectedAgentTest.java new file mode 100644 index 0000000..664e3cb --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcConnectedAgentTest.java @@ -0,0 +1,18 @@ +package com.dbx.agent.test; + +import com.dbx.agent.DatabaseAgent; + +import java.util.function.Consumer; + +public abstract class JdbcConnectedAgentTest { + protected abstract DatabaseAgent createConnectedAgent(String databaseName); + + protected void withAgent(String databaseName, Consumer block) { + DatabaseAgent agent = createConnectedAgent(databaseName); + try { + block.accept(agent); + } finally { + agent.disconnect(); + } + } +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/JdbcExecutionBehaviorTest.java b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcExecutionBehaviorTest.java new file mode 100644 index 0000000..6764a5f --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcExecutionBehaviorTest.java @@ -0,0 +1,174 @@ +package com.dbx.agent.test; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.JdbcExecutor; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import org.junit.jupiter.api.Test; + +import java.sql.Connection; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public abstract class JdbcExecutionBehaviorTest extends JdbcConnectedAgentTest { + protected abstract String resultSetSql(); + + protected abstract List expectedResultSetColumns(); + + protected abstract List> expectedResultSetRows(); + + protected abstract String rowsSql(int rowCount); + + @Test + void executesStatementsThatReturnResultSetsWithoutSelectPrefix() { + withAgent("dbx-agent-result-set", agent -> { + QueryResult result = agent.executeQuery(resultSetSql(), null, new ExecuteQueryOptions()); + + assertEquals(expectedResultSetColumns(), result.getColumns()); + assertEquals(expectedResultSetRows(), result.getRows()); + assertEquals(0, result.getAffected_rows()); + assertFalse(result.getTruncated()); + }); + } + + @Test + void doesNotMarkExactlyMaxRowsAsTruncated() { + withAgent("dbx-agent-limit", agent -> { + QueryResult result = agent.executeQuery(rowsSql(JdbcExecutor.DEFAULT_MAX_ROWS), null, new ExecuteQueryOptions()); + + assertEquals(JdbcExecutor.DEFAULT_MAX_ROWS, result.getRows().size()); + assertFalse(result.getTruncated()); + }); + } + + @Test + void marksResultsBeyondMaxRowsAsTruncated() { + withAgent("dbx-agent-truncated", agent -> { + QueryResult result = agent.executeQuery(rowsSql(JdbcExecutor.DEFAULT_MAX_ROWS + 1), null, new ExecuteQueryOptions()); + + assertEquals(JdbcExecutor.DEFAULT_MAX_ROWS, result.getRows().size()); + assertTrue(result.getTruncated()); + }); + } + + @Test + void fetchesSubsequentResultPagesFromTheSameJdbcSession() { + withAgent("dbx-agent-session-pages", agent -> { + QueryPageResult first = agent.executeQueryPage(rowsSql(5), null, new QueryPageOptions(2, 2, 10)); + + assertEquals(Arrays.asList(Collections.singletonList(1L), Collections.singletonList(2L)), first.getRows()); + assertTrue(first.getHas_more()); + assertFalse(first.getTruncated()); + String sessionId = first.getSession_id(); + assertNotNull(sessionId); + + QueryPageResult second = agent.fetchQueryPage(sessionId, 2); + + assertEquals(Arrays.asList(Collections.singletonList(3L), Collections.singletonList(4L)), second.getRows()); + assertTrue(second.getHas_more()); + assertFalse(second.getTruncated()); + + QueryPageResult third = agent.fetchQueryPage(sessionId, 2); + + assertEquals(Collections.singletonList(Collections.singletonList(5L)), third.getRows()); + assertFalse(third.getHas_more()); + assertFalse(third.getTruncated()); + }); + } + + @Test + void fetchesTableReadPagesFromTheSameJdbcSession() { + withAgent("dbx-agent-table-read-session-pages", agent -> { + QueryPageResult first = agent.startTableRead(rowsSql(5), null, new QueryPageOptions(2, 2, 10)); + + assertEquals(Arrays.asList(Collections.singletonList(1L), Collections.singletonList(2L)), first.getRows()); + assertTrue(first.getHas_more()); + assertFalse(first.getTruncated()); + String sessionId = first.getSession_id(); + assertNotNull(sessionId); + + QueryPageResult second = agent.fetchTableReadPage(sessionId, 2); + + assertEquals(Arrays.asList(Collections.singletonList(3L), Collections.singletonList(4L)), second.getRows()); + assertTrue(second.getHas_more()); + assertFalse(second.getTruncated()); + + QueryPageResult third = agent.fetchTableReadPage(sessionId, 2); + + assertEquals(Collections.singletonList(Collections.singletonList(5L)), third.getRows()); + assertFalse(third.getHas_more()); + assertFalse(third.getTruncated()); + assertFalse(agent.closeTableReadSession(sessionId)); + }); + } + + @Test + void closesJdbcResultSessionsExplicitly() { + withAgent("dbx-agent-session-close", agent -> { + QueryPageResult first = agent.executeQueryPage(rowsSql(5), null, new QueryPageOptions(2, 2, 10)); + String sessionId = first.getSession_id(); + assertNotNull(sessionId); + + assertTrue(agent.closeQuerySession(sessionId)); + assertFalse(agent.closeQuerySession(sessionId)); + assertThrows(IllegalArgumentException.class, () -> agent.fetchQueryPage(sessionId, 2)); + }); + } + + @Test + void expiresIdleJdbcResultSessions() { + withAgent("dbx-agent-session-expiry", agent -> { + QueryPageResult first = agent.executeQueryPage(rowsSql(5), null, new QueryPageOptions(2, 2, 10)); + String sessionId = first.getSession_id(); + assertNotNull(sessionId); + + assertEquals(1, JdbcExecutor.INSTANCE.expireIdleQuerySessions(System.currentTimeMillis(), 0L)); + assertThrows(IllegalArgumentException.class, () -> agent.fetchQueryPage(sessionId, 2)); + }); + } + + @Test + void handlesTransactionControlStatementsConsistently() { + withAgent("dbx-agent-transaction", agent -> { + Connection connection = agent.getConnection(); + assertNotNull(connection); + + try { + QueryResult begin = agent.executeQuery("BEGIN", null, new ExecuteQueryOptions()); + assertFalse(connection.getAutoCommit()); + assertEquals(Collections.emptyList(), begin.getColumns()); + assertEquals(Collections.emptyList(), begin.getRows()); + assertEquals(0, begin.getAffected_rows()); + assertFalse(begin.getTruncated()); + + QueryResult commit = agent.executeQuery("COMMIT", null, new ExecuteQueryOptions()); + assertTrue(connection.getAutoCommit()); + assertEquals(Collections.emptyList(), commit.getColumns()); + assertEquals(Collections.emptyList(), commit.getRows()); + assertEquals(0, commit.getAffected_rows()); + assertFalse(commit.getTruncated()); + + agent.executeQuery("BEGIN", null, new ExecuteQueryOptions()); + assertFalse(connection.getAutoCommit()); + + QueryResult rollback = agent.executeQuery("ROLLBACK", null, new ExecuteQueryOptions()); + assertTrue(connection.getAutoCommit()); + assertEquals(Collections.emptyList(), rollback.getColumns()); + assertEquals(Collections.emptyList(), rollback.getRows()); + assertEquals(0, rollback.getAffected_rows()); + assertFalse(rollback.getTruncated()); + } catch (Exception e) { + throw new AssertionError(e); + } + }); + } +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/JdbcFakeExecutionBehaviorTest.java b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcFakeExecutionBehaviorTest.java new file mode 100644 index 0000000..18f554d --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcFakeExecutionBehaviorTest.java @@ -0,0 +1,69 @@ +package com.dbx.agent.test; + +import com.dbx.agent.DatabaseAgent; +import com.dbx.agent.ExecuteQueryOptions; +import com.dbx.agent.QueryPageOptions; +import com.dbx.agent.QueryPageResult; +import com.dbx.agent.QueryResult; +import org.junit.jupiter.api.Test; + +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public abstract class JdbcFakeExecutionBehaviorTest { + protected abstract DatabaseAgent createAgent(); + + protected abstract String resultSetSql(); + + @Test + protected void executesNonSelectStatementsThatReturnResultSets() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + QueryResult result = agent.executeQuery(resultSetSql(), null, new ExecuteQueryOptions()); + + assertEquals(Collections.singletonList("VALUE"), result.getColumns()); + assertEquals(Collections.singletonList(Collections.singletonList("row-value")), result.getRows()); + assertEquals(asList("setMaxRows:10001", "execute"), JdbcAgentFake.calls); + } + + @Test + protected void appliesExecutionRowAndFetchLimitsToJdbcStatements() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + QueryResult result = agent.executeQuery(resultSetSql(), null, new ExecuteQueryOptions(1, 25)); + + assertEquals(Collections.singletonList(Collections.singletonList("row-value")), result.getRows()); + assertEquals(asList("setMaxRows:2", "setFetchSize:25", "execute"), JdbcAgentFake.calls); + } + + @Test + protected void pagedQueryExecutionPassesCallerFetchSizeToStatement() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + agent.executeQueryPage(resultSetSql(), null, new QueryPageOptions(100, 500, 1000)); + + assertEquals(asList("setFetchSize:500", "execute"), JdbcAgentFake.calls); + } + + @Test + protected void tableReadPassesCallerFetchSizeToStatement() { + DatabaseAgent agent = createAgent(); + TestSupport.setPrivateConnection(agent, JdbcAgentFake.connection()); + + agent.startTableRead(resultSetSql(), null, new QueryPageOptions(100, 500, 1000)); + + assertEquals(asList("setFetchSize:500", "execute"), JdbcAgentFake.calls); + } + + protected static java.util.List asList(String first, String second) { + return java.util.Arrays.asList(first, second); + } + + protected static java.util.List asList(String first, String second, String third) { + return java.util.Arrays.asList(first, second, third); + } +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataBehaviorTest.java b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataBehaviorTest.java new file mode 100644 index 0000000..9ef0b26 --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataBehaviorTest.java @@ -0,0 +1,67 @@ +package com.dbx.agent.test; + +import com.dbx.agent.ColumnInfo; +import com.dbx.agent.TableInfo; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public abstract class JdbcMetadataBehaviorTest extends JdbcConnectedAgentTest { + protected abstract List metadataFixtureSql(); + + protected abstract String metadataSchema(); + + protected abstract List expectedTablesInOrder(); + + protected abstract String metadataColumnsTable(); + + protected abstract List expectedColumnsInOrder(); + + @Test + void returnsMetadataInStableOrder() { + withAgent("dbx-agent-metadata", agent -> { + for (String sql : metadataFixtureSql()) { + agent.executeQuery(sql, metadataSchema(), new com.dbx.agent.ExecuteQueryOptions()); + } + + List expectedTables = expectedTablesInOrder(); + List tableNames = new ArrayList(); + for (TableInfo table : agent.listTables(metadataSchema())) { + if (expectedTables.contains(table.getName())) { + tableNames.add(table.getName()); + } + } + assertEquals(expectedTables, tableNames); + + List expectedColumns = expectedColumnsInOrder(); + List columnNames = new ArrayList(); + for (ColumnInfo column : agent.getColumns(metadataSchema(), metadataColumnsTable())) { + if (expectedColumns.contains(column.getName())) { + columnNames.add(column.getName()); + } + } + assertEquals(expectedColumns, columnNames); + }); + } + + @Test + void buildsTableDdlFromMetadata() { + withAgent("dbx-agent-ddl", agent -> { + for (String sql : metadataFixtureSql()) { + agent.executeQuery(sql, metadataSchema(), new com.dbx.agent.ExecuteQueryOptions()); + } + + String ddl = agent.getTableDdl(metadataSchema(), metadataColumnsTable()); + + for (String column : expectedColumnsInOrder()) { + assertTrue(ddl.contains("\"" + column + "\""), "DDL should include column " + column + ": " + ddl); + } + assertTrue(ddl.contains("CREATE TABLE"), "DDL should include CREATE TABLE: " + ddl); + assertTrue(ddl.contains(metadataColumnsTable()), "DDL should include table name: " + ddl); + }); + } +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataSqlFake.java b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataSqlFake.java new file mode 100644 index 0000000..3482872 --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/JdbcMetadataSqlFake.java @@ -0,0 +1,172 @@ +package com.dbx.agent.test; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +public final class JdbcMetadataSqlFake { + public static final JdbcMetadataSqlFake INSTANCE = new JdbcMetadataSqlFake(); + public static final List statements = new ArrayList(); + + private JdbcMetadataSqlFake() { + } + + public static Connection connection() { + statements.clear(); + return proxy(Connection.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("createStatement".equals(name)) { + return statement(); + } + if ("prepareStatement".equals(name)) { + statements.add((String) args[0]); + return preparedStatement(); + } + if ("getAutoCommit".equals(name)) { + return true; + } + if ("setAutoCommit".equals(name) || "commit".equals(name) || "rollback".equals(name) || "close".equals(name)) { + return null; + } + if ("isClosed".equals(name)) { + return false; + } + return defaultValue(method.getReturnType()); + } + }); + } + + public List getStatements() { + return statements; + } + + private static Statement statement() { + ResultSet resultSet = emptyResultSet(); + return proxy(Statement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("execute".equals(name) || "executeQuery".equals(name)) { + statements.add((String) args[0]); + return "execute".equals(name) ? false : resultSet; + } + if ("getResultSet".equals(name)) { + return resultSet; + } + if ("getUpdateCount".equals(name)) { + return 0; + } + if ("setMaxRows".equals(name) || "close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static PreparedStatement preparedStatement() { + ResultSet resultSet = emptyResultSet(); + return proxy(PreparedStatement.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("execute".equals(name) || "executeQuery".equals(name)) { + return "execute".equals(name) ? false : resultSet; + } + if ("getResultSet".equals(name)) { + return resultSet; + } + if ("getUpdateCount".equals(name)) { + return 0; + } + if ("setString".equals(name) || "setInt".equals(name) || "setObject".equals(name)) { + statements.add("param:" + args[0] + "=" + args[1]); + return null; + } + if ("setMaxRows".equals(name) || "close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static ResultSet emptyResultSet() { + ResultSetMetaData metadata = proxy(ResultSetMetaData.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + if ("getColumnCount".equals(method.getName())) { + return 0; + } + return defaultValue(method.getReturnType()); + } + }); + return proxy(ResultSet.class, new MethodHandler() { + @Override + public Object handle(Method method, Object[] args) { + String name = method.getName(); + if ("next".equals(name)) { + return false; + } + if ("getMetaData".equals(name)) { + return metadata; + } + if ("close".equals(name)) { + return null; + } + return defaultValue(method.getReturnType()); + } + }); + } + + private static T proxy(Class type, final MethodHandler handler) { + InvocationHandler invocationHandler = new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) { + return handler.handle(method, args); + } + }; + return type.cast(Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, invocationHandler)); + } + + private static Object defaultValue(Class type) { + if (Boolean.TYPE.equals(type)) { + return false; + } + if (Byte.TYPE.equals(type)) { + return (byte) 0; + } + if (Short.TYPE.equals(type)) { + return (short) 0; + } + if (Integer.TYPE.equals(type)) { + return 0; + } + if (Long.TYPE.equals(type)) { + return 0L; + } + if (Float.TYPE.equals(type)) { + return 0f; + } + if (Double.TYPE.equals(type)) { + return 0.0d; + } + if (Character.TYPE.equals(type)) { + return '\0'; + } + return null; + } + + private interface MethodHandler { + Object handle(Method method, Object[] args); + } +} diff --git a/agents/test-support/src/main/java/com/dbx/agent/test/TestSupport.java b/agents/test-support/src/main/java/com/dbx/agent/test/TestSupport.java new file mode 100644 index 0000000..aaddefa --- /dev/null +++ b/agents/test-support/src/main/java/com/dbx/agent/test/TestSupport.java @@ -0,0 +1,31 @@ +package com.dbx.agent.test; + +import java.lang.reflect.Field; +import java.sql.Connection; + +public final class TestSupport { + private TestSupport() { + } + + public static void setPrivateConnection(Object target, Connection connection) { + Field field = findConnectionField(target.getClass()); + field.setAccessible(true); + try { + field.set(target, connection); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Unable to set connection", e); + } + } + + private static Field findConnectionField(Class type) { + Class current = type; + while (current != null) { + try { + return current.getDeclaredField("connection"); + } catch (NoSuchFieldException ignored) { + current = current.getSuperclass(); + } + } + throw new IllegalStateException(new NoSuchFieldException("connection")); + } +} diff --git a/agents/versions.json b/agents/versions.json new file mode 100644 index 0000000..960219b --- /dev/null +++ b/agents/versions.json @@ -0,0 +1,43 @@ +{ + "access": "0.1.27", + "bigquery": "0.1.31", + "cassandra": "0.1.30", + "dameng": "0.1.33", + "databend": "0.1.18", + "databricks": "0.1.25", + "db2": "0.1.30", + "exasol": "0.1.25", + "firebird": "0.1.25", + "gbase8a": "0.1.25", + "gbase8s": "0.1.19", + "goldendb": "0.1.30", + "h2": "0.1.31", + "h2-legacy": "0.1.0", + "hive": "0.1.30", + "spark": "0.1.2", + "informix": "0.1.31", + "kingbase": "0.1.31", + "kylin": "0.1.30", + "neo4j": "0.1.30", + "oceanbase-oracle": "0.1.25", + "oracle": "0.1.34", + "snowflake": "0.1.30", + "saphana": "0.1.25", + "sundb": "0.1.30", + "teradata": "0.1.25", + "tdengine": "0.1.29", + "trino": "0.1.30", + "vastbase": "0.1.30", + "vertica": "0.1.25", + "mongodb": "0.1.31", + "highgo": "0.1.28", + "yashandb": "0.1.26", + "oscar": "0.1.5", + "xugu": "0.1.18", + "iris": "0.1.21", + "iotdb": "0.1.18", + "etcd": "0.1.18", + "zookeeper": "0.1.8", + "kafka": "0.1.3", + "sqlserver-legacy": "0.1.1" +} diff --git a/apps/README.md b/apps/README.md new file mode 100644 index 0000000..9b720a1 --- /dev/null +++ b/apps/README.md @@ -0,0 +1,9 @@ +# Apps + +Runnable DBX applications live here. + +## Directories + +- `desktop/` - the Vue frontend used by the Tauri desktop app and the Docker/web build. + +The Tauri native shell remains in `src-tauri/` because that is the conventional Tauri project location used by the existing build and release tooling. diff --git a/apps/desktop/components.json b/apps/desktop/components.json new file mode 100644 index 0000000..d2f0350 --- /dev/null +++ b/apps/desktop/components.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "reka-nova", + "font": "geist-sans", + "typescript": true, + "tailwind": { + "config": "", + "css": "apps/desktop/src/styles/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "rtl": false, + "aliases": { + "components": "@/components", + "utils": "@/lib/common/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "composables": "@/composables" + }, + "menuColor": "default", + "menuAccent": "subtle", + "registries": {} +} diff --git a/apps/desktop/index.html b/apps/desktop/index.html new file mode 100644 index 0000000..a68bf9c --- /dev/null +++ b/apps/desktop/index.html @@ -0,0 +1,28 @@ + + + + + + + DBX + + +
+ +
+ + + diff --git a/apps/desktop/public/favicon.png b/apps/desktop/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..407755f55460b939b6bd444f6ca655ef101c045d GIT binary patch literal 88141 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/zookeeper.svg b/apps/desktop/public/icons/database/zookeeper.svg new file mode 100644 index 0000000..7d0da94 --- /dev/null +++ b/apps/desktop/public/icons/database/zookeeper.svg @@ -0,0 +1,19 @@ + + \ No newline at end of file diff --git a/apps/desktop/public/logo-black.png b/apps/desktop/public/logo-black.png new file mode 100644 index 0000000000000000000000000000000000000000..c016b386b28981a530c73b93d3c60259aa0d07e2 GIT binary patch literal 29484 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/public/logo.png b/apps/desktop/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..011a87957aa5675686aa78039f36daa84da1e00f GIT binary patch literal 144247 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�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

@=N7nQ;^QAKYeC5+s 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 DRNu5i literal 0 HcmV?d00001 diff --git a/apps/desktop/src/App.vue b/apps/desktop/src/App.vue new file mode 100644 index 0000000..269eef2 --- /dev/null +++ b/apps/desktop/src/App.vue @@ -0,0 +1,2164 @@ + + + + + diff --git a/apps/desktop/src/components/admin/DamengJobAdmin.vue b/apps/desktop/src/components/admin/DamengJobAdmin.vue new file mode 100644 index 0000000..47a7184 --- /dev/null +++ b/apps/desktop/src/components/admin/DamengJobAdmin.vue @@ -0,0 +1,480 @@ + + + + + diff --git a/apps/desktop/src/components/mq/SendMessagePanel.vue b/apps/desktop/src/components/mq/SendMessagePanel.vue new file mode 100644 index 0000000..2fae77e --- /dev/null +++ b/apps/desktop/src/components/mq/SendMessagePanel.vue @@ -0,0 +1,760 @@ + + + diff --git a/apps/desktop/src/components/quick-open/QuickOpenDialog.vue b/apps/desktop/src/components/quick-open/QuickOpenDialog.vue new file mode 100644 index 0000000..e69d4b9 --- /dev/null +++ b/apps/desktop/src/components/quick-open/QuickOpenDialog.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/apps/desktop/src/components/redis/RedisDashboard.vue b/apps/desktop/src/components/redis/RedisDashboard.vue new file mode 100644 index 0000000..ce67a27 --- /dev/null +++ b/apps/desktop/src/components/redis/RedisDashboard.vue @@ -0,0 +1,480 @@ + + + diff --git a/apps/desktop/src/components/redis/RedisKeyBrowser.vue b/apps/desktop/src/components/redis/RedisKeyBrowser.vue new file mode 100644 index 0000000..0c9ea00 --- /dev/null +++ b/apps/desktop/src/components/redis/RedisKeyBrowser.vue @@ -0,0 +1,1473 @@ + + + + + diff --git a/apps/desktop/src/components/sidebar/VisibleDatabasesDialog.vue b/apps/desktop/src/components/sidebar/VisibleDatabasesDialog.vue new file mode 100644 index 0000000..d90bf4d --- /dev/null +++ b/apps/desktop/src/components/sidebar/VisibleDatabasesDialog.vue @@ -0,0 +1,230 @@ + + + diff --git a/apps/desktop/src/components/sidebar/VisibleSchemasDialog.vue b/apps/desktop/src/components/sidebar/VisibleSchemasDialog.vue new file mode 100644 index 0000000..367ee37 --- /dev/null +++ b/apps/desktop/src/components/sidebar/VisibleSchemasDialog.vue @@ -0,0 +1,235 @@ + + + diff --git a/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue b/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue new file mode 100644 index 0000000..ab1bddd --- /dev/null +++ b/apps/desktop/src/components/sql-file/SqlFileExecutionDialog.vue @@ -0,0 +1,621 @@ + + + diff --git a/apps/desktop/src/components/structure/TableStructureEditor.vue b/apps/desktop/src/components/structure/TableStructureEditor.vue new file mode 100644 index 0000000..3c4f191 --- /dev/null +++ b/apps/desktop/src/components/structure/TableStructureEditor.vue @@ -0,0 +1,3203 @@ + + +

4xJl4d-DN79mrX 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%0AW0hoQ|cqv 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 Cloud \ No newline at end of file diff --git a/apps/desktop/public/icons/ai/anthropic.svg b/apps/desktop/public/icons/ai/anthropic.svg new file mode 100644 index 0000000..88dc745 --- /dev/null +++ b/apps/desktop/public/icons/ai/anthropic.svg @@ -0,0 +1 @@ +Anthropic \ No newline at end of file diff --git a/apps/desktop/public/icons/ai/codex.svg b/apps/desktop/public/icons/ai/codex.svg new file mode 100644 index 0000000..c77ccfd --- /dev/null +++ b/apps/desktop/public/icons/ai/codex.svg @@ -0,0 +1 @@ +Codex \ No newline at end of file diff --git a/apps/desktop/public/icons/ai/deepseek.svg b/apps/desktop/public/icons/ai/deepseek.svg new file mode 100644 index 0000000..185c108 --- /dev/null +++ b/apps/desktop/public/icons/ai/deepseek.svg @@ -0,0 +1 @@ +DeepSeek \ No newline at end of file diff --git a/apps/desktop/public/icons/ai/googlegemini.svg b/apps/desktop/public/icons/ai/googlegemini.svg new file mode 100644 index 0000000..e15e53c --- /dev/null +++ b/apps/desktop/public/icons/ai/googlegemini.svg @@ -0,0 +1 @@ +Google Gemini \ No newline at end of file diff --git a/apps/desktop/public/icons/ai/ollama.svg b/apps/desktop/public/icons/ai/ollama.svg new file mode 100644 index 0000000..432f73e --- /dev/null +++ b/apps/desktop/public/icons/ai/ollama.svg @@ -0,0 +1 @@ +Ollama \ No newline at end of file diff --git a/apps/desktop/public/icons/ai/openai.svg b/apps/desktop/public/icons/ai/openai.svg new file mode 100644 index 0000000..2dd8be2 --- /dev/null +++ b/apps/desktop/public/icons/ai/openai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/access.png b/apps/desktop/public/icons/database/access.png new file mode 100644 index 0000000000000000000000000000000000000000..44138a10e7d1665cf32803d6f3761f74c66fd55f GIT binary patch literal 34094 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 BHP-+D literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/apache_kylin.svg b/apps/desktop/public/icons/database/apache_kylin.svg new file mode 100644 index 0000000..7a15a5a --- /dev/null +++ b/apps/desktop/public/icons/database/apache_kylin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/bigquery.svg b/apps/desktop/public/icons/database/bigquery.svg new file mode 100644 index 0000000..a9a42f0 --- /dev/null +++ b/apps/desktop/public/icons/database/bigquery.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/cassandra.svg b/apps/desktop/public/icons/database/cassandra.svg new file mode 100644 index 0000000..fbeedb1 --- /dev/null +++ b/apps/desktop/public/icons/database/cassandra.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/chromadb.svg b/apps/desktop/public/icons/database/chromadb.svg new file mode 100644 index 0000000..59f5f59 --- /dev/null +++ b/apps/desktop/public/icons/database/chromadb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/desktop/public/icons/database/clickhouse.svg b/apps/desktop/public/icons/database/clickhouse.svg new file mode 100644 index 0000000..7c0e072 --- /dev/null +++ b/apps/desktop/public/icons/database/clickhouse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/cloudflare-d1.svg b/apps/desktop/public/icons/database/cloudflare-d1.svg new file mode 100644 index 0000000..d3d97d3 --- /dev/null +++ b/apps/desktop/public/icons/database/cloudflare-d1.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/desktop/public/icons/database/cockroachdb.svg b/apps/desktop/public/icons/database/cockroachdb.svg new file mode 100644 index 0000000..862e86f --- /dev/null +++ b/apps/desktop/public/icons/database/cockroachdb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/databend.svg b/apps/desktop/public/icons/database/databend.svg new file mode 100644 index 0000000..ab3b974 --- /dev/null +++ b/apps/desktop/public/icons/database/databend.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/apps/desktop/public/icons/database/databricks.webp b/apps/desktop/public/icons/database/databricks.webp new file mode 100644 index 0000000000000000000000000000000000000000..0a74319cffb9948cccbaa385daf91c2e34882ad4 GIT binary patch literal 706 zcmV;z0zLgwNk&Gx0ssJ4MM6+kP&iDj0ssInAHW9?U!|aJ8_B4SKeg@lL74vmQP{R^ zn~Q8`v}BVuWH0s&)Elq{0jL1V5)2@KRM6)X34kDIf|aGDR#bHrNkJeX8pxOcS5YvE zF<`^lLg)|Da|<5;qPA^koA>XZCM#!Wwr$(CZQHhOC!G(o+Rh-N{}TXX6>|J58!@8!=a|OWq{zr6}-+CQ{f$n*f&Ezf~&y zsVeVWa0Fmif43UL8OOz}-OUI*07%^XUdDZ?Vbp*8xz|17nFol1fC-s?>U1Xhh;!%j zWH5s;EvxxjD?pyOc~xnt%d+xnGeHJecZ!Yx|M_#0tpv;q&-T+5fHG_Uq|h8t<(@uQ z$pHSPr2k_jngtx{Z|0+-7H{kA05*F4y~j-gfPW5?hE9Kt`A|sQ`(9uB+$ErXW1o{j z47B;z7(kx5CA9GbOke;5;?yB-#>)WvI2mAla#3Uom=|2!R9FCjMa9i&ff-<0bSXLl z#I^flGmZls>K^t}<%*2`hdNt;i`x{J1Relr;ONJMKLv5?5f@j5E;j-iIPo#+7x}Ek z5^&M0LbnS66Erdsz<{`PYgVE;glSohmYM_VoRj-%D?lm*tZMF$vQ>b2v&IonG`{a7 z$pGuByQ54cpv*bGtFi`UDLZ1L0s!?J`kW4CKwLWCmSSSoURzxVn9!N8A#VzuT;!sr z&y9fk4}X3R`%n@!IT6@Tb&!P@I|)2R$kNoQ;^DjbQPw3OS4g0H~TohX4Qo literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/db2.svg b/apps/desktop/public/icons/database/db2.svg new file mode 100644 index 0000000..728876a --- /dev/null +++ b/apps/desktop/public/icons/database/db2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/dm.svg b/apps/desktop/public/icons/database/dm.svg new file mode 100644 index 0000000..5315156 --- /dev/null +++ b/apps/desktop/public/icons/database/dm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/doris.svg b/apps/desktop/public/icons/database/doris.svg new file mode 100644 index 0000000..e18c60e --- /dev/null +++ b/apps/desktop/public/icons/database/doris.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/dremio.svg b/apps/desktop/public/icons/database/dremio.svg new file mode 100644 index 0000000..f209f46 --- /dev/null +++ b/apps/desktop/public/icons/database/dremio.svg @@ -0,0 +1,44 @@ + + + + + + + + + + diff --git a/apps/desktop/public/icons/database/duckdb.svg b/apps/desktop/public/icons/database/duckdb.svg new file mode 100644 index 0000000..14dc392 --- /dev/null +++ b/apps/desktop/public/icons/database/duckdb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/elasticsearch.svg b/apps/desktop/public/icons/database/elasticsearch.svg new file mode 100644 index 0000000..48ef8a3 --- /dev/null +++ b/apps/desktop/public/icons/database/elasticsearch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/etcd.svg b/apps/desktop/public/icons/database/etcd.svg new file mode 100644 index 0000000..a36ae07 --- /dev/null +++ b/apps/desktop/public/icons/database/etcd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/desktop/public/icons/database/exasol.webp b/apps/desktop/public/icons/database/exasol.webp new file mode 100644 index 0000000000000000000000000000000000000000..00b340da9b4d6dc68a433e2e291dfaff07dc6629 GIT binary patch literal 2876 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 aI1Ealq`eq^P$I=r1o;z>6b`aZs#pN87?TtL literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/firebird.webp b/apps/desktop/public/icons/database/firebird.webp new file mode 100644 index 0000000000000000000000000000000000000000..fd84e6f76121a204d9a5e36dfb67e8295c21c0e4 GIT binary patch literal 384 zcmV-`0e}8dNk&F^0RRA3MM6+kP&iC$0RR9m55NNeSK~IeZB==KyKDA`jQ&H);ivxp zl_#eS0!bU+Kl7P`NOHqwMW7OY8ii0Ig&>*0&wrrIJpcdz85ytuMuq?|of*94v4jVA zY|CLlK!kCC9zAjkU_}MNbPn*&8>R!y9CS+LR)u7Ro \ No newline at end of file diff --git a/apps/desktop/public/icons/database/gbase.webp b/apps/desktop/public/icons/database/gbase.webp new file mode 100644 index 0000000000000000000000000000000000000000..6a4bb56cb14cbba4ffa5b03d2d156cd4f45fd0b7 GIT binary patch literal 740 zcmVf0O@f() zB@G?H+3|4P|CjRBy^I@+qU=%*ixOZkgTs&NE-oo!p1m!p4n!z1ln8>vW%^R|F`=}> zf(T8d`-&qm4rEF7HKzL-GaWIa`cNz}il{yy7!Yh>f=Rvz{AGys5& zf(a&gK@jxg@P{Bsmgv7+dkBIcI6yGq@Ed?93hK%v#CzNYdlQOv4n>YG+c zvog|JBtb~2xNS_)Fx!;}8uPp7!Wyj=K(kOc9>zc!=vqD)Vzdl&E*}drQwzG+&k~W` z2^_m+qTzfV1*4?20M~YTvWQQ~RIkKG>T3j^E(T4d;6+522NB%>UIq?C^g6tV$iB?~ ztIAG$Xt7;OePp%S-a^{#H|*CftM%5;Csy0#PuI_U&GfxbII;g|(wf!#Hm(2rIC900 zo6-AsUU(h5>%h^}&oBQt)1U7BxP6Iv&EhR9H-1~bChGjFRhu{LxDm0id0Ud7*~N@^ ziKmampIW!}@YZGLmYzMn=+4Q5yJN1z?KyNTg#lz${=aw8XiC0oFdAPx_<)XQ&#xK{ z_kTYy7%zQy0F*a?7ZI5U5j`FT;9-d9b$Aic0RT-s5^$CJCW`nJPbtlOS``|~m1 zq;&A;l!<7jM!(t_3LGxgt8A2l_m}EZIzXXEss(LA%_xOC(~+wsuXC2dSBIJl#ZXdV W%ZN&v)rp>l(i}m^DQ)PTR4Ft)J7@j? literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/goldendb.png b/apps/desktop/public/icons/database/goldendb.png new file mode 100644 index 0000000000000000000000000000000000000000..b635a723b1c893503d5376d90bd1216214037549 GIT binary patch literal 837 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#NP$ECTC&cy3+lQx?W*?uQba7+-h`X8k1pIgF#Th*uOiTD z#w2fd7uFy7FOLH`oCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#6{~=dD&J@61ED}6)e_f; zl9a@fRIB8oR3OD*WME{bYhbEtXcl5|+{(}xV#((h_j7TdW~kosD^ss+=1G3e?8YFe_?9p)>EEsrYZGMK_ZLmyu}|{x*{z!+ z8XO~jc1(U0I9EX5;Sm3miTp9M?irhxTQ_oi4$ht#9#D8KgZG!udS(uTd#M~7BiC=A zx5l^j@;;6U7Vqz@E1jZrsy`{tb8><_cLihBTPBx#teM+f z-~W+4x6fy{v8tp-f_uu+h=q=FwM-k-rd_)BN$s|~1M91R==c8~XeQm*>%YLU>Vou6 z=Y0>ao@JhFFpK9#IDgpT3-fgxu9xO)Ud*#|W&1Am30d`$8*BngGQI>PO50{^E;*6N z`7~GF>V)MsVUI_-P7^l1559Oxl%+zxbl25(*5h11vv_J{_u1(F`uC}>{O^B8`zz9O UN|rAb2gWRer>mdKI;Vst0BOx>nE(I) literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/greatsql.webp b/apps/desktop/public/icons/database/greatsql.webp new file mode 100644 index 0000000000000000000000000000000000000000..c7bd0562d2d2e97dd74c29b879e591810928931c GIT binary patch literal 2552 zcmV<|BMM6+kP&iEE2><{uKfn(VHPNlM|Ba>m@ZQ~>zt#Ug(nzD3 zxsJQudv7u#`fo)Vjb?~8`#PWq4xwF}Q2-@uEn9;Q4Ukd?4Ula}_KR)@bU+Edg-wY# z|AXtp#ajU0WgI%73zrcQQvxW<>dN0U*JyY8)%lq+0Y2wwi_#p7~g>1`$ne)>q zl!HkY#-+N07g9$sEkQ}H>TkuDfoHL?z_TRiJAp+)^+i9YX1b$DCFrXvhI!rcjOyn5 zp{Z7dQjkPKRr7U(#%DDsS-V=Yt(*xwvs%>CP>ntb#?Xgw1pK46;R&S6$`E1puJs8}Z zY<+6loIVW-xvJfe=fX^}B>(xuLF8=GhLK)iaAP z07Dnxs>ed`g|!4hVKmj%5O>-ccKg5aQlC*fr zLKI@zT#8(QrXZail2>BIejk{s^j$!Qz*l!QteT%QQ-6B<2>`5H1s2R~Y7(fp{M+S1 zh%$RpH+>g}rL7Eg&uniw@Q5PoD}C<^Yq4%Ul1AU2Vh!qRx61_p-TxnJ*N3Y{b*@*E zhRvk9#Kt%=IdvVbNJD^vS&&u-ZA;fKBaSzby2XZbFGyZwc~4_gsjd<<`DDwhCtK>; zUN-;nDO0?)`@)g{(AyiCYq08mt*15JJ3~{~rF}pW_=Kk>YulEe?vU+)zFqQ1bTwq( zi{oyp-&vx6G=RvF9YpT3#qKDoMKfpS~9aN^tm0KFY7?<76I&^6YU$t>zEZsDEvQj9 zL5DYZlX`%)!-@EGk-AiQG>!YnOw(Ruu#c?vk&l_9b7o2nzXp)L8T1{Y5*1~wW;n&M8)#IQ za7e;z#~8pUSTr}fu>b(#aG;x+Dp{)z!EyM7;R;ETimxnw&m*}CFuAnV+vr(blf+m-+bj#;IwHRySf{J5Bp(!z1{8~CH*KXL**_7G-g7io zEmUIlW1(qSvZi7` zJ0SYGySJqPd}O?>Y^x`Um2LA$*#nuKmP^~A8hw9?nOh|qebvBQp1wmF{TwXnizIbu zJ~7dOyL30!ijlssEe;*JFxJ!34WKwDdunP~Ur!Xz)O2r^1Ow=6-#AIHIq*PWW)2p( zwzwTy2GFDLz>e#I7$0G<3g)i{cpjyh?tBS*`7gCdx-RL(GXmg+##J{0xthj`tu65H z4vFlIL&r=i#Fe_RxSma$W$Oa@9h4UoTRBkp({}-4bq%f%84A3r**&_H*5fnlGt10B zYq9AP(QGO+bK?t##N7h`T|XnW(^#<|OIWa0L>}o`SkmvKj)>e90TbV>#a}%W14c6Q zDJ8zn%=iO9Zyor;;wvTmpCPlKq{9W&5H)p6=Rg z^e7mo@ivl$cDT8;KlcrxsGgb8wD`Uq z!`z;_C|R!1Uxs}du{ZSM8NFEkgArdU)ObURB6n@Q+=5DTT{h;;b#FB^_M>6a+*JL4 zbzEr(Z5sl!U`1!y&FMx^$re~Qajp!Tjsr|g@4mxOZ5IdZki3mhY5Y?QGofzx1(kAB zIdd%^Q)}N=N&-C%dPT5SsNtb?D*|`F5>y)Kku%%!X@KO6OylY*^Y333sF+BgP6?>= ze^BZ5&!z%&u71aGtm8XP>OwTb1iz+kyy>5y(nyV*+eS|bptt|S;tm$Oj<#gJBI<=` zg)pwwz`vEQxGF;aQ zX7fSN=bv%nXs|deHE|v46YC=|IT9|I<`d0+Rcx&Re?>rLFOU5`Fm`zyGEkM`08JdS O&#+wMGE`+a*$Dtv8~+vn literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/h2.svg b/apps/desktop/public/icons/database/h2.svg new file mode 100644 index 0000000..56820c8 --- /dev/null +++ b/apps/desktop/public/icons/database/h2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/highgo.png b/apps/desktop/public/icons/database/highgo.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c434b91df08609cae0048c024e1f22aaa8f58f GIT binary patch literal 2872 zcma)8XH-+m7CwRCg(zMS5GhhLU7P5rbjT1QtCqpOZq zMWc1m=;Yvyzo`EukbFIeo}qtF7*ny@h6t$t><~yK5ds2TNq+y!(a`$$Caphh`Tzi- ziZ?a34H;OnC;8d-NRgL^Gp#V$@Mt0>3I5O$ZYD0>p(NOSnIvLq2`{MCIw;HSQ0&Av zXe0}{(2ZFWmXxH2#R{iIEaBc)57b*9rUODK;avE~4BTO=r`X!7N>25b!EW+Uv(M{0 z7wAp}!#AdR{Q;wESu8TZ|o$3lrn8D ze?s`FvLGLB|ILCPf!FV)_{^Y1p(#5x5qcWwmPtq<5a~Kzd+#4xBjLFygo%mC`UhI{ ziDnV3CVaeRpjPcf|{AvU{1gP~S7D zu$)2_me26#tfPg^6?nYll)K9XZp_P@D z!@I!au-U1XmCJ6Sp%u=~EX4h~4=XEvi86+X)z!<_eZK8Ago$Gn@zYaNqJWr~7^kNP z3$BM%BbyrJqa5VpIo|mn-8!Rep6EVCLbi{!wI+@^(b4dOl9Fo=k7ad`y1KeTHy7=z zovj4zQ}CdKgaq9nQg^29iN%Ya!qhWFBK>j3c|cs?&eo`5X25hyZjbK$-ZKGSW!KVE zQa+_?-gy1)-9YC@(9Ui-fjW(#U- zYtu2LLW2iFV##wl2nl4EiuJMAf0_10O*CF)3Q~O8T;(RVc46z&=BY0aQL!ee z&3St}2L|T*O8OS^pxW?N3i%*0@!-31wXt7s)yVf!m%ljEhOh8vsKhe9L!T2Cxg&)3 zJ2&vk{k}nSW$-s;y!HDTIli%`uG=0K+MGa&b7bg4rdh(ogS12Bt>IuDyGVtYH=>(M zVhBC&tv9!&`t4Ji+Q5eX9huSqb6vZU)7|&yEu=$I%HO_qX--k|x_Ps9yzc(1@GYP2 z-d;vUg%tGG>Skuz6y2NrTVey4Wn-?5)(XTf7%!+tw;v;!15NRKBQ?nKy^o585=~K2 zF=YInFcc8r6Cs<7B=iz9B-&h-r@fR2ab}zs|irvhj=J*Bl-25V#msE7&~!QuM{omospK2 z;c{+da}P%X{Txn{e)#5g&&P&_uDL)EnW}aj^DN==etF$~7X6w*fxA+pV_anIx^a2& z9>-$mWaMbL@3$l}#&^ULB!}OXgE3GhDTJ0Zb$%HgpL*4jD(c2UpZn^>$Hvc}seKDr z2M1a5Mq}MGgB?lUT;p#c(_00w5;1K_-HVrb=0l+~rbCfi!vIh@yr0$-4dr8ZPmi$( z+=D<+#9$5rD?xtQ8>6Ki8*6Llot?NfX@Kq=i0AG2z$Z!^3y zG1PfaL|jUf{Zl3@EJ&&L6A}irAPQ(LgTM6PCdF(vPrrM^{49}ig5-9EkK8|n-Z{Up26ECJ-_EKBZLRO) zEDr~dDgi#j?;cNXFjMyVA-v?5g7mN#kpO#la}fEQRvosXa^c>}; zqcT6pi56KAAh69_YhU1%P54*fKv*xO5GlXr-GIfF}{WU>LQ!-uuT{=V$)<~E@K+guu)F~2mJ z`O=}ngw|Bwon5ehA`=8_A3P8wk7oN3dD`+yN=hs_n0&;_9fLaPH@Xu%Y8&Fxd1*W` zasPSH^hM9-#YJyEm*8L>8EI)jibd+lsYTA4^rR%TH*9`>UXT(R8j8dhbUklhiIq?l zq)47}TEC?!3*-6RMJnPC4Eg9F5Rg?{V>R?(u7yDm9SKRg_%?1Dt#tFE( zx$H&F3y{L@fYQX$P zszP_a5pGP&8gd;)m_kud5Srr}$>W1@US6}!g17*P6p*b?*b}0e70bwBu_Qg;*heKG zP?Tw0_^(xY1$jRYXpz|+rn@#GD;L) \ No newline at end of file diff --git a/apps/desktop/public/icons/database/influxdb.svg b/apps/desktop/public/icons/database/influxdb.svg new file mode 100644 index 0000000..18239a1 --- /dev/null +++ b/apps/desktop/public/icons/database/influxdb.svg @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/informix.svg b/apps/desktop/public/icons/database/informix.svg new file mode 100644 index 0000000..60426de --- /dev/null +++ b/apps/desktop/public/icons/database/informix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/iotdb.svg b/apps/desktop/public/icons/database/iotdb.svg new file mode 100644 index 0000000..d742630 --- /dev/null +++ b/apps/desktop/public/icons/database/iotdb.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/desktop/public/icons/database/iris.png b/apps/desktop/public/icons/database/iris.png new file mode 100644 index 0000000000000000000000000000000000000000..e4be5d9a807ed4e2e1c131c2f70b9e5af9681fbf GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0VAKro32_B-8CJ|=SU#6wU0u�cTP~ z9Ccp&KGXY*JMHuVhiUh0#R@L$o0}>DY3I0FMZlDXoILbym;V(Xu3D(UzVyGSb{;tZzPXb$OlY?CjK9rIdApCo%N8 z$E7Qm!WgwKUOc+g!TxCR Mr>mdKI;Vst0C>OoPyhe` literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/kafka.svg b/apps/desktop/public/icons/database/kafka.svg new file mode 100644 index 0000000..a25ab74 --- /dev/null +++ b/apps/desktop/public/icons/database/kafka.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/desktop/public/icons/database/kingbase.svg b/apps/desktop/public/icons/database/kingbase.svg new file mode 100644 index 0000000..9d7f076 --- /dev/null +++ b/apps/desktop/public/icons/database/kingbase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/kwdb.svg b/apps/desktop/public/icons/database/kwdb.svg new file mode 100644 index 0000000..4877759 --- /dev/null +++ b/apps/desktop/public/icons/database/kwdb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/manticoresearch.png b/apps/desktop/public/icons/database/manticoresearch.png new file mode 100644 index 0000000000000000000000000000000000000000..420cb72a596fc8d3a7358c64eed5fdaa3f2efc3b GIT binary patch literal 10184 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/mariadb.svg b/apps/desktop/public/icons/database/mariadb.svg new file mode 100644 index 0000000..3153880 --- /dev/null +++ b/apps/desktop/public/icons/database/mariadb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/milvus.png b/apps/desktop/public/icons/database/milvus.png new file mode 100644 index 0000000000000000000000000000000000000000..4d3214c7df716b73e99c1b5bc18ce41c8b03c186 GIT binary patch literal 36642 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 Gh5sKV3NkVP literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/mongodb.svg b/apps/desktop/public/icons/database/mongodb.svg new file mode 100644 index 0000000..ee47003 --- /dev/null +++ b/apps/desktop/public/icons/database/mongodb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/mysql.svg b/apps/desktop/public/icons/database/mysql.svg new file mode 100644 index 0000000..0a3adb7 --- /dev/null +++ b/apps/desktop/public/icons/database/mysql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/nacos.png b/apps/desktop/public/icons/database/nacos.png new file mode 100644 index 0000000000000000000000000000000000000000..0d7626a5144e49a00446304fb8f34f40d06202d7 GIT binary patch literal 1529 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz^suO5>XQ2>tmIipR1RclAn~S zSCLx)lxJYDv9BmdOwLX%QAkQn&&;z`dcS+Wl0s&Rtx~wDuYqrYb81GWM^#a3aFt(3 za#eP+Wr~u$oq|n;70`g()RIJnirk#MVyg;UC9t_xKsHENUr7P1q$Jx`$q{6sLWFOC zf^&XRs)DJWnQpS7v4w)UrJkXwrG=4+j)IYap_#scrM{twu7RPIfu)s!p#l^r0c|Tv zNwW%aaf8|g1^l#~=$>Fbx5m+O@q>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_Nvx zE5l51Ni9w;$}A|!%+FH*nV6WAUs__T1av9H3%LbwWAlok!2}F2{ffi_eM3D1ke6Tz zeSPsO&CP|YE-nd5MYtEM!Nnn!1*!T$sm1xFMaii^<;ozd3ap%qQWHz^i$e1Ab6}wu zkda@KU!0L&py2Eb3N>>D4d2A%%sh~wCRmrRua#$BaY^x=oo!a^ddz!ObD2UKumbz z1#;lYKQ#}S=8J%ddvo;Nd|<|qEOCt}3C>R|DNig)Wq_n%&)mdxVEiPeR2H60wE-$h z2=EDUbuaL-ne|U+&u^Lg-(_!q*WUljeCc1U!@rEz|FNF?4~R4m{Zc>vQ{%`lpfcmN ze;g+Mm%aPlbk$$w^FI`>eV2at-C@FijiW#1Zhi-fXz%-NJM*8>`ahNn|C+7%tH1qE z)owLQpk1ORL4LsurQ0@#$xXH64>@14=+ORKullvlKZ`GU&&j~Rc+1npF(l&f+o>nF zH7f|XnEGi1E@ms}`u9KHE|bmipibPhZ(7e)N`p(xT?OuxUXLyRyYH64+O9=jhp&C_ z=CMD$u6ve6Va?3&%VF|y-czmX8VbyLobA8tS@h$Cp2myD4LaTvWxsx$&6{(9Lnu8{NYOpE?9 zY;oBAcnRBqJF?=NII^m&7L zuYyWa%NDD*vAR`1BJTcDs1P>n;9_`wH+SO&<^-G9OIzKx9Vo6h`}^u5`^KCm28HP| zS7Y|?`nsw2dP9*Y-=+5q{{?q2f7@Zvw7!#5r!i+y_kvk3vg;TMb{fX4%~9l^U4iiGGOp@^>bP0l+XkK_54L> literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/neo4j.svg b/apps/desktop/public/icons/database/neo4j.svg new file mode 100644 index 0000000..4f0e62f --- /dev/null +++ b/apps/desktop/public/icons/database/neo4j.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/oceanbase.svg b/apps/desktop/public/icons/database/oceanbase.svg new file mode 100644 index 0000000..2ace405 --- /dev/null +++ b/apps/desktop/public/icons/database/oceanbase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/opengauss.svg b/apps/desktop/public/icons/database/opengauss.svg new file mode 100644 index 0000000..6f46971 --- /dev/null +++ b/apps/desktop/public/icons/database/opengauss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/oracle.svg b/apps/desktop/public/icons/database/oracle.svg new file mode 100644 index 0000000..20e98a4 --- /dev/null +++ b/apps/desktop/public/icons/database/oracle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/polardb.webp b/apps/desktop/public/icons/database/polardb.webp new file mode 100644 index 0000000000000000000000000000000000000000..7363a491961e6ebfc269622bbdfb6f56f3433421 GIT binary patch literal 174 zcmV;f08#%^Nk&Gd00012MM6+kP&iDP0000lAHW9?Z!l`}9|YO9p&Psi3pNly00`i4 zQ)}Csyy?jn4>1tx%#4Rjlnn)40wVChgapP8kD2r)Afo?@+_r7#YevT})c;%nEGY(< z>jbcuq!)ny0PcR~^aqk3Y;EN-yTT2UvI!4>pv*aAlnFB`O~GQlUazNRo&cLBhNIDF c6s4+5st4702ddwx`W>s^x%wZf|Ec#809OP|2LJ#7 literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/postgres.svg b/apps/desktop/public/icons/database/postgres.svg new file mode 100644 index 0000000..a24c0a6 --- /dev/null +++ b/apps/desktop/public/icons/database/postgres.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/presto.svg b/apps/desktop/public/icons/database/presto.svg new file mode 100644 index 0000000..873883c --- /dev/null +++ b/apps/desktop/public/icons/database/presto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/pulsar.svg b/apps/desktop/public/icons/database/pulsar.svg new file mode 100644 index 0000000..feca270 --- /dev/null +++ b/apps/desktop/public/icons/database/pulsar.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/desktop/public/icons/database/qdrant.svg b/apps/desktop/public/icons/database/qdrant.svg new file mode 100644 index 0000000..c10ad96 --- /dev/null +++ b/apps/desktop/public/icons/database/qdrant.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/questdb.svg b/apps/desktop/public/icons/database/questdb.svg new file mode 100644 index 0000000..48bff14 --- /dev/null +++ b/apps/desktop/public/icons/database/questdb.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/desktop/public/icons/database/redis.svg b/apps/desktop/public/icons/database/redis.svg new file mode 100644 index 0000000..2df1a4f --- /dev/null +++ b/apps/desktop/public/icons/database/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/redshift.svg b/apps/desktop/public/icons/database/redshift.svg new file mode 100644 index 0000000..83b1036 --- /dev/null +++ b/apps/desktop/public/icons/database/redshift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/rqlite.png b/apps/desktop/public/icons/database/rqlite.png new file mode 100644 index 0000000000000000000000000000000000000000..a85d1215f84bc4f18320df24037cddac3f433ca9 GIT binary patch literal 5029 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/saphana.webp b/apps/desktop/public/icons/database/saphana.webp new file mode 100644 index 0000000000000000000000000000000000000000..ca36c340744068601e7cb0a30cd20e58e1a7767f GIT binary patch literal 240 zcmWIYbaQ*bz`zjh>J$(bVBvEc$ks1EAS+P6U_q|5nquq><&w;nTibFae*V9Be%W!K z+h!LP`t18_;~aK|dtTbo_wcc8#s5>*g&*p93X*P%&6Q!S4ENBHVV^jmi;L64Lg+$K zjSXiwqtT4m<()77v%I+c`?|TodB)PCo$Oac)#U=h=lp1>I@-yLI>P))RNW4t1W7Z \ No newline at end of file diff --git a/apps/desktop/public/icons/database/snowflake.svg b/apps/desktop/public/icons/database/snowflake.svg new file mode 100644 index 0000000..e986bee --- /dev/null +++ b/apps/desktop/public/icons/database/snowflake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/spark-logo.png b/apps/desktop/public/icons/database/spark-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..16702a9f022a301c3098122d2dd1e4f5a8595679 GIT binary patch literal 26999 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 \ No newline at end of file diff --git a/apps/desktop/public/icons/database/sqlserver.svg b/apps/desktop/public/icons/database/sqlserver.svg new file mode 100644 index 0000000..360df61 --- /dev/null +++ b/apps/desktop/public/icons/database/sqlserver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/starrocks.svg b/apps/desktop/public/icons/database/starrocks.svg new file mode 100644 index 0000000..25d0351 --- /dev/null +++ b/apps/desktop/public/icons/database/starrocks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/sundb.svg b/apps/desktop/public/icons/database/sundb.svg new file mode 100644 index 0000000..8626ff8 --- /dev/null +++ b/apps/desktop/public/icons/database/sundb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/tdengine.svg b/apps/desktop/public/icons/database/tdengine.svg new file mode 100644 index 0000000..9d20ae0 --- /dev/null +++ b/apps/desktop/public/icons/database/tdengine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/tdsql.webp b/apps/desktop/public/icons/database/tdsql.webp new file mode 100644 index 0000000000000000000000000000000000000000..c6e67037389e316f12365db8d65229a76a6235d9 GIT binary patch literal 526 zcmV+p0`dJ)Nk&En0ssJ4MM6+kP&iEa0RR9mAHW9?7Riw$+g5|cZ4w_<=$Rl7UPSx# z?mh3VSP#TVS`9S2KLn#Tk{m66jI|eE3BsKWXWO>pO{~c_R$Eh!jH+#G;~xBp+U*uh zH7DD)jW~HHpzf1`l}ho+gCry=PZIbqxC=>Ue zu!%7cs>(6kaqqiXM>+uxp)L|JXa zlOX8c9cahhDW`gZ0B6ZNvabeY7u*Ez-7Z>-5aTXE431hvG;zP(4!;Kp?h}MytwrDy z{JN!XSGV(w*95hNFIfDyzcRwH3-QRyG38GJn2qnn}3{~aS?y|d&>&f8@16&f9P}S+1t94Vy Qb@L(TzhV;gK-Ya30BUmdCjbBd literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/teradata.webp b/apps/desktop/public/icons/database/teradata.webp new file mode 100644 index 0000000000000000000000000000000000000000..cc357589ec6b0cbf9377c0096d7efb0c43b3eb83 GIT binary patch literal 816 zcmV-01JC?YNk&E}0{{S5MM6+kP&iB+0{{RoFTe{B_XMGlBu7%Ljz3)UW~P$H{6lOT z$&tjn%RkolW@dIA%b3htK~4?Cijk&q-IGsxT$@^49U3&-;7$FU@HBT16+ zZ@ISXl0oJ+Bgx3fm|MoN%(#wZE*Zx`l7#&FaU5SCuH)^^+>T`inad0k5;C{BWE@*y zT(^w5BqT8YZ6qOqBxFVg2_z6qX+ki;z#;|){t-g>LHI-XK^XW$2uFk`LI@j#3&If} zgz%4WLs%pH;S1px;eznR1HLd2!aoCxhcW(12;t?qdc6J~j|>vFZ8O{|$F|vHTjeop z+wE-ZG$*#LwwrQ(Y?Ik<^9#O-=>G&z$@zHDWizS;R2!|%P&`lNEv5YqgNiV6y~CF- z!IhI9vp^&Z+?`kk%6iQN*yPPZ?8a7<1f1JrGm?rC6OoliiW0U1IwG?+u*g&lXo&0@ zUSx^rNCWaPL)457$)k0$|B-QHFBIA{wY&nuR15yL$NOkyBqc zfY6+zobR{^(**_M@eVNb%u=4RG?FDnxgP<(Y;7PS2>NNx0dVO4^Jj=J|5hO!xwrwK z_VM-&2tz!i0y_bt3c3i`aTs)2A@-lUe2HJY_5;RdggDkb($D$eBmp(5A&!6ETt!3z zs}?{yHVC}XcwBJ5Su82a=R9oU@Y}Qd>TJAFARhj(!Qx)0oF~mpDB`d8Pw(Eu z8xK1-{yjKz_SMiTgE>L>dIcuL>ZUk7K8E8J!bgApnG#8T!Aomq>=Kw)t4LV?XKV4O z8B8LN()wXtBk%}iTncF9)9^JGUI=LA(gg~XeJNs+hewvE)P \ No newline at end of file diff --git a/apps/desktop/public/icons/database/trino.svg b/apps/desktop/public/icons/database/trino.svg new file mode 100644 index 0000000..725aaac --- /dev/null +++ b/apps/desktop/public/icons/database/trino.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/desktop/public/icons/database/turso.png b/apps/desktop/public/icons/database/turso.png new file mode 100644 index 0000000000000000000000000000000000000000..d78843d483ad2fb8a6ae471ed59a67032d1bd95b GIT binary patch literal 17670 zcmV(`K-0g8P)XAC4&=K8D*|HYe1hh~aV6A{C5Cj2YM**nyt@mc0iIaKn zTM7lR090|2c*qA7UcGmh%)BSh@}2JxRx6W}3_xEFhYve_>+$dXn}K@Px80@9jhS&` ztt^y!%D1v||J>Dy&(uI9t?!Fa*T3JFyGs}=|5NeronQUe!`M7Dl4fo=iMZsXmiCmA zTZ?_Q>sO!qLN$DDk}(Cw)RbNASVvf`Oik$lTL(TkJ#BuRRyK-cudyT}1Ged`u%SedZ8Q{{%-WKfD>We!9yU7cFgbZ&$JHnLtyg0q`Q%TWI1-=S zR^KSj>=7#;6o;pn&5lT1Zxo3gyaf9oH~GHYU52u1#wj}k^nqlzV|>tx`5<$&d*}DQ zIt-C8m$`PnW9}Yk0q6ma9@WpZ4 zzF6M!0^XNZh>qn|q$X-QVmnAgPmth~0=yuZ{jk*N(Vc(u)uG8^5#-D|}h!gjT-* zCa0*ik`5m9PqQ9)DeBqm#5^Xz2L;$qBwL9{)yxt(S#p`nY$IK*R(W6ULyjFd#=;Sa zP$~|KB2oddA<%Xqd0Ge`B4m5BTDocC$dTB8N$0Nc1|}!(V*yO*ANkXptA124jFcaN z!;=vAgb21%xomQGB_%?WVq?YB-{1GwL6!#2kTjb_hAjb25H-OJ>Mg}2*hz#Z*tick z6Yr{wmIu8S?{o#9eDXdPfR|hg0NC>LZ}qx9-Y%f0#L!a!b`oSjFCbq4xuMAKPyV_} z53KPct)tF5++_3(3<7R9L7rx&CmVzDwuu+NrW*$C_4L2h0%!#xqS+fGNV7fq^b=?= zh&OoEkYxfZYAxsq-dFu^n~;t;!8-ACpkq(GiNO1q@FbA!y2S?A=#UTj_HODOuuk?7=vj%Py~1Ag>!b^uQ{(U<#~|F( zYJJwaslJx9jXFEFE_`W z;29$NC`D#BQroX5%+-F_`5$~e>z1R7u6v*AOoFV9MqT&K=m7e6bQ?O# zn4I+gn#5roo@zNP#do^DujkP3A3YjAHF}DkKXAYYNA#byqa*DReNz88g`SgNl#?fc z=lAWC<1bGFGf#G3PcVwwQXIPwJ;$+QIDX~~O-umz%s6W2M!JmTp3ltsWArcXljFyx z+UL-Fo0@86PlJf&YxTzD4xB{@(n#w!VX<|6u6FJUxs4kMqJympc$tJX$9`{C&pa}a zrW+HI4_dOfFrP(ZCnsLJdib+dKc0sVV`9%9j%ugQwZp#pcqfZPMEn>;o*|OQK-4E` zszzTi*(>G={QZd&vgy5zx^N!9Z;ZWor1$8+zZ~52Qk=+3+(`EgEnM1lsMawQo!{wt z?>G+M^%UKodvH0PpX20%eEIO5*LPrY(u^K>vOLhN_ojVOR9dK|X%8=6c;QgJ^`Vu< zRu|izajDNbQDq;-Jo8jMK@H5r;#Eatro7C4}i| zo|v8Gll%4w&U}%sZF#nwq_?+b6z`NY8^}uLHY#!kz_r%5j!hbjU+o&V=K-8wOw{Hg zRp3PG1>SMCuy`~w5;|C7-r}3an zn;-v8W!RRm4Up|Z*g}FKVq<)?DX9HIQLnslJ7L#!{QT%BEe(v*{_+T&)`|D3@c?k< zOwb1&s+KjDedX+x`(*7BsUYdz7Id?MrRJX0|(#^2iNHVPN-`AG)?T8 zY5a5TEFQO|b4AQ00XBj#PLLgrX>4X&zb>{}{esSY>p){CUhIu# zZa-pTe9}7n6EHqXY{tBmsat?z0f~Iz8KUb@h~k+1?}*M4;ahCzzqld$lMBy&Zth;= zvwix{d+gwbT`|ia67i=&*b2}Y27kk)(f7{(lmGsLuJW!giSWe9FPiJ;MxwrCA*zcp zc1s_ZGnjOtVr;o?5@C}iJ;q8FS@c9vY9kZDh>&p(#z|&iEg2{52dh)mjAn9FiXB;Y z%&{Bl=JiB@wHK04EnA@_i8g1`@yW=Gd7_c zB-)DCZ#%(_=`>M-O`wLM5hq+OkKEfYJaHt>Zu9QM@N;D4V}Lv*pgw?VnaGZe8yo59 z(TknFsvp4r{8xi>8{&b|Ky|Qg%zz;3qiVgk4)jsklnK3ME3S;D#7rC$nh`M=7Dg>& z4VIILW-p22m6KLR7q)u2$c-sx@nt z;CS(MzOb<2qZ<})0}GwU-ZaqU8;i+CCfXqoRm+bEWLQ|{1$LGOHvJ6K(-(XY?k>V{ z>!KZp)VGR_H@e7axN{?s41+L8f?;t^^?9EV zdPF24f`TQCDk+VR1%Qj_)O(LbM`*=6pv2hPYx%b}7v`wT?^%+D)+gA@mds?I07Cq?u(xGDt$Z0r#xwD<#{$`Imd+*x2k^ zeFPE41konv+=wF#LoiGtgI;rp41%av4P_tvAc@5XxQZ~hM>pk0vfj%*v5FEt?=cWQ z5)gtm9ulD%Ap=ti;RYZzK&k>+B*>xw3nG{!p;-pal65yP{QZS%+yCyb=FH#0SfcHk zu7zNyBk3nWg2f7vCPvbdOSms;P@j!xPz0OF$Sx8*0g~+y zZ=83auKc}qJd?RL2x0_wn1se0$yO6bLtAd0zJ47@{Q_v#r8iC1na;-$^s-1iAg715Ub6r+3_|;q3~{3 zc+&4O`zuOoeDlE$3&R4W-b_YCQf4{MUB;unBWPuY-=D;{`QRMR9)fwnr-UouU|a&p&Wj)cf`Wpf~8_;Q7yOU4PH1zgx&v?ty8@C%+W}_vVD+a&nEMW~MHL zNEbnll(S`a&2$)PHY{ltG>2YnfY}u)S|8N`0J~vS`)U5ghieBzdKX*B@DTTu)r^JL zx@o35P79=2%rRv$Q#<73oJL%!j>bDW(rAF z+ZK;@*snUhNnS_P_(XB=8R5fH1{hj|pqZzC*ui(6vE!6$W3m|+}@6_iWsFaX2 z(g9=|7jVOdO#gp+^wFNE-sFv7KT*SKNmCT5dy(tbe5JmXsM>YAAIW@0kj zL(Dz-jfO>1s4w+V3xr#H)%qtS#~OL;gV*)`kY4SFJ+3vs#ewhj1g~-MB9e3)$Zdtg1_$&;s%GwY;9B$N{jOp{f}g54)H2L+ zry|VLN`6J#hzY)$4?uaP83z2$i4QCNE(39YZ{x1FyX+Um`TS((PhoD5=>4}MCgB&M zI>-Na4@Fvxm1>G`j{K!=zvDbMk>7vE19LC&LBo8|d`v(+W8He~1`>?cm=~iA=_A6} zMou=0pcK?gSb#o#wK{28o?YKi@7}dS|D7XPT;RR8mVC8$BTqWc*#0cmMCbv2(fU=} z1-nbCZiR2RCoRa1Rqt$s2`t`wWmeNRGAcZGvj#HE69S4`>M z5*qle5?Wa&-0`WlHPEsqmihMgFYTFgaEjk&2hpGq28pqS*hG;)G%KYrZ?!u4-yNI;ty5=R6c6v%+D^dau0QsVa_ zwLXj8DOb$iL0h)jy+51prfnv8CxzixB;M5%^GP8etEkocRof#(d(|fwMc_mr)J3F; z%xZ`=1Xeu0gmeKEA<&k!U-&=|usyslYb$LVqh)Gv2odJ7U~!HpcfSQ_Ku{-=1{~ER z5d9kD`T^RcRlZWKj)x?LEfaG@aTLN@0e{{RioJKR?R|OM#3#EuQNkL1309XtvQ)Ks zDvf4ctgVCO62Rv~`lZ8?!dZYjJ!`D-sN zdn*r!wWLu0B9a9lkgpTStcK@nV7eeq&Jwa$L3ou+^g4mBnXFz-T%5KXvb}%v7bQC~ zI&3R;8(j7%DB2B?-NbIE2yI4WhTz;VoYS;sFHFRm`D$$sxt)-^v+uKmthE#gD4(w= z%<+8e{r;|2J1Rn4A>ujMY#xH^AUZGN&YMWyU{20O{d9EzkI$cc?z!~NC-vo*qrJ6D zy;V+!jPM|YMyTwzh@x7*ZCE@Mmv@BJ+@q7Pfpnu73 zBU64HEKiHjV`60&m^P~W2tvPyU0Wszn4g`K#UoI zTwvggMA0u|o1LjtHe9{>+0Ry&9iu~S>jDT2pup7OJOgm2Jpb}!biTfOJC)on=gbZ` zg^pu07#jsVO5{c~nIufZBv7P^f(_KQ%p-y!@n86+npb8*!5V}pkZE@}<6WtWxhGV{zNP4Le+4GkU{I8eqKvowrscfR6)k~`% z^!?M5N%NV#<;IOhzf_V9hV3R1Gb&8u47Xi0q%5?937bV^6pGhVRFAJ@%FCC1S!76- z<+%zE5&Rv4gC2QRk24+a) z7ATobsk zWbmdP9O20G18%n>*CDh3h?Y4ih@sR`ey$~p6p%7)WA=B}Xe9m5r^r1jt}EZ^GpLH4 z>HN4?^|OGS7vL-euaU(C>)d5&;M%}&|Lo}(4r%>JTP7!Y;xnHyTG-}m7Z1z`a7t^_ zb39#ruHG^EDu)j{ojaXF zKlw*Hs+rr>%MZxw(+TAWbh7cb(Z*)B<^$mLBP4P_AkPv<8$Cv_845-{r(nL=!uH?7 z^4+VLv^e8?Pvjoq((qt-P2e9Azc%s^OIRpGaiY*Dwe*$X;U_}$_XPfNy`H@`v-Rm) zn3yOidG7|VSrfK!H55rpn0?LPnKN|q6ITeQpR@&)jBX7>FHg@cae5n0<^ifgkSS0* z$MR^&ld3S?KI(8T65>9B^!wDLF-f}$X}L>TfIkZ;aL!x!?pheqwS^Uvt9!U-?O5S5 zt*|G-K{OzO5mMA~xWx=YRTh~SYj5|?U=Dv0{P=M8X@gTR6W^be zel3TenF$1+tKb`0%>oc#>MSD1wQk)LAsl5q{ij_eObd^~#%FvHVX84GUsmN|PW}ee zE_hSGXBc!{$f_pT48aa91`#V;6fzzbv8qO2)f6P8H8hXumq80uqQuDW4#z?AZ8U&6 zlrJm%%YX|ApT0sK#owb(vAHTiu0rUX5MLt5ZN=^pv@nPEYOswAmqLM@B2Hb(OihX? zeWR~;S<&hthttzIdF6`W^Pg`&C~Md+pg_3gi(yhhpoNR)PnVoLnph*Og;eUaco(EV z_>uyh=%$do<`Dgc#p(i4$nzdRZYd;MGP_aKa3qOItP&!tAsMX3uyrUeS;wyRt}zQJ zn05JjY^mZr8Dl-FQ`J~gz*TkU^noDJ5->U^hBQR`206@&lK}xgLF|h^RK2(M>p;o@ zIO}-J(1rNA_=l|9cGH5?6?h5OreQ><96e1qIHi_mZdp7@oHe9LVhwRh@IXM8xH_ACYzvOkLWXv6FqiUGwgGjT)L&?7kD_&0Wx!mIsor`_qUW-y*ncj_5qW zUUEb?{IdhQLr5Aq4yTQdQjE01#W_kdVH@}Fa^73hN!RPS4|jfT7Qm_ff`f+zhgBo^ zcc}8>k&K3^!7ge5)D$AyQbM70t5^4YXVW-?S*$JAZ}&yb3+U@9S!c&$L|chz%!%g; z&?40_5NX-?m{_|3&JAj&%bQiXO`s;EKY6en+CY_c7byx_bX6;cQjN9njH>z8Xo>^P zX@CZTYhYXx!Bt{&nJuov$yG9REkb&o+)%xe)iY+=BB7|YUqHPih;nS0Zlj9lY7(g7 zC~jPBjHWpBLfC?fCtjvjWF=Xj1+c=1^hI^sZ1iWsE+zJLbDjHCM4(=X9bk@ntg~|K zzxn5jw_4xE^{wCix0@mxZ{aN6YRGK0U@cPB#jqX1o5i_NG}2)a=?8OJ4M%2*17(_L zrzz6ZMbQM-MVP&Dr~ii_m#TTyMXrG?tBRlkXq1lBa=%W5%W$~L5nUyrt0K6OR_Ml+ z|L&i*ZeL}`*Z+z*;U0nOhelI9Sf>~tU0swpacQL7FUJn7SwDscTL7Nh?r@j;adv4e z+crAaWQiJZ&}|^6v++7v9sXD=^L3S%d>XMs2y#vS+0D^oM{DIu^S0}y%cNDnT0))4 z7H8~66565~LX;WX$u1$;&ZQpXtC)0)O;d={=4Ls8qY0N; zMc77UKDMd_;%t_O0UVlxk!pH|kW<5N?bHNdO=#b5la?`OiMXVYyEiXZpSYEvw!P$gu zGil`@3YnUsnHLUKE`H^k*DqwF=i+O8DqWx-!_|*Ln%{C{zU~~pEuilL_&GqYyJ~I8 zEmk1)y3dMrplGpfBB2aUYIV4UCAfNho(Qi2^iwDF9cSfR0{ksy*|*}XbiCI!f6`-m zPhV+N&cE^9-^^Tn?z7c9?)~M-h%F}&N)(>wIT%~!pT8+9&SlPJ&AuMjEH*vh?kwPM z-xkn8X;yAp4f!;QSgrm}HKlG*?{f01oIUVy68yGIm2hrXk3bH&yCT`^`(kjsyG6bhYwvpC+I6lbHm3siZ4GW;-yi;xC!ba7-~n;<63DT%TG{AB>9wsALA(k_zYwBV zh4BWZ?xstkdB^dbq*A@|!!xxv@6|Wy^Pjh#dhTmq^Z(rP=%dQ(6cHg|K_a^Uhgd>x z)A)XI4P?^z=$PocaRx7K4cY)9C8f z5^<}<6uTb*KKD82y$G4oNTXuc@8D5v$<&n0OdYO(uvE~h?fTMW8Kc`Daj}^XO%t$7 zDdz%lQkF-R9#SOFmFS|<(1!wNoxBc*SK!=CicS|n@|rMMB#GSE(#>2|6Kp_sVg*~D^D8a*Xndl-4x1wfwvFPCG0-Ok)V z=2Z0sTDKfdF1oj|26-f5a5USzXu7tM0|y9G8ggF7*cli-b$bYIXNO$)+~NB6=|4X& zBOA7`bGL*z)f$M7P9{PBJg9F-K3^ZotJUDsS7w_Uykg1Tyzrw(FW_*;GMYkVJC14yxY{Gw7VkU`U1khl)q#T{#_x$tz8_TC9!eJWT5mSN{OKy#Niy`S9Ri)93tY# zMuU8xq|Gg^U`hAJ-5rUJs#s5kMpSM9Q4L{mG-HEk}-I zN@&?r-xE^jomy*^B-L4|mmO!3q{@4Qgh)AkJdj3D+f?o$DDPc4TB+3fq2%G*z$xXM z?I3E_n@K2Df+rAb0;pM(n|tOii1Oo<$=M|B<+cX6w-hBwK@J}D*{;*|S;5SVxV}L) zne(nwAWnFQTE^wl3D?TE0gccpWv(uQ?YIb~vej!jsb0*%Q<{bA1Y9hid|HX9I<-|p zsZ9VX`3xX=b`XVkYfz&m=+t$g~U&sM)RPIZ}+8&Ld<)o17 z4KFhSipe0EABdFLs{6Xy*BO#io%f=+isGIEWxju9WFss2_^6!((WVc&22xT&N~R?^ z*N771mNSUIvl?Kk&6!_FtyyzPDOR<$s6YqNurQ-6p5G6e^DhHjY8V$!d}iEuF7`cp zaI$=kpq%^1ypa@+sVY@7j=@M&|EcTr`$wPT>h(;?eG_uJr37*^PBxJ}dd#&yRqeA*13F@X4bu9oz|KN%S(%#W6pnDm{k<<1wHF2^ex&T6( zQ#GKJtU2*H0q0y4_jPj#uWHWxhSwVKp{6mcl;ut>XN8~_9>Y2;013wpc}9)eS>@u6 z&+YL|m>x>lmTEa?TtsRpE4Cn@OPZQploU&FrdE!9`BzIe&m53<*bA7FlZ#_r7g3H! zEHPJ!JX`h>m^?Zd;ikNrb5=^#tdf%*uR?U+3{P5DAD>38$*`&4I~79dG1jg5&)Mo8 zMyT~i8^RtCO1k%#m`m}^#Ve+}wat@Zf4`3nh_iYE(kP%ObuM|NurHZWjE!3&l7)=8 zx=`NSwE&LlmUxe@pzp{QP^v7rEOzx&L$;)bpv}C8<^w4j<QSzIG=YB*_}K~t#fE#g?C znnFmL8ItC}c>A0_Ca)3Dj?Yg|8|@l$Gr3}#8zb2vN+L_ zvJWs^8kM4LHnUZBrkM>Tjgp~S+&9o@B-8TizI|h@dGg$dTaI*X zS{P0=zu>e*S{&#E3uyH+2JMFuX#q_6hAv`+G`}f1l%pe)6 zE%scE<1$6N$|jjB#jz`;w%kM6LYb_@nX~sq3M`Uc&M5i7V;2jttGGo&fx#;v_n-B zqVEM>ei7x}r&q<|M2*w>uF>Yw1^wN?0C-_Gg41FOA3(|7z+wOkUc!gj2E^;*qJ~jK zwG1Vap=_BWqs>1w{;@bxO5>%m*y2L~{UZVP={*v0h+8%SeEKGUEFSF>VA1^@ThPxwa)JWaRBS10RmTzjJ*7MW1+rdG528= z9+sCo>xaB0r;#oNigvNhwHVpeBT@ia9Bbwcu9hvpN(82B*3p@)((qQ2RO`f6(R3z6 z&pcmF3nsiiLjGbk6r6D8BDc8YueyRtM2@th$xcJs8HAqUB-STgTd#QVs81<(R*MA^ z%}L+MF~G7_m8n=T#yblz@Hy`cy0GJ2;xyw%)-CHopdf4t)d4qGYL=gGN>Mzab& z{dOU$BI%X8PJ0YQt)fvbCE#)b>M4PgAHS~$)T`W;+Cu<69$s!OCAShkP$gS2+ACL) zM%q0jFe|Uqs;;0P03NU(wJ)(f6n^2L;l40MxpQM0_cpo(DMg#paVhb&Dx^V7`8xD!^P)Y zR=P*K>XWXBUIlb!S;1-*xbf>v54@CWUC-c)D+qo;)i0bs@1KUGMA`oq zg_(Pn(56(ygKwSQwvV*VB0Oi z|2#vMGlz%0+nb4g=ToD>`C7n0Tb-9o3saUQ8dwVFj2#(|GA7biD{5DS_6=+41yIo~ zwFPg}Y=8%F61yaE9*2OlfAmLLMomi&3Wm+uRdee{?VG| z$-Fxo2p(3q3R?sZx#h2|cdS)6cmYgHPL1e$HM4rREP&%UhMqm$*Z^?~W+aXD%^`CQ zy*Y2G7jB`SoVHW6(s4u4y>`b_fRwe(THIOy&IpT947j#q3#b!qc%jXUJRUK)RccKY zlUgvA-Tj4Pq4@7;U{{ZkA5*l!r6bXvilp@oNt}c&KqZPv`va!x`ubvy<;^da-)EaW zEpHi~Tv3xdbYCUpo*e7mK2hg1`wK zuTF=gVD9p93d2g^#62Z{Y%Z6yf%|}1>DNY%u5AM#Mwa=CsL;TDm6^MaEg)Yk0iVln~=`K2*7W8->Jjg8zp_S9mpMG6D z5z?5ILoEpTok2s$%A$n^GFu9cV5s8@O(i=l_!hZCzPEQuZghH+Qx$(sVd<~TH_*tn zRwzPkl1S==Y}W9dPrXEnPVk{@qaO;@(JL#uwmNFvbFnLGJ6c5n%be2%V5G|kJh^Wy zFn+x!wt!kClO6>$ngwB0J>`{7&VzXCssS?22(|W*GOAj8FQ7BpuFcgN+9A74Y+{Jh zV-MxlNSl^+7t9;W^8?a~^%osUt%!2-Na`DCrj$DCbbntG&@~bJx`3`b=lPGq zlLS^D+F6X zqS%8?qWy8$H^%A{=gQ(z?NA;E7`boSXvIlJq)#(x*Y65M!7SSFT5iJOCP=P{k*jF9 zTVONGMrN&*xxT30iqltZCMB(m)|I3iNzohluD6zZCn{|ga1A6?VQ9{=UF<9ME{g*k z6zqTaf{?dm0Su&Rv)+ssopuiQgQ^yFhx#oFKJG2Sx7U5%rp+E6)F;H-c|f zyFGJkrd+8v``JW8j%gEHyGdK(idCi&Xj7~{5ltvb35H{FF0|F~XV3yn&00Fo!;?oa zwF-F2Fwc@?v(6di0+@+uX`v$hmFv8-fls}l-7`S)fB0=BmU1Sx-h^?A$y!HYS43tWipvanyMS?1PvkAphl@?qGs*fE7zMi z{J*ud5XlsK-2e16OsV3srm==Ogo9U{ed)gEA_|&!Blp{+BC18Vn`r(cGiBui=o}$s z`F)(m4T(W)~p>p^k+pP=sgez zSO!u4kB1J~`KGNoefmYJLarzl4f2+~i9=zwno~l=(rEJj&caGnvx>U?;*ki)mhtYa zr<~M^rX!J_yE94`jSPwj8A;XWtAK_V%^Px8Gu1o-Y6Mh~Qr%vttgHH0S;Il=GHrdf zPeyW;7 zx4EucfR~=zmTSE!qPQ-)x-;t#xmV;x&o}<^^=dP{b@j7f zsCr_l<)4?yz|1jvik`;-EDfCTC-J51d39Oy&8uA}PIl%6E~nATX?UJ}EmlAsmR&K9J^0~?5CWe zkMzc+MGDV{b%(% zGcz-+$MBWQJ`H?lR&LKrUmWbus(aB$f6rO>DF^FrJ5R ziF_ZTT^?I6*yMjnv2Fxy!e{u-fPJu=@WbWpwhQ=Feqt^YI%wIRBp2r@3(B2 zKWcxckePoK%Gg7!-pk$}{`*0@WFHroJtHC?2Iy%=vNKTDc}5hC>$O22%cY=|SJ7yr z?)@4AAgUYkT#M_j0p6Aczzj>7G#u#-YM4_CNPRz{e4_92#TK@Y4Gi_b*>Pxf5lE|n z`-!nRnV;RZ`x{@rtbrLG7@a$N@}jmyyITgW`%H%qcfWsc*UIkw`sYf`zy4Q)80a5P znlhYK-A*CiFHW8W(S8DU12m#ZB#-IKUBSCc;ST!KryvcN!{Z*K<_csG@A3uEw&^=L z{}d?kjlaxd<{AZxx2gtpJfD8iPsWc^M@YDn@w>y23QdQcQmIF9JnBduhr=_(?yNA* zWYyU-J5BGEH(&YlIec@W@gSsAE6Ks>Y4e?-dbujsHpD$W+sMk}O<*6K+Y8~{fNW8E zIxX_>*~d;0ELOw-<&cB?ZI6@C1QWChXpx-MGFx9p2$h$i-=(wLyIKRpn$wPL9WWJA zc$iiUi}b9T&&OxsG#C_`q5HvRj8K;D7Qr6Tz5@0 zdR!Gd(6f}reNQ)s=jPlumVP8qc8!UBVK7ggA(XGs^E117wrNbfu@)^Z_Qwr0b$rS{ zag9>KGC-Nx>a09UBF}*E6hO*%xsiN%SO{#18oA-gUWFUjdH>p!OVkCdfTdQh_pd7s z;B8$1J*B0zE`3!IS`=S3tRY+<5!7F=Y6-O5L~7;fwHCy5h$$r+hng_~v=fS_CSSU3}DB&Lp;F7fYp77T8`( zQ4eL=5J@(uNhT0&A<%XZ_V~8CrMO>l{+=;h-MHLnZH0H=N^%rft`nMmY#>X_RLy$g z_wWJ;OqeZIB|SY&PEAD|%|qOR2seBg5d|=Xy!D_J-a?D4Il#q>-_j64_KCc5V%F?!1|7xS;J{>He;NRyo>c^Dweq9Qdbt@UJ^F|qCqw2w2=i1Mucb> z;u%S`hOfs@d_y1H4uE?n@bj*BlQ);iH9+3?pe`bd9PvD5T&>m0@8JcoOh$MxyJ8zv zkXwS1M=AA5!M$HRHLDdH8t#augj7Q3EkjYHlhQ}dZFXt4lSvmFX;JCCKo&(CGXct7 zq>x*su(2V>5H3V%?5y)d6RH!m3Q18$1LD)l(3J8ZMX~W(%d7fKpLzv=7QvmM^6!V2 z*gKbbK{H8Hh?m65QdTzAk+D5lSK0Y{c>$!!Y{s?Tii4R`rfrb7bT#Rr#7@%1$-5e9 zl^3Yw7(@L_TecWA5jd7K-6R^3BW!}8p=67mc1>#)MUfjGI9l}m2(WA=XVB&r3j6kr zFO}5{WmXn~IQGX5twJ<7?NLWs^B%S*e~4AuXZcwJ)ZJ-oDK!8qLNW(q=Ez0W(=#(` zP6qLgEr62~SM0XG-Bv-8++^Y#5Y4kg)2>PxbEoBhF9}cBGSrA}3tD#7Jp}~PS_Eyt zP>}l+wuD#w@ZSxe%nMWU$Fbmn@I{#6TUxT#5dh4;*p6hb+MMZtpS5UbP;-J=aeTvy zy_MRmitirlUI5F;CEwi(K*Od74|aB|mZ;}TOPR%GBDpAl^8MFye*YFCwgVlodNrEk z#&ZaFu8>6`M_jabp(6d7Jh&AH`~$(o_SPD#WVt^`@o&pzs^3z_k1Bgc8=8xPd@`QVtW|E3Dy!Z zB??dsqSK(*MG|_IfHOVd%fJ5P|7oFn>{^->?@b#(L5v+jJ>?rTpZ&@)4~A%<*7fuD z5I)sUXy>Q!(FZ@ZbzPZL6I$pHwb?5JOY{F|L!*jI~%9Y!-ugVGFY5(OW0k1OL4;k`F(ySReh8NMbx9Aq#BA{x$)=R6=vU9DbPq9A2AyB2N-&!p;IZuqAK-~8e;1_Sc zsr`hzWc_EoL*9P%>hXfpN{3F^_b(d#+sc<6+tXnADV&@l&_!<@8zzb(C4mYh)9pfw zZfQ+MUSqwUJ!7czTq~ZZ&s<3pm9s z%$yEm@(?`$-wPU`bAM~`1l>w6);Kj6VevCC{}>{tL2^Z!zDK-1KX zcYjLnPpHHF>n4$CzuzgoskBnaP-yzlOj99T62Y$=%#R((&!a|qs9qN4yl6_2oj}!2e7&A_WHBjU;aLS&gh;vf1 zrB?G~A2ls1a*Oy~q@4*`ZCmc^UM1w|1N*nYIt|}x_l_b5t<}b18w=&;N*@#QyN0#P zXwha?@sF1P`UMC-Af_KS%1dXrm&~jWjCGB}!?S+AcNReB`NPQh8{a=Uoh*JL+e9XN z0)pot?xV!?EJSu9PK=_7#p>3eBpp60tiZ_{Aa$jq3B-P!2z)BH53!#J-%{?rI*N<8 z+5>X|vs3;;kX8sQ0k%e}JT-lfuQi0{JMaYmF@FRizL+tv` zocpxBg;2rNNn`ttJpFH5Ht?RJv4Mb{#%Vg#oH%h}W`6P4+*C?E%0d!G$tJUO3_|^! z#1RyQqjB_RLqVpO0J$uoj9Vvvvu`0w8007-zi5=R;eI-Zk|&lT#E~YG7^zl#vtkS0 z0OMxfLUyBwY$v91D#c~r5JSlzvs62MF94+1^-BW%0ET}WIX=51*>L+Dy`c6%fuFyR z9P;|eJ0D~@mG6CdsP^P@&!x#s>4uc>DmnSSgM1sHV}P6j$(-ip%|IWNwnfXgiSSE; z`!+~k6q1*SI z%d)^MyWxzU=Q9*X6WrH}Y<9j*kP`rXUkrXA)I8O|(6t$yszZr0?{=^6puF>2Kp|S3 zF+I(#608?q$j$-td%yk{^;++yEOr@tei^2QWZAG}R*j}#g6yw*%I>w_eDa?!Zu#by z7ZYR34tCHfd9-!ftz?X%s5f-~)&fi|>Cf#BY2odQX#?13sg|>z_Vp5ge-M!$ zG22s!&%bf$g~Ro+mya}J^o{}Yh|97b(nSW$h|o`*wLdmV^oxssu=gUUv$MGNNPJRz zAl^+2{f=t@l@*?hu@_(LEp3?J;ZpaQIC;z@ZSHGY8{N2_7 zodcqgF%|!$5U$c^s~`O4moMEmz7^e@T(4>A6${L4l3=Fwox_La${+sO?JeK>_w_P~ z;tutx*LE!>RO{P(O+iTWhVX151!ax0fo9gZG)oC`NrZmNPQD|J#t$xSlS}x=>bkWi z&?PT@^%@{Q1>?M_H=3q|8^SUpEDIMt_0Q^eME2h1AkTYi0d$J*ws|OY3qKehB$jDa~veZ>=hk6L8=FV`@sDTDcBXw!boc-c)L3ajuV;RSkbo zAUlY7kdpkiC3g&T0cg;skt)*XHfhw3=;y@rije&5ksn;X_~w7zS%n;G1Wj{z4!G*- ziMdRbxok_XUHIYe{h!_B6pHH6Z7ulw@2bgvcWnXpBhv?s&n#-@EXV1sWLWL__K_i* znmxpc7HxhEEFTe}N6FBzuQKCc6G}nOAaaX9X9V(N2K~^L_?I<1|K`jK|9iV(!?JT} z+1QQIQQAB+BdyTxdr02>3&1yH?5N&dNrkpmt$wx@UDP+WeEI+C>)Sd$Zjn9hpo@T> zhRCA?+DJ@V!!P2YS#%wOb0qk=5Pn3F`&GPc%hj{{{y2neyPo9SeOu{TitWpPte}y3 z_sY9}0Tj_f|I=N0H*;!{Ty(*76o!tyc%(Oplg%8P$E8@Dkd#kB^(DJ~*(U zTFsu!oP5Fo&k?yDp<9_d$B+}u=7(&u-<-WRa2tR6r$xk0RygKwjl4UJz?G%lV8XYO zZ=q*a+7<#$%rP*|jFZo~1MU=X{fT2=8O$iX4vTqh)aa>T4b76cYc4St&wb*b2CqV8 zaxy+R^`t#IrK;a^2P{uThpj=;yGkSDJ9)k{Nu39k{~zCs3VmWK_ap!S002ovPDHLk FV1l7^pho}z literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/vastbase.png b/apps/desktop/public/icons/database/vastbase.png new file mode 100644 index 0000000000000000000000000000000000000000..1007b05fa6b2d95e713966165c913299b98c2f87 GIT binary patch literal 2051 zcmV+e2>kbnP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$`ZAnByR9Fe+mu-lgR~5(4dFGi( zSe9j7CcE3P1j&aYvPh7S4{4fWKC}?qfU#=QYHN+!u3C3DO7`aRn;1-`B9jv2n__Ydxx;$2wAd=w`kk~+bow^c z4Vu_?$yqP-eHQC$lQUTd@9w&c+yj4Yn@op^jtI0|*XDNS_i(Ub8&|^(ex% zi;|O5kU%MayELt?Zd$UuZN`C(4gNe1PA;WC$!|sOH8GpChX%WwI?cY#0T_2;YzMR% zLsK@<-=|0Cf~>HUlD9ug!GwN|6p{mWq`1-!6<2F&Pe_5kyj3K%=VXPR_XXIhVae$v zc-R2lCoAb&TDt>@O;S)Zv6%_at(V&U&a#ne8OT)0gSl;^`#Z$Y#447@v|rpkM$uLJcx z79`W4qxz$(zjTxK_^M&4=^vq@WU@$gjOdZeC!M#vwP(P&IXMB%;5}pe98r0+l8nz) zh;|B^g**$J;q^4e)1?0`mkWn`3(W6=`rL-)B{kVP;usXr@~moMBLcXS{* z2(o*k9o&MaccD;-d+v&{)aa8iWDy69bF!MU90@P>9!S11SFyalplbh+ zV6&P^EISqTlkx#E?E;vDkIi8F!%tT&NEN(S2`tlD;F?K|gS#qcQiOhsXpc*SZirqR z#J9%7hi^ZAyyOyn8mW(x9kZX%pN0P0@^U*1Zi$Nn5A5|Jzg69CwCM&LV+J5(I5EYO zIO%qLVY=vu3pS|vos$Is<)%BgR7)H@3lTSQQ4B2EXpEO>GV@7FgkNHAOO$L1M{k++ z?`X(-%lQ9}EyyMMj?F?ihsqZK-8yvBr9culRKo`8tUFeKpD});qoMz+Nwx8t*0X1u zB&|_yq$yb!D8 z-#3zK;E1lUWp6p8-sZk9QaTZX^`1q6C|78G&S4kFHe;{!-KslhXP9Ygnol-><2ND7 z(CtA{*G2u??a_N`4#-(NY4mRePulpP`6NeSnIn$V}^IHGgWbtldIt3=WI9AJCP^!|_Ip=8hWZDYX~aiRw&IQ3+wPL$tmwcY%_p#$9KMZo!Y7Vl^A zjKm(%AC~vKqCHz2F1A>KO4@np}{zeQ!s5981XCFX@md6C457MOcPLhfdlv1Mu&y z?WOJRA2v&V$5Uc0i(R7svK}i%EHv$O>f18VNk~oK#~|CHWl}lSx_HzHl?xQ?Y4{ww h@+xx|I@xNS`ww5{5n<|_>&*ZF002ovPDHLkV1l8o?P34` literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/vertica.webp b/apps/desktop/public/icons/database/vertica.webp new file mode 100644 index 0000000000000000000000000000000000000000..0ec01a3112f0cbebf549e916fd0bdbeaf4bb207d GIT binary patch literal 20882 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 Y0=RTRh@cc05C8xG07*qoM6N<$g0%JYEC2ui literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/xugu.png b/apps/desktop/public/icons/database/xugu.png new file mode 100644 index 0000000000000000000000000000000000000000..e564ac22949763f8c4f2f3025ecdf3ed553e5415 GIT binary patch literal 9209 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/public/icons/database/yashandb.png b/apps/desktop/public/icons/database/yashandb.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3ab69466038f719082a7f543fb9d8408c36be5 GIT binary patch literal 15267 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

!=ETV$c@| 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 )*?Gp}IwtyFX1w^^4P<&0YUjeQm6Pm_Yl^#m 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 PT#*Ms5=7+!-0K8n(`z!L>n)FE}smkYVF) zf1Eb1Q4!6z!cTtv?~4fF*WW2`*`c93+>}V*hh}ROU~IVJ4+($ zV_KZFk0IN*DgCo+8y|h{Z?}y#&keMV&`Z7d>^$gcc)n0$ot?5Q`B$})vJC0Xy!V5} z8=&KtwHP*Yy!jh^Rmj{S%>Ne$9rs}@Mf>T8UpNW2lm6mH_=%e_X1o%9B5fvfqHR=e zd|{!oC4Do-U9_9@)tYeS!*2Q^*Su^a4w?IrJg-6>ci{Q!(GS+Slo2(%2efaDpHet}Vtx=~{kLkmVShKG&20%( z9d=pmg;(MGpG1p8Y{&bu_SL%Pup^vW-4u3;GVOk;$@bvuv`^Y16i# z->7n#Ws}XatA)-ul`ZHqs;)H4t~SeZgwFY|E$A<*rkZ6rX4x#EGd7p|N2}3aIA#m| zPROrgQnV|(ylj>>E7W&5%)TSV|Jt)`Ln$>Kldg9$pN1EGNF4eQJ9K6f`VioKVl(;> z`tler46_eW2J|7E7qPz=EWWYF@ZH(|z8UP#AMm!t;y-HUI9i8(Aty@4jk(Pn=5BPP zwNBxv(010QSMAT96}k7n!(2lMJ%3_484ErAcX;ldo8PKmZOm_Y6w$)iZAJAKO;u$4qKwPtJA}XKYPknIq@rJfiU2U~!x>CH$`p_Raij`}RO{KNfjM9)WAF?tG`Og~l@x0l- z{c;-;552@(r9w0_4`#CvEe22L=zliP;eB|$B6IvsJBIh<8AvJqtBwtx(}ej-s+s=- zZH_#Uuo`FUO0FmH>(IHr>s7th<_TE6@L3iMoq3y%E>6@t6Vw3D`(mD*X;VdQ=g9do z--Fz*0eBC`$ef>q`H*PK(2p!j)S0tbYyEs6bp8zYCABBa{51rw>!^Ei%*QnWYuM+XC3-;$cWWUFET#wArt+^twtHUVM%snF7x>@=@mFNC? z>s&h&J+rrDZ+5S3?|w7aX5V{1SDwMyG4R~dJMoRA&HFjof64EayuR-bM122W5#KKheP5c_x7U(;6B+hS+Ue&QS&J6>N%(`VXwMq@-^=hV&yXrtJ!_5u*GZ@EJG@b~ z*HkIm30J<*cfiLviEopPF<9Ypx2vW+Myy#Z$KXa>3Vp9Ke7^~J72sLb4PrH8!K!Uq z4bSN2J#&M?1{@TgXnpNfMt-S`@GM{w;9f($6pvYmNxQ13%@~ov^)>&Rrud;;{MI` z@p=_}XP#*Q9Xfb-vN#mdqeRq4+tMgw7SpiCKhJ8?6i4AB%mbS*7HMnM#i(Nq$2jX$p6!?7 z&+42z;QY``o>782G{tVu2JaGNY?j?#cEq{brkHZgkH)w_D-6LTPooXHc+drWQXx}} zMc0J*`OcN1HZpJh7e6K5?YVMzyb}?;6MrY~Mw#mx;q+Aa(B3{}o;^AU&(s$pa#GQ+ zP>p@Bdn5Lzv452NOG_2*+poP9JmPt+MjnTL8_0ck;W0=T+n@i_=>GlrA;0LzGTJZ2 zO`C9oMbzG+$~@MC;`288@vJebZtg{Ozr+0amJ9cWnR{N{r{y~K(D3A**K;cOyt>~8 zO^4*U)~U?*FWYRWt$x|UoW1>f_}MRq_6&{&&QnxlFX~`*9F1jO42$eLTM7TS9v}DU zhwsl1dYt<|w$As^ezNH1e zrB9ws)Le~roDwAhhw(1PiLG}&5wFXB>*;xNFQ?3fhB6uNurEK5x=&$l_2WM7-TVE# zzP*+7L%64Kz#ckN&q8<S;r~&U!+12*4*!@K0Lvl#~jNQ;r#X4;)=Q zUjY6JbEnu*ZnQJuufluz!CxptJrI3Cj5TdY^{wEm)u3lET2evF-Lazi2PoghJYTl?fio}9ljp#;z{i7K zXl_tFt!=958yM$HOrI7EHaD8N>IsYIHBdHXsBbTPz5(?eGU_w-j#^qd?tJetQ9H}D z3*n}KNRDiW-oATFmY@P!?8L7$HDka9?3J!U{gs$ z>Hhox#uv@0kkwU$k-4#Knx~cX$h_}@%@5^vA83z+KdO;_kJInW6esptWX#M?Kk(K5 zBy-`dA%0wUvCc8^M%^L2nHS#*yz_uJ_hF?1M~tO%tiX|bj2%mjc`n*zmFx12avYaa z`-IS2ct%&y@Npvjk8%?S7jVc{=r7qSxDO~BIM{)M8?Xx$<~+AoFh-@okP~zGgygixlvA}Sr$Wfc23eJ#Flhok zF3`o?8k5$2V;9#^D5uH!-`G_H|AY6G6Y6a3v}C)*TIb?R@tN^pAv*1#vpgg-#x{jy z#{asf)rJ0Gc|84ck+TB$aV@7pH*i}B+|Xck>37MsLTd%v+sZv9yPi|x?7U}tgU?>$ znksbnx{_V+m8KhKFo{L3MaDDq3De=HweClI;QpM+L4M#~#jPZ7Ye(y8JS=Dk(!#RuC`t*gBBXo>Aa=9iCKQCuU->f!T=Ii*+_k!DAG5hGb z?YVLcpDB#}`$jB`)2&Sp%YzU$Z)BbwbTEYLx-eYrVR#l@0?){E5yH%GS!bCFPA ztZk~U?HMP}WoGUNXSN7fJ>1)<_%%)VG?ApMTa=0xj_ z@3)%u&N}~c<(psS9#to z?*GHAANTk1{spss+<%w%FPin^{yV&X*{mOa>?+>>!mJfnp({E?Phda1hjn(gx=cqgVwSP|1&wMmDQ2M3_ zl-}W;b0?nPc}EiSmN^=}`<-*llls%P&ItQ* zP>zjmi|HF1J@KwQD<%*cA8F>?A;&5Mp2vss%NsdIxbKnue8bcY1I7lS^S4jm6C>$5 zZPGP}-5ivztNw1fU^l-MYtohKUje%M?PNb)rBPx=_;d0jlncB*MoeWtE6@C%V4Tsd zO*C`e3}SP6t~b}PLuFZEd1+Y2`*M`2ijeD!*-4%O<0^x9H~7NO_5LI}@z&FyKqm^c zKAjjFsT1Z|oSBh2F}k0gQdRU0rVo8_vK^ntwXZ!_}zTXCZL znhnW9fe-Ns`FF)9;a{~~|5h0PG?!@)Alt#_3^?y-;AZiMaxH%}Or7n0>hEobY5uHH zao}mHJY)4b;Ja7io8}MC)rN6}!C&BxdRDckRHt8X{^vk_xM+I|*N4|Hf%`@EVN^Wz z!5u$DTN6Sg50(S&Z^iNHPlDrL3>@D+HV{WO*VA|IALl;*9{sGk1YQ@_&mWG^cOMJW z&nv@tHeepsJQH-y0Ka~xwzki&KPa9`&~F(Gmo-EC^?h*HMZkR^3~pSae#2mJ*Ii`1 zVDeGsCwvrwZ zwL)wzGTI=|Lv#4qPp)vtwS71H!|X@oTG@bHV;Hac)HuZ#&_W80QrM5tX!3 zjZ0n`Gsdw}yDW93ZF1VmxSWwIN6a3zGI9RsmB}}zuXGe=tW3LQ%*s)>ja`|( zV%*9xcR5#%6H2c$O6e8C`^JF%#12oZtyIV{8}}_1?#r%mt@S)CV|b&*RL&WdTrc|O z50;PMT!gK{&huKC|2$eGSwVMMnzvQvZS%kvpNnzW>H7|=Sr~IaX{;Z98}C%7d0H8p zWd(eB)`ZPk!<++UX`P|DybFw&3$PFj~Kb={!nY4b$nlRN^P=O zrA1e#W4tGGP7}ui@@(epn(|e^V=2ZgPA}&qyR~&2>og_hfc8ysDE0JxTc1c4df*9B z+o-10h)SV1^9=H~l3iUEN1--xU%J-j+!eW|8ni^iXSSi=v15!7=L=NC`_A4u0^{oh zU*{ExE00Y{TKVqG@q0UBMDfPhw%oovQX|0M395edsG>6m?Gf2# zQr(juh5Z2vO?t%=@Sgh`M zEeWt?WBfmj5{~zor$;_>x+gGp54zKZ_a~=%X4R8F(3`lE!JOIAg7GvX`To1+H(b-N z!aL0Gk9zzyYC_EisCNafcLAd!x-FOG9>AzY*$EkA<#fL%zjwL`>p1jo^;h8g zWuo%Qt)lqbYtoa0sfyeSw+%L61un`f|NUU`L(q59b)0m?pbqG-m+_7*M!!7;Jb4H_ zlI6Cx+)D60?{ZODV8c6mjJ>LfF-EyPt!-A7Nhh8iDg_SAQM@-v6er=GQha*??k@{y)$+ zfPLjYl^k_MA#CKTZs7i!zsyU-ICRd%Mk}d>++Y9h{{)yp}mYl+d@0z^Q~32nrjIt|%sel^ZR!Tqz^xN~Lg@RW@|-ZIn=}&^ z=_agqz6F~%x^!GUV>+Q%a$k%xve1RAUbR-NOkyqshr3HnEwlmO63(wjaeY9n5+*w@+srG~jgtR%4>bk@%wicHGnFv#nJYQ|Db-JPXw3UY3A1O|0#PwppV4IwLJ~)zmxtP9HtA?Ia=d%7(c24paG?I7U zu!veK`G{|3fL3vfm=51zO>L}z)QjeWdN&YYy(m&nShEyOKi^pw57o)0#SQChX7h~5xFRkAj$l` z-{*OTOagf6IX&lnKfm{n`ONd|=Xv&Cd+oK>UTg2Q*MdIM?sGH|=FT~erY`6}I>P3I z3%mH^AR`!k-c*V(2H(fp7SI%4F#R z^k5TpwT@dHO`X6E@ISE&c&6^oGa2lw-hjULYHaQ3JNs*Z-VC}+;Cs{oXcMdXdF>x* z&GxQz(bO|vYIx}xv94YN84g{)^QConH4G7^^ML93rP~b5x5&Mqj`Rpy2WZF;TRzel zd*4X?-l@Hjv4taTl8B3nT`;n3tmx@|75N|3~5YUc=zmk`8N6>xHV?yA2nv9AMLb1>}U$0zg@t8$Hr&OolAdh zsL|@3Mc|cQIc|NDQ70K)T|>TO(`~IcyQHDcJV`PZf!1c@$9!y+8l9^ca~=0fr|+&Y zGbdVhMT6mc(lBQ-elCtV`WLm9=TZ{B2X)Q^BqmO+F{1IXq$C3 zs($>d*DAi3l()-7cLvYlvb-Cz z9VM@J)890@yx&^I#IxbBi@;w!kIJG>V@L6)bdAd|%X8b^|QFNf*U8#j5AHz3) zmfRyrpK028BblpkUv|+*hfc{o+=l-eotU&Mb>T=Su5aNS54suhoNQOw@1jotX(65a z-#S;CMuC-a06HJ$emZ>&4fZ+96j>niCG&gYnH_fH^s=HI(=}pJ@iH-sx>RK^XbU>? z4DKD_UBY8b6$QFn*y6Bf4Z|EwPUt5t=p&Vq-jz3|#cY7Re8egW2H=jeO2uDBn3%+8 zH-MJqXPW+Jw?j|j8L~*&1^dvq3v#S)*jHRbeB=p)vikzlg1P?jeA*aY| zlwq>W|18XV_-L5-D$v~FoXJhJX?Kh6Oo?%ywPt_o8pX~HljmE~yV-ve=>4o*zuC_< z(|Ei)7j(EcNogky_*{(sQ#MY;cP~BL|BQ4^AEO0aZwjX`=F+wF8-i^1*oILDb2RbH z3-v;d`#i|}513yLvYq|YDd!|zXFzN0LptX<)Hw%b%n|ri_3cG{9iS`BMNO5^>mlP2u_GueZ-jzCUJu?nvm87}pBmDK zoW~4vxGoVib&F_vIzmihJ~YhPO@|elo7MhAobB6R1fF5t9M{F+N`CcXlUP)U`tu|Q z=%FgEICZZ%5Ae(VWZ&Y^HtOKq&#{G#Sg;s29_tDAk$#wIt0wPAixrtHe;RTtNbfgb z9E8fxl@ZEWPU;NDNk=*T>p4SY{)~6t{)|G4EYnHx3cr*8F}DCG%(K~a&uV49pTAm} z@8|L#^ZcCE%Dn%B)k+zqmP0qVnQ`e!*^3xxT>x4R!@M_L1UGv$`#JcJ@v50GG#c$5p z(XQ1w)5bKLi{7;Epx+9iUJ7St9WQ zekvUiC!ZS*AHFD8vfe;?TYnGz*3I(T+0mc%>$YQA$1@5&$#gAAPSVt?=L64h9M7B% zOyXJBpMZxJp-i7pCCf|FfnKNgbfOP=CJ|>#ROA`ynz?`FoSQynE)S=DhWe?ia?c_&pE7(w13L=q}|GT(x!!hf^lKOHo|{i8*cB`hS|@k z>%#?*haFcrZJAn!ygn~U$<8$Bra6#}?L&;Vg`nNQhe}T7tf69JS`5Z?+KnIBq}xok zA0*9|eQuML+zeUCV&aAn-SV^5iq6S7g*yA~JWD=A$<;c?sN~m6Q}gVBUuM_j+2nbT z^xiB)2G=$zBizgZKhKd}9f--iQTF3Xkk{m?YaLeQILj_zUY+(+v2F>zeg6L8vl+9D zdkQP(L6@&^tmWRtmG&)GhU{BZtNRvzeUf_;{dU8$kbMj7&y+Jglb?cZkxblKF78{@ zsQVVxA^R3JD4!0RtA0Dp(*gb-4*G@;yoh!Jd9p)WBd;eBpM}83BlP!%-fV_F#CAB3 zMWJu)cRQN+t;{=jgZFWtHpJ0n!FL?1N^P=><}PZI0p4e%DMn;sWhXa zo6b~p858YVepig=A3d+|KEEOV^Ex_w$@c)V&i*ol{+82k4zu5t|Lv41wRzK(E_ zQKODwnmmTK{xJ-{bPRI_jbVv8hTWGL!!^$Sr6&k$B#XV>mprD!&H( zr#`(Cye6-k;G4IeRQ81WFo#?zZ`&L#Y+&I2d2O|sdFi-!#rn8^wfS;ING>vDvll@oWosZDxU`%|6Hs`}6bkSMx3`f!;3q0+Z4z9cy_` zj{32+M_bC+%>RKWS=3s5^F!{V%&em;jc!YxUS9E`*IG*Fd^sFXa`=azmq2ConoCs z(MLJvd%C0d(%c$*HVr=SaYoIl5sasVK21!zQ^X}#B+uSyfXsu82>eh}dKC0@^e)Y; zH#PbRLH`w=wPxIpoe|2OfE-66QJgY_DR>FSDr77Y+I@O87Kt2#R*gr(xEHs}@+`?t zzS@jBk6g5+nHw?D{t=#ijAu7#2FAUW{d*++C2>{^zpTw?TP5MYToi0?ZIbZT#EI;c z;HOinzxpycMrMNlxa@mKe>~vhZY9@9(cgrLc%e)tUarMh7R8FVyp*@hR?KOEN~wYC zaW*}4OU&(EQ-!zWPTP*W(amO^psxhUHD!Ok6&+Kc<3tun1FuhfjxA?RdoUMhrNXu14*Y4o?&a>e>%c*m% zFS~BXkqh!ZP3Z>wAC6aaW5xl~gO+ax-7)t6S?)81Jj(^`wp;sSixs2alO*QY20g#G zCSModU!I6^(nR|$)%opGfB6}q&_Y^y_-yNe>q}Yo0m@{4Qe*eCY`b7gH_ZFb$H@0j z3t9h4U`+pFS@%|Qsc;{Oc0=OR)#m2tBx5mXZ<9u6rZ4k3aYwPbS+VLB__u$pSyAJq;4tpvMeLt+`d1sE1Gj~q~olR)~ zy~z8aX@#0udZC{{UE%GxsyMx6{Im5Vop)lo1kDxpqh~B2tNj6<0ZysQp9k2h`*tpxBF1>f{d86SV}Nxs;NRT4 za}nQ5DNmTK69yx7;K+(dOWqwN-H|h9IA0Wz&c{oIX)0iwi9Sq2AM((L&A7i0us;BJ z^9VosQ!8oH7Xr=|_^}W3MRfW;Jli+vN#Hv+J+`l~wRX%N^x^mB*o@UmA8>u&=so7x zQNK6m@tG8DH)ss@95JnQW2`7>eD1mYmqFv6=b9Gnt7!DyhTp#4`K_^i^IH!|u`XMr z($8zl6K7u=BPLqiO0J<;$X*j8hjLyPZ!N57kLVM)DX zez$9;!*~^AeP2-Uk%He`UKb0KM;M)9xQ5M}z6|3hM!#iFPiZmJ|J@}Cdm-8vXxq41 zvIN_#2LEpboQIEz30}b2R$;POh2+}HeIc#Ld>PM9;n|aT7PBplYBm;%1oSD~?JmO9pO z+@}B+(KBv!#x9NV{SJIF1-Q6RL_4*3cAJPzpEq%ZIri$`nQu+mXWl2p+HV71TI9SI z^IKg_u@-rJPX#7jCy7O$VjQ(FX2=^DN<0=o|ZeKl&EC^kpApuPL@~UaJ6J ztRhD4TPRMh(})c2IeS%{l;XR6pl{-2A8@jZ{e(Fc#EHBYkMD?^EmExWe&GLB{2G9p z8sKG1MT75F{I&qz_wd^(#kllQjByzy`vP>qUh9OtwvX>X|ER_P3H(UQwfLRrB|XQu znlTqlN8f9<=q>5cOYQ)SucD3BavQJuX5qIU?~VffTZP62Iw)ZMixZfvf4JRax!G(60Ur_3=?hO~WmOW;&qz@NyQ^J(zO<O4G0ori1Gd3cUG4;QQRFxLlU_@AyZPm~PC%1BYl z{2G-yC1>?~jNeSILjZ@hc<*IN@2m~41&=*x-U<9HVD2{jb1mV8i0)s1qD`?P0sOwzwp#RukzwgYk}%;#+n~iCyUt@;Y2XZL~1eLm#tYT-in>p4$OSo(biW zp{t8~{M0XgFXsk&m9b7YqU_qP<@qN!uFmIr!on#w&!-u0EIM)c(YOb0_Am0nKABwp zvab!a{)@@uT53_(s0#~0vqsls5o5Wkob&8Gt#cnWS+r&I-O`2sCkn=a7DM5GTc`L&d7!8Kg8nJE=64(Mo%1Fo7tDQt>l5ubze~*r z!~8T0YoaViv_?Dgs4z#$s^V+ibJ9d9{SdkUudAoBbwOF>nn)?qV=Q)M)rLE=7Z^k~ z_e)$FkxjT56Oy)gBkJTHr7Le-);0KkRfL$uSd^|3TNdfTxl5RW-_1wATJVhha7Bph z!QYR=^OwV!|EVf}p_Jgf4|Q~@@vm$3!W8xAh3+Da!Lu-LoSXSNXUP6oh5=*hIY(cz zL_d8qS^&=+n~?K4&A3pw_EyG+UY72iDR$kp#kA|Lcghy*m^u1g&`_jnI^J0h9c<$r znpwfv*O9$S{4B=3PRG3IlyR(weIDtV0eYwhJsbrMF&EAW(7`Ow26N(k3L3Z{G{C$# z9RKn5ao))CEk2GtNjqAhKJ`Kt0)R2qo2T=mF&cj{ep-P(7pZYf-pRRb6GUS%vj zYF?kvFut(dI`Q0v=dL>!xQ&OcZsLS-%HP%~ z{yQG<*xU%^><#tXjn9g8&A@+A$;7NExvv^KVbEZn?}B~f*)2@QQ`Rij!#L%Ipe@Xk zYZ=?@nP<6ou8dWYCef2B8RfIQp}v>8J&)z9Z8>$Lh5K|c*E-}=d%WnS4I8v2l|1G5 z{=8Ze+oaxyT4_h}40q1{*wUlGNyr%z*-tnutly60+1QJAWcWZkQoQR}leRy0mh}TM zUQ0jI$E)(0ACqgbdNJd*ywv8p9Le6(b{ z%^l}8N=E05S!te?lA|FKI?Q(~_WS0-7BN9jk1XHs!<_5ul1zBX_FiWKN|B?UG10yb&qyeww{8$yCUVSI_UTQeM1;4Uei?~iIz6N zBjH`N-NLo4JiO1cHrxw*CsKCTeMhxFD#OKi+8>?hBkhl1A83E*DiUVLpbzbm(Fk35 zHEj^r+(};70lTL}?`SZ>9+`oD9G&TO&O$#N=*Kkl!-IarPOL&dG@g3&qx5f*sS5oV zhkig7bS+DC91OpDb)9MSfw~s~4`spzz@+pc41LhF909y564?ih+J{|rEYoN-EmQE# z6!e>Yn2PJvcF9yJG+jq9KJ$7iU&s93^%1V;NZPJEq2PnKNJ(IveNER#c!za~1joVU zLer8rW_KOybfoO6iv`|J00%DM4Bz;zw~Nvfsr&0(Qj9+h^Uev-AN20iuU5S0i|w1z z8f%C(p47%Vt(vIx$wL{7v?`9z_Jvc=oziN;^HW-rGY8L)Yh(Q>puIy{4UeJi z`E8PErwEhb{t@7-M<4z!_aVG%rBLueT+EaE5Y`oOzVh{tP&Ng9_?-wtAKsE_VtLA& zfLr5V4&23_XFqn;jnhc}*imny53&A}-0y=9a*gCTO}ndBifVaJiZReuV4TQ6kMbP- zSVI{1q3=7TYdfjia~)c?LGYuFeI4|Zg*$$Ju%>rPYt&xL)kw3a-`_4VxuT1!S#a3s<=EngKm@mUEFuddlSrg5#yipd+?by+TVe`%|d%8 zfp6%rr)xoHGx76+mp9;-qmjC%t2#FIkQB&)QLy)@x6a3V;GgtP$gg=9rnVji?DZqW zqVY@j`(}(27V5h9K{s{cy%UmT7~eOwbuQ|J4&Z0K&5-fDeg*oqMbR&0TOkHIb`YLf z_%;RKQNNeUO_m(AC&}@jguf8a*dAe-f@=vdIPe=c&UCSD4Zi6De1x;GkL^i*`gYf= zx-?@0E4sAfw4zJL$h!1g*paX^^Xmub(nk9R=)csbQzWAto1jC5`BT9AvW&ldzVG5! zi+-NKuU?Aj(#!srMnCKyKc5p`7yeJE@3}(WrTsGweJvgnX~{9sA5MXh?RLt3FnW8T z8W&-&Mr3}fz1B}&*(XJLn5Tj~vmbo1c*@;*eBNavQ+un zH?8kD>LbmP*7MbPpqzUL* ze@-8uS@QEI4o;7G;dJp2TP{B9;C`F@Z0*76`x;K`uiAa_*{tXU`wp8{KfaL(~7PMpAOBbW}cnuy~pO^mNhxtQgNIM>=wpTqwbE+N+FD z-vJwlxk@kg?NYm^>k4*H*8scc!na#t_naDF_gt9P3cKgjAiL+(AiL+(AiL*OzuluX z)~j|;y=wRT2y(@#+C9vfxd3)gUieD0OR5FUX=S?yvR$@&HpVj_l5F>!+MvYnel_oK zgg0;R{H&E4>c|GW5jt`u?H)Yeh4xp%?wJ!}_pDqgnbHBvoDo{Ny}U^)&5Sjpd}ru# znP3OOZmbR$+cq6~?x3-4MSfcCtEZilcP>ghvhQ^Ckw^2Z%g&tsF6PJ+&^vRXn?&~B z)mp7LTA0t3xm;oQ`=crvear{hSYh;S+7NAFj!4(`XbW}RXz02R;I|LDZq(8!%W5_E z19L$%Z-})tZi%&gdgpy^9dzE~cP^CkQ$7Ga^i)}qTZeJ$Ds#D`4_e((Ypib5X{+1# zn$_(rpVnFlUHvV{-A_ORLA%WXI5&eHE@!)mv~gZ1?6+S`PHSP@?>QpUML6f`V`STD zfc@r%{dUJd`>hgsvz9qJRoxx7$Le;i&K}ImxsSO#wQ2rZIah6zg)p!$`v5=JVxo($ zaWhWw#t7=KM!S>wKRF-cyGYn(3t*cS6&DS#&5B@Sy%5e^3|09?$b$yewkpm`%Q_y; zn9^d_0_gV(O4758u%~hWqY?FQe(t&anZRA`b4`l~Ct+is$H{p)=C{_o7-fO2^I#h?cZ%#!4_eQYl>0o%GQm||u@*Y%tF^n0-n`Lo*LjLv-PFl!k_gFh zX0;y{{rQq;H$E)nc=L8A>LXlE@Q+{RAG^vwcJL4LqpSq~Fh2@;=>g{NEq~jW2Oe^Q zhp5jl#F&tGHdjRY8n;ASXiwhH{Kw#*;}x-Tu9PP)=1w8M#K<{RNn7u1g}$xwCT&LY z5&4CD^a;i{dKLI3N|Z(EMOh?l&^++X9Po`6b1m182;ZmRo7+$a*N_P3aq!H2;2E|X z3p+Qje6x@1N_l{5mY(Yj27AiVmwf`fV)|W-MLbgIHr-X~7O-50S8Q=k(jTtH~E7cb2#fuyZ-Cv~%COf}Pv3ZlIkj z=XD9ObMru-2H3f*Curx+D|g6t?tiTN$Lw5NdD!e+M~Wv0_?*tXj~hPGV&APbRlrce8aB*&nLB#-L$mPr=4tX;hL0H6XQzlTi80@5ozJGl%-o#{6m*`uEjs;yBhPu%(8{<8Gy-or^}st zXOa7w+k|^utZ=74Alzx!3mK;NKZL!8Ild4ZTZ- zG@QkFf3D`n;F;rgi`Zu9eW=x_X*;NY*Rf{CyRoy3?>b&*eti@4uyw^PaT|`nM(g9eBG}BYN%~C9=6^X@&mKrXA^zN)iPl z!^D9-+GyjR2e$hD@UM=BJvv9vvGR9)-Amu~om(2^`=C6^7tjo8+=H^0G($bdCO%OY z5Q$yKM(?lNGy3tm4`7Gw8QoI1ebjq($3&w4gYvz;zn1HL=kVVR-QaAw&bOyP=R2dZ zG#=6B1mV8-ry}bO z@bKTECq_U|3}_4GU|Jir;n|=PtTUPhtql%0OtWjjd-@m1q z{bR_8#i(;n`4G$YDX33tov^3eH2V*K1KzX|_G33W*1WXj$L^PoSlt1;D4mM$2*XQv zKkVLv_WuC6L;pL%#(L*LhMpz<-V`R#TK0o@_g~PbdxE~o?0a~%xki)N!ZRK@yVJTn z;Y!{a(ri(Z$og=snE1MZajBE+l-=@ro19Z2!M_Q5!^3NpJR{7L$h=z@{^)2pYjrfe z0otk5B*?LbSs&~A73O)CF;1~O51{NhsXL=xJIvVt-Wu9Ftu^fr-u$BBFDXI?02AV4{DM!$ISSdxhmPgTVZK&}iWX}n$&N&{khyE9O_I7>;>QAI~@%!y`yLQ z(tW-^;rHRvXy3gR(LTxn+TI^P7HrRWx^AZ?qU)De|E|t8##6UgUXOYY^5m_$J&-4h zD-QSyD@?u*%MbYeRKDN$`|?-Jd2LvP$EP>(d!!<<*3u}1z2`p)$Jpmjau zZ+rQ#eW0K0J(zd5gRfdP54XJd)8UqgvU}Z$WsBWL%vIrc-s8R(GG#I3hzm019>|i* z;baB$;ttSiZj`||NzyqLI!Nqt9S^00ME}393DS6?=U(v634D_mV>Wh52Imaeaa<>9 zGdg;>cJj$H^=1R?N1mzK0{x!ltDxV1iaFj@vBg&#F2-~3n(-Xy7rUS-((>sL$>-A#%aqtcIS^Ppw;u(Tq-OS~=O2a)DLsxoxpx{=<^^|=OV(hjkz2}6aZ|ML{ z9S6L{ppz4Nae%hmDY^Xy-xj^_x-iG@l%l&ze;;cxL1!r~xz5e^jzS($HrAgKr`cocd1PA!%G^74&!RKN&6rCdH`xzT5|#2RXC}eWkr$jlLFDZ1U;QN8J{^ zr9*p-oo9@7uwjbwY*`ON4<8p!IUu^2XT2yw9AMtj4)8E#mt4Oj+am|8lIVgB#{3Qi zM#+&~`LQVF+IeM@DBU2h9qIg`?;U2mPt?VHt~#OQfT2#9CW$hx9r78=DT5sU8Mv5V zi*o2>Um&?YTscecg6v{>7tfP|H+iiGOvn0|)9}jr&1Y(^OrF!Iv5IY}pp3X5`j1oc*4d!@(Dxt`{2vAWr_8WPPnq+= zgz5hOaJQa;Y|1$x#s?sWx`v3J4v)r`o+1i9O?EUpZ4A?Ooz~x z4LVadXrtrx8gm6?&3NccH{rc>=uG1^(auzj#-zQY*zJPOG&(`Vxu7#0h8{&&!Xbl- zDviDi)ptMOe)5fBmi6G_bxR&{zX~3H z^6vZG+rZB+gO|61k59s`n=?e5T9wT6lo9?t(3$oMt%cn}o(&ZZSyE@yLnz|I`d>V70j(Za>N%&JL-t}Eu5#@Ub z|4S;~@hyejXOkj*RhsC=Lt4>jlPn(QoT|q?|Dz$}Y>;s;L&l|C6Kz?|7{^!3`8{2^ z*Mp`o$1=xIOP(ljoC{2%yheX}8X>RWflS#Y$9UDb_JaP7SR75)OUimUaleOWkf8&y zoa<#))gK^s(0W<0{G_^GrVsHG*srda=|lVkUR8A=tLi7PTGfTDs-M6EsxD+z{RFOm zy2iXWGQw!p7+f|f*2uGa9T@90yC@h1xnzkDregFn2YB^N6$Nrz+^dDGZ=7;HbB@|w zki(y9g*qHwka-Mq<30X;&pMyUBGjLDq`>n$)KVP!cz3%RZ+&_d(RiN5b zR@hW4C=Xy$-3NW?1-V|E-&GN9p*?lqvSF4s$hv*7r=DDLpZnV4QEn^jsj0HO5Oy2J zIlZiMjYn(r)VPYXT;Y!FMuU*!Kka1Ry_*3y=9&h`gd*kax1Vh;hmHCv?)i-CCd@b3 z2>oZf#^U)Q%9#T#s81DZl3Q|x&d9YK>Qw1B26d`rS=LMeZF~luihHgDb*e;vJL(+e zrQVU~*|gv>Sw86^ez~aVJ7Pz(gt7KavF#PznH{npx79vFigg~>#@dH6HU;?K!+f*Q zou1^LJ9L#S@PCKa2YfuYxHyYz*JEM(bPcV_f2*w6 z{de&B@9!*hKLY;F8Lln$fyXndJmw3KakOKCI!BO(gFML?D)ri=t_xbdzwLaWphhdT z*d(ndM+)y+4mvPGj>xbb9_h7Z8-3~7{k*!1`&Qu7(fA#b6khcRq4H`Nc=Zo5uU@P2 z>b}%H;MHjVwcyc-;MGF>F9omuh`gE|>5CQ#jrAhBQRYo)q=&poUbUi}|KwNlYAkb7 zg(>{k5he=Ad*6}$PkF8;gpW=AeC!z~3Pg8cq9WsVgvhvIka2H7#tjRRaTd$(D&Fv| zS7qFzD1VhQZihvdalcsdBU#413>o(eRmRc39&Ou|f2-ZE%7FiE{_oJKm#1=Ap>L_QO~w)|Na0t`$*+q z=F*9V%yc;03+IAUO$fM%d#xcdmQq4tXMl~XoeK!WPGAr4de1qUsB2mckmfw z#igmbRIscjOz~?AEraYTpq@8f#5(Ew$}=AHeT^w^^bwD|ZblHl*9ke12c3-ZMCenJZV?4@j*C*=2=FKLy^_?o>#Q1kC->D_g%Z<* zb#z1jjDqfVRvT$A!Wc8>j1%^Mm0nD&K|K!8K%*wf(+OE~t(=3x>Mw!(a6z{WuD!>W z`+X+>uMT>sz+BJsgfYL3vb=Za{qFlewz{?StCS*TosvG3dGvWiKN-WlTGAQ0re#Av zZOaT6u8TM1rDZWE?6XEOiMgHUg~_m(N&p{i4QGrfFo6EJp86K#&z33UJn5?6(0IVe zwLq@@ZQ;BW;y*;+p~EtLHu`>{uK$rf=@YLBi?&QveTe2&D?UV{?waRbfq81VI!`62 z^yn}`_Jd9~fgarv^rw^k+Arp`ed#GBr|q-hViIM}FBQKNJ8_`x4ixN_q5 z*IWZMg0`6(nDO;0gN}o9B6|ew6e4VVnC(7s4 zm0a1$a?aWG-Z@#+)eEV!f2^EO&4L^Nhd_A0$vtJw;<^O&@h;G$i)X=5H}!v>i*zVD zcm`v9@Lj$`U77oNMYntI;@DbONu{L=dm_8bo{PoKu0T*OPb-PoclG4F*dw=1JN$_@-=AoXBqDdNbaAJx+MJ&YX5< z5p!#m{RQPbi#1)-onhCAiCxDuuNg#D9QgQj^wJg|W3|vn;XQq{5q6w2AjPJi)JDsD z$Q@d}ljrL-D(+C0%ve($zm|Pc6+Rv#ub%s49pI3`}HX=T*?bwj}69mtJOWvC`;??#{(bT>IvN~S$B##%~VUv~k zgg1d#^xEVJ|Mu1-Z+E(A3Op#v+TPM!2;|^;g(wUBRcGsn!MEQPO}~oZH=LuYnmXeh zJ-NlUES>>ojB)u4;4PwQ*Xcu9j{C$!-Ea}dxL%Ao&NJjS;(^Sr#$4MR$>>@Lp6ckm zKjSd!C;`kT7&`~>vVFGQqH$!mB#4Q@cyi~VYkdO#DjXr=p9Z|fDlx0FSSr;G5e4rG z5&QBImwSso+QU8JYW&tq)(`zLVv>Az9pBp}^MrYT+c2OkaRPI-mPCt5Jf9wzEt+&v z!i09fa1&sX!W=zqzmdF0fj^C=Dt{`sGZqvBpe2g*;FfCbs2j z9Zl8HVL3drhb`~4~H5)brW{Q^2H*Ylj81}4p- z?1f#%v)G~UcA?$RNq@#jiT&fjaYZ8Pr+HRjl#zr7uxX7r(t4U=M|of z4HxTc8l5sTD{GB~n-orOInv$fdx;8mJb$8~bC&W7XY7`9-vzXVu zUG~Wlt8LF^DX|92irm3igOq2*=s(Zo{|@ytmkZmsN<)>rO^^j0F^s1JnaDol-J^g< z#83yY`VSjL&oM3Z0DM~n+{p0{jY^Duxy{`Qe2g=mAyvyT?$&i@t^$nT28@N8s;28C z<)35h7^95wT>L|~T?@Dp^5Vp{>84$Osa^I&e)=`yKn;CbQd{b{E@rHHBA+qMf@8(_ z3Xwg9t;dJR{&{xB*^KIYWl_Bpv3_q~$8Q;K#mmZc7L=^&$mG!z-_&Lp1Fu6AU$kG(#V^A2RcOd~S? zXyjxd-^0w~A}E!cSTvo<5dfOOF!X9}>4R zor!)rn<}zz2c3PN&w{w_xfIuvM|5Y72Ch4Va(;Lm@TIFT%r21(e#XtK1}=5u>&-Re zYs{{|6LGm?n(OSqC+l!lR>gH`J#r3o#$4<`-E(dhi=0tnmPUWe`6bI%nsc%ls{k^3 z@yOZ6Aw2hGaPqvxDqQ<q#xuA?7T3G|oI_)i_~SVQ_@AKPObJ=XUn zc|BU`za;xcRG^O|(MQtU5!}xJt(kEj#N|&_Tn6zNk7q*$;n9dXqWY9rc-)77Se0kg zqYiMMWIQYFaDV4iiScpc-qu&;r|YWnKf$=!C4-$lf<`IQIX6m}xW20o7ug2A$mX}Y z-l?tNukF-j{G2Oaa%4A049z@`Zy9HX_%VQorax9=W*KcA>WX>Lz4DSpmacbNEA3Ez zKOMFcWeeBR0gHEz)*$XPd*c2%R!E0v_`I19mU^4Vtk3mAH|=QF14@EA&)4 zvnL?$dz}ZK@I0G(b1q=&xX#hEFh|7a$niBq4|MMW!ohZlW2e^W+zfj79(`&m{06Ju zyeJR!L);YV)a6zVpuJMIX{0uNdcB&|BH+>YcZidmjt% ze*JV&+AQawGPo9k_N?K_i#o0oO_OoWTw%QCS=@}v%nyvY&@7bs!4NV(gsJ=~P$sD~ z#lER=n@UMrtaoK^pnx%cbmfjUVuWLDn@YdZh03+0w*%nWMZLgbzg#W5Prk1T-uILY ze4c$T?(eD{NV7jwd4CR`5qH|)`~?`;ry?mUvs&ZGY#wrb#(?=0vMM*Czkjlh5&E2a zq#AX83|Djv@?*@P_f~-xH))mk_&kWGkwH0zGPBA%9V+i&&Wf{xcUtg!N5{Po`cE0{ zI>_7Opoei%loR$__A>BMI(R4zJQSQeN1?x?dlkMe3|IOa9FLy?H;k3Ye#HADavYVIi^)jYAi0s$dz^UPA6l4DX}>0fZu4W%69B6qk zMWa^H`HQu=8J*Y3^=3qm{7_y#ryKUwdV`^MmdP2X%pi&;^1#%C!|o z;82$JRZ+T&v6OZwF~SGaJ z{vJ@q&~&?wz1B_9LL%&trDZvwjslqr#DZSTk+ks za@}LYZ6@l(c&~TK4A`7b*q(W?L8rqO&4mqqO9O0E*#=kQHApDe;JFgB;WH)wh@2mT z`Kyjx#hB_=d$&idD}G_JjrKBQ+J|k;dn9r9)8;f>>vz}RMfxd@7ESagEM`1e?QNM! zpm*44GToHCFwMreI6=B8x*9SBbA5(N+tj--ug~b^oH>*wJom&oi}AyGR*Jp}U4UiT)ed*CAAj&Dc3?VvA;QEg*u=BW;n`5| zkesjlYK5LkGzvWtj-f-KmogqJU~pi}n2Vq-X;&7l-}6gkBG&c6FI*oPO<2L0WN z6!=Sv0JjnCC4?z!yup4?RO=7zryRRl?JHyOu&vN`NFO@29pY-GN1+eKR5&+(D#mdN z#&`0?xC){9W%7P8*`|~84Qu4HWjT`M8of35kx9FknR7$NaC&6_7*78O$M8pAGKL+O z8AHZx9IB4v?P~s&%Z){F92mcBJI0Rqsrr(!nDRe37Gr~BaY=3*Wej?kXc~GUi*jR` zn?mECu7eF*u!8|J)T#nQL_A?e>`S zZWi9}LeIMAXyBPn(C+t4F)fEQ!doM6j`5Zjeh9m1+|)_ zt}cAD9{qP+?Z|fajg?_H_5~(-VDr~Q*LH2Kt#h4Oy2c|JTPmZ(sZ{XI$|R9>jAId} z#LZ)li@llzr=EFlaWBWMl#+}c+KHHB^+ujGOaxyB_v3O_igoKWiJp42FUQGYt^~kQ z&72nzN)-X&oTy;{l3`~cS9 zN~PTMb%Ve3y^K4gWj-By8FRAeo6UyG9R@j;x?Y%uf!|6%v&`pO0)EQ_zu7DNzC7?7 zePkYyWseStGV_ zpSn?Fi5n*jhSbr`b*sQXwXjKQp@;4KSd`W-TV?*F#FoWe9EbY?+dtRnJvBmX<9a*u z#Be<)dr3lE8F-jwTmx?h9qY6@Bk7v)n|0dc0eq5lkx!ERi)+XyNpcP&!pPi8W#W#E zAPv`RlDoJT^6W*vNtXGhT9fRYuGP8HFc0uM(hJvr&uVpcwo5uZ3t2r(x+5b=FJ>K5 z=UeV&@*Uojr+0vl(uO2MN6^VRIsSxlC*%fTljDyO&KZEQdPKgk#QM}Og~`RB13m4CDn_-AnJvfrzDGli`8Q7@45je%#1M0W<`_ZP*9CJF5w zxj}f3ZWLbTt-2NV%#j!+u45Z?);TGT@yw^g`I_&iNXnev{<`qe4&&PSVKsl;1?b(h zv*bCSG7Il?KyK02q7A@%+GMn2I$!6RZ-=~Y(S`E1*SSs-@6RhU$1$EP*DF>=II=I^ z!|qyXQ0}M8&yCK>u*dYU#dh}wo*}&*TQ1gdPL}new}dye|7S2Kv;PwMKNtOHuH3ok z&yjfa{VL%t#C?pU#GX8|!eJZS@4_&(-!~}z9vjkc*kJ2IWp5+qp2R`2chXnL-l*`e zmc9BKMfP6A?+t_SdqW6*ZwSFJ%G+-E$MIXN;`b@w_skMi@B9+{E)(6E8{{}O$~-j~ z*QB#;pp`R26gt~E$}wJEvoS)RbFCWhwo3!?ZKI5f7UMmtKA?jh>(^YABbkIRvs$dv zsq|N@Rq)fGRq#Wbt&rcr7HC5|96RV5c8(v%cP8MW?^iMEvxO`5T_x9-=;HGinS-2j z1@#wPGj=t{+WJq#yHUma_{-p(Fb(cUqZmks>7bu)N{6ddx$|Xo_~UAY4*PT3Y5fJj zYi^1#S!aq;`g+qZi?X5Pomx3w_1s#plWS?yMJZ#) z6<;gkc>G+RWyN>J*9ti%GjqgE+FETMg|bZsVPb!CC7nx$IgEW>z`k?b@x1{yGHIy9 zAO`eQF;`zfO=&EXp*|6jk+bzIYYnXnz()I zN;B7?ja%!@cFEvmOc2?=8}BhYnJ;FHkbO)R=tW$mUMz}&p1E17H6Pd7?JgvDkar;x?PagMSa*g{oG3~ds8x7Cp>u(8kY?-^9N#&)@;I|c0;)V1J?x)S=jDN%W!@|p132dyu( zYcS^k#zs|l3)+R;A5Ma9O1RrqTnv_rgZ0hmdY_%|dvvPiG%G}U$Onw4gbhs!@r_R$EAM=|@TQG7iJgBT&=3CD%U z6&Qm3{hmfl-^7d~QHzY}V+U?Oy~Y(Qk_LIA!38 z^MPjw*I(3_#&MUyNpMYD9;1kUoQLA&kAq;6*9la9By2_CNBR|g2QvMGuS@L+lf6S(% zKX4aK5M_mo@jU^w03DaUYK-%$gDo5bTX@fZ%5lNG39yChVGGa2doQ3a>LqMrp;{kx zqNFfkGG1Xlk92b=)K*gU-N9>mTS9b=nUAZs(jdHT!FZ-=6dHRwgs)>R$D@=P(xvYj zReIcovKt1`qb}sxxIxc$ay{TO>lI(+19n!O--141&py`g14jR^z#nzCBgcl^pNRQ0 z=mR!vyzrVQ3orLfs27ibeyP(YPuOnGmi@zmeqcc#u#WHIyBOvb<6fNAe-5^E2W)=( z@j33d7mA5N$ST;w#ZqZn(BJEk1(*1Hy*fdJ$9+T*B>6clE2q*+24z>vyB@=e7?T;Z}$0WR(-x!T*l|?3)Saq7w~3% zNAdZx{z>uqD$+a3iiasaUm4O*ujunt6z(Vs`g|3c`hC7w9`yN=%R_v=d|_f+(G`8Z zhTC12_4yh;$meS~#@Bq&=Zo+LeZGo@DL!9Gfcr{5Uq!0V*B2N4xQ5$_2d*h!P<_4} zp9Ursg!p`gzB}0G>kHZEYxos?zRrRUC#yaZ^&viAZH$>2qr@a7Ux%swT=gM7U&5rk zBdI=L8}W_+FOna`(3|9aMbbZHkIWBj>uN+AS=>7x`oV#6RmuZ60u;Th4_5w@xJZUjbG~X^@o4N=c`g`Sk1Onf3LX)#otSAZ~Dy_eULI`AEade;UV3b zCcyVC)!%ER>hHyIrvHSvN*U+Ws}!HFBs@37{?Gb+RfiAs`I5pFpD)hkL3(<}sQ7$U zk9J@lRD8ZB4)Xb`8RE$7FepA>jB|W^MW|m#vj2o6*3lPHp{IfVTql)s1&_-v#pAN! z-I-e}#JZ#Z1YfT5pf6X%*Z1YRM)e&Teg$8y4TF5SUc`GrKdzst^Wj*~pKlP3J`J(W zYeIar{&>+>Ys5G9)%xR?_-cJ|8DFh02Kj20e1)%8Wr(j<$$!CDtMVW4)vCOLuhtj9 zQ_xqdNcGiP72>O9G!FFDa;d&r-~R`Ewa$GFU#)jTe6=MG zkk3}dAfK%=+#g>)kZzZ%K3lA>6wkkZ1;4FkjUzKxr`Y5j@)-fW?8nxu`fahV391c# z@j3Mz=;|G+-xhIUD6_ePJQzFZ{o`^j6s11KR;IsC2YtiK(%dN_K3tZIK3pUI%RXG+ zk`!D{xPl*7<_g7+i+n{~1pT-!!b}>*cpId+IQFv(-$jCU7oeZ|5I?Cgs7Lvp`dwTc z?R+^Gj_MnR`EHWpbEV{EGKBbbRnt$5_59i94*Fi1RJb}pLyRdlJ;bl86YZ2}b2DUm zQvJGEwvy*NoIKm3liTo_qt=Me^l%8fj(V_2l;f_Lwve|W3+0JPgk{8 zp-J}LfpJpKbb^K>6q<9Q%)op^a{f)`4T4Up`g2`_z6WvHA@jUmwp$H-{r+73<*M%= z;QCaB`^Dw`{(u}adF@VborH9)h2H9oQA!(b@E~D-UoqOHa z@%;+*4VoUyTz{AP2IcA|+vp$Ep-r>rgvT%9-q#$F=;FQ<_2EsCw`EEi@oH+?P2L}I zZoxC7loU68cl}+I%Y_Y&N4T!V9Fw5KS-j4J4w4kyt9^NzEE^Z9Yi1>|$Eh;*~HFzSPywtL1%=1plMU6`QaVvWd2rUiBHH zFW7d-`_R2y(jDn&9qeKH8Sy>Ye?elb6h~R1x(`L#Et1!Xbnfglhm>i9w;MVi{KoP1!^CT@uk2_anGB5$t>F9XENE zoKFe<@2LIuDC=m@&4p1}&!~zcOoRQE2Ip}4rnIpoN}-MFXq7g0+~j@mOK5}n^MbSi z9{t9&@xihy(?)~1ls0y%F&lq%r7_nedV=dx@|bItyw`!TqG$9nHLn);Fl4{T1pj7~ zRcXXF#!*`@x_{jk5Br^MLcUVYS7~--Gp}7+yePYbW-fqcE+}KUahd9mFvwr6CH$Mw z%*?Q_rkUzxm(q;PFDW-)J+*nsTeR#qZA0F;a=BmDME5C*>T(S1H%;5V5 z)fcX25I;Al{4DQ158~&;RSG{7_UY4? ztHH8`aLDW2uz!kGKb}x|z_tHkwZ8f)MIQX0=nJ>!PycuL!o61cf4(nVP31q&7p_>Q zE4{q`wn^O&P;9RQu!Ug@{2G4(? z^iDXAR4O!o>ax6(Ec4Fv3t!DU`zu3u=fBYp?zaDeA6(!6k{?{H>Mt~=?7!v*XZjL9 zxT-;ZaA_g^{_Y?@xE9q9E>!N`{$=`1_*cu_g35t%_kY?K?gkad@3{Z_eBrkL6MW$w zTKbRs!rgiqU%0}h|GU0$A6!uIe&1#AemP&b%~$Y+`?|Ea1+wR>XmRV(fwcI4nm-)J zz6jsj_2vmhsz2NSn}lZ{RDU=j8SJ5cJ(R^kpN)r?4)kN8UmVA=L8F)L0OGGW#2-%j zfBtY6{ox8V;-u^kw|<~MT#Wnw`NRER?GJYa8z*a!jkBrZ$~I2WAMPirKU`3UdpAru z>s+k*!%>gpnmO0MH%X36U6`^4e^KWHteaGS7^5oVf_`x(b$vbfZg8!d?{a;eaxl2Q z9`t(&u73yn@Nh-H&KUHW)2Tjl#D{&5&)he`S4Jql@a?~T1-||fpSe!e&#Op=K{+$+ z7$M@XB=2sl`0w+X+i)45xxu z`{GnROpe=`;OG384m?)Mc&w>w)OgJDeE8ZlTRmtg3iBajJ(ct-bK>!Gbv{Jf9beOL zP8aGor|SRon+y8P4aQXz__!v-XKsIazy2S9?fjWh^z_AG-bvtklki)k6o0sYR`k4D zuK2^X-3U1ho0k4Vzb+5)AF?{ig8p!Y6L5{T9fNrDxTc>s$(I6nj2pyb@5=M4GM+7i zcx;F|ra}Iqk6C^BK>q5Bf$na^+^|BK8~S3b-MJdET6bV-kC1XcWQ@$dA(OiYJbUp= zo|&e}&zNJqZAiWOlII_M$+sIW|I7`TFZ+I!+SYKfXmDGlgTCSQfN#f4yD}W9SAM3! zymXW~BBV>-3Elh1#n>Ah&*e|oRW;>3_|l>?JwHFl_|c0?etTNZ!8yj@+x}4N>8FQ& zbXr$&JNWySwHdv+o+lm=>zXy9h5D!UXECRk7n9G~rXmAwk!65pcfDDLRfU7Tl!T=n z^Nn2Iq~J2wRF!YtpHwQOD)Znq`N23j0{A2$Rx@v9>h;%pb?+*5VBVS-+D`}G6+5Q( z@LmY3{C$eZ`7i}?DEJQZmA56=n=f9!q+IKO7y4QRp9S?;u5$|wW9V`}0C2n!c!n?~ z%n%J487ASMa`JlF*HG6prH48ZV~u`{d&0P0BYM^gv5jzs=8Or#8Z0BcY_ku%n=r%C zFzgNL`tklMP0ojXM%u9<-)%$x@&0691Mbx3sXZzD9{uebf-y$9>p$4_S2~sruOJ7ru*!@`D>^5PWKpctMfah^^5Ek1|MWzSIUbu=F9bw{wcbK zsTcd!CX`r{gr^Al%vbe?Fr;o)@OP2Vwtl^Sh4R(mjlvtCFY4#og_ZDM|RSj}OyM}41hbq;BC zE(vqMV7}3(II?rbOQnqMYG)ip;3w}?ycafd?2O{#ESEmgQz%(K4Epr!)`*0u>=S;3 zPdIYCsm(dwBV(53&;NW%Poe04_q>LC2+H*^ZU1#v$aQ7N_0K}Ce;acB*O2SJkn7yA z{_C2M>rElodqS==!~3sq54rw*$aQf<|Me3g*Ucf<&kyOpek0`iYF+>Jw2exn3M{y*A|fwUFxrA=f8Eu3w7ozc$D8 zU%wu5eIVreWXScp*#7H}Law!@kg*QA{&vXqZ$qyC8ggA37eePD*KdYgw}o8ygr75Awx>VGX@Y!W&LpU3KvJgMnuP4_?i zZV+CBHq2|DtM{ILN!y@L4f7fg>%GG_7`?FTdkj)I{pWAiOM35!4Ut}vQ+0D^dQyXB zx53--8`0BoO!9VOJ~N~mFh6RySasr5%BiPr>KLo>I`Ew#H4^1vTja7IYrLILNj;s% zhIms}Jbsg0_7dL1f9FdqdqOEYronafO(`pCl>4z-+^@vFN4fto?`v_tO09$UPvZV5 z^?R+i5N$iORW~c&hskYJ1@C_x=3S5L?xSH1%J*U3^Epz_`KeNm@_m^13zyXM#r^92 z*l_QKC#0SW9`*jm;oiXA+NMCGdjC?m_usU-o(kFQcmv76%`H-oeuG}Y-(;h= z<3ZdXHp=&mc}_o+l^u7w?*-w#Hp(^A@6)-_AbZs=kTk?JB}#4lO#?t zU;4#&y3O7f@Vp7XpW>aANX(6(lMNQkOD|1r$iW<4m>>#BS81TH*`PPlSKI5;doYh~ zH^_9R^UJ69eR>g=;X4aEE~)FpQh`x5R{+aPUo()NRy@rlcQ84QDy;nm{*K!Hxn<%(EK`Uk2c7`!(; z)MA|^P8}5?V;F1kz93cQUrkyOjHhn(Ck+wX*TQaW&JbSaqGEl8;q()OE>R(sa?Q2* zUxb(C0gXEXTMRmU26`^nS434+elmV@xPDIml?aRn=AV<8vE*9{F7d z^h|3}TGm5CDXWHU!80MB0Ph#YaC!G{OR-_=+rXL)@wvp(NFa~jQdSq2Jdb!EScO> z^n%e_zf?3l^i%ys{?qc?Tk-5ogEv^#_b|#vp=_T1Vp$K%e(LBc(u7|u`ru`eKH6w@($`qidyxkA0ekW1xw4k7zi8vLC%4c&2a2G+B42E-W6K z+#PJ=uc&A6nsd(*Z3Ft*Vki5^Mjb(<(4fGlN403NpoC7}vmf-t@Wz8U1zHA@y z8^f_$@;-7298((pbQw4v_zF0_j6Md#a#{NLljQwA+Tio2LDTD^9Zi>`k6XVXeN4Fw zeUK)$%WDmZe%g)Y7Xr_4Z84N4FWR8PCGU9DLHbeXCc#cR>b(rzjQwZR%`S~MS{^S) zPjI}P@t2NO_&<|ohHJgY`!1#3_f40=akTHB2*(3jZ_8!ixal(Z*!>l7gsx8zj-Ols zjt>FHuEB7;qxClQh0v|p(G+}VxhBz>`jAB5NcsZG@9YYJ%QpzFOJf8M^yQ-8E#WJ> zg51ppU!@G@tCL#qGPLt6$XywiamqV``O4kb&sXHBZv2=__Z;|Y=yeKT$=`vej%bJa z7pU*w1-_aS!dJhN`6@}~t6zT6&sQmz;j6p*2JjX4U2hR3?nH);#`|5eh7klM-3ikQB zQ29ih82kPqdGqR*@z?-d+!p3N-FqpI{W-Ru$AYl5_kLqu|N3xLhk5t+4wQRQahJmI zhp&L)are;Ak5R$Br=X%e@L8Zv!kl!0YNe18C#L-hSFRgYvT~ZEOc^e5lff z{GB|u{~vE(9v?-KJzhPNV~(8U4o4>8N`l-8WKc{e$O=KCU_fM10;n6nD=3%fW>C>U z(4{4SqJ9bJ*Uil8Zq(q)e%G&w?!lqEpzHZnNkrWw146ix3CH~2tE!&vp6SVf>+g?z zGBaIW_3B;q-m6!y5?#+-(qE(MsVv1)S^Bt3ktNlbr({{Gyu@TlU}kc9H*c?wvm(r&<2{LZe+BpkXL0PJPzn7N z`uTK-q=6s$Lilf0!6ehN0+%_(^T^v)9K@39hz_jCS~(@lyijr|&KX%0P#o z3^16P41CVp;~7h@L0<;?^#JqVbzqk1*l@9DehL;dM4CPvgr+Y5O&$I;O%9V@hVh-hRh-!rBHzWTd1^Y-rm zjo($#cpt@A3dPsoJPN)XI`~@Whc9g7;ce^_Wg4fr$~lc4J{qS`8ZTGDjPFsn0cL!6 zz6RzLfH~E*khfn4Fjr{Sz+}p|2>+K+q!`;5b7E$1+d$_v6X#Vr)N2*Zn12A{Vvm=VYBVyyL=^>$+aq zR-NI}Hy3)gtvtI1J;wpIOw-mE{`I{BXEAwa)S&>3MAH;)9N z(K~>f8h_l}V3Kygm^<%cI^)^f3!RmxMf-Np7uzO@v{p}z4z4z-aD_VKBK(~NT&)8c ze1Xd#eGhcTx5fdkU-S0WVVFCw@bsT3Pp49ze!ElQ=^7oLzUP9Lr?E{JZ!_PgH&R_o zE-*Q)@yTH-mBZUE1nRo8e!8wkrR!z|fmyBVs(OG~)PY$~*G&k3nd!PQ7Xo$NSwCG@ zqtbOlbYS+^b-N<9x=!w+gTvL~(`iYrm;ktvC|nj5T=-rmhfD3Z)u{Zo%U$}oRQqjt zJ>c?0m)dVjpz)A>QCvSqi~DS{Zc)ioQi2d41csTvzw=wb8EsU4c5Us~erSxhv5B#x@lyyC=h_ z#2*}8ik+snX0GYdx8qiH_05jEtE=ZVv!)}!j;r(G0{ClAm#!Um7-?4QN3&pY03H6> z(gXi6dLYe+S<30s`Uas|{-Lmp=z)KJ5)AXqQk)+Q-$ez&VEH*=*kYDWd$cf=>)@f) z^E1NmXR~y~4~Cm`VA%h2!tkA0s`G`VDLY`z~eBwaH!%i3LKAHq#Iz2%8v@NOpl0Lu|5~(a$!v=d?%|QR?1vk z`*yBis^ag~Vax*c%e5Y+=T`O;X^iBYk?J+7f7JRg$D@gp)XDmAlt-fv>p&mYb#@cm z$>8miK~JZt{4`oSMXmQlK}zyy;vg(Oa#e&B>-Rh2IKmIddim2oiPmC-bf!~F>(6y~ zzOD0TnnaayLr{h66po&`lg&7Zy2=u7TxZg!Bg(XZu`b9k(fKSDn0$ztX9( z$LhcytLrX~zO%FEIQqZN1;o)c>*dBy?RtrA&hs{(`gl6gRnf`#$YzvzI+619+D?t_ zQP;tFT5WsSRJO-Goq;^SWuGYcF8@<5CPvX&OQPOiAS|0t>8pxwtI(}vzeK|^6-3yxB z+eex#?gdT0HV3E4r{+MK%0I_$p3% z@myfO5Vle03ss*}@`Yr$e&dg$fPA6g`Vn@dz+ZR!mkZA6?_aXDKZW{6pM{g^d7)Y#0{iIXe3tBs+b6rG zozv|3ZNc9Vu0j=D_@0N$D!yyiz=d)76xW1vdTTDiltlR-VSF9n0-F2aqIXGv{FyFz zbI*5q_xj<;Cl6`o*jYunuU+B3Jxyxs}VkiGu8zvhgr`Dzv;o^5h@1hb#!2U(-$1CNXTJWdj&nK1Sr?`1sx*6c#(-c(;Z4R2356S($Y^jrHy z)!ILiw|@a}waaf$Rfc1+F^St~Nv;u`Mk3p@r!-XW*$-AdXEbDc_5)RLQTp-qQyn7~ zRWah&Gy3^_>KO4175|Dl{7cU0=UQiQ{uNcUJ$KsA&Kx0ng4-Ng-|ND<5URIs4Wds~ zv2}%}d5O~JFy{7UjHcUwrZydV{_}Jo-Y#?#TYvv_pxn#!lwl||CUSZvy8d`tiI3~a zt zsrZ*l zPxsk&=sgUtCQ1WO2ihj|zXwxbW#G z;P2nIYxx`7e9GIX^~j3>Ff%=}Lj^Owhj9Drky4c&scP?eZ4V34?!&dfI{&Vbl%M4> zB&_F!Yy5VfFB+e{mD{nUD*3#>y|3%NeoXF`AZM3U`}_(|o=TKvx2w)uEEeti?qd7) z{(Lx1g}YDS_fPrxrC|H=*R<=$o%r{KqtB<(w;<5PwQ;^z-N;z!>WnjeJcRraj{&!3Z|Z7|Ls=QBNAKex~+ z>ge6grxboi-G;jNLN~UpKplRw=CbyCX3%i5=e1Q-t*!MZd$!Sk zJl;L;y>v2AUOwS%)HeEa0WdQgee21#GC$sTviE-B zPm+<%$x_Klt(`6z1Lb4J$)4mx*|Y4^`1Q$B4)k3)j>!Y^X&d}y0k0MTucFOVB5d4Q zBijUg-*Wg#&AugtF(Uv*W#95A;pp>Z$?AurX*xJE^njzE1Vc=U)b^uaew7Xk%|HH( zFkF)&9r!U&pVkS1aJ<_C9C~@Fw*-Mj*IvClMS2CsK>G&UJPS6?_SuC_xt&3kkN?7t zYJC>(Y7heL!>xYs>g9O;B%7=@MSAGRo^7)79|LW&yZvDc*o*8NT)uUN?vbWQB|30n z8#P=rRB$!&GabL^J6yVFIdtKQPnAaX0L>>k#-pdxUtsSPJ`&# zPsoHxA<9|Br+|j%z1}1xHj+Sj_PP^FjD`J{?8@gjDHCW-w`}e66xT%l+`pzlSC`i} zUO9~Sg=#!C+{5Ahk5$h!IEojfG?^x$z1hnT^d)Zvx?nxFRKnI5tY3+>D>0^y`oX3n z>joHen$hQT9sZo3(GC_fKYyIHSNn;71iUYdQ~O;>uF-AUSg*hAe0QA5dkwtH{H{1x z3*b`ErxFO(>(u5h%;R%SjA1qy&J*iz%X;s;k?AfRQyp9T+i`#W!D4F-@O!PF&g(8` zp`N!_`=0OeJSWXuML}|^#$;g0p|8*Sie$n^az-Oz&+T#6v^bG+SG`i+f z`WjpvFn>{p#v5V$GNaEYqcYc>Pxc6JulC8F1v*v4spA33uD4nPd<6}Smvb6BD2)@T zZ*77;p5k@9stwH7)YJ0|j%$1#pPru!zgPC4=hZ$>5pS>7^SgjfZ_;@%pa1b5=3(da zsD$^r-|N!ahqrKgC2$@E{>+x`!j%>VzyG`k9aqlssOO!mGw<%s6-Ds&YX21H{XjU$ z8E+sHR543st~P^o8P@3s9!gu$5JF0H+teAPbI@kI!KB~EG=p@4_AzKhjUjj+-$9!< zg&6%l9yUl{!SjlT2GToKK8D{Pc*7v!y*YX|uD`r}2=AWh^ybp{E(?-+4Ae8&E}$Pb z%AHon$n;D0$(!Jk>E|zFb!guhwe;z(rq9c~y;^^uJfy{GdGqU*fEcreH=l7UyxE&P zcX^#S>$gsv=j+6|AnU{$ci+~DyWN571h&C-!Y13LDx0{}t>^?>5S?&~TiL5r%f>8s z&pJW9S2@+)vredJ>3;pnQQ-v`NZQF}&iam}r+24&#-rlBfle^n`riWc{H$DO5$$d}1j|Ez8%{OzFpn}+_paQEnlCubhAET|Gu+DrZ&y`MCa7q`gF0i zck5H`zXR4M&Ai%Lds?3YWN}L{S;VsodUQO}s*yz>9S^kz(y=>Pe799!7P(EY%nRhG zo{za7emekvrl;a0jQ>^`$cpi?l{;lz1e48|ThZRoU7NS~ug&KIeK-wmrB=<_TnB4& zU3Y8qhStEfd54Y<_rE^`tbrQZKG3Sj8p>)5&)NBmw^Q%=m9=Wt?mBtTZ!!G7-=KxP zyYtX2|b zQ@w}_Xn5*kOW%0vR7>yT0$DxG@tYPl$GrvyEArG^{X|NiL<7k^BaprRvUsEgW911h zIgX%*n;R~8lRo9|spA3fwfNJQ#RLA_qKOC8eb&R7_d4EQn`@)Mgt37U7r-y#xi+=k z(va;-CD=q~2@wvNgoH!83?_FA_(JksO>z!T=ps^G%I{aAci0=^t85rUH4u+xFUc5s zo;6O);|G%Pr_g2HCT@xVQTtqsI%#@C$4FF?8$4+|DVa(aU<~%ywi7ffoFN4Ra!Q; zz=O0eD;7Lwhle`x9`d&F#8Wm~@GPGzcoy+G_W8u*t_dS0X(Z9zd_DAmcF(W^Pb=VV zS$2V^G(+&XZxlVH!vs&u2(xo}w&2N`C3tK@1y9*9k=~n8U?L@p@vIGuogl=!8^HgR z_w*-~lIq&aQ?@o;FM8;`iO~1*#TE(sE`z?Y4u2W+js3Pl|2S?y|DmL$h~K?{b7}>g zJqYv2j5Jl50BZ#)o{T4)pFt4ZL?9*o_;dX2JiurYfbN&3 zY&G!lT8E3CMF8LaC{tC=%mR-sy};8lg9P9}48eOPMEk;7LU}3P#X3+Z-wn7N0nf;F z?0Zuj{D?>zZJC~u6Q_ufk0 z3c-my^8(&`4E*-~XuL1D!Ja=|D7S&k=HDumr^9b*-f9M(|0MDG(Zx#{>w54;}*=5RKN?d#kOd`+^+MBI~*c@ycG2fT?iG@kaB zJj?D4$)@*$Kzm0fnTVfvUxxJwdSZ+vfsS_i_hCJjMOj95S@ru zylXI9Xs|DAWcM}~4J7>*wvzJq(@4n-klTtoN%_(=Msu8pEgkO-g*iL|bg;qaP&P&g z%I2^F=VaiCb$f_35cuL6c;`0Y4V2A9m=D772+$bsNGi<$8oyFNVORuuaqhJJlNg>d;x28tibNu`t)|7Pdcf`XK(w?0Hso!;S+ea7TTM< zQ?{DDgrVX{kD$ngR2iv3CbeppKmTrS+&0{XZ$N(*xW!aN`8mPqehq4JO* zl-I-%3gbKzr*D#i+w{xck~M(aL?QW5nlaVg*j4dy!9|>t;MxFqs)4pR{#&Z}JKB|x z!?V=@(^tTIYCeh-m~JkOXZ9uDA^bmtRHqTa-4I9b`K9BQ#wm9c32{tbZ|?QeZ|{}QA)d+ z&~B_>yN`G~5~;MqbKArH+U@7<8mvmY524*aow>Zj=K}Pur+yr?Pv1X~zVkHn6T{!3 zd%p1A41kN6nY>Sf&ow6YdCw&#`=IB1V>VjYdN-Lcy`zj9?|Rh4d3OqHdpmvyJuU0v z{U3XCUb^f}%EG&%K>i;?U4ZNMolNJWoGit=Qo#-wk|BJEZ(o;IB4%&pbJT zZPJf=OE!T&9Zavb+y?Ur=~l1S1<|W@rtd+oE+Wz<3)xpWOmJ@NM?Ahe!@y?xC(a4x zdTHIwV1v#ETXYuKq&IgO**h)#-qu#5kZlRY{U_p@E|3ZMKaE)2sJF~SwBz^uee8}bA%sYRfa|wF z@8`-Q4fd=?SWkzN@=Cnx75=h9*u7I`Xoos^gx?)q>40B;_b%ll{M-y{zkhB?V)b;7 zyl1J#e0d1Byvjr#k9UlMOl4Tsv-YIxq!~ifFogJ8)JVd0v0p52Fc9^>+g_Kxf4Z0in zZP)jtJQKd3fH9W?kG)oqD1ltW{9*0gYyM%5u4({VvEl&W73Q-L*8F2j;N4KLPe2b< zzF*m2{Pz^FAfx@{@07fYAsnI;Rf(*B#2qyL2CXQuDp3I9LJDs4CoI;MK-^`t!y#j>rYztA}`4NlZ386 zbp5}Y-Yf3Jd&sa~#~q5!O}~Tb+&ClC1+qSQ5&Hmn7w-VQ!TVYM3sQaFK;jXfOO`Mj z3i&K6MVOU;0OkiUv;jSeVw2fjwQHBIQSPdZbFC;O)wdJvIFIph$RcH&l`zg%1_cid zw*ww>!C$zY!79J|p#1LbY>mM?pm2_k+gM-UE@5pC6p`xh4BBz;l;?LF^M_mdlYRaC zU|Yc3*cK?TeKVC*@Ad0zHgDH7pVWJyANAPhpuLmh40WXmcrfjVP%au7y+AfVZ@?UG zg|#^22K)YbBuBP4O6PGqa47KDO{C;q-p}A-){ki$@Kpi$OEZ0Zm6}B=XJ?U`6@a&8 zO*gPHZlB8i8yKg44%*B&)3tX!z_5C|2=+qKA-uPZ-U|pkyBpSiT;so6!0z8G-Og;P zMBtGcc(xvXFI`OP@!4KgYz6&X2RvH^?Q6j{ae|F<5bTrvV4p1eFXEy0$xh+{#R=<; z=&9m(d=S)`7^n+?{1g5h)>*a-T_6v5Yl zJI71rkzix?Vw@XboQ7ZaeH_daH{}kIo)>x^V?2yeGw%xLGHbl_XfMV{g)tm+u5ccA z4wcL)L^{%oaR`hf&c4EN)(@q0`C~7}`Qev9{~NDxoS86A0+C+q#W)|pI1MwdaGcj+ zoGcntu8;?|0YB%04E181XJH(1>J`ps`Vi^HUW`!zW7rC>aEx1rNanFb zn$U}J?u2oguD!x>o*E+6lU~R_(*No!9AozoN*7}<<}wcHpLd1yzb!{X9opK9`6MI# zbFXlm^)Sv z%)>UXf&KL^*xv7hf3qBH@0WTpm)Bt~rI}aAYw5sivEZ}yVw@c?j&0}_;w%<$Hjqfg zy%^^a7^f-y3g`0$%x5T(a(Xe&5*Vju&=rm&fR3I{q|{!FGac#EzuR%P1jXB;B*`2} zB#VjcGYt`(vtc~6&18R~_C;^Wsf*quw97Ve+YkJQdK?4ozsxtiKKrlX4X@AsTl9w4 zXWzePV)4(?aIi~_U~6*QbT;%CMdS5m7mP>az4VUaQ1naE=-td{_qF_%I5A&YwrT%u zSM0;Jm%z6Ne@ec$8Dk6)yx!G|k$`^#i@DO6ph58?(D$J>G1%X7JOS^3qV~CA z{a?eRZ1wlAhSK~%{7iG)Lx%bK@`pWhoa((X!P^z6+szB!?#T#MySs-;$!fS_h6jD` zqjB08l8w`==B(G}?{o|x)oU3ZSbtlB!|}@k)%@#&w;Ptm_~{wI@s}VA%eHX;zngjy zi3?aP0Q3Ei8j{@nZf<+pSjMNHh7oBM-lJ_ubT@!MegK~3FBQriz@zyyh4Ruc_-_Y3 z1z#KAFI_}RK7n`Mh0iOIUt>r~E%tW+{B8LBiG@g&Ah-Ao+pLG*o&mh#yN-o0c9?=U ztnZF^13$ICEDU8saF^b$#9amaOxGQO#l~iXzlP5wp&We1lKc;$4g5v`ccr*bF^N^;8U z!tRm(ZkSYvIS99cTpQWm3dR7xv~a(V`6}6RKaOw?H|QgbS(M#GCd$6#?i)$T8tO|X zQ(rR8XmZYu2qieht21%}lZvedzrbc2_;(5a~&E9jE91C~aJFFTm7rGpSz< zdK=?Yt)RCvL2sw2^!ESF0~|pc)OAUqw>!Ar&IY}G-e9ge064V{b664J)W zyn;S7eLfO+$@iSl=NLCU2flI%)@=?W`>=hfzq?la~jYI^A^B& zrZmA=r0+T3)33}R_7+3JAuXK~d~{9)8i-euoO6JmFXdWl8IIX&fnM|9&yv>tE=8IQ zc!}bB4&TjFXl9#^dk%$L4}eeK20nd@pHDCEIdlMD;l4wzk<{BlxC{VIk-jJkwh1sl zc#iXnP{p6|H^dulp9?&|_X6;DeBKB;8vFhn@Uh2*(=;n-9}MuepiD(Ve_#uuY~dbu z+AN{GfX8d@H#6CA8;1wg=k2IxEl$K&`S=!e?7xF+Y$Ur8@2GTzh{%ThUSzgekVk*NO;zWSY z05|BdM5@QciF}W5D3jS%kZ1h;r~%ejpmQEPv-}-w>sV6Wk_);cls!j&MVn}&fzWq% z6FGJn@2a@$-Qmbl?YH{j_1jxuemOe(0)SWCU)ZnWDVYzNPI`TO)ietE!$kRL5&Uk4 z_VV}UAH5~H@O_tow9B>SeierFPIHklK=08EE~KR%Z2tqWHI3GX?Q>=~o-#EjNEkCW zMT5OK#4$Tzq2NS(o2+?)T5=Ombfd}%qz`v|^w)&lc3y-#MjVeTWK&vURA zRzSaPi(yR}1ilRK-+=umvo%)TeygH4orXTQp1*w$ zjvp52ZyyAGc?fhQ;-nIAQUtnl1oyWspnnqQ2!J;e#%uN^bG?tUggB2^?T@GPe8lJR zJ{mdiKv3l!2+F<^;t<<@eUaf&Jn!9mp6A>3R8uVPDdxun)Vb#Sn7D_D{s``2R%F3i z1fMI=HZsBgMW7c1?fzCH=8;4x{&tN;@hNc6aTfQ>{qx#?-w8ZAs(|w7TAoj`Ot2g( zQRR~$&gFcP(g+>ft{SF21@Vfvj&{J228@Qe=8iF|r$vzpzI1$E%;!6al-g$)IZkBn7=ipXP_uw9V zt!jMSqd&{{=>KaDm2V0|0>D7?dN>RW034-;hRFzr8Q>rxj>+mg z-6wtH2cE%6zN5hBgJ&9(59LQxx~BsyEieY=@B#lGCT9oI+`(_ht@q^)uDPqgS^4YI zj~@bjCa$im$~7h)ng+J3^I8%+@t%jDX$3g*8}r+j0Ij`$%Wt28{%j$UeuaDj^qpoD zJxLy2=EHJGI@TGS2_a0c#XEr4 ziVHk%y=Rf~NxU2L7cuX6cd_7Uz&vWe8|Vs;b9RBJcDCRtixNFcLB^eP;rm?p4!m6k z>ln%*zK4F`_a&tIEqK4S&?+s0=cs?*f_G_q=nwOjfmS8oLAynJMCV&DzMQjcCM?I0 zj%5%eC%p6EN5qNr3g!9Cn8%FI7Xcir07okq3(}$t(bJGo;Q5T^Pbau-2AoHdyD>wc z`Anc^Jf#`Lb6{A3Xa6whI~(RP48CW>_iW517d?w!331}PjnIBLoezr#ybf@F2L0?` zY@y>I|9pn|)Y&w5n$8F0xTFr}lX0E%vkYZEnB#}zVZV!DJk*1j|5f(NbxsP$VuN%5 z`dK+Q#95XNwB&R2f3KAKS%T~75?r4}Pa4pw27c>UC)4`<+9ylEA5wkSoCi?rA|X&0 zt%H7>^mI`p(?zwgo~v`VP$w+~+@mhSXEbJR9w3=xh{w7XVXYn+0IA^8HEwT+Hx3 z%IxLY{{j5W8pQCkI}ks|HuepkFaHzpoa69J4TR_2KEm_Xe*&J#X$+n@f$%)f;lcBF zJnvWYKOpbdhBmz5qGy~jHVX1q<`SJ|A)$)y6@%QAB9DMvP4iTIjGw7LH@0#o+Db=f zvv>m7b-35%A;eTA+tlmf8UAL1zRF-8cn2}oq(UCVd}~vzNbTs#VIY^GgvNdS`A=?( z?->$AO|Gy=(mq|t=j)&2oG;;dW=50DTG2O0%meSuyqtVqqKVDRiGCBzEo=QS31P`L ziyoWMFxg^8edL&oZLr3k3HoENl$}y*~r=I?eyzAe38y&la`{<d-8-!VD z)7hTJLBKWEJ1c5WVR^$#%kt#B;R&F(rvP3S@;FVIYqm4X%=Qs*ER5sC3k-KN29mgn zMpAwV&mFdsa`YqRvq`Oljf?a3w{P8;!wh|H4uLfU-a~qv2z5MzzQRm+|J^%T{{4qx zj%R%58!mZEmOm2l{3tx*AY@m~5F)D%!d#EOL&}fCGx?lD=|!*a9Fzc`5&o-i9|ZpH zhJK1LM)jgjb|IdZM>min`ARSMf(EnibjD*&fv%5=cX_`znkXT1F)5XFACrH-YbxJjIBl7`RMF5dx*4FupC-uh^T6_5)X^5 zCAqfCc)+t-SCM)=_v?gtq0f21@2pmQkl0$yFcw=o(FJoI%3^CW9Wb`G+9K}>CDXkJ zIkuJxW7lNr<2VIz%wub)JEP&dIGohu+;IM-;3u1GC|hRf_!6);VU8;S7puVs$Me!< zFkiF-t3l`Cd9{{s;@RFzq%wMLSnx~}%!gWxnEzv~YO%7t?#XFNd`>+-M;hQ6aDO%$ z^yzoxzVk^a&j}bGeGT_@@%;8mfD6xWuY|Ez18gn76`XC*E{316PKNgE{9n9FuA%t# zO{5yn^ZCv#!#q~XXQTn{mN=GEumkYg5-oZz0iG5C9BD$l8}lg8S1#jmi)7)-v1@+d?B_6y+?Mc&mMyI znSkdkZ{gNy(Wa{Ds&kW_#(^&6?Sa7CwSz(TZG^QR_av>NXW#MyXMfPwbnjYa*P`xP z4*fRt)9zijT5;Va)UI8__OI(qyJP77^>h*RShUcY33}VSm8_W#`Y~m>;4}>;_GxDx z`Pe*~*e40NS7maw0o*e-h@H!`M0*9dJ+jhC`y%ioa4*_CLZ|J>AZ?-FF5JU@QtZqc z3jEC5n0OoXMNGqq9eH#qe4d~p6xUS(zEin zgwk_kINMii26@5wUTHJaH5YG0S!257(z+thz0*MlPXk?iJ?P|L!1_AX2|AkYjd+Y; zpMc&?_p|&C*pu7&iL^}seBd?W>t6;yh86#c0pf9vjUTfZ!mz8UMKC6)&L0+EOzA*3i;ET_M z@s5H&{ur!D*tRJGY%X|KfiZ*#mh-WU?vt9_C?gBmIXf4AcUaLz1R2A)K`7!A>_Tim z>;^mX$3YXxahk~9U}r=Z0^Y^g;Acd^e>&{C4)|ixRZ@|toDs!yp=I|Lc((moa4ua@ z;KBRp>G|>~uy2-uuHR#oa_QO%^RX)SP0fvbU0){Pp4r~zXmbMm%UkLB%dtk71KN@^ zdG7cxI?%g|<-jq8Yot|Mq?8ldeAupbYB4qG--bS{Ty??zS8+72aaS9bc&zf${GwRdS` zdzZ^L!CFk|VsWD`npID^rh;7 z9$5v$C9G3|``R>b8qbEpvs&Dn60V}>bu-b2$q<~Ma+~po;@~#p_wZ~L&?3NQTp=)< z@m_)2SMQ_zZ_xVfvVACqbNeus<;tK8sbg_s7?Ytaq5ru2BaBbgdyw<+o{vygCxPZ{ zhwz-J1SWGUxqd@AsFiK@#%nb;`)e={hcOUuxVOXi@V2;U-qtXw=tDyH@(v7RdwD!g za5z5G;53zwmT*rG^XXBaAm5mhnH`2YTJ8HiwITTa6#97RKhyb`NeR{-V(|jU?78sQ zu}6^5217Y3f;D;hDAA7lO}9h}on_C6Yvz3~IBy0&`3&&*oOD==C9-BC;Ah52ytmWj z2LFWlj%L6o;8*q=H?g>a=1j&EBRi9UKF>x2iy4lOjDATctn+dk1FYE|7^4&OaG(wLxfAGy`*E_)sqOSq zS``AVh(Ws#hw+?ufXB|jZw9))SX{^-!S>QdZP3pXzx-4V1hii!bNl7HnILE3`Z)u~X0n`t-sUif7rZ_{1kV@v@BJ5adUy1+_ul|x zHU!!GZEq?X%FdN}~EJnk1`v=unxfgi9Yl^okL3-P^* z*PWTkVn={WRlJVX?%Fm}j@QN0c%525Y~V1MLeQr%(HPrZo0S+_f=Q(Kp|MXM-!k)31M$#=gvDnQMG;FY|vc?sYw%H;EAOehZI~0=6dnK76w_4rY2; zIgg;&<#DcwV3#w$+^jiEEzRV%1Ea;>WS)C9Y9_NC_13qM@C?s11jY}TUA_tCfwrzi zz%v%wm{x*65A~2o5~1Q}|2z_u4P3u*-HC;Eux8h_z#5M0c_v@SVO^_2oL0gbzIB*3 zMt%A*4oh@e=Ve$YOb*drMo13sE5&eo9Py356|BqlrD%_t3C)2=8kht|&lV%e#@ZWr zzfnuluG9)>2RQC`8T9m-@PbYp3x6|I_hGzDo$*5ZHr@|g`!L>BI^&u9Hr_$M@#uO1 zV*)*MOQSH~1AJ8Iw+z~5MzX%~JyyF9)+N9G-qL{|`;y_-^cSo2=ikrEed#A5ct6kZ zeu}ERN#4g)H9?kyz&aV~jGreuKZEtgYa#6hdiDkN=u~*FI%o74zvmOz9`voB9W9}L z$93=X8(<9==sAe&N&~B5VS+Ujb8~^WOHP1pu7)*E9^*lf!DAOOHym?swe6?D?+2j& ztb$aj?SeOE#M-hoMP_T2$ZKBc!DY9|`DlU9QbU42`}IX{Qe_w)-!9Bbd!3X|>*V9F zA11YRXvfExLi*dIr6UFs?|bhlcyA^tuRPD+YaS|PpVz)usaoHk|B;{JJLjb~!3%PY z4Sq&UKGXL%6RFFjI$o#JHyBMVu;jsS_eMI7|F@u!*ef9BS}fxUxjiq3jV(X zer-GWAlPp67%3wJ?^?mOpw}CPa*Pw=d7;K3q{JIV+8=}el@`^W{19dj>EZIDP(CKu z^fiN_pKZ|32|m`VW2DDrm|ll*@Od*lKkhA2ideHEu0#Dy*b>o*FkZ z0XG{+d089B&4Iy^rA-GnpTnFZh_qNuzoGE11oUg+@9xf!vRicC?HnWBtbPyoTW$jz z@dugi>C&*Sw>s}t zkCleXH2wtW->k*?#mfxmjwXil&dUtvgnvJKndR*|jw&=b#`B&lB4G`_tfE6M!1Np` z&-{kNbn77L;MY1Zg^ZJkdM*XylRlgc8aVak=>^a|OgA%~woG94 z|Md99SN~5n-_jedaK6LYd@C$~=fCxSz8hdp4by_u|5MGE$?q5`SK#xj86%C8KR1k# zM$4Z+7$aRJe{Nwo$dbP=0Qr|cmyM;*GLYw0a&X}illjsHm_rag-dm*NkHRbCW5Un; z9fk48JH5x39r+_)A76PYeEIvGFP-IQ)|V(}`jf*+^?^$iw_DQl1d5Mu2*uBqblVtd zxe(l57!}Uj4H!q)k;6ob$Cr=u_3JIBJO7*GwPvq&{hAj+s%vE!E;5?DBf}6gPTJ?! z@6){B(l@>Jv`yVO$>vAH4aeD7;v2zfc%6!dc;@d)XlNVFX!stUrTBgCX}EtnskV*P zr{UkHD>TG8(K-HWoNsP=w749poqy3KUVqG`oV8DmBGtt*ozNbZr0{g3QV94Hzp;B}$(k%bzpH2JlY`pM&jXWe&dv zTW6p=hs}&v#>ss=JeKm|C_k7=(-fG5G!9b@v^5c_GK$dpJ#v44@PnaKt}#)=*Z+&$ zKHcT5-vjRyzB*R=i_ZCu{b#iGA@Hot$%`EBzl^4Ehsfi;JetAM11;VR!$`fb`XYCFxP7%vq3L@l{};9J zZ*z10t!8-N&hg%`RjWJ7fghgpdsh#4zp-j@@hHcIC@FB1031*F_4R-b9v|TEmi~t8 zp9SN5`g95OvC^-PU-9-$Pbp)4YfQ)<4F2B3VWfJgU;DXy?xmaA+;8D?Z>rMHeFwZd zU*;(;k3Hd`I8-|qQReTBTG)<(?>YziFZ6>ghqre;$zU79VIxm+dAMT?-OD+~VGIMm zZLD7(gJt|}V11;?^Lt!7zjSyvL!RFnHouA7?&&Af?=e0u=$LRG6Sm6zKgyqhtjlw| z1>`XDV&K~N)oHD~-WkDa;Kb<2_L0+p>*!i&-*JJ#27VE%pYv-4r&;j){kC{emZUpWb3xcM$YA&?f zKg=;3_kS?fR+K&rbKk05xQ}TNJ+&6HuNH9l<}kr&`Ve7DaABl4ZndYyJQ010q;&*u7YP7m={~T+3;aMfDm2|gXZaLQS!gDmZ_vEHIHYQi7 z>O1c9V2(P@yF#$I+x|eD;&@j7n2cBU0N0OWwa?YONMi@!w>>TJHR6NuQbs(HcFNy} zxY;_*PgBLY&*zkts(JH+ECJtap9Ln)4jP<4oic*qi_nnqlk@YeL}s z;B)1u?(1o-ydM0GZfdt7|5~zeuVj*@o)+eBBrXt~*I`|QNYXwyla$mz+r@Z?)&3mm z2kdt^$*t_iZLrUCg4P@|N3wk|<1p4oA?+ho`ULtY9SVI!DYW_I2jI6M3a^$9QPuJp zqMR!oB-87L9BS8O^Y5rj(``9iR|~FTa=Y(<&Uu8|!u0zc@ck+x4UoTA!}lB_B?}DJ zmuwi%5@`&oz~-y(>+*2j*PzO+6VntJn+FBT(~DqRo+b>BcsGR)k7LG5)rbQd$=OZi z81%Y0p3djjfCt9_GC@8=eOczoo8Wm2k$#lFUzJ03f1CV0hwnl$ z67N4AK3~iG$IpelfBgIl-hUi?F5>;;=VIPJexA+y?+2gf^8WGjeBOU7e7>FckDnLw z{_*o&y#E;Zyo~pcpYP@UU4$~dJ72PbP2l5$sf-WaHwW^8&8+Z2gGu3oQj@|5 z#H8>+O}N4bVz|NwO<@WjIKmV@u!Sjn&=9KdL20PM2P9PCgPIV955y3K55Oky@d2!d zIXj9JJYvj1#^Y{SZz_ws$Kxo#V@+sqJXQjZvJsEMWNF`Jwr8wY3vWHvTyucjT}N}9 z$?=_?)&{O=`=UtzF*Ls80GiF?DwVkdot*23)XI9 z{tVW4G7G9&`QX!3C9-vXnVB3}C?wE&pLlL=MDx+SyP+N00lRp<$nr>XdWDC&t=igi_^c+5KO3oi_Ab_?>xa*j{fROwDFGW#!g`JQ z03*%Iv*JFo$(0TENKqrrfuZ(D4%j2;+v7Ub9Y5`yN~*<}?)gctb|qbdF%R+ebXs2& z^M{sG8z+ID|I@$~J%nd7)(l*pq^ChYsfdP&?A7$nKy7QZ46p;r)*OIeqaD>*pDz;29pQ z&o>5ac_YmCIib99G|PR<3THW@nCFkNvk5T%frnE2VGb$6gLft^8bxz8vvaIi*Djvc zo5MX)BRr11RvH6Cv+h5I3Z8)P_*+dg!DO>BOnV1A(Y*!-Sm?UJA!{r<{mDOUZ?arRC+ zyaVeRduKbtiA8?rjnTA^5c&I`M$_k+aZ0VkoKCRW(pf#(qeZNK-O+JCUtS~fDtvAu z_3s+McZ;dsxxJrbC*Fy-7Wh0fT=7-S0?SWFdGUWH^MA#4N}b#k;D3)QZ_#FC{GXkP zx@H*V|EzFTUiLh}nN(_UCNvOxlNt}53=c<-0q@GV+r#j%AM6PF{cj8p@3B1x_Fl+P z`rZ+E&mq6}d-mR+13!RJR+z+P$T2_Z}N- zm%3dhYxkf8%I>X3U3vi0N}*`>$C0cy+)1So=$t zRsFWGb{3QkAHK&)W!>Z;`rnHzpMk*rkp3Moo{`n}!hMk>_>T7kb%LJ2IF>0qFjxP< zDasj%WY86z_%6@YCtO!phJmhFKZ5ECvr1Pa;95Bk;Rw7d{Fe^})}@hQMOaRqXRv+7 z>&CX|oFkYyMXBQ?*9B~l?>XY@_$FM(g;5l?R`vOk8w6)UOkn<9?nAveOQLhXx~}J7@VeaEEn9G#m!S8h zklgDs)V&!u*mq?_*emIp8Sh&By>|!NKHK0o+huS4MxM)$_rcOUb+Eq*;Pa+Y1y0Q4 z-?@k7qGL_9Ilevm6jw5gk9_UG+=)oQ(d8*yTQ3)GHAS1M%y^!PpO4!Z#cJls!^btEg=F)suY!-fale$_B^^Jx_d& z*UWq?O6bJrn2)jBf)%+)Y<08A=*J&5wUJ2yaH<4Oc)BFO6+z{L%m-;nMrHwNmFBq|Ta>~ls# z_E{MwRqpJ0E)$ahF43r?Kfn)ocMw^DFtvp5O09s;n?XJio}~aE%846(NBP)XkS9g( znrtW|rcz?J-a+jCdL?b`mC0>4oJ4Nm9S0~Y!K^e@2U@V8;8;f@TXlj=)E~NPa*$sr`R?~Qs;(y@z z2VXybo*ZoJM6!9*!hFd9Qon}J!K6A1Ty}|_vnhi)I4*kk zF5j`yHmHmU0$@j8^xK)+%NvrEw5-vPA!4Ce7H%wr+ zz)j*<{|_ayvn=Qn*%C?pzl6X#)tMarJb>TU$oW7R`oaglB-*>~mII8oD1F+=<9bAx$7yf99={~w z8E&9SCb#iE!WAOmh~IyEgVwP|U49U2 z3Z-A|TmSY090y_if6Wz~2JYA6S(9LPlK(n*)@XF$8gtHXZC0;?>%<`IAipnkFRUwa zo$U%}i#l^7tT9EqVt9*=vF=ULBS~Cp+>tJqg;L|xvo-KA;*K5m& zVXCv_>2bY2OCGyA(7uuD5@(^UOL*K?63T~|3%VNlSwc15Up(VYqW7jRV)B&VER>g; z;s1Zb8U?ng`dsXW5U~3qSR9J(gL=I?#0Woq<>!aF^I`5*{qx+iZ?O#bLK+iv>*=OB zhrKX~p&hQ;Ivv?({O>RU~-_4$gw9Hge%7E?N_ zIc(0<`hRIE|4)5JZ0V}NST)8Su%wWk9nkQt47N_Tf{wu4Hp~Y( zXuy1sMAt%|4}$wEPM#0K&K)<{i};y)f&Cgs5IO?aL*DPHdJU9Jfi+9I)uB(t| z5*2F1WjI>GC=A3id9BKFNsQHo6rc*^5tjE-0 zOwDHXdj`<@Jp!jsHqs|lzfMoqwXE*amumU|-f%wEK%cezZW^p1uD4$kcdeqg_4aGf zZdBtk%MX_cpl6bki6^y**av<`?AHPu7ar_p?NH@C%4^5z$uK`-;MxIp)hS#%veJi1 zCV*!-=$3=SSe+1Vch%84A!EnVyA?CDh-9`2&PsZZD0~KdSZxNUIazy-{o@CN#&uk0 zd$4E!K3UPr{`TzMsO#_?Iogcy|0=%j<2=gHmTkjuKqcGSD0G)b`^+^4{I z2EF^I+nN2)0y4JHm_+S|=|-$ooa)Nw_QSMrTtkQlYXR93w0Q{o1^JG$BzG;hAIxAs z(C6HKfagbAX)WU!tYqJsg@Ut|*W1AQ%&4=RptJg8O}5)nXC=97 zqLlTdz(h)tLotsj+5NUW7o#fYg5SL%&()?g*Cd#$k=9mW_R&6h-UkU#zb`edIkzCD1(w^?0~6j#Ay7F)03bwO_AbwR$lCV1TYYk2lHv~Pj+wH4M^ z3+QnZ=y8e*m*7<6qOrqUGM1jbPja_~?@G;Y6v|t{9+)SXEotGzmy=RUZOJ5B=f{`7 z93tP_l0fw_wi)wp?~Z-kr|6LN@p`R3{=+p&4!9Z*<^n|@yKqlz_Xv$XZZU$d=d=Bc z&Q#EQ$waWrHegTo$Km}F~#*Y`lG0?5l)a{jZVJz zfh)_IUvf?Fa^}mfVL9`g0Dr-9=26G=HfO%DkNC0&#}`}U){l}b!+VdfjPAzQSz}YK z`H5@n`f+TH9of4zwrfS-@Y8;E_jlGH-c4eZ|%InZ>V;}3UJkv*5HU^=OkAH+5sVKAe{JTPjKBlWg=Q7;; zG%-CY*C8~T7#yeg8aY#N%#IRbs!oD${W0+0abt|D!eDi81s(ej!C}v`NBU|K-Vc67 z?0aO^7WC<}VNC*C+ikqcwM?*7jexZY&uJJ!vA&pNHjLHYX16?Vf@dZnqAKAXa%7uk zpD4~n7EF)|q3s7()4O+aw)@43<$cM?@SKFOeM#h_jeKts`AM!*$@!_y|4ujczNF8G z_v0lTcPqg3z@`b(%DF^R!(ax#p#|2>lof$?F3P~oL^!ncS`v$LfOjo1SxBPyEj{LU z-;x!1(1^9XL{9?0ZwYwPbB5oyB+HF(b>O{MHT=#c+*3#>VDauZ>3W<%eaLSCpPosi zdJ(-lDIuT+cWb$R{3nsdD4877csPyqn0>LH7FDbV?_{p!HRAA|HH#|N(_&ybqb)RN z)a-WgT@ACE}zdcf=?3;v@(G#n8B8_fK6w0US7iL zJpsShmld!n|=(+H~40yK)`j`%VO@nc+cS7IP4g@_{$8zyQ zXq@JmN%UM%j_>zZ+3%Ytu^fHh@1L{ZpMc+ME_yY&__m8)jgN#n68F00{BRrA-qZ1s z@VVIK_4y;s9(InoyIl99c7SVyey;noj2E{A5hSd2zHU>2 zCtgT6)b=~U*_uQ=OXn7No<+U*nD83a5sw*OTeC^Jx?J>vw2^dGT>F2n= z&E?&Nbq?2uDmm_eW5jPF_~f_q`&S=?e#jtJ=dRvY=Z@7Od;p%Uf_YS89F*2@O|HV4 z=jf-k!Md~*c-+GGP1i0f!1M3)F8XR18)K~1e+r?w)X4LHw5#ezrebV$%GLwWFW!aL z>Q{ST-iyWlh*}^~)hjRNU@cwK&v$0JCRgq7}xdHV80j`kKNtH;(enKzX|&B*pYS?kNqd$aGEjYP~s(4I~(s?!5m9i)P*R7YdFA28W}(oXlpauENRkM7Hr;JFx2{hxOSjh96#c)&A2GVYVq``}=woq;(% z1UO0-QV%Tz90|Uf=Bchi7|SEm6l{^(x$l28kLBXvv$rYkQUEup^d5k3;MrPek9Pr> zy@gvd!S~OK*3w@Mg8=mSh{shay)DX~JmUMBW9;r&*`G%n17jp=8v|n`a_!({tj=SJ z+O|L)aVzMEa2^BlP+2uoSsenudB9%iqOzLe(%1@E3);wH3=hltP$$0oe4Y}o900O< zQ5D~Pmc`ijq$JQo{ z@n9Q)o}D4I-Q*Cok>g$1c27m$*3*0Pg0AOvEWR*6a`j<7pL^ex`GYg^dh`eDs6V(U zjoP;d`rr?ay-#odUAc=1Yu}{BlJ+Skejih4@9LwjN_}6`7}1Wl>n6;7SsN!6JryTm zT~e&iJ|lrhbA*jM%Y@3ES6Y|&!->J`65l;BcwOR!9M&lSD?5A2{6v%`tcyeU^M`^Q zMX*?XHu&$>&<6Vl7DvA*bA$avsH5K)(8tk{4feEbQeF<9o5pWSJ&bl9d^Z!bmBcpK zUmv?U6`!Ai-wg>3cAQ%?w8P&N(jzb)*S;{%(w>$#;#^uD;Z;TjC|iESY!xmyLi;W+XYtXYmhywaO=IeI|nv8{r$WeKZC^ZoM%=fBg42k#Y{Qsv!oIs7_W6E-NFr;>JK zB+%ImzOW!pwnV}_L&eG8h6?u~y=;$n;lCvpzNf%0i+*gtlBglyhej8|Z>5jhqV^29V-zWgh%R_MJ<0~(o6^W7_c75f z4kVFoFR`P|iuZ|)06xeDKCl8Gpl#C1`2hV5)mlB z^#5jpo~~i^cTDJ>{`YbE-wgC;`*tCqi$Y;N40CE|yMeU7pF&DP%y{>LV>VeUPDYv< zV@3NxkY&6x)G@$V91{uld5UNk9uX(s1F{+cvi>f}Q|W-v;vdIvOce$hi=z`n`%~~t zNEhj|4+X1L91vdY23=4-c2jE9K+!(d5MhlND%zU|h8ElUMOtkG%*C-;qCK>r!QKQi zN5+cw#)09*;Zqyzwn5h7S3qtfM~e2NAo~e+(S8=jT0hWSd>(!$10su)rZ?D+f}B5Q z2(`w~Y_P9_adr>17Ki1E_L@P_#eX$~TmStYne|eP(dvahHo#|LR)hUp=;vMdUPzLx zcfvac;G<)}&mogxeCW51#9K$h7%}|}RxivYdQOA=j+n)Cu2X@(PlXHi#W9PcP;adt z5M7MACgxVqf1qDtZ)>pM3w^$v^YXp_5TdPnfDfZ#T;$acVk2mOqu~1q=nL;8c}x%y HqF9*$nrU|$0K{9$aQHR{d=`*EvaKMrFdzhb|5rv4@1@ekm)6VZYl z`@-Lb0-wJMW8MS(y(UCiqn0+Qz~ZP^Vf=r>J17HmUiZK_(B~<5Uj)97 zGDKMy4|pl6o$KkC@&-H7&a|?@J`!{=$_UEJYoLFlU=GLQ1Ut?l3fi~w`JfDC!JL-C zdv1{1X@beR3}o00I<^dC8s+Oa$ks8VU~la&*q4G#pGXqyqCg^1?vAGky_L7aRNi8k zycK{=(e%>#Yf$FizkFpfCvcf-(2=>9a{br$Uw}+ag*Ed!-=3dzHvXyu= z_hk069{v7+u_ zcEc<_|J(=BZqSLXt+P7g=@~N?N5iuzXJ{NP&UIm(P7KXx^wk%4&|I=`UoKfgF3sV= zcp1+j3#UHwpYV5+>i16edwnk54_AHV)tXXjCf`;!WS1R!`yBQ+4msO z&!wt|h_!`q+*vSg=~=HYC-&jbygQoCc)LC0@J$Y>uIZA2krI6gP70YglDUZ*?mW? zG*_@cjgu7_Qx2gGW1T{zhxUMNerd{9jG0*l;)&vC6WeoG{sgV-Yz{n|sE&&y^0

XpYmLGENbPI>-h2;`V-mtR;6_#!hHl>xydxVQmVaUCuh!Y zg%i{CXH%yxKbYYYhsu%>p0CqbW#l}y$~VM+i;H1&u>}KI5D<5a|BW#HkGK%CbarvF zG;(z@{SU%4Tiw$Ku!R0~Wn*u4w~9i+L4 z)F2K4^q!JWJ5+4Gq^Ld8!kl_=xra{5`{4(wu(cl@&`c8 zuVj}SUU226E3o&kEH1sox+2tyc;aR97+|rErnQMplJ>m42`CeZF42lz-qHw1i!U>p z5aCrQYPcSEnSH9!<#bs`&!@JDB2!$g;cULHV@;;DSCXtuRlZ?l!|G(7Ro!8VbGu1V z-Ok#vB zp3-=A&7@p@DOD*>Y;kq+OY3xGbvR4C8K#H4UW~3=Hb1{=M{YFIkCF8d*HTEXAtW`b zB9eSEbo$9`VV#I3vSX|adD}vR*>gtLYu=Vwi{F_G>)f<$UCm2%xtxu$%}a9e0twx- zLc_*^<51_60hN9;TTQ1QU4}LaA56%0y(!9NzM!apJ z%Z&A@MEBp5le~QFLzx-Dero+q*`|^Wv@WTi^7PK>15%=N(G>KJEDHWP_;YC-1=?dM z?A}sH!|?O%2a*jGC2)ZjOW?s?hF)iHS_eo1IkO5Qe<;X_}tkO{U z^)UZZEC>ffCl{NrQ;^B?B00xwwdk5D%%D@OPzhNhE$K8hI|XELq2s6O`;qR%6K^FF zcP|?gHZFx{i?(@Wk#mxnE_kje;3vgk8>2-Y-zypp5;+(kT*v(tyyXD zd2 z*e~0B^6x6&mt|rOg&B#7X?2j@WXVg^1}YU$tLKzI3`H$PG&LtWCY(NM=~*oerH4!< z)ogmGj=F)K8NYA^;7o@nXV-f~7KO)Cv&x&6N|e~OBwVVv>QwV}+|lILupOE=;F+1p z?MsX@$7JD<64;x;AiFXy)N4aPqEE$wuV+ksM4PXe9=oC+sIKOHknC!OU|*ASHd-9P zX>E6fKpr65LivdzCZkaa$X<+^U+}%g#DM>>8O#;yAB|_VWppUIY*K3MrA& zN=Ws%mc>bVCMwVk$ommvykI04!4p@___$PQNl7gh3e*Cl7-8$J z=*uCU!xD?rU-_WlO)qx7h=2b&+Iu|yWy$Ahu|7Vuy>};~k0wrMXi1v#E88+*F~4Dd zc)a;a4b;Fae@VnE$;?s9bhss5tvjAcE98SzYj~KOX0dnXLCY@?u?(3`mG)oca)ya_ zrw_iz_=T7b3b|g;q2;APeU3C`k4(FpyNmL;CB%haY>opiy-88aRJeP_IVbFF^C3iD zehGDF0*WchytbP4!lb=)P5qc4MJ%!MVh)hS8^5-B! zuC``D)JfeW!r=Jwi()=*nX{&*Vd+t6ts;_4eA`Q#Pr!=BYye7Yc zB#qZj#N<@~C(6@9ALePu$mn-C{h3Y+>nkVtSBHmU0LkRAMOGlvw}XXn{1rMo9wLPBA)7^MY5pb=dts}ZcVX|#uI+B?ot*kn3c!@5tv;3 z=+2dB-A{3!rA&$Uccy}$q}=oh$b<@v67<+UxvPaQX_WABdJ!co?HzWbHUz&Lw7#(|};x?Vz5v?s$%sN~iNm@wvY%*4tc zSva@|4|_$vT|}%oPFO0H-G4RkQcM{MxA)W3E}^|QKVN>s8qOHXUJplE*=u0ve!k?v zPVd&WVzSP_ThHhE*gf~5XCZ`mbkS9fjhhNA@jK)g9JDY?8<1>RMGY8zg);1e|yP|W3!=*^(iA4e=t@V(;H^8`wW z(@-N$E0KRJ!=PIBd$G=O3pEK$`hs5clfOU-NUvWG$T4|jN>mdFC7C=x1F_`+JFZO* z@{XhXi{`9z9CJZx)9vLOg+6ByA8LHTSS@i1+MZSjK0nY(EyM3+inA3&L=(EaVE5Tw zEZR=w=;jUR`2u&4qo$0}dWqMhk@zGn2WD8E(5Pk<^X!)Mi!1td51~CNE+yB5#WF;4 zG>H-ObC<$^kao0)o+saHE${p;-}l_lyu?ldgZp4fHyz46rhI>yqY=_2&FPLk;B}d? zNKlz4+@d6t#<)s?Y4;FHWFXVp2F0NFI&c{#N--8cvn}iF+;r!r9ZlGpoOq!#BP=0!5ztBDsSopv(Xx3gRQE@lf?? zGHgdG$jl@Iyd;~XQ0-$K*c?v`8+@a9g7I4c*^3eYLg*E3tm0iG5?8c^`M0gkceErNfnI~+D8bxt{-32#RA5j&wZ>a1bC22fjn+; zt(eTxbXrLRBs?D6x?LFpIx@b)9i~k-49;1Dz2dWDm%3TBW+kY+!@cJ$ZqgZF;OgnC z)RJ^=eK_#X%xK zV+QPWj)-cWX3ZxPPwoJ(EOwR40~z~mI?MkGsRs8b#6Un$+RQHvMIS51iYzj%rO1#^ zuBni?SQkTyB)P~8Gu251Z;>qlz_W2Z>|ZQSldZ&Tg0>pm;iaA+jdirAM0dDs7caCJDT%8QW~hoC$EaGpqrNg zfu97pl(;!+*ziGNJKd;!TfS)rHFx6_xS>c&8abepN!e3!2%BWH9<~-;p0gJv5wEkG zldak(L%zW!ku^QZvzrnYcBSvv23UW^S+0-Uy*=*ic%DHLzq;2Nm~yFg@@`Qxg5jej zJX6@-R;60iN2#l%P5`PX{?gkrcYomww(a+|)J28g; zoN0k{Z*^pXT%M-#5be(-wfF*c+&x|7+mL9PP^NP?>XM7J^BgFVgQEO1Qq4355Z-<< z#Mx*?@rf`Dgl=#gBuj75=KC^8qbzc>c&nI;G047vX3rvO!dStnFVjNZrUTTF@?`|Y z$4P1*CSv8XVNAjv7?x`UN&)~o=QJ1-hQt{4=*q4l_~x*ZxN^gqUBw9pS1LCx!0Oc! zqs9kUgzKA4Kv(2FA0PVlZWy01`sYo#2O(h`>xg|*%9dR;9CzLx7^EuPt|U!p@d~1& z(lB`zCY7|Q?VjAQsg9DP>blDgvdG^dllu-Y)N?RTYM$TStY>@$?;kZIVx*GB&W}NI z_Y)JCsp>aX7!&?Zu(jlLe<{TYky#pk6Vkp!0CV?@(O3E@vbk~cdC?YwY!L1YUFIu7 z21b_s0&~k>(Ec56zx)UX-upE%78f8YBx5jQBH5VG2GjO&CkxG!Don{*Y)3=jB$IfV2zyW!oAlwMIp|dfu>z~9nktum24|uRT|PTH9u?@$$|<$l*R!L-gNK}N*SOE9eX+o ztVSM*D<}bMIGs7_f(>Ana@814Vl8|`bcG{PgU&XEx|&M-X6L8ZF+-EJ{5hCr5l}3W z&szFWk*X{DMMR-mf?1?rUdN4II(5b$-41aoZ@TMxFsw7)>X8bg`(>w-{h~M_!-3Fe z^ml*MZXI8TV0p(>0pBNAqkMy4D44we|@WMjyx*KZEb?r1l3jVdizy7SsOjkqRv&>o&WTO5vUpoP;UU%{kA2 z0TeLVm>#B+G}{0Nkrt~7?to3~!$_zOtI0#ANUJqm+I^@LSOl+qgu!_N+ z>;T4}YgjYpu$jPo9x+9FjfamR!#OVtA(A=VBH`4htWKE}xi-}yB~;E1rK7h`=3&!s z3YKbw+AEvwZ-E#d{5_B<34Da%pqiAYa>-*--GRi|`n|vX3-xsYKM`n0#M>z?yde#N zSgUeVo$1gQZ}KZu2NX`+F>#H`n0;>}`ngxb-`>c{sabL05OvcO#5xpw8OcnK{hysV zB+7vQy9B1?=3_&OmcUqWsVs8!stM<9AboL1+X((ERwGEirx7xjT)UpZHE2f8?&cwI z(s0wbY41YA-QTcfGb{M&OXcip3-5fBN6LLLjg~2V??I)F_pEoaT%#4PkSuynnG`@+ zBA!|RX$lq^COjECBbG2Q_T7B`GLX<-6vu$^q2Dg%F>F^a=>%>5lPvYdGwG+d4qP~~ z(-`PBTie^dM9*D^_k(({sy zqtKV!I+pP1dlkadG#$koJzkd5kZ^X!4ggv6w7e!eLIz2gu1--y#1$H6g&$!PNObwrxnC4YnnbV6M63q55?~X{ZG6CP(^57#&j?B` z&vMU6i$Y78r-)vHa3VPZmas33WviSa92e8sd4|)R!uk0A{PRa2HbNy+o&Jb0wyj7x zC!W6C6*L>!;v0=TE3$b`xZ1oy_G(&3;_i!tO2F9ZU--8gibO@1&5eFB(U4Y#0j@~~ z=#kq9Nv3xz3g|~AtchEz-H9P|zac5-A~0l65@`1CP_rkjlHh47MOf|PfL|A{lZZBw ztwG1d(k#!W)C$bzdef~mr0Zi+$z z`0HK3o%V-=oox}*XwI}s>#i}IYR72a`I(*douO%LDz|N++V+O2=ALW2J#YwOBPj z8C|zL6@0G?eq9*9r}ePDn>Io#dB`@fHnN&ed(NagZ>4uVjzu#5(1<|nwipaB(h1f! zxo2PV(dB663E(7_Z2gz;`j0om(K>O20Ka{=C-1WXi|_vGzs3AO}_f0tF{f+LLkHXozAM(Kr>F+Erz_=iVWNhckLpk~$)-Wng z&cmJ#-pvm6njn3qIp0gbPr;-?LeHD3i&&3ayqxDfs*$3Es!(G+o!|Q?e~lZs$>2@M zZECuAhOO{Y_4O7VL0s#Dozd1&BWcKlRu@u~g}2043kBtI+-Sw{^}2n$ z21U_|W)8EmFkCfI(33b!Kci*ovNJCtu8IrxPJRtYmw30hD4(1K3+aM(iOoxEBhxOY zF_8?K@hr8G8&f>nsOekGq_Uxw#9!61+&2AwFRy!-IVMM7VVngB$mx>!cfCAE^?Y&!iUI=0(u&E z3>QtqmFHJ!C@Y;(iX^PdG0F9jRGBd~Hp>D&1c%l6nSyu2mg|c6WblUwL?cY{#?Rxb zL^Bz$`6$QK_`1I0H*9d#$88E<42_DGg>Er|-(9P^@eL7pE zO6?7o$Jcdw-DIT|f~R!t3e5dwU2EkbH>z;U`p?4l_+fwc!o4-`SUiLrKSgkXRF*{y z$zwN^3W0GTf`6jE1rB*?Mw9_F#9F_~V!3NOa}$)H$e7+eTlnk$Z>{f#j$z48nc#oN$$Viu3ylii2J|Jc z77>`e7DfL3>`V_U8nPT>+V2TmIQ^U4R5P{Y_xkV~+T#yjKEEX^`9iNAOQ*J4yzEiN zj0ur4N2^^+qO`#r+W0u7w!6aUdNrytT|nQd3AkA!gKa5{u9g$b^|aVB%8OXJg0kTt z_O_T)Z|@ZVCiPy%EG<`aKAC085PL5AOnaW~53b$atfE&c$x*ZlqOk&vZHzUo#-Z;h_nNz!jC*dkdRcfuv` zF5yN$lzXw1okt%oM|O$n zr

krh!pw8_k2Dw!3%O*mf|w44B^T2QRh|?f_dhm5nBH4( zK*q=;U{8X*3DAhFPO2GS6G!wy??`S-`hpIz%Zz4_!Nz=lnh9WN1HddP`kGnhwZXI&1uP5&aqNmd|QE_C3_4BJyn z6fV}9fnKes-5DKDU;4PIX;`{A?ntsK%qS4mK;i@Kj@{p*lg=7dr15o+KCJ5c%@SaM zahRwdGmtqXN)pIh_-DDdTCwxh}<) z%0c^5eqjDY<&)hXN>_m+PoOmJ0=a3QsSky?VRoi9r3AaO-o6fW0=rqbzzcOFks60~ zqJ%3pwgV-CkFkUQ)FMdA&HV#Tb!?nP`y*I6PPr`l#Tz?gf1Mk~fqb-Bok(-P5NZ zre;}&>w+ewAzdYD*b{w%YrKFt@=(>Tf`h^3n(-+n=Gyjl`kr7E800W>pY!02hqzB; z_cWJrk>TUF?f1`eXySO`pRdoJZ#>-@-DU(A1QuZETH*NHyL_oRmAbG zH*K5_=7i3JCT?UJY1qnt;OQndG~;TW4(U_&dD~LT+;()$X1pi2p3_wb3kd%uX!-<$ ze*7$PFjNE>rfP)$6(c~GVWLYRWl-x!nQGH&BB5S)jMkVq-sRaO8(3ACd5U1zq-)s$ z>E57a7=C;>l9-cB$4_FWViigk9*0w*h|vbvT~k8)ifu#w!WJlK0Hk=&k@-B34zbx` z3}X!;?a$L}u7*%?8$=_mPH}U7et{1r-Os+qBJY=_ap^3wfc;eBN)q^aiBaCJtO@7# z2>{X}mx|}pSTa_aMH{2@;h^AjyKw6?1%B@dg+n|Eo>WvLCG&D4<;3Q5uYn$!-mk1$ zrRMN;`e-dXYC1ir+%Y$UuJ}A!J4(s%1g30tJE=+O8OC+J&fZY(#xvXCt(~58x zh`o#&u*$^Yh==EUIvXmB#K=%NizQeimPxwl{kl^fJ9ZTUzVo%XM6O`tl zEJrSC? z*-#4NbP#CzV3MMAAs8~yA}ZMgVzK$Gbf}Z{`s(idJnIz=MZ*wKF;Lv9s~TU`Wj!Gm z*Gk=_ZSLo8Pfu1)(5Ls$uiJg&tIq2#ZTa5gP4CfEKVK(K5LrceH(~v)Gb2_HZMx-k ze91@u-g)h?@tLAh{X;P>#HjYlV`GD*9Q1iCfYj)BW$1Swcc)=-d~^G;{!TX4&B=g!0esxI!`?j(VypM zpW9zPKR}b+xnF}AzL5M^#|Rz!0X^{@woZ4F`!B{HjyM+1c-sU1grm7T+WRjY1O-N& zOt68%pO2)SQJ7e7&x{c(Pp-_Pv52>XQtXZBwV zzaY@{d0w}}oAtS0SLDCkDZj%KzZb^74-dXeX1*Qo?6W?!DZi)3dfo5--Q?d5#>V_9 zmI?APdbwU}*~aF$Km!c}SPi0iL;4&;MB?=0GD0T-G z=AN z?oO(>AmUe0636DBP-V`{aRw*}&q%8R+ILixFnM_uk*J9?p>+edX8e>&c_eo|YqiK#e;P7iv`O%&CyZ&Z*w9%ui!83gQh@ z%#a_wmFpkdp0yY0oMV;_H+zqxVBgJ)_?h%daX1@J2maF5wkOoU*&8>A7#;qy+IZs! zyx#X}s9UeSO+M!iEeo!!>5k6jV=H?rI|NpdYSu3Q1TTk!*~IF)CpxSv7e|D3Rqg$9 z>&y6tS`#alDfV5|$XjUr5}^7Pf=4^BxyPWG@r3>fvU{<%v2YG|=#*z85N_25vR)Xc zbbRB?IIe1DdC%4wM;rIyTxA#%N9|4P5we~(b0g5X+s~dhD5+&S1p~*ernkEv6AIA6 zX#}e_E%ex0TY?A&$xv^wjBR6wt-ZK4zqW2>kT_4YJ-&hCYkjut_5zl?g#hX6LTBO( zjs(*@C1<;3P)bOdhW6^30daWOl2W$8gflYgrlbEp_Nxeg%eee>o*E`wK~^_FK={?4EL?t9 z9|OR<0@G%3Q}X0S#j-z96;B4X=Dya>OefY=BCe_7fLfuUISm}1Pd|Nahn}T^JvHyl zAlIpC0kT-($)=;0qa8R%RF+ud2mU3S2QWzK_@;6J^eNk(is@yqTzwpVY%A{|%=%l- zg-%dFAZ=#+*KW(S(8?bcdu`*$Mb;1<6sIB+xuDu0#lD>4Z~l}gkI@y#ZurXCJTfyZ z@QOVKxcFJjiak5P*8Y^J@dNSlsRr&t^f=$#D`l>tOys3H+t0uT^C&w%4dJo36%rLZ za)59mqvXSfIQ^DT-^yj$V2*LHjW~mCL^h(U>pQ_>J5dMWVD6d2!(6-_BIv429)*m= z&QS9~aJN@2ICS~>)5gdR7rs#nmR#y701p2Wx129Ls(+{4jV-%Q0goV}S5DB1odu@T zlH((TSrz@cY)?;hb2M+ypG4+eNvhAWNUft$OmEoj#TR}Gw4K3u8wc`}WLbNG3+Was zIDa3yHcapI4+Pj;3Ru6|fptZ(J(8{nZ3U9s0U6o^r?X}b&@znXN*&^eu$9D&)~7!- zxg!fZ%S80af_DiBjl~b?rog;%eSY)i8~xX!tN>P(YX>&Pm2t*8wwI^b7u8oY`V4vhXA$b-J;@4Eua3^95EyJRA0z$%fLM&U>aE)jdxkg@Va!;tL zcxZD4ykP`FomKwDzqP;dl~8L4PkzZDr4X9Uv5_b%2JcN2VOCcA*0 zPV>M>FoQl>*xTQFD)Gfk-VG-Rhy0oH3MR?@wOai3w7ln~D?37lrTXV7WO2(Z&frOEzeC|BeSNz8q z#nKfkH$qlhw@QarQJscUkw$4lQ}JKiq#b2w2J*oth=~oCye3|eu7Yf?khnFTgGr3P zZf}OT-qvoeam~1DqEvvD+<*x>8mW@zFoa}&wzWabhgW2*bTq8$10Vi=l!=$Tl~^-X z+>xlVO5KRcHnC1MW%Wv96b!zxmS3s1N^E)<(&2tE)dk>^c^3Ur8c923Rh<2nBdb_; z|7gy$f*pmy6Dj3xgjgOI-VYr5B-5O|)!4=k`l~1^#gd7E8B5FIm9f);)Sts>=^h(6 zKJ@ca$eFmaO&_pRVsmpso`F~MK)SUf#fP5J3C=N7NwIpaVVl49;=hw+%UvB;yS(@O z44=11C0!TKH6iZP?c{(>-m0qNKfH*t?PNwwID}+%bV%r!on0hc`}azij)A}LDBA2gG=wDJDBbAHXmlGj(KuhX$0hd`fIN6X0w*2%)G2WN68#kx-#$HWL z;!$u@%x8pZ@XHMGuCN7Ed8&_urYd1xhDBxns*5Wf42>}~1PTUFtAQLB5s0oKQcfGM zUu0gm`@-Bqe8)dLgo$|)s=CXc^&6k9kadUlzM9(hd8NP-iLgiwTS=?LMN(ose{jzP z4_&@!A8fhRM79uF$(kZs#M%O&iB4m|xrdxXL2rPl@Q=(e)Bvhp%Cw(70wa0aT6Oj& zGsoY3Dq|MtqLs4QWnUr}LzIdvVpR z%vL+Xv*xLB(}R;a48yJ_68Y6frH?X=Ol&DH$S;2v^x_H>Hng|b^Z1xJJ=sYHTG z7-z^VZIb$Qbxk>KrmCurl5(Siny0R=r>WHA2hRh+{%EwyuyKZmj?MBA#;tcWgyp!* z+98g27?NzG+`}vx!uID*|9Q=q&FE4Xqu<+Xb?gEIr6WfXkdm!F*>-M~x=PkKvs`U@ zeBdtJ0e6aC8FZAO$Lzh|dWEpd=RW`EwZO|_Ggl4sUjD=iVb2aq*1=9;D?!(1|6uHP z>;i^`Q6`k75wEuvD({fIDqneo?jALO-Frr?6GgR|oZZ!KebuQF?ETVAd$wmY9Y_0* z{IIJD9K}4&JE^ylv3uhLpk5Nydzdv%%X&}q7LQ^*!y{*xk1^c$SJxEeZ;Gdd(jf~p z2b)%kFQO;pQYqN2} z4O)${c-^)|nk}WYVWuPl+F4CGKLC0cIakx!Z0ov`J31S+iP5#M`yoaq)DMm`?D9b0lKadIi;h;S~nWX}kG2dvbL9XJ}& z-BYak&#?C>;MsrkGj0kZ9=G+?OeKx&aKil7s{EvcgK8c=Pr+>Hv4)>)-ts*1q6)t5eiFz!;S%$_X;XTaBF z)jJJHX6~u(f$gm`hFY5HWd*4bIt{hXGB@lPWfeWHUWDxYjlX-^$S%2aTbs*`_^(p# z*`3|=D8(JjONYZ^r&!Nt$!XBo2=0Ex-XmO`5?F8Ep0oqPbwd|$2 z6%oBackdCCB*9GH$_$U#8P(y>3=hJff4}w@MRdd+D`}ZCNgGD|-Dblouas7CRKiFF zCNcWj3fgi_rb;6vU2?O0+w5uqf7X(ID`O99#*~7z^$yK{>uA-H=T^*5HMHE#@~FAM z87kHRF09V%!^d-WrEOVB`9~JDQKcKvHUgFH{MLwgp>>d{qUQU&k@x!^IJ+|Xaw_Ty z=ang%Dyq5k1BUAI8W&tAQU`iV6*(!f%)5$7rML1mDupI0iB4uZRxO!+b=8$I1lVyI zjF`Kqfq-)ds5OJ6W@h@L1%>4y;@ftb4mN^8b54M_HtII;x{UfPkcv+7)|XLWZgunm z)$0BSx}cSffOZ}*m+iKZs{p9ac3a6+aqGzy4|d`0qncLYAifjsgX5-z23h)x#~c$A z!!=AiU>X4!u<3$wV)qE4-on|jq23maKO+kekIl5gD#PkjDjc14K%g-yQ!IBd>RIeg z7yo%LcJypm1_x%Tucl&z9+j_r>6Xd<1nG_1NG-GatMhjTN~r}7rVjK^;Buk2TtunR zV`o`ARmegTxPYRuU>zYTWHN4P#=NA|;;R2DC$eKj&sqhwlyt+$*VtEay#ltDyw8wc z%}9@le9Wo9k4`Lg9ypdaADT=7*OTEHk(X$1sUjmnQaTX~j5t%@4E$l=Ey zQZe)B<`V&*4hX=u1XdSY!t&}R0oaWYHCsFctf9> z5;%1UCM+W)TwyB@Z$?zh9Z^R%frL=J2s;gKDePkEbU;)IVu(qL{lc$^rR@GQ^yD5j zSs$5?FE_yw3TZWPgng(m8@XF5Q8qsul7U8xDCS^ggeCdINC3nuhZ^<@Ye4-~0zB6U z2I1Z42QYBR8fp@+@01=+4Au3f6M85b+f;?je_6BwIqFuUcZD z99;vW4?_o#$Kn)MDM`pvv3XizGsR(C@_^4EsV&xN?~RAX_LiP_ARV2YQ(-sdVYYzL zA2K+}r*%^i@qRrDioNE0IgtCw*n3E*pc`^{tbNV>vN-kaVO3Z%DFlei0gJ9ZkV9_4 z5lF^znVdR<3So5*91N|f#I9-CGUyb%5SnD&txFF{2 zR~DXkhpJ7W_BKXX=qo}uw~p7V7{BGW!d2ZG0Zu9_7GC!@>U86=vbu?sw6U*;Vf7Pd zx}@M%3<9Ao>QUCLXKQ_<2o=P}pfQ#SH!s|aM)~WmnhGgimM`vS6opZ) zOwKsrw-dZAiJ4e^A$TQz504JbN$5y=_N8!pdHt-y!#gQJMNigw{G3wxIf3M$W*g3t zBU5XObI)1h{WL4_it%-Mwp}jMM~q-7Q__?9PY<^M0Etp9DpM^7H7T?{yN12MAL`A* z+)Yg}M;WiMzA?X>{=~Lq@D0ioCRd1IgllYLl}c3Gb3>W{TI(m=_WfWeep7O$J!{ld zpWBf41rrx!zDvU?>}*KF&qcXFq5EmnlyBiA=7!9N$eoAI1# zF7pGSsVBURsI2vOB^)kB;#%ov5|WRa;WKIC#8)7b=JjOT*7e zk527lVQCrQQa}4avd!n#cJ_>8`M4TyR^baob8q@#>E->l2h0TVw-BcIj-a#9CVv|@ z2?Wk(lwi8e)jbYfOQC1Q}T0BgUj_!)x-r^(?)C#}e z;!Fy-1!?eCjG@H+4-9cO9Iiw|ewi zHv#!+zD$5y+>u-qRYU!^v$l~#Q`h|3@jwEr>u62L8s3Kb+P*Nw&5^*(O_h(n+xcQf}8NM zo`khI;rhinP}R`>K{+!wMf)7&rAHOsrhsg%M>$*jsiC3}av+*YWOF=kzhC@(7vJ-E zF5caVIbnynA_KmE^M2q8fr3Are>4@71Tx+$-QjOsB>A)NWMkwtMPsE5;wc!55Mj^%f@9op#`J0@3t@Q?(Xi+!QI{6-HL00;_eOycP;Kv+&Q?rJH?BZ$N%1!yyPY~ zdCAJoWKS}gWOnwKS+nN%arI6^L!I)VfNC6$*N`1zE*qfbapJ*mu$n4)11s=xzjAH#m|us)?>av+4dIQ0hW3 z!=a*ff?45?Z0fbqH6s|JpfsKHJZ(ZkKNI{iz40l-qBVRKC*`i&kY3ff1nprgXuU$J z+=GJuKr}h$i9T4?3!Nm^TsrQ8*5R+e@DxqD8f#zdW`__{-8>*FqOx}0MQ}SfjL-s+ zUt^=!0PKSU4OIfX=rJ;G4^m?*seWAqvp24+FD`M0G8vvHw1tV!w{gR74Js&6_4xC< zX1LH9gF5X*)O|$G?3)O~&cdk&U&Kb##Q_Ru`gm79hal)xWUy5zdlM2MLSU%JjdnZu z_VC*FVBViW{~NG(Vxgg5B(gykdkSM(>ZEUqL6;fyGnR1@6ss>f`4AJTHZYQwI2D&- zX@;SnV1sSNlx?uIqdcCNWj_buwbq6g1Gbb4q{d&-#g`}1q!xtkJ`-vvEF2hS>fe>5 zDIj?t0%?EGs0Kus3jPSvyDLrAHO>_*n)qR$F^a{*H&+kQ@P~Ke&ATBMHsSzg$c0vsKHX3ca4*cm7_Jf zgu<^W;jCgp>ypv-?Fm%is82gBRBRw;#wQ%&?OoG+56LoQZIB*xDBi2t=8KY*0}0K# zdV(|e5$tJM?0C|OAvWi>_x35#n*Id!HDItBY<-KV@PrTPQPDz8A#TE$s1)iF87Af! z#F*)ao7XhwehEfmun_k@N7Z01K_1uCxZv|;>6tZ#tx6j~oiePTU`^}?g1w75WJu3v%Cqh;}$L3$XOG{WCbtJc1+EujuxhgPF{A`LYvmE7vRpNnkw4Al+lA@WsQuRdNvtGsxqj5rO|kBin( zT)NkLrd)pwO}%QSj)GlKxeL_->08l3(F5G4*Atl@#ei$a)2WB2HUb8HK*`W>UMdCOAA`qy zNUn1@Q!*Uy2j~2&Mq!Ncf*r{jEE%ncq z1z39->c(4uRW=%#dqaSH#%A$&;!3Nc81B@^V1I%k){t%*3 zF6MjCbLf=nrM?u~o;My3D;cFWMh!;b8IY(kq_kht>C#yaH*?Ibc^q7)YQ#=xk#A@P zTRfa}Ho+2{J|d*5JApID;N^7Iub9hm#;Uzg_I>to+(3uYO}Cmk8hNbM8>4$>=I4%`0Gr$R_@6 zjZig&?V0EwfcA;Y!KKknbXIvO+(gtPUEh{ zmEDAMMu)X~}Gr~4wX}Y=; zZ-uZ8#P^?bD)}e-M6@v+V4+-mel^l=$?{raT_W58J#8%vk|7?9!bMIbrog_vOvuzQ ziM*wMm2Ujx9nwuPk}%&X%-xy19wfH$EyIc8=#c^LNdgT>k;;oCCf1r{Wbv}^YBT@2 zCk2WL)k;(m4_H_r%s;aFK?>r(;3AFAo^&FekO$t;Qoe(G&~JqHl8?Ax9`t#~;H+WR z2~;(XKJbZ;y3+hSv8F{67Jp1EW(5cKcz{)?tsM;G%8-P4%bfP${Tr0}CLPthog*pX zki!;|(i@#0?;sN1e=*K8AGZb`_9MiaW-~Orri1~0WPk@jMthc}M*8>9kpP5{D#ESz zLbB2N0O`BhW(lX&ZwG@r`*Gh5e^#^b;fEoDixQxP`J?6(=SWQ*n+I5=TC4@QIh1Mo zqr5V{{W&K#_y(*eOerMPi7Dh3T%j;}pnUc$$=-dS3@So{qg;%LIMw=vo7 z+!I{(f?v|OVv6bqA!Rm_J-8h#d+ErVMI@r>i<92O!fNx3uD7Z^+us}BgxZ?!4|_uX zP9AC;bW@EMKryh~G&AcT0Om#d9uO)VdNYdl)jNV`MQn}A%yktE=L%!gv$0tPJL=XB! z#pGIw&U}SAnphS}ZMJOAl&E=$^4#Ii?Cn0>#6oQZ4BzM=bZQ>5_S}jOLmnfzRLfh5 zAqF@Df#Kksv)=mF3YcN#hH^*ex2dXR_d&bIAxv-wtQc3O^Ija3Y-v|Xa1@m} z7_67BDKyQ=O*vOwtb8kdHk3>)5YD9^-xDW7DTVOoy|EEbh!NB%6icM`?}A;!OY&rp z5~R-8>S5RN(WHp)1haUlmA|6uL(cC)r`9D*2bSsTvUDYR>nd_)eO9OrIGbIx{2g}u zo7z!lmmeIB&}VCidJ zD>0*aV^t(tWP3V`e|xYoGFi>$N|Q8~8Mb+p>uhZhJkFB%0Fd{6m`m<%6US)=IECPp z_EHLiPsEAxg9{D77?0KWIE9F`Zt!NOti@nhf}6bA45s9FoF-^?r~*`aVfjw51aU~|&S8veZesn-K2 zE|Nm`>Sqm@?3eW^ydE%+6adrkYP6V6Ybl6?*NuqRO~~%uGkgP+iHO(tk2V(_jp|#9 z)X2Zk&I*EwFHi^wwK-72Qf`PENpvHD8CpAr0HWNv>PTZkR+QCW0!AUG&^9T6*v;6nf?nmLhQNzgo zt;l}C$bSE^gtt$gcW(r9G@=kCLZDgjA}wNg`0lL@Cb1MIu_z`t8GM2$eBfrIBhaoW z@k>?3r1pR6)hIfygQmcqv>~!QLx?_#6W8E!@K$du7|5HE(BR3$_zOsOZ1-dXF$(`t zi+!LKdifoU`(64&AQ5WaQRY*l^kYv=1d;^PaEpxeA?+$m4fArjY*JF$i{QVm)*2=% zTtOE>BW-|fkf&PLZ|ZqtV?>=ePx}yKoj~D^|1JEriIVaXgT4jFi_cUCH*YIS>F@%?oSBUk zOv57*T=^kMO9EB>fm?kf2aRbXj)pDl9@>=U8!nQ8WUV>4@e2ibiK7T{gQin|1yLEq;fd&M!H!4!8#F<66Gd^v(x)^-p%L7a=! z#pO8?Q0wLgWC_8+L}pMB8GW28wAd2t3jZb4q+h<$hxY1$Va@Ov0)(sb{H>@B$M8%0 zVFt$%%x>fvLP<3rxgQWot)K_xCl)vA2tsi^xiY0w4nZc#A#suH%IA#0v-*ky5ypQunDx)pkSNO!aX+!Qh(Ow z*R1WLLWDv#tvpuGS}raaGTS_R07_R%OTMp)YvhN6+5i>R(?P<>Z4)EDHPNTc;d7&B z?!)qOR)Fbme13YWPWMclIL09IfiSYwmEm)NnZAEW%~jq{1OHIpgRt?qAqtz$yh93_ z#Ba=SCZ%TOO=soFp3QMC5(bcfCU4lN9X>(?jq?m~DXf5>Hh$VDZD?Kke)H4W`02=9&g4BPEtZig%U6EWv2 z3`yeN9|rr%iulS3N#Y?&5G;foB81#eV^|LPyTflV7x<+7f8p zRMC4Fs^G?vYR_6gaA^rVw`kX8=_#v_VM1;-jd}ys@jFQ@2J9t=_{>S{X#7@#sXtm; z$4Cqq%ZQf4>#BOnCHV?rheEdF{>T7c$Ee~JUavCLX)1L!na9D>?_N%C-wzC zT)!;p68w`?Ox8)SY8ALn#9TfBAK8V_JSz37ZW)iXIYhZy1sI>;+ z5`xjKU>Su{2H{#F(Kd}!oAR*}xjl^H4=H^ZdMKZBZi1LhkunVA^Wl;1yT0DXa5WK@ zJ!Jd)E;ONI!j7o@vC=hC63e9I))eF?gd}KnkMT0yK{B-stkv@qLec53KByGT^)}gd zpptBk%2$QPWpm52o!_~r)1QrnFX$yNY9%l1B`@$LFKsj;Zf4&(X>KU>vxTF|UhGO< zvM~w(4cgf$(^K_Rvp#~?FKvpOZaraT+xvMd#SZjg<@o$)97lC5@f8wRrjZ*=2d-`g zPVtj##2uY%c_VN5tH%U63~wl@>zz55#Z%}fY`429jg;W&j%DgV4nBs}8Q z^(W|$L^t47{{}1*P^$i5mfYOu`PmpY;;w#+gw=MY9aZ0&8ohY~Md7n1Q)n-d>3SIg z_5j=8MnDy(^QIK|Lm8>f>%y3h($s^$!VHFYI0co(Q?$_={xz!Hv|trUe3+P5_A-p{ z7V$93+O*Ld*(&m+P@((Vl9@0gD$4-+ZE{#=DYS>L963-}+*Sdy@=Rcmbg7f)D1QAA z>(}4SoM>FDZzMLzgVUyF#Bun?#RrHSktp064&j9ZY`Wr!g>z!>;9<{}EO7G(xc|tg ze!zNds8AQtz5R7j!M8gf;64!2rIXbv%X%{{$_qgrUxyNAoLEN|E)wY4ErDn6zC?Xz zWQn>Arg*r*d6}O5Y23E^Oveft-me_~&~&Pl@=PrI2F7_yQ70^I0^1pEx{rg)96z8F zHi$S3Mip(BEJV1lZ2F^psCSY4LPzCXQ%FocGWAI&<%^&AgPdBq90E(f$RpKBuA?bG z2#B;hC8f9_zOhG#nEXcxouaXgqqSV$Fk9a)8N6dc zBqsI_5szwsH2|H&@)FRgLYE*SoK`Cz+sBE)W+|ms&9F$jl^!lDfwzO&n;G$od(mx1$DuINA+sChG(Tdm0Y-AN2Hwzy9nL#kd9NJ^zyo0- zPET!8MTm#iP@Q?r#cB0(ayQtB=U<{io^_nHb*k^|6U;E~GKBjD9{nCzf)a*Fai3Qv zwhWr4q2TPj9Zit8YXKmfH1te+ z8sVK(^>#%q*#t@$!=zIeOj5oaKCSe@`)C|w+PIt2{g6NgMFq|5EOkJLtsKKeagAA& z90EaAbHkoomro5J;t0Xy-dUpMqEis1Q0!JjOT^E62i*-w`Su8f94dTcx(O0f)fHEn zXnt`2HPkB_XF@Opy(-7FJZ%V<@44~+i97Nk3k5Hh+mXLYeo2swa2 z(v^&o_M|`uB$)(+DNaQ&X?ATmqka8)$%6;3h&hm;x~uQOK8)U#!=_@rZgmB@rtC3o z^2N(`M*l@%>9TM<7)&M?%hj%pkC@%phQmqamgNdyIy1xa1zi~R;gb_7aQ?!VK&n5=jX&r;% zkJu{Ixd+cCu-(l0P;km`e*`01XJmykbHEvn(98$WxwfY(4`jpsf@S7=kMNR~U|$pP z)RE|_evTcL@vX1`pTizLtBt(omKPxUPLBGe85#m>#M==(@x#zP@6K$8kxbUsHaM@{ z&}EKLa|PT|ftL}^h*%OD#+h|cI6)D9Lx!b8$YNoo!=a*A-z?`S^chH9PzF`^HaaqOwKxZD&HA_NbgpcMSq>!Uz$N2bOS0c*yXk()nf@ ze@Fg0EJ47`qrD|-V^4aX-tY$C& zVN(+DQ>of#9owuu)w`2)i;WkQ6=W>yBnljnoqc0M_rBkFwDO+7PmTvkaY9|eWvd6u4ni6KM7IzVhqM2B7;%f2u`9wbRc6<1Ax>YgzSoa1`)5JgVAgWpR>8~fq-D+@j2A~k z@C=;u;6N6Zyiz_X2jN*Z(=tal5)3^r7U&-2Q?%Tv$fSFb|u6%o|iS!E_Th;1h zbM$%6j+F}=`I4<^4wgbJ{K!OonGKtFU?soCJR1G!FcI(1(dm*~yQw#3pAl~*LBt%? z7Q@3#Q@jb=d94loW%1jo0PLX8J`&1o49OXwg>?#f_~9f76qr3`nybX(%(Z{;Vh z6%V)>at8vhrSnxcwaVOCLDnSR0wW(6d#|;#nH7H;h!3RB@_^G7LN19Y_p?9GWPh&% zVag}ULDNu);gqSt`@B$QgqFMRsm1r15dK7ItgEU}#e_?&AU2#kqI=U$b1+PPr7-qU z^30QpAU$a&Mv-S**zXe0a-nU2^uDb4(qt-*MA4RX{T#3m0DSXgS2p7Bwu!E6cNP<@ zd}SKN$npR>-QO)|V2`xqPTReUzi@=3iR%X1178q^CNDCCrNTH799RTOrRBe8)mpJ| zvIt1pc=|S5@f29`JQb~3%j`^?eFj^O#J=iOs=YJj2bdnA=Fn#5%zsh+No=5|=b+)@ zkta`=uRg77c*@YpwN~klLlf{A0@Jpr2FcQQuuJQMQ58lK|M?zBOXi{G=$#dkU_#C8I;cuP#W#_SyC9bU0z%}cUfPEYOk4~#sV6j#Cc%v!_w3}y^wJ)9L%aB3yZ9ix_<)6E zemwm>Q7}+*H@IZeF|{|;om+lP&h=<8?5-TeB1h~hlb$@nN}a6k8M8#|qPCl~w)EC` z`Zi#8JDKyDV?U<5))nVBnr0S$G|`Z(IC*?6%Vw6GT~;={3DN5=ot>?{o4S&ad;Dl_ z4NF`#1^i{6O9t zd87OE8GqaPeapai!=(4Nn*6Y2{DsE@G)U*%(!JhaNLZI@B-8hUcjviu??tUC^~*rg z{cVJJ|48z_v_n@kjOKDgF;*m5E^6XK|8mu4#1&$R_uFT#5!@ zOf`w^nYJhdZTSPCi=F!E^MBwoG?y^5KB2#m4oLqy(m~F`%$!}!!@*wsyOWcpxx4Lm zr~k%ilxn}Z5q!~)mwjuxjR>Us`^jC%(QPco8}w}G#yC+KkkM#C;_>41n4QVo%Om!+ zja~3?{wl9!f5OXsQXg`$BdD3iFs;^&`P|Ds#y^!JJYTmMq}3cs6VJTe|8$(>`CS8c zd^R72|J`pJfBS*|$3|u^$_Q~UCYYTQQ#Ja_e4!gtN1L*(=$of?(Hj(7`@-Os_xP2!4%kKko|m3eQ4UIT{%H)}G@Wgl*j{bP^^XNvw;S9#7x$EHon zMJ`&~B*)P*nVn{Z!=!ZNY~RK@dD!4fI@KmpVtK(1S5M~^jzZw^kGQ+G*5z1*%Ii+6 z7Wdwio}GqCskug`{LA{^Dh#k(c2|*@D!1lP{t<{P965+kzVT?DO|5%A)Q-e|e#(e3 zaD>Xix{N;vjP^7g@LpY(%a^`DNGV!nN9W%lmkIo8=r&j~*C>Hn8=9swN_aViGvc;> zO(F8=S2MAE@LO>Ui2}+{)$T5CC3noAL$SIRE0EyeoIO(tm6{XU66Fv3KZuPgyNHS^ z{~i$;_7I3Tk+q>Wn!P1Ans-4=IP=D%acA7e!uoaYt;lFJ3PmJ5NWjM&y?62)7H>>G zE%VF6rqOB5GAWH;*h=yI87rXHWMg%mkSNB@);o(=of-qj?6+#YDPw@)H78HNWIP)- zON$!~Mg~xh-!XKT%0T6o|BHr@qY&lv1hiURAtsw6}x*dr8KWB2HQS6!1Z<<18x# zIHKOFf5e!+Ie`j3qvKHU^;8T}VG6xxr|fVB$a4>M*_r zsej?SZAWdCuAlb&`}`}eX3kfGLt8Y4lRRhi`BxG+-(3wIOjrD;9~NZk0)% zSoR^StY(@&3>;^5nsOYAZ_QeL8*J6hy=Q35aa%j#m&POEVK8>~=)aN2a=W@+&gq+} zA`4J?G(qg@3t;l){S7u)vNjLco?iMmWB|S;PpTw`=Uj*Thf|S0gC%N*6s0%|6b*DBErcE z2Rpfz8l=f8?4=JVpJNxo^m5F95Sn|nJ^!6imq=@DdZNeB0MtPc4Hp5xErEk`OI&tt8c?N(T+u5dyRJVIC56 zw880vApQOYLH*hh`D$Pc-q_^$(nvas)r-)^`Rvh@@~ip^{+fLc|5f za4GYu=vs(yG5tq~@G6{%U0d#RsN3G17+Q`Kx;<%_0K)S}O5NFX+-Hpa$c?0YN-!p# za@Fb`iij89lm`bJOQ|0*+p~dJUE|ebS3>uEqvX8Vm!f;&b)fgxInihJS_#GyQ9K4ffQR_ zc#zQfojzxBrRS8&+i3F&fm$B^8%YNtkEcJpPtAZj&_UNWgpsX8x2IJ-`5nV)zBhcu6LSR)SYdRYr-b$Z#a z{+P~{23oz;I*N67N2S=?GJD&1NJsf@3dvj39O42h0=LOIw9^zRHg|KFPDm zC~69RZg|LQ{0Z{8z=+|%{$pVqXJNLP!2I#)|KGa$?^V^^1M>rO^pW@9Q|r{FEtHtp z&%|$YVepa~3$YVmU;NZ~@_Imii8!GQpRQL?d)sP!F7C?Eu8|qx-|)T>riM8CO(OoN z1wxu@7kRT$>f_Jt%kAy!GfL;XkB=AUCiR_epZnwK93IIT|G%@v-&p01E5);4rOW3m=|KKYU~YmAhF*Klm-*QY-Ua9^L8! z_QEn2S$gJ89!ZQI^Ur^`zhVvlm|hB0@BQBX%H)sY`Y3Gh0byY->O`<1F?pzEA23i#AEYV^M4=vmraaY1q zydYOxPx+JWJ07MF)@grn>wTutAdK#xpxrko1tV(9my83 zT^t*5mhBNTJvmp>Q6n2UYYnPz%sS+L9WT(gx2E<^j_E4xR?%MJ*3}k>a6#F%Ysm-k z)h($%>(p^M*CrLc8|aU>Xe#I{!r8Yk54E%y=#RD>(7t%%v43lC&9evl3Q>0iA9A|Y zhMDPgU>E&?u4{2|q*xhH*f-bh^YhoLV?ob zKC!^jjwgh=k7QeA?>)gQ**ZZ<07~M0v$n57bwPH%>_XmB9>s}ISx+K#e%9P?@)Jo{ zqdPkmib>mFHow@fxQKe^jc8!MJ72BvcDC?zymPH=@2`KSeQG;=kAME_Soe`P3DfZe zGw~>0_Yq|uc)ZSU@P@FmeY9@e@x%lEX_WmWgsgG}QRklt{d+-({KUM@Uu@@h$~_$* z_(Zt4J72w$B@(Wea!0uRN%{3(jJ>f7lIjc3Lhs&so55h`r?}t?5fzD9Yza&X?>*^U z=2X@|mYgcS`4od9)kyXP@A9DggYAs!?4&NfdAN4A;&@Ziz`R2`XpQt0`Is@J5vA}@ znRl`TUH1_2h%rYkoQ->vL9-qWc;w8@j?~&bGsbUo$#;PVi=! z9kY32LLIA5fRAANmU6d7HVp%brq|Fx6TA#3HQ;+T%INiSu0IYLsjTs^jN&&3c+EA9 zY!Qyu#X4G5>X=gP5%fn^*~Wf4K&f_SH{i2WTY4;7s?&AmHJJnKMX)X6Vqf5{zW}Vv z`jQ|!*X6{fSm1wM&ax(|vF=fhpY{TIqBErNx}fI&9wx5#FSB_9wb#evY08rcNdWTW zx>6wgk!8Qq3%bF_)IHw`XF<#MJaz-+f?qVOV87fM_=9}uD)vKREn)2VLt#u_RR@|N z18J9aIFic48nk}73nLVU9QJ1-#kTmA_Gm18rNSJFwS6ODc{KgDCkGrbRLwZduO6;U zY8Dtif<077#Rea~0l-~xzHANMHk@Eu8dg*)8Yx>rprdTao6XqfXlwE>G3oQ~gI@sA zzl|xYX-1=KP!Q#6NejIExlJ5ne$>|1s-Py-Z}o1xZ(!CZYE%fk{0U9>fHyKZ zO;0d$9M>lb^c!AjD73tIWS1u)5$&NxQO-&t?E!;Z62*w|wCKJsDelP9;gk{cDQAt*Nyc-mWlj z8y@pEU%~8Gp<6R-YhfBXHxei(dGod={;`gfeHH5SOXgrt9_zoThC-H?M!#rc!g#w9 z5;tQx1iSKG1$Hg{bXctY@HS2!4;wM&S3@qzrp-o4BK z3ihw100oEFz(9G&mw2E&Me`X|^Stt2@1Q1QmnU*XLs|->qLCg25JPOw`QwymZdA|6 zQgL^l5ADrT7O)4jMgaWCZsGy>#Wd|WKk0)4M%OlgA9+o}&QH>ye?x2e0KW(ZdB7Wj z^&i(K?K*7dCmzuD!KFV)X!lYaB(#5N4ys@O?e;`xo$nH^v~%9ziwwvOFmvz&^Q0I+GUy|8Vh$kr>Q)V+aTZFt zmjx;xcmKSn1LC+E4f(L0Pyv;Xe&C-h0P_2N=uS8Q`NJ;`pc7}IjC&s-$?(gMIx`Oh zUgNPBauAN&BU~Nv?)id&e{}VX^P_H^(C89P$E(1Jv|DfJJv(T!r?21t1*J%C>~d<*<_BGC5&2ZRB9Kkg2@*8+(HzwdU(-NykV06Rl3R-g^QpWW`1 zd)O00VE&j7&xtC?9QfC{H|)L^`2FAq{|Svt0Q*U~a{&EGxk~`wiM4Y8^@+7h0JnC% zJ!tP82ADtj;seZ|c|igE{&|l8_(VGqK7J<$c{vBLon$x%(4Azs1av@3X`(P z^8g_zLdQ0Kv!u1ssXtK7sTf=#XJ@^sq$ z@wFDP&f~+xRj0~wI#`i&+Cg(8BRXE~O-OF6Lj^6Z6w{&PC@ z9If=L+Zf5VR;&y1mf3{$l&=t6mi89e@Y zWy9Rz#X-y0H`wG}We`6~Ba59db$vTG=meo^o73~IZ6M|Ekycd=`&XslqyXQB&C8iu z1Qt~ZD6VSzkDdK^!)4A4VH>JkH7kbe#N6?vhR8#Mw{e{=5J!AF#jlOHI2aAIdvzYF z`ou-D7J1Z-7b{W!zzzr3_UotwZ$heTnn`fDx*<^~8#gx!q9d8E+|>48D=`v#G?*SV zELBf?Pw~?d#x=u4^(_@Lk(F$qT3pnbcvZBJuQswR;tJ7OxbR!qIiW0h!04~D*{N7l zE~CP?uHje(v&qE<*B$I4-(CuxF$ppiRb(M4Zg4)L0fr$ymi8 zt>aUzQbBW1{O)0(M5TU)^ELAx@4>pAT{R-R2q(G*wCZT##qM6R`taJMt z!pprIO?=E_Z}}6w9jcOK=uxqDnkkfzeVlZTA>PwMroD2A1wyP?I!4`w3j`pU2Yi_%=+VnX#RbxTy(nWs}gy}3>7gh+-ybYAFK zh@DEYMHl+fAXs>PCB%^XjRz*Fc*2jnV3Yf0g5cZ%35LJ2R^}R{5-X+l;yFZw*VR-G zq1$CCNxK-fxsA?kY0+w~(A>7Xu^|1`eyfm|eZ#P~hc7fMLNBC>ZF6pkm|e9{)Z)Hf z(%@v1g4STGzHu%MW{zZ@*tQN)S{2pt7n~CZLEk!sqx?pQBPY#B)j_~78ym@zatx~K zISiyU$u_TabwYT!DV%t-AK}H~bXGz7l&Xtj5jXWTiv0q6Hj;j{t6MV3U4rX$R`|(_ zlx=kOD6VO9(PP<>?&M5m{Oh>Na30FyiL@r=ntXTbZb!RJ{ZG!-!kBSc8pBWF#c@~t zOcLUZTa6u!-F%xJ9k)ZC<-4Sd;uS2U$W3akHaT6gy-e|9MgDorn6nFnunQ(@+)VS5 zkx;4*h0Wr!wg-A)TQS3pMPtfGdmxj)o@SMer+2g5a8j+!e-k}_W|40-tjpL}kYNrI zj)7K58ImlzLj0#?2-)}L8%fvWf1F-8aK*&gJiI`(2z{P+hGT&RYR3I?Div1wV_(rv znKASW#ltJKczNiGiQ$)hJa?Cg@)B1wsYTBNP=yJW-WF)Cf$+ASMaAd48 z0VN?YTN{8zDdS<`1RJrgZ(l<-iefL>RDMO4%Pfk$7_DzP_%my&Iue_m(>K> zZNvet)m$0U7L&hETc;t^a!oGK&?M{E@`}pwUrp%qDtb$`a7x^~R5ev?LrwiNeerQ( z;QAZ&O8U|>ttPeYqU=LuK|Iyo7TRU9iIXb=3JWEIqHN|eb~F{`RA?}rbWssK)|jcp zowGIU(%`X5+bM^dKDkVWX8$#7SglMLCk-4m^=&6zdV;8NrM*PiL4oaBY;AqCpZ|uQ zn3+bTZ3)BTnFe?^!fR^_eai?xsp>wPKj&|{YL$Y*ANCG4Bck#l)ANZcsiR9y1mY6L z@N4+0yzI4Ape*i9E+-(}#0V^$LfA8juxVk(y_P(fxD4C_-Mi zjGrIJ6UwrK;zS(pJD-Zn6tbiESvZC6R1{p^e(1%z3{9(;o#i^U#f@{b&`}8$jzWK0 zd@JiFUOW@FC}nRvp`LAvUqy_tm0c_D@U;|v7cn{ zJm$Bu61^j?&?3RBh7r_hdvtbd|Eg>l10rH=JJ8tOXz$;W0H2NwXtv=Q-PtFjNxwq@gzZhX#{F}iKVHN zX#Oz(J6ycTU*4ursp)TJtHc8-;&6tou8sHMT9K;EUDla4;Q%0@j=eI>bi!wYz09GuseiIY225a;7uWiTx@ zVS0?`Aygc)G>NBo3))2I9Ig?w!;yP;Zl36IExTrMV{EL<$u+GVzVjw0Q!Xv(7F{G;~vZ}mVo>=I?#1cH93J?K{IcGYPamjC+ zMpFcva-jbMiNUZm6^7v3Sxc-o;9*glNO8z+KR(8p+UBQfM;_VvygrJU{Y@e(wHS(F z4|a0i8!&x$OgnoupwUQAMS>K)Vtoe>>WbJCDMX&d#KdrBh^KrrP1lL!wEa_7+GlU( z&`Mg%)l3#C!LgCJjDG0=*AfEyzGh-!l%0zQrz^U{?-54z37fbsAr*Ax{yA?nvY zGa<2k_TdJV)>?M2MU%>j0ADq96#*rZC9~xQUeGW7Lron2I+3@rHJGJeb=+k~{7>oJ zcZeBAnP5jdm{iWG+Bq{gd8SkaK&ZwKlA zK6ei*O}=3pe4|AAHH#yOFmd(4v3lOkp!LY$s;U57x*q;I+ROw03Zhm=KBf(I1_S2I z%GHbdFtvuoSdB1b^*Pi=vW-a%10t!E0|oxBas-UKUg7x*tJai>X=IA!!sbO7iy9-)nP^T6ux8b+IA4n1VOnvhd%L0jF!}lXPIC20kqPX zosk_PP|Y3a%{9$POtA3Q9Q=A|e3Mz5qE?3_OtXFf4IFGSn|aVLk@c3PSYE2da~&-- z(c#3@%_g+UYLo=yw28EU3QB7e8UXdbiuphpoRRlfE+ROoN()W9Shb_e2>oO?_}F-J zhn{ho$U2!BCFiOup z|EhvfkLDq28dlmqrL|J#N9PlST9y4cKlEDjkW34S<^KLQZ2UnorhPQ(!n3`n>R+^M zHUmo=;4u2g3g#G%^)CT-{Yg{%xMZa98m<)wM9;N!XZy_}M;^O>Nu2bSy6YKlf9kJL zfRdg&+&JNM6~_~%w|+i%LaJ7rl83DJ9g8$%hN}$d1oF*@Uf~Nv%VG9&p~*V&Ur$SZ zc4X)*+#!RE+NC!LJICc)EVZc{3-QZ#O9U4ph1wr80NzFe>Uexv{7nCQ^EjFlT#U^n zLO!cUvBY@PQ@&N?%L?*wc(K!|X6~L2u61?_Emw7Qc^A_mNJLOJX83T`6x_L6Z`91j zr5{ZRn~qB(RnUji)+4j1M49eTN8^-={tQRledr7^fAHG&HI_7oW04^pOmo_N{jb=|Fnx)u`S zxdxtK2iokO@JbrZ6>e#ddU{feT=vCcJfggF#u@s4QvxfaBy`XEav_p7Qz zx?1v=Q1Q&>e`s}@%@?7lm2gW@wJQ}IoU~4UF@J`U?c}3LTMFk}g!Rvp6Ys=m2d20U{F0(CQa#N*&)2D)vllqTEGF}{X@|SvdSQwEwuwPI9 zhPAgV_gMX-JKcwcmDZ;4UB!^6Fxx0*Nw&WtJK<)f#D2c^rcZPN=~!-U^#nsgFQ z0_a|_@0MboaBA}{&3!sI-k06be2Gtutz7vKjaXF0HvBtTwagv-{>=&MVufxir;ih# zf$E$5e%U@6NJtr0hkhS!8a0Cb>Pjk(+X%m?*_u8c$3~SwG)~g2-&4<$dqMW= zAF>^1ziJg{>XH(@c{I8aFZM^l5w9$}jk`lPak+j>K7ho!emp{_!SIstIJ-}>Es6v2^F;br?h-(=5wqa0WZNcWL(`K)i$I_qc@^6v*cHp zQ2JWc394&`4Lh4GX%&a-BwQ#$!oN>NpQ9)H!ug?A+jp5oR&Anqan*1^0`bdvH{Q#=<#m-OWUoYrQ28rALw=aVOAYlX|3GD-em-p-mtE5BJR z;vT@Jl{9yRVnW;6P#>bsiO{qN19KKyQHNjbeaP8;tCyoq0%Ywx0TEaa*L+AV=Y8AP z7M7#iI;+ah&}UZYXk{gpBjnP2x>#^Skhz9t(Ja&mA6|P2{o+g(eP@tbW^zfnM`A&v zi&le2XSIj%_tt71l@$)V&(a!~sv54Hzqx;NtL4ryAuQNxkI4lcU(5Xe07F2$zk;N0 zA^;?3s2g>#R-tglL)&8=bPx~o%`nSjLaFejlW&VS@ouNgGRf2(YD3mDNpGO*$fY44 zSv|Zx8ldfP6BvbTmC{O0z@ShIY1t84a9xk#z;?hOK54BOmI1=j>}G^Im?iT$-^bc z8|Y{icB@2kHRVwFwMOy>v|c2s3}{svazam zS^3JPOMMNERcn3N{j+D3PB-|?{AUKgMH#~QZiC;d01m_k-?1xwjehI6I%bjIrxV3> z6)Svpq+#%;+ zN0zPhFAw;e>V4+rCD&P0Ty@s3#%`@^q+GsQ2_)oJDQ56Hl&P3l*J$uN`CaI1C_`sy zy`x`d%$R5O3-(XiQf#uXp}wIC(c^dXdt4c(BMA`M23O=!hCEB2ZOC)vxj5`rl~q?& z`jHfkeuS}%Mp%f(W&R99-aatf(xnuBu&uoMOn^sC8M5zS_$2s@k%KCTe0? z<8t2`Lq3&~(rG@Q8nVovjNi-neTMuFzu%Cj%F|FgtEj7~FY{NGSNrO!E9)ET{B;#| z2)C6AXEyjMd{wJ_CN||w)kGU5*4+~_Ty2{s3wX~_euCBVGuC~@!;jgNzHRKhP zHtz7Zx`>k>Fyv~vhJ1T)iPhLxZSY>c*WmlG@A!lKA%pMd4`T=VYReGEK!wkc3*{n% zKO%oOa2?jRp&|d2u*tEl&&j91Y0E&Y@AJ(=+4QMPD98ODp*hUk7&x|>STuY71_O0<_3120OuP`we6b-{BF~~gf8CHr(403?&P56*Pj}dFWnHxCCrdGcICK1!aCQn2p^njtU1 z4wrrMQbS%w4IP!@c&C#agOt5Z-e~Y&liV7fH0%4jgDsn@BW;Gfnd?lI)8 zLdrT#U!9vntz-Z*=g}dO6^#J7HQe*W>a zTbDKp%%01SPASf(jhg8Ed_$S8%phU&s=x|t^>CDbO{Cp z8M_@DVZ2LFqU6@pNJ+*b*xZMg&7B%m4LT^v-!`C>~N zMY2NEm(oiEp;L}9zSB@9Q)PGazd9MpM$nLl%GrjzP+nxn<#Gk%e`EYTgTK!|kYGZR z>gE%d4eDtzf@_OzlNtv95E)ioMk9YlalY$(e}QGi$WPp>wwKYP8;Yh3G5DAKABNm0A8YV`5(BM~kCmW6@T7eQA|uQuS9Ge!;NS3XaS>QiUDxOn41ExpYe6N>@Is-$IAtWwo#WjQ z6WA5oheoh%{~^8i-+V9f91bk!r37rbyi2|+wZiMV=eerX;NS5>5)=}M#65n z-*Om`gvv~%BehUYh%(Hx!cb-_wT3cRsWap&X|8c}87-JfXHTC#o$07ARp=5q9#@v5 z3|&^18Okx_l;a>kaHkTuvs_E!=@dW5HT$MG>uTrYlhBr&UD?-y?Pos207`d z_x5*E*ic%ORzn}85AG*Zg~$|EHc_Sw7is#Q>cx3N`2&sRq+1;}eO)K-sbh#06Nm1t z7{~h~6k`))R%xj#G}A@XxrRQ3=#WWH7CA#nUo9g+KISlogOL&!tIqOmXt%6uZeNNT?Bl<6Vt6^gJDvjEP5dh|17M>thT(U;fAtm4CR$D2Tzq zC8bj5Ba#;r_wA>?DiH=M|3+Lj+X|aF#g`wB=66P7`R3*M)~SX*Re6k@Uy_iSMJEh5 zMz-eT`YjM&%hi;v3DB~}(5ETP(5LG&482sJ$@rCqK8r;0i2jbS8TxGG9_4lA4X1&o z6lV-_RZD$lnqmEhByv z9_QY7bd>uOj^t>bgZxLC*3L%_Ig0BX{V09Dp)XMWVdx9Vwl<_9*h%bRo(jv4MNnoe zB5^Z1iLnzaF>w-#hRb3@KU!acEbZTjRCUl8=fV8uP^i2Znl{4VRsBEjS~L8g*Hu?*)&Lw+8YPV&j}DNHXn^a>qS z*OZ3a{FEniPf7)!oTR8gA}l{JU*JA2yO$D&|wTwb>t74Wi#isga&GXHYa z0*ejZr!S4K=fn^egtOjP{f>otaaj(j%bR~dS( zUWZ7;m$k_h=ttlu5qQE3rq|<0)sHpgv*fc4y@ABs$i%eQ(9=od!`0)B!d~Y-uu(9D z6yz++W?iwop{}-WWn*n!B`!lUF}Aj@HXe^c4Ewvz(&Ni2D;sc;RGeR5*WmA?(XR?L zHZ=y8mjxQD%U1aUlwv9OwBQjdpGCs*g_V!Y?|bB95!rMJvl01awUzl!6s&@{08Uj- zSlg*!L4JzkB^FrGHAwW^iFJmf7G_1F+ybAlOA?hFl zV6Q4?p_^4vPpSHBhDypmez8Zwl;9FX; zvZ1lA0h7y{{Jt{Gy-Kt&t*RE+=Bvu8EB%d*P?H~vY2#?|K2AJ?5-X)M-1e@w88=Iu zlMtJzSc$!Dde;(cRnZkwC%&cZxkmo@^f;(8!ao(F6Inz`#to3l~N zvMUEW3Gw)jIE_VfI~)g2@?JQd0JJv3?Q;ZX!&R{bj?lJs&;SgGk2kUNjR-ooy)g@I zbQ8s`uXS}=ZjNlDU1)R58MD#OG=0MKT8?J!ISbY#zE%U~SE2o7!I|S{$);tr*Q%9QEfZ04c@-sCyHx0_^i@=0 z0qh#ulEJR2sjKxh;aBWB(UT!{D}{YfA<2dXR*}j>KE>}_gBcWh;7im%JFm#lm?7?G z<#lzm_kp=8%lrg{wmUEneH#5`HMEIr`~7P%LpiQvs50?UtINuLgd5^61f2P$V5t=> zHG{LP;4CvZ&kD|?L1kmC1_&RDT3&B8kD0q`vuvLzX|{|7%ImGB1_ar7AVIf4yp7&~ zqrqyxY^M=$O$&*jm@|}sxJ#e~tcgVpm^4%ZVuDdDSsIQTTGft7CmqMu%=wWfEK|TM z$28JjofC1d|H9mhsQ=oDsk=779>48e0zpTonqR(#%(YSflKIa_YEf5h^ zvAFEa>Gu#a(!zC4H1%T>sUB3I_gU!n3ca3L;w;32Fu}FN|j&DWm zL)G+f&lD$=_?^b86p&ZhPvBWkzNWf&awHfLDqX?uXsC)LZ?fIOT!omnUYoqx;_lbB zl~LOaY`wTCZkx~rom6j`r9J~|SURG0J1Zk}Vh<|3Rc)OSy4@VLu5bM>&9tvV$!)}4 zlMd6bc6R6f>h`G6VTLC$dE&}l>fZ1FQLnCoXo7BaYDA6(ti8pL~r6X zsN~c2@l4i*F0s05Ghc)>%MS2FP%;2V-HF5e1TFFUN?}2&qWv8AALf3fEOEJfuywIL zG4jP-(@2~3RQMoq^<`Vke$~-=Bi8Y}9q|FZyFd>y*qixD&m}o8D+`v4zi_BpM=v8O z-w^$O`O2c!ZarV3(bBIhX5LM%pjB#5b9}8bEb*|Cd!9*)MOM3wQC0+E^7}vBKmB+lDu`iGB*3LT<(w$jt9$@9pR&X zhleyIen7>6)llnnOwvqKW~C+D!9;2Ktt>JhJ1{j6KdO_Q7Tv|su5 zYV+x>#Jem>&j1XpTlIa*tKxqIW8S0sAE8*cu?8pJ$%=FfE6mK)a1Zlb*Y_-C)t(_9 zO?5qHH{2QJde6?4(&tq_#~VMK9*x*8uBjUvdOFP=7x7$TF%J5aqisrxIM>dDt+8|k zX&D$5++80umxO7w=8gIzI1!UUqX5S)y$hot{X4`xIx1U5N*{9J_v_;uDXRcbenxW)SU0rBq%MZ^^lyb!q77?6eoc;;q<-eY4+1 zQ1_BK`M90Sx(H(-O*#cU&^W<^zc!V-RP@UQ?Oj2TqMdDV?2FJ#MeXDi^O-j_$qY1 zUW7}n?@a4EOP(#hbL6?=JJ0$aCC?Y-7Fci>%8Rhx#Ukx!3@>qn%P?FnSD?R=ZVS*K z?4ZN>B5j#fe!2Cn66p$Ey%66O;tO;ONrY=H{ObgLymSuOuBQRRjgGJ%!z&%(RTy5K z6kd~5zR3|@i@$a9aiZSiMZKAH>|UguVBrz8@NTy7ZLz+s);DB*H(1{`d87D-t#X^J z_|4Y0-HPw9!ku!&#-|H^CtCf|E%?DhCvU_zCijT%7STTnT}=?-ZPs_Y1I|hKJ6S$O z_)oRcPqW~hE}tR3XA1Zu={$w_o+G{?}LoOl07g)p2JEq zvoeSFLiRowwhxAvWRB>CoC7e(^k5|A7>VBbJcl0uZw?o6+3Z@#%qIA`*MVM`&GsOg zbM%tTym;|EtGJ%6UrRakJus@UBy)7;7*Sb%FO1y-<4Q8eXHLY3`QDPuNtu(;ms!vY zQ+7fIr4;r;(dx{?`Q98a<(je!rlGG;_$H#SSom_$S0a2v1cj$&PRrOr1h(RL!laVS z>Af)H01P%gzkt$s=9!qe)5>fD9$At(3vqwi$}k%a6N6a#eS?V2V5^tt7M7rf%I%F!n+HPSBJ&X;{8Go7~D? zIJS^NroUkiNE95B*(f@a(AWu?7~}7SmHY-^%5G%;J+OK=Y@DB#*_4yE57r8bt;?J? z1fI=7emgEFZ7&@E7$yf&C7)m?H;ZJdy%$;zz);KgAfT?W8`SwmPTFJGu96%jN6pdp zLTEQEoKILw$ddHwg$;!gqP!c%&NnRIaNCzYKVA58(jP-W_u`cIh9~0bhBe}Q39J|2 zdm!j}!t;{nRaozN)AO$9Jq&-~`O0(1{K`7U(-$X5&mmc&udK^y;+rLBi-}W=W$74b zK<`={%j;m0ydH|=6JV+wgoSc5_~aI-mqV~d-T=qTZO|%*pmd^&uDg7Ba6neeTAmZZz)pjh~UR3M)# z&5_TSmdHPps^kl#)$)&}H_7Won>B3~w*DgRWuOukyWPQFIESH4zyLcUIVL%vaZ zTfRy9M!v-}ME<#FsC=8JP`=$$BH!tmFW=>E5GJ>Pk!3-f&853 zGx>R>-^-qZ@+(NeUm*=&mNoemq~eQ6$Cu>{^k?CBBz{N9ucA`%x{!l6LWXB3tdoC+ zLO0D5gHiG=@^189hQ3?npQGf>C^RLf@ZF9Rk0g9|peXkU-<>!~ z%ffdTrYgdBH~LiJy9ZSZ4W@d&l<&n74Ayv_mG8q;4kvqVk?+Si9eO>R|31l# z*du`lQ>8?LUOd+(0lf3*~=E`UX687&r)n(OrhWDvZV7!#buo zW)~0L95!bc`D=_rl6poDG`qAVW)~Wo(wBwi*xa}WxaAG+flVl9H=~4WcgegCjO|3x zqTT@OF)`v2e_dF(YbT@^W}es!-6(Rrg_%+EQT#3_!2&TCv>r_85e2r`1-6O;YAGfx(ulFU;wPc^5&J#ZS9JT3F|o53i|JRO6(MPp7=Zp0=ilw6W|M&_CE+-G6h zS=V9~`u4)vg-S1+gIRvyLjPQhInNbyeo5vJ9SGBeDzLr4#`Z$XNAqqk{J13ZB5M-f z2RnA*gi5g&Biu_eFO4H}86t7nkgW4>#`5^FBCbZnky9=!$-LZw0?o@iA;*;GSL}qr zg_%DwYgFfZ3$ZVLx(BXA@H<^-?<&c>Y9CzP3)hG_yD-PQ53bz@*X@Dpsg4`&1&_2^ z>X5qNN77r;AEkGYi%j+A@2~*5=q(h9zd@1sJ1CLghI#Vup+f!>ER+8NP4Zt+6#fmi z$nU|a^80X}{2^QTlp)e+B~u!&43nlQ!=>3uu2iPvNz0V+(rRU*beu9t+MpCj9ZIp( zr4<N|CfxDUnWBrb*{1)1@CPrP9^POz9S7mUO2wM|wb+D?O;pm!4G?NN*{Nq(3T0 zOYbO)rFWGI>0_l*`c7HuF_dMV5z2DUD8*FYP69*f1{DR>LClNTf@_Df%5A33$nr{n|Zl5RTcWf+8ZPJ^LXo-ToJLUhlCO(=J>;t--!gJKDDytT zfvB-0K;Cb}EfZkv2ffv#H5_(_W1Fzg`uPy!tM`5qjV>d3v zUReP{pc;ljJ(R#|D225!7uLZ-?BEJ$hUL%-H4s7#W&@^fg5zK_rnF;dJNiz8E;t){ z;5=mRAH(Tz8Jq)Gzz<<3?0~D_a=06Py>Kn;hnwILxD_6QJK+~_A3OKKOF8h7G#WmY#>1CV0emf$ zz&BDUd@Id`gVI9y4hQtHQiIYU9j~lTaGkW?v1XbE$|0--8M;?EH1~>tm||=D#2}MC zD?gWl&*$8e#OLc%^7-@f3s&LVkk9E)c-9OwX};>5G#@ws!|1agUTZ2U-V3ky!W+9$ zIE(OJ_%$+eqFYBI8lY@IMr(sf$|fjLHp3F71FDsXKrG*^JT6Vp_bXGHpzlTWc?5Y7 z#Ys77i1ADE%htm6Oym?4HLw6t*}qF@*ogk5l<2>S=oclLP=r&*TfOj`q=l`r6$UBW zV1{y%z-*Wa-o|VJDtw5Uzz3@yG|nY;UXow65Ua&FY7^E|T>K#XR>Bqc?|R|wMb z(f$m(mJG8N;UoK&C#ja#tXjT7nxHI&wj*f%@7>K$xzI;U{~*B}g;I;Mm110!{_&pq zN?{Hv3xCQ{9up|7!;u!BEGMC63Ch_>vU8AR=fXVYJXoe&0CmcRaGdfZSg%|Jt;!D3 z$i>*?I!H%Nc|0~{J?KIYRtSB&;ca%q+suXw-y8C;u|6WX4$7c$*?yGxE{eQ~^R-El z#aM(2X@x~7S?{%}?WI^0b*gfsqhB?**M$z6DR-?8Na^E(97 zcZkkS2D2~a5PjRm;UbIG7mBqmEt;#bJO8ZQ3c&IaBz_l5C7#J z^u3$l^g%p5n)L!vr$E z96*I7ZjH%uTVoWm5IteqU7qNLf0|l~BD8-Q9)+jiS15+)`)efR7dS;r7&g0O7m7Ae zzQyi1h~4oWcE=%@s>-lXRiHv;uuA0+Qg!H7y>JftFHi@=4mATVSBJn(H50B?v*0Fm zDBP-M!=36dxKAApd({!}s5%m!Qb)sc>KOQynhP(Y|26dg8ozJj_s{A$_(Gik->H)% zNu4Np)Iv#Di=+&-M9NmDNh8%6Hm9$_k@+{W_EKj%m}3m2Phvw4!ceIQCy1{Ab?Jwe z>Rr9;Swf3mwLoBlwb5TsM0+}%0Bp4P4O?_mYu+hABS7+LFcOn;Ohj> zifLUv8WeR2XlgkaY6WDel`ukG>X_E@?cta&e;}m00Yl{v<&UgsT?Y?p`a_ufu?w+J za4lsbHrE=bI`ZbfN#{t6RUy_@KVq=bF;estQux#O_<&hhMiNtmWGN|5SV2(LW(O=S z1+33-d1t~}YDp}wKrI*5`UE_oPN)&YtqXMZM2CR#+7$7MZ6f!y^93$lQaAjrJCcw+ z1%aP>n1+9e$Vy3bBO-cta>LKWhM(2X-1rYd5~2Jv<*MrLq*ayrgOsxKUpCeDT2qdVZBM#x8!7}w0s8xRsjp}WVX8Y}C`^8qC6jwc`4)wa|`c=Q(bZ2rm zJ%BjuIZQWwZS&_}E$W04)R~f!I^Q96s5&Qs?%WC5ZYahn<`9PN$0oDFy%JdTvIvDz zw7N*?m87D_?#1dGpb1qvk43imv^S$Zfha$TWP1u`sL#Lx^?5j2eE~`KD_Ehv1P$sd z(4@Wr$EmNv@#<^PtiBGd>YFwhj|V3ITmD8gHsp{@UQlP~gX@|6Epts?2kpk+ZB45y z6OA9As_|Kp$2o(U%^ugM*;$h8Xm>Jiyn~JW3pVmyC{o`;-oP1G{Rqm`kHM$@9ct81 z!LNSq=(m-Qrf8rP>4OKk`tU#Ucm1%$o@AEz2CM$|Ff4J13?>9l+F>ovK2K0(a%!q5 zV#G+QNtrB3tI54ha5Maj1|g6J2QVFfHCEgv>l^=_X8|lmNLdmysa!+T=APZq?n>nG zL{%i#xf1nwA`^+Fu0(G~~}S~{d@gJ7CA z1ZHZP(5elE?OHaRrVWELwGr?WEeEdBM#8mP9^9{uf_>U(*stZo%i37@wKfiZqfLMh zwMp=qHrX*peQuBX&lO2bsWahG#bYl$2LYRQ5N4s?o0pe2D#O`Lifk`F7GaD>2u19s zB>Ae%K-5bef=0EgR23z8?V+f)-apG?C5?beNmHM;5TPy_aJm|+XbQ9VXbtia!<1|8 zlhSkd!A%cJgHTnI2GeYwg!PU(Hb;l!i#4Tn~fDn~C1*;@y@dy6snD za}v{rO0YUdRUVYGJy1&#!z7^E=4*u|z0z>>)nNTOTJeL@2pLx2C*|a5C8oc)R~mVT z-RD9SY1NRS)xl7$0SYxglxizsxwZ!Oc=|DC}1rf~n8dY;=-wlq_8={s6GtxE4O?x78EuuylE#>2|7W(@2g4Roy?KIY#2FSJj#x2gZQk|lK561YtCgGv42pcefHMiXEB2aYm11NoxBH4cX= z*;Z$)v+Onx57-&`E?JJlB*8*(3$f5?sfKJV4l<;?lA|OjuM9wW#iG1oQoe>FkkD3j z_81lNBEzuzqd2h)Fo)?C*bzU$j<^yQV3Us4c7b2J3f5^?%tBiDVT0%Z8P-8SbO0HK9=6H;u*LKX;7l=`O|oaWxttPKGq z`M+^}>LmFvWwt@Ljp3j}^CBmOq^N`<>2r`lxKB07liB6h|JMRW{bhK@uy4_y63^Z_ylT58r$*`|4G7Z{XW)GJMQ z=sKfmlGeV(<{ZQUbqGo^xQKb+7$!p_Q&X>2lrc7&p|V&sBpVUWSH@b1zh!BVttR3# z5rt_3ATQ5EVN#^bw51Q``_kD6_)<&`!wV7h8H@5f*Hc5_%cO=(rJZ=jfiWG@m>1@< zbXd#=K^4n@6>JF9u}oOWvS2M63N387gYjDJhP5i=Z zoi&8>VH~{>YsvB@$Py&WFCCEGXSvwn0BqPV%|=4bsiq(zw@9kZQ(EUJ*~(RL48>*R z`fMi3`Pw2Gi8{AenzyGcz>Z(ldH5Y9(5JW zpqNpDw@UGU4Ys-baj8PWf5oz_$h0el3U1}K%D#?43!v^N?*eamjEud z1@HxqU6B3-u&<8*K41&lC5|o?Mt2s#Hk|-PtQiGu3oKxv6uThka|l?(p=dDTRiaF_ z@VejH?^`w?UQ1ng$&1XXLCw3PNVsv{bXC>)9?3`3)M0ya@ zLU}ep#&4R1YOhq4w2Q+oa)3zdYhs~ibuC~^EXFbli{j9ZNrrZrgE0)7%7$sxcEO#i z%dbl=(>dB+5zE$pEhzNMp1V&;UE&!;_?J_z}!7>fARo*02H-B|a?$xEu&XVtqI>!tRO z8>rqQthhe8;=g0XpJK(IVZ~oKC^^oi#9}mJG3NVYF;iJ# zVNqqt|Fpu~Je*Sfz0%60LCMEEWOSMhKTWANxA4$cBh*{Be5$o7@FUKODM#`~nKi6R zuA#u5cvHv`@`<{Hlo55wNiwUh|GHKu*H!XA)iqnGx9WPxGKI|dEY4G}2ku$C8%F0T z=u;NkcHuR`Uh%3JN;p9_k#*y7X)UTT>vEI?e~Y=2uLciagR71vF!)*+!q>qtemqR( zC%{x5gt@%gR%x+T8}s=#=JS$~rPfRKMr1i=C^JG8M$#H$= zyyKPisUQZDAwF}&5Ch5ysUV(^4Dp2{h8R?uEr>HLrGynKs75y@gM7mw=~;@2rA2AA z0QnG*ECA)^?UP!P0lnjpCd|f-DIu{{OTG<#q)D5yF(sCvWZ)ki2FtLrDJ7O0k^%ku zzrb>{(r#&oGc7Fj{Zd;~;a+KD5_nzeJ539z++iJsnQ96bX-Q(=Y(Z+xJZu?Iv!qSv z%M-rM=o@8QKyp!iyAH^tyBCxZY*G zQnV05G4$`EL-GiXEV(@%GVR{8U)n_vi8gmjtUzeDKNPv$3{w-8Y96fT#L0HC=6Tbn^L0m^E z-3~ScC5mf1)50?od5CsRqhuf0NgFrH;!zKK=PRQgkxrp44zkdk+L)ur=q)wZ)sNQE z!g@&N=uvbNtXDd%rWli?(|cj;E+{HiN=-}b9IaTjN@Q#Mq%&xjjO8!|zrE6#cgTr# z;2cOt!p{Sy9|gL;5Q)DCGW5kTOg|b%>r0?SFM~yTIaKKt;MXgmP4~fx`Z7VZ21MTv zqm&quK!Y~$Dm`+R*a(c;V=}625%PTzF3)v^49RJ*QQ0QuzYJ(mw&T2`pe#IIISEr$ zLCBHd(GMX!%{-gWl#?Zf7rW88getmpKr}9kqj9-F;|hVsPfRp^D$=g( zm99)(-sap_QP%>!21Q0Ka&8?A*Xv=e?uUrJ3eM11!$o=%T&J&v+x7Kumwp0@j3A1P zR(M_y!HfC^ctdZ4cl9uQpl^cD^v&><-i{)pQ&RPaWawSe2>nDUSC2{g`c`R*zD=5@ zZRcg>rmsaX$NXO}CN}Khwr7ry(X{-JN=`{UZ=^Xuh=|}nx zrOWgSr0etxr5p7hOS|=prF-;Cq+b0}>0$jc=?VRE=>`1?={5Z)(jWDo+Pljy!Z|2_ zP6Jh12|q^P>0-Kh#}-BJ#I+{rowz=XKA{f_9|s~itm!@q^{iK7RhR2t8eGe(T` zC{u-K8o`t^DKs}pT|dj3<+80ol}Cf>|Bn4f3ikhg6V;0S($1#BqP@~C;yYxSs|3qj zZL-WYadx`4kb*H{vFlQE&wlB80p|t_&W!@jO(vY1<8XeKfOAWn9d{pw9Z!QX$d1<_ zJ6;Pp`t?w#-vIOUn^17x3@i0pV1s@ubm%{aZTjtSwtfe)=bdo5ei!W0?}i)ndvI2} z7w*yTLpHr19@Za#XY@VDs(W!}+lMpTgYb_25VGoi_(FdezSbW>R(({`^v9%h{c$Nr z|Aoyu7r`QAn6t6(eho{}caC74Jezg$Y}U!MStrkCojeEYWTVU+ori2w$CMukj;UeF zxh`foPdVRG*w$GGtnw_C=pW)#vUDq{2S2AHxEPgWG0+bnv7W{m=NTNk&pA}CJh!Q0 zxU0$^Di>I4+%n5Vl2cgtfOOkX>GtqY>CWI#>FyKvNVieco#3*-=r6)h{Ut{|Ikswd zq4FaOXt}kaQ z#^++?k`$Iqe{$iJhsl*omCO2^%q-di{^W-I5mfz8{hZ9CS4pTLm)j>Z%PmCG3&n*` z^KMr{k1!GXivyu_M=z@2Nn1kju1I;(^V}p8t^QuhhW#Yc_$si4zjCfQ_@#OpUiwriAY9R^Cum1|yGzG5fnWE8j$MeO}eg%Zlx2a*i>-r?Z& zj(`mBNJk~k^GDY?t%Ghe$Tc_#c#;=y_mgnhlSFmzn8VmuuTgGr*g9#f=h;p078Vuv zO1)+qii%UTVFI>cA`J05Px;xx74noDEo(-eXpJY{njtO}Zc=Wx?-iM5eD8i~ub7zj zB{!$IA5n8%A7jBy%Fk@8q1muB6Dqdj!DO&A`mq|u@lUhxcUEuF@DO#v{$%j8 z57P;^rW^#PCG+u7Df#&4_Qw2XOAh4Z(uH+B^Yn$g!JDhx2&%G>M8j!GcLlwRK=UpJ z!+SJ#;S$L5mcs~dg@eL5HYswH+ibHx_K|@IDYvJ@dT%n;OH*QfhmEyMdhJb;UfyFs z^{(hgdIiM-RH8q&X~DY7vdGOfH)dx@HS*$7_Q`~C)~@Ws)~;+(@jmGhTxyQG;~ZJq zedsryga98$Yf*14FmD~`-g+43Jr*W<8=%D72-7e;+q>E};HCY4om~ff6jiss=gi#f zW@k3p$)s#afY3>y1Pl;*dr zA}Rv!+}X{}?(Fj3_dR|;a?bzUe&^nE&#lWc0{gGAEK7bVu-d?vpJK=$(clrXwuNG_@1RYAfyS z+XZBS?>3&)fwu%aU_kNY%x+%^9JF?_cXw_3Pv%l=gkpXqSc*UkkS(W5d$e6TC8V zU!Wdx{b|&&)`L`55AjAlNd9^VRKnZVN?1V|d59`uB~`*B)N@u*uX#MA5^{r;kSo6) zyaYlyNLRx0w>Q{aiUM`uvDCpEPexc^{HZpX?PY^#p7~C~ce~(dsj-BS zl_q9)$E@kTLh0^ciH_G;1;@^iy`0cJyEkc04u(ujqKq9q`7Qs{iMagW)QR$!XvyD! z|1y8?TJyJu^7lIBZy)7v|84SjP@eby$)7AADpQTPgB-l53k6*pt8 zX^y;{b)p7YNK|EwSTU7<7#qXJ6Q06mu{i*F}i29w`m>)q<$8?2s9K4z2Ojmfu3hnV=&(kAWg5dsc{f_=B>oB2=piBOc-K5@41 z5D0g;C3K2$(vLLe@u0@sN_h|lQ58v?<$~AXgFSExSSM-~I@$Igl7*-gWS791-B881 zjXdkj&3te=%nbUPq2n7C@A#H<(D!5_{>Xfe3oO;~1FPitIcNr@isH-f8NI7Ypcf*m zB%d%QOYtmOJ}JK+m;)p-yd|!B_-}c9KslFB*(l>52IpiO0+w9G$ZXSC^HE5)#X)6_ zh7?aQ*T%_S$3^CJT%x9RnT)rq%;UJiypBI;D7qHRu{R{gq31IEId-xnYmPmUIX)e% z>YRX9w`XY54<&HcYK~lwG)E}>RQXIm6)p`-AshRiX1aep@M9fR*X+P@V9b-u8$3_{ zNyx1QsFLBMBu50&3^{$F$V^r^OC*ESr`TDJ;)s6e&Un!*IQ%B2g$=(`gCee!T8eT?!JMis+^T-ShEX=gL zJ@6T_qJSe2zq=fWELMlle0^h(WO6H$MbzKQ6ZuqTQq!?#t^Y;<)6Bi_pv9E?8;#=RQv}uvXCSsd?H}{-q~5=k zk>3{YxpDPPx08~v(+jx4z`5@K_YoFWiWpXziiyguCTB^7$SA)hF=@?}B{k`f)bg@# z%l=rX;+~9;xJPS?R4l}!_GI!`iqMsvmi;ffGcim~K9uF&Z@{n{oaRGR)&?44w7RdH zvPy<3wPZ~L-;^3nBZLh3s#wL~CiRLIV+jwfhIPHL34+iMWzk#G90wz0gw~B%6A^wA2~z;7UR3*cOK#u6SXug>wPkIQp#sR ziWQKjGN9$v+dtJ)^u{&LM0rbyUDcfPQ9C@ypGlk>wH}sZ+~ts6Sr^>5;u_iMpDF)_)goF`8Zn5z2gn`W&NYdbAPAmXdDZ=#M9!+D)HiHu~S>2#>*L z0sa>M_7zAuH#pFo{~jx678GqJjNQ2pmiHj85^`G(Dp*WJv$V19wbM#mOjTFgY|twK zwW)NqpijdUc>UcMiTkj$eRgrHdQ2YX;@Owb%?{DO zdGzte$m5>fK_;HoRu@uD%|P5LV=s$!fq#5Jj7rXX&C09Ra=+k&prj4Mdrb+^ySUdG zM+wqgb~Gh_sia-oDmpFsWTf-tIO77R_fEa}A@}6?<<6f>g7tA7}@?Pv@f7X9>HXxtEOsr5*9)FV= zt{wJ~Ji{=&KEwF8{R=&B+n}8f_5lxwPU1JhxhH(}CJM|9yk@)(n<`07M-21z=Z^aM zS?3#^!cTs^>vZ#qC_D0+CSMyd*M#|n}ibx@^?dKadc zgDoF9kyI5nnS`xiDR~}S=C7?3KRM(%HMf@HL^k##8vVa;DyYv$4_GvIau%mE5kjr# zSMHK8@RBceDQ4BLG-GEdff=@VJZA5bsALw|^s&rM#N^GmY+Y@cI`1L3+oo+eVgev>^F)d{BRPthn>6aW6@+dk7(GGc7qPUwBvA} z6GZZf`9|vzc{*~#|Dq4XP2F;wl&?J0mD3DdQB63iK(VQutPaK*@-BB@RaIaAp$>0l z3mPnr_xJlp5RiEQUJ4iJz4D@kp&^Ic1{sCzEgjxt)=^xPXjI*4Ut}6fSOe8lESjiI zcjJPTJ?e3_2NT^L{go;{QVy+bkMT-MjO}sPP9=IEZ$l=%0D(#{r>`u*-fo30r-qoa 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�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 ~x$Z4)oyCp@*(g}Z8~Teh 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�y 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

>^FHm9Jr`0wG`l(-ysg-$O(j#(O#|%r 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§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 %*NYpo{>XQBZL5ox0X5I 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