@backstage/plugin-kubernetes-backend 0.14.0-next.3 → 0.14.1-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,75 @@
1
1
  # @backstage/plugin-kubernetes-backend
2
2
 
3
+ ## 0.14.1-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @backstage/backend-common@0.20.1-next.0
9
+ - @backstage/catalog-client@1.5.2-next.0
10
+ - @backstage/plugin-kubernetes-common@0.7.3-next.0
11
+ - @backstage/plugin-catalog-node@1.6.1-next.0
12
+ - @backstage/backend-plugin-api@0.6.9-next.0
13
+ - @backstage/catalog-model@1.4.3
14
+ - @backstage/config@1.1.1
15
+ - @backstage/errors@1.2.3
16
+ - @backstage/integration-aws-node@0.1.8
17
+ - @backstage/types@1.1.1
18
+ - @backstage/plugin-auth-node@0.4.3-next.0
19
+ - @backstage/plugin-kubernetes-node@0.1.3-next.0
20
+ - @backstage/plugin-permission-common@0.7.11
21
+ - @backstage/plugin-permission-node@0.7.20-next.0
22
+
23
+ ## 0.14.0
24
+
25
+ ### Minor Changes
26
+
27
+ - 52050ad: You can now select `single` kubernetes cluster that the entity is part-of from all your defined kubernetes clusters, by passing `backstage.io/kubernetes-cluster` annotation with the defined cluster name.
28
+
29
+ If you do not specify the annotation by `default it fetches all` defined kubernetes cluster.
30
+
31
+ To apply
32
+
33
+ catalog-info.yaml
34
+
35
+ ```diff
36
+ annotations:
37
+ 'backstage.io/kubernetes-id': dice-roller
38
+ 'backstage.io/kubernetes-namespace': dice-space
39
+ + 'backstage.io/kubernetes-cluster': dice-cluster
40
+ 'backstage.io/kubernetes-label-selector': 'app=my-app,component=front-end'
41
+ ```
42
+
43
+ ### Patch Changes
44
+
45
+ - 6010564: The `kubernetes-node` plugin has been modified to house a new extension points for Kubernetes backend plugin;
46
+ `KubernetesClusterSupplierExtensionPoint` is introduced .
47
+ `kubernetesAuthStrategyExtensionPoint` is introduced .
48
+ `kubernetesFetcherExtensionPoint` is introduced .
49
+ `kubernetesServiceLocatorExtensionPoint` is introduced .
50
+
51
+ The `kubernetes-backend` plugin was modified to use this new extension point.
52
+
53
+ - 706fc3a: Updated dependency `@kubernetes/client-node` to `0.20.0`.
54
+ - ae94d3c: Updated dependency `@aws-crypto/sha256-js` to `^5.0.0`.
55
+ - 99fb541: Updated dependency `@azure/identity` to `^4.0.0`.
56
+ - 42c1aee: Updated dependency `@google-cloud/container` to `^5.0.0`.
57
+ - Updated dependencies
58
+ - @backstage/backend-common@0.20.0
59
+ - @backstage/plugin-catalog-node@1.6.0
60
+ - @backstage/catalog-client@1.5.0
61
+ - @backstage/plugin-kubernetes-node@0.1.2
62
+ - @backstage/plugin-kubernetes-common@0.7.2
63
+ - @backstage/plugin-auth-node@0.4.2
64
+ - @backstage/plugin-permission-common@0.7.11
65
+ - @backstage/plugin-permission-node@0.7.19
66
+ - @backstage/backend-plugin-api@0.6.8
67
+ - @backstage/catalog-model@1.4.3
68
+ - @backstage/config@1.1.1
69
+ - @backstage/errors@1.2.3
70
+ - @backstage/integration-aws-node@0.1.8
71
+ - @backstage/types@1.1.1
72
+
3
73
  ## 0.14.0-next.3
4
74
 
5
75
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-kubernetes-backend",
3
- "version": "0.14.0-next.3",
3
+ "version": "0.14.1-next.0",
4
4
  "main": "../dist/alpha.cjs.js",
5
5
  "types": "../dist/alpha.d.ts"
6
6
  }
package/dist/alpha.cjs.js CHANGED
@@ -30,13 +30,96 @@ class ObjectsProvider {
30
30
  this.objectsProvider = provider;
31
31
  }
32
32
  }
33
+ class ClusterSuplier {
34
+ constructor() {
35
+ __publicField(this, "clusterSupplier");
36
+ }
37
+ getClusterSupplier() {
38
+ return this.clusterSupplier;
39
+ }
40
+ addClusterSupplier(clusterSupplier) {
41
+ if (this.clusterSupplier) {
42
+ throw new Error(
43
+ "Multiple Kubernetes Cluster Suppliers is not supported at this time"
44
+ );
45
+ }
46
+ this.clusterSupplier = clusterSupplier;
47
+ }
48
+ }
49
+ class Fetcher {
50
+ constructor() {
51
+ __publicField(this, "fetcher");
52
+ }
53
+ getFetcher() {
54
+ return this.fetcher;
55
+ }
56
+ addFetcher(fetcher) {
57
+ if (this.fetcher) {
58
+ throw new Error(
59
+ "Multiple Kubernetes Fetchers is not supported at this time"
60
+ );
61
+ }
62
+ this.fetcher = fetcher;
63
+ }
64
+ }
65
+ class ServiceLocator {
66
+ constructor() {
67
+ __publicField(this, "serviceLocator");
68
+ }
69
+ getServiceLocator() {
70
+ return this.serviceLocator;
71
+ }
72
+ addServiceLocator(serviceLocator) {
73
+ if (this.serviceLocator) {
74
+ throw new Error(
75
+ "Multiple Kubernetes Service Locators is not supported at this time"
76
+ );
77
+ }
78
+ this.serviceLocator = serviceLocator;
79
+ }
80
+ }
81
+ class AuthStrategy {
82
+ constructor() {
83
+ __publicField(this, "authStrategies");
84
+ this.authStrategies = new Array();
85
+ }
86
+ static addAuthStrategiesFromArray(authStrategies, builder) {
87
+ authStrategies.forEach((st) => builder.addAuthStrategy(st.key, st.strategy));
88
+ }
89
+ getAuthenticationStrategies() {
90
+ return this.authStrategies;
91
+ }
92
+ addAuthStrategy(key, authStrategy) {
93
+ this.authStrategies.push({ key, strategy: authStrategy });
94
+ }
95
+ }
33
96
  const kubernetesPlugin = backendPluginApi.createBackendPlugin({
34
97
  pluginId: "kubernetes",
35
98
  register(env) {
36
- const extensionPoint = new ObjectsProvider();
99
+ const extPointObjectsProvider = new ObjectsProvider();
100
+ const extPointClusterSuplier = new ClusterSuplier();
101
+ const extPointAuthStrategy = new AuthStrategy();
102
+ const extPointFetcher = new Fetcher();
103
+ const extPointServiceLocator = new ServiceLocator();
37
104
  env.registerExtensionPoint(
38
105
  pluginKubernetesNode.kubernetesObjectsProviderExtensionPoint,
39
- extensionPoint
106
+ extPointObjectsProvider
107
+ );
108
+ env.registerExtensionPoint(
109
+ pluginKubernetesNode.kubernetesClusterSupplierExtensionPoint,
110
+ extPointClusterSuplier
111
+ );
112
+ env.registerExtensionPoint(
113
+ pluginKubernetesNode.kubernetesAuthStrategyExtensionPoint,
114
+ extPointAuthStrategy
115
+ );
116
+ env.registerExtensionPoint(
117
+ pluginKubernetesNode.kubernetesFetcherExtensionPoint,
118
+ extPointFetcher
119
+ );
120
+ env.registerExtensionPoint(
121
+ pluginKubernetesNode.kubernetesServiceLocatorExtensionPoint,
122
+ extPointServiceLocator
40
123
  );
41
124
  env.registerInit({
42
125
  deps: {
@@ -48,12 +131,17 @@ const kubernetesPlugin = backendPluginApi.createBackendPlugin({
48
131
  },
49
132
  async init({ http, logger, config, catalogApi, permissions }) {
50
133
  const winstonLogger = backendCommon.loggerToWinstonLogger(logger);
51
- const { router } = await pluginKubernetesBackend.KubernetesBuilder.createBuilder({
134
+ const builder = pluginKubernetesBackend.KubernetesBuilder.createBuilder({
52
135
  logger: winstonLogger,
53
136
  config,
54
137
  catalogApi,
55
138
  permissions
56
- }).setObjectsProvider(extensionPoint.getObjectsProvider()).build();
139
+ }).setObjectsProvider(extPointObjectsProvider.getObjectsProvider()).setClusterSupplier(extPointClusterSuplier.getClusterSupplier()).setFetcher(extPointFetcher.getFetcher()).setServiceLocator(extPointServiceLocator.getServiceLocator());
140
+ AuthStrategy.addAuthStrategiesFromArray(
141
+ extPointAuthStrategy.getAuthenticationStrategies(),
142
+ builder
143
+ );
144
+ const { router } = await builder.build();
57
145
  http.use(router);
58
146
  }
59
147
  });
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\n\nimport { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';\nimport {\n KubernetesObjectsProviderExtensionPoint,\n kubernetesObjectsProviderExtensionPoint,\n KubernetesObjectsProvider,\n} from '@backstage/plugin-kubernetes-node';\n\nclass ObjectsProvider implements KubernetesObjectsProviderExtensionPoint {\n private objectsProvider: KubernetesObjectsProvider | undefined;\n\n getObjectsProvider() {\n return this.objectsProvider;\n }\n\n addObjectsProvider(provider: KubernetesObjectsProvider) {\n if (this.objectsProvider) {\n throw new Error(\n 'Multiple Kubernetes objects provider is not supported at this time',\n );\n }\n this.objectsProvider = provider;\n }\n}\n\n/**\n * This is the backend plugin that provides the Kubernetes integration.\n * @alpha\n */\n\nexport const kubernetesPlugin = createBackendPlugin({\n pluginId: 'kubernetes',\n register(env) {\n const extensionPoint = new ObjectsProvider();\n env.registerExtensionPoint(\n kubernetesObjectsProviderExtensionPoint,\n extensionPoint,\n );\n\n env.registerInit({\n deps: {\n http: coreServices.httpRouter,\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n catalogApi: catalogServiceRef,\n permissions: coreServices.permissions,\n },\n async init({ http, logger, config, catalogApi, permissions }) {\n const winstonLogger = loggerToWinstonLogger(logger);\n // TODO: expose all of the customization & extension points of the builder here\n const { router } = await KubernetesBuilder.createBuilder({\n logger: winstonLogger,\n config,\n catalogApi,\n permissions,\n })\n .setObjectsProvider(extensionPoint.getObjectsProvider())\n .build();\n http.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","kubernetesObjectsProviderExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","KubernetesBuilder"],"mappings":";;;;;;;;;;;;;;;;AA8BA,MAAM,eAAmE,CAAA;AAAA,EAAzE,WAAA,GAAA;AACE,IAAQ,aAAA,CAAA,IAAA,EAAA,iBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAER,kBAAqB,GAAA;AACnB,IAAA,OAAO,IAAK,CAAA,eAAA,CAAA;AAAA,GACd;AAAA,EAEA,mBAAmB,QAAqC,EAAA;AACtD,IAAA,IAAI,KAAK,eAAiB,EAAA;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,oEAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,eAAkB,GAAA,QAAA,CAAA;AAAA,GACzB;AACF,CAAA;AAOO,MAAM,mBAAmBA,oCAAoB,CAAA;AAAA,EAClD,QAAU,EAAA,YAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAM,MAAA,cAAA,GAAiB,IAAI,eAAgB,EAAA,CAAA;AAC3C,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,4DAAA;AAAA,MACA,cAAA;AAAA,KACF,CAAA;AAEA,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,MAAMC,6BAAa,CAAA,UAAA;AAAA,QACnB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,UAAY,EAAAC,uBAAA;AAAA,QACZ,aAAaD,6BAAa,CAAA,WAAA;AAAA,OAC5B;AAAA,MACA,MAAM,KAAK,EAAE,IAAA,EAAM,QAAQ,MAAQ,EAAA,UAAA,EAAY,aAAe,EAAA;AAC5D,QAAM,MAAA,aAAA,GAAgBE,oCAAsB,MAAM,CAAA,CAAA;AAElD,QAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAMC,0CAAkB,aAAc,CAAA;AAAA,UACvD,MAAQ,EAAA,aAAA;AAAA,UACR,MAAA;AAAA,UACA,UAAA;AAAA,UACA,WAAA;AAAA,SACD,CACE,CAAA,kBAAA,CAAmB,eAAe,kBAAmB,EAAC,EACtD,KAAM,EAAA,CAAA;AACT,QAAA,IAAA,CAAK,IAAI,MAAM,CAAA,CAAA;AAAA,OACjB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"alpha.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\n\nimport { KubernetesBuilder } from '@backstage/plugin-kubernetes-backend';\nimport {\n KubernetesObjectsProviderExtensionPoint,\n kubernetesObjectsProviderExtensionPoint,\n KubernetesObjectsProvider,\n KubernetesClusterSupplierExtensionPoint,\n kubernetesClusterSupplierExtensionPoint,\n KubernetesClustersSupplier,\n KubernetesAuthStrategyExtensionPoint,\n AuthenticationStrategy,\n kubernetesAuthStrategyExtensionPoint,\n KubernetesFetcher,\n KubernetesServiceLocatorExtensionPoint,\n KubernetesServiceLocator,\n kubernetesServiceLocatorExtensionPoint,\n} from '@backstage/plugin-kubernetes-node';\nimport {\n KubernetesFetcherExtensionPoint,\n kubernetesFetcherExtensionPoint,\n} from '@backstage/plugin-kubernetes-node';\n\nclass ObjectsProvider implements KubernetesObjectsProviderExtensionPoint {\n private objectsProvider: KubernetesObjectsProvider | undefined;\n\n getObjectsProvider() {\n return this.objectsProvider;\n }\n\n addObjectsProvider(provider: KubernetesObjectsProvider) {\n if (this.objectsProvider) {\n throw new Error(\n 'Multiple Kubernetes objects provider is not supported at this time',\n );\n }\n this.objectsProvider = provider;\n }\n}\n\nclass ClusterSuplier implements KubernetesClusterSupplierExtensionPoint {\n private clusterSupplier: KubernetesClustersSupplier | undefined;\n\n getClusterSupplier() {\n return this.clusterSupplier;\n }\n\n addClusterSupplier(clusterSupplier: KubernetesClustersSupplier) {\n if (this.clusterSupplier) {\n throw new Error(\n 'Multiple Kubernetes Cluster Suppliers is not supported at this time',\n );\n }\n this.clusterSupplier = clusterSupplier;\n }\n}\n\nclass Fetcher implements KubernetesFetcherExtensionPoint {\n private fetcher: KubernetesFetcher | undefined;\n\n getFetcher() {\n return this.fetcher;\n }\n\n addFetcher(fetcher: KubernetesFetcher) {\n if (this.fetcher) {\n throw new Error(\n 'Multiple Kubernetes Fetchers is not supported at this time',\n );\n }\n this.fetcher = fetcher;\n }\n}\n\nclass ServiceLocator implements KubernetesServiceLocatorExtensionPoint {\n private serviceLocator: KubernetesServiceLocator | undefined;\n\n getServiceLocator() {\n return this.serviceLocator;\n }\n\n addServiceLocator(serviceLocator: KubernetesServiceLocator) {\n if (this.serviceLocator) {\n throw new Error(\n 'Multiple Kubernetes Service Locators is not supported at this time',\n );\n }\n this.serviceLocator = serviceLocator;\n }\n}\n\nclass AuthStrategy implements KubernetesAuthStrategyExtensionPoint {\n private authStrategies: Array<{\n key: string;\n strategy: AuthenticationStrategy;\n }>;\n\n constructor() {\n this.authStrategies = new Array<{\n key: string;\n strategy: AuthenticationStrategy;\n }>();\n }\n\n static addAuthStrategiesFromArray(\n authStrategies: Array<{ key: string; strategy: AuthenticationStrategy }>,\n builder: KubernetesBuilder,\n ) {\n authStrategies.forEach(st => builder.addAuthStrategy(st.key, st.strategy));\n }\n\n getAuthenticationStrategies() {\n return this.authStrategies;\n }\n\n addAuthStrategy(key: string, authStrategy: AuthenticationStrategy) {\n this.authStrategies.push({ key, strategy: authStrategy });\n }\n}\n\n/**\n * This is the backend plugin that provides the Kubernetes integration.\n * @alpha\n */\n\nexport const kubernetesPlugin = createBackendPlugin({\n pluginId: 'kubernetes',\n register(env) {\n const extPointObjectsProvider = new ObjectsProvider();\n const extPointClusterSuplier = new ClusterSuplier();\n const extPointAuthStrategy = new AuthStrategy();\n const extPointFetcher = new Fetcher();\n const extPointServiceLocator = new ServiceLocator();\n\n env.registerExtensionPoint(\n kubernetesObjectsProviderExtensionPoint,\n extPointObjectsProvider,\n );\n env.registerExtensionPoint(\n kubernetesClusterSupplierExtensionPoint,\n extPointClusterSuplier,\n );\n env.registerExtensionPoint(\n kubernetesAuthStrategyExtensionPoint,\n extPointAuthStrategy,\n );\n env.registerExtensionPoint(\n kubernetesFetcherExtensionPoint,\n extPointFetcher,\n );\n env.registerExtensionPoint(\n kubernetesServiceLocatorExtensionPoint,\n extPointServiceLocator,\n );\n\n env.registerInit({\n deps: {\n http: coreServices.httpRouter,\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n catalogApi: catalogServiceRef,\n permissions: coreServices.permissions,\n },\n async init({ http, logger, config, catalogApi, permissions }) {\n const winstonLogger = loggerToWinstonLogger(logger);\n // TODO: expose all of the customization & extension points of the builder here\n const builder: KubernetesBuilder = KubernetesBuilder.createBuilder({\n logger: winstonLogger,\n config,\n catalogApi,\n permissions,\n })\n .setObjectsProvider(extPointObjectsProvider.getObjectsProvider())\n .setClusterSupplier(extPointClusterSuplier.getClusterSupplier())\n .setFetcher(extPointFetcher.getFetcher())\n .setServiceLocator(extPointServiceLocator.getServiceLocator());\n\n AuthStrategy.addAuthStrategiesFromArray(\n extPointAuthStrategy.getAuthenticationStrategies(),\n builder,\n );\n const { router } = await builder.build();\n http.use(router);\n },\n });\n },\n});\n"],"names":["createBackendPlugin","kubernetesObjectsProviderExtensionPoint","kubernetesClusterSupplierExtensionPoint","kubernetesAuthStrategyExtensionPoint","kubernetesFetcherExtensionPoint","kubernetesServiceLocatorExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","KubernetesBuilder"],"mappings":";;;;;;;;;;;;;;;;AA4CA,MAAM,eAAmE,CAAA;AAAA,EAAzE,WAAA,GAAA;AACE,IAAQ,aAAA,CAAA,IAAA,EAAA,iBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAER,kBAAqB,GAAA;AACnB,IAAA,OAAO,IAAK,CAAA,eAAA,CAAA;AAAA,GACd;AAAA,EAEA,mBAAmB,QAAqC,EAAA;AACtD,IAAA,IAAI,KAAK,eAAiB,EAAA;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,oEAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,eAAkB,GAAA,QAAA,CAAA;AAAA,GACzB;AACF,CAAA;AAEA,MAAM,cAAkE,CAAA;AAAA,EAAxE,WAAA,GAAA;AACE,IAAQ,aAAA,CAAA,IAAA,EAAA,iBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAER,kBAAqB,GAAA;AACnB,IAAA,OAAO,IAAK,CAAA,eAAA,CAAA;AAAA,GACd;AAAA,EAEA,mBAAmB,eAA6C,EAAA;AAC9D,IAAA,IAAI,KAAK,eAAiB,EAAA;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,qEAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,eAAkB,GAAA,eAAA,CAAA;AAAA,GACzB;AACF,CAAA;AAEA,MAAM,OAAmD,CAAA;AAAA,EAAzD,WAAA,GAAA;AACE,IAAQ,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAER,UAAa,GAAA;AACX,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GACd;AAAA,EAEA,WAAW,OAA4B,EAAA;AACrC,IAAA,IAAI,KAAK,OAAS,EAAA;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,4DAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AAAA,GACjB;AACF,CAAA;AAEA,MAAM,cAAiE,CAAA;AAAA,EAAvE,WAAA,GAAA;AACE,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAER,iBAAoB,GAAA;AAClB,IAAA,OAAO,IAAK,CAAA,cAAA,CAAA;AAAA,GACd;AAAA,EAEA,kBAAkB,cAA0C,EAAA;AAC1D,IAAA,IAAI,KAAK,cAAgB,EAAA;AACvB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,oEAAA;AAAA,OACF,CAAA;AAAA,KACF;AACA,IAAA,IAAA,CAAK,cAAiB,GAAA,cAAA,CAAA;AAAA,GACxB;AACF,CAAA;AAEA,MAAM,YAA6D,CAAA;AAAA,EAMjE,WAAc,GAAA;AALd,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAA;AAMN,IAAK,IAAA,CAAA,cAAA,GAAiB,IAAI,KAGvB,EAAA,CAAA;AAAA,GACL;AAAA,EAEA,OAAO,0BACL,CAAA,cAAA,EACA,OACA,EAAA;AACA,IAAe,cAAA,CAAA,OAAA,CAAQ,QAAM,OAAQ,CAAA,eAAA,CAAgB,GAAG,GAAK,EAAA,EAAA,CAAG,QAAQ,CAAC,CAAA,CAAA;AAAA,GAC3E;AAAA,EAEA,2BAA8B,GAAA;AAC5B,IAAA,OAAO,IAAK,CAAA,cAAA,CAAA;AAAA,GACd;AAAA,EAEA,eAAA,CAAgB,KAAa,YAAsC,EAAA;AACjE,IAAA,IAAA,CAAK,eAAe,IAAK,CAAA,EAAE,GAAK,EAAA,QAAA,EAAU,cAAc,CAAA,CAAA;AAAA,GAC1D;AACF,CAAA;AAOO,MAAM,mBAAmBA,oCAAoB,CAAA;AAAA,EAClD,QAAU,EAAA,YAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAM,MAAA,uBAAA,GAA0B,IAAI,eAAgB,EAAA,CAAA;AACpD,IAAM,MAAA,sBAAA,GAAyB,IAAI,cAAe,EAAA,CAAA;AAClD,IAAM,MAAA,oBAAA,GAAuB,IAAI,YAAa,EAAA,CAAA;AAC9C,IAAM,MAAA,eAAA,GAAkB,IAAI,OAAQ,EAAA,CAAA;AACpC,IAAM,MAAA,sBAAA,GAAyB,IAAI,cAAe,EAAA,CAAA;AAElD,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,4DAAA;AAAA,MACA,uBAAA;AAAA,KACF,CAAA;AACA,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,4DAAA;AAAA,MACA,sBAAA;AAAA,KACF,CAAA;AACA,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,yDAAA;AAAA,MACA,oBAAA;AAAA,KACF,CAAA;AACA,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,oDAAA;AAAA,MACA,eAAA;AAAA,KACF,CAAA;AACA,IAAI,GAAA,CAAA,sBAAA;AAAA,MACFC,2DAAA;AAAA,MACA,sBAAA;AAAA,KACF,CAAA;AAEA,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,MAAMC,6BAAa,CAAA,UAAA;AAAA,QACnB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,UAAY,EAAAC,uBAAA;AAAA,QACZ,aAAaD,6BAAa,CAAA,WAAA;AAAA,OAC5B;AAAA,MACA,MAAM,KAAK,EAAE,IAAA,EAAM,QAAQ,MAAQ,EAAA,UAAA,EAAY,aAAe,EAAA;AAC5D,QAAM,MAAA,aAAA,GAAgBE,oCAAsB,MAAM,CAAA,CAAA;AAElD,QAAM,MAAA,OAAA,GAA6BC,0CAAkB,aAAc,CAAA;AAAA,UACjE,MAAQ,EAAA,aAAA;AAAA,UACR,MAAA;AAAA,UACA,UAAA;AAAA,UACA,WAAA;AAAA,SACD,EACE,kBAAmB,CAAA,uBAAA,CAAwB,oBAAoB,CAAA,CAC/D,mBAAmB,sBAAuB,CAAA,kBAAA,EAAoB,CAC9D,CAAA,UAAA,CAAW,gBAAgB,UAAW,EAAC,EACvC,iBAAkB,CAAA,sBAAA,CAAuB,mBAAmB,CAAA,CAAA;AAE/D,QAAa,YAAA,CAAA,0BAAA;AAAA,UACX,qBAAqB,2BAA4B,EAAA;AAAA,UACjD,OAAA;AAAA,SACF,CAAA;AACA,QAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAM,QAAQ,KAAM,EAAA,CAAA;AACvC,QAAA,IAAA,CAAK,IAAI,MAAM,CAAA,CAAA;AAAA,OACjB;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC;;;;"}