@mhoshi-vm/plugin-crossplane-aws 0.1.1 → 0.1.3
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/README.md +3 -3
- package/dist/esm/{Router-7e4981b2.esm.js → Router-6e363902.esm.js} +16 -5
- package/dist/esm/Router-6e363902.esm.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +2 -2
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/dist/esm/Router-7e4981b2.esm.js.map +0 -1
package/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# crossplane-
|
1
|
+
# crossplane-aws
|
2
2
|
|
3
|
-
Welcome to the crossplane-
|
3
|
+
Welcome to the crossplane-aws plugin!
|
4
4
|
|
5
5
|
_This plugin was created through the Backstage CLI_
|
6
6
|
|
@@ -8,7 +8,7 @@ _This plugin was created through the Backstage CLI_
|
|
8
8
|
|
9
9
|
Your plugin has been added to the example app in this repository, meaning you'll be able to access it by
|
10
10
|
running `yarn start` in the root directory, and then navigating
|
11
|
-
to [/crossplane-
|
11
|
+
to [/crossplane-aws](http://localhost:3000/crossplane-ecs).
|
12
12
|
|
13
13
|
You can also serve the plugin in isolation by running `yarn start` in the plugin directory.
|
14
14
|
This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads.
|
@@ -2,7 +2,7 @@ import { useEntity } from '@backstage/plugin-catalog-react';
|
|
2
2
|
import React, { useState, useEffect } from 'react';
|
3
3
|
import { Routes, Route } from 'react-router-dom';
|
4
4
|
import { useKubernetesObjects } from '@backstage/plugin-kubernetes';
|
5
|
-
import { Table, Page, Content, Progress, ResponseErrorPanel } from '@backstage/core-components';
|
5
|
+
import { Table, StatusOK, StatusPending, StatusAborted, Page, Content, Progress, ResponseErrorPanel } from '@backstage/core-components';
|
6
6
|
import { Grid } from '@material-ui/core';
|
7
7
|
|
8
8
|
const ResourceTable = (props) => {
|
@@ -12,16 +12,27 @@ const ResourceTable = (props) => {
|
|
12
12
|
{ title: "Name", field: "name" },
|
13
13
|
{ title: "Ready", field: "ready" },
|
14
14
|
{ title: "Synced", field: "synced" },
|
15
|
-
{ title: "
|
15
|
+
{ title: "ARN", field: "externalName" }
|
16
16
|
];
|
17
17
|
const data = [];
|
18
|
+
const statusLogo = [
|
19
|
+
{ status: "True", field: /* @__PURE__ */ React.createElement(StatusOK, null) },
|
20
|
+
{ status: "False", field: /* @__PURE__ */ React.createElement(StatusPending, null) },
|
21
|
+
{ status: void 0, field: /* @__PURE__ */ React.createElement(StatusAborted, null) }
|
22
|
+
];
|
18
23
|
resources.map((resource) => {
|
19
24
|
resource.resources.map((resourceStatus) => {
|
25
|
+
const readyIndex = statusLogo.findIndex(
|
26
|
+
(item) => item.status === resourceStatus.ready
|
27
|
+
);
|
28
|
+
const syncedIndex = statusLogo.findIndex(
|
29
|
+
(item) => item.status === resourceStatus.synced
|
30
|
+
);
|
20
31
|
data.push({
|
21
32
|
kind: resource.kind,
|
22
33
|
name: resourceStatus.name,
|
23
|
-
ready:
|
24
|
-
synced:
|
34
|
+
ready: statusLogo[readyIndex].field,
|
35
|
+
synced: statusLogo[syncedIndex].field,
|
25
36
|
externalName: resourceStatus.externalName
|
26
37
|
});
|
27
38
|
});
|
@@ -137,4 +148,4 @@ const Router = (props) => {
|
|
137
148
|
};
|
138
149
|
|
139
150
|
export { Router };
|
140
|
-
//# sourceMappingURL=Router-
|
151
|
+
//# sourceMappingURL=Router-6e363902.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Router-6e363902.esm.js","sources":["../../src/components/ResourceTable/ResourceTable.tsx","../../src/components/CrossplaneAws/CrossplaneAwsComponent.tsx","../../src/Router.tsx"],"sourcesContent":["import React from \"react\";\nimport {Resource} from \"../../type\";\nimport {StatusAborted, StatusOK, StatusPending, Table, TableColumn} from \"@backstage/core-components\";\n\nexport const ResourceTable = (props: { app: string, resources: Resource[] }) => {\n const {app, resources} = props;\n\n\n const columns: TableColumn[] = [\n {title: 'Kind', field: 'kind'},\n {title: 'Name', field: 'name'},\n {title: 'Ready', field: 'ready'},\n {title: 'Synced', field: 'synced'},\n {title: 'ARN', field: 'externalName'},\n ];\n\n const data = [] as {\n kind: string,\n name: string,\n ready: string,\n synced: string,\n externalName: string\n }[];\n\n const statusLogo = [\n {status: 'True', field: <StatusOK />},\n {status: 'False', field: <StatusPending />},\n {status: undefined, field: <StatusAborted />},\n ];\n\n resources.map(resource => {\n resource.resources.map(resourceStatus => {\n\n\n const readyIndex = statusLogo.findIndex(\n (item) => item.status === resourceStatus.ready\n )\n\n const syncedIndex = statusLogo.findIndex(\n (item) => item.status === resourceStatus.synced\n )\n data.push({\n kind: resource.kind,\n name: resourceStatus.name,\n ready: statusLogo[readyIndex].field as unknown as string,\n synced: statusLogo[syncedIndex].field as unknown as string,\n externalName: resourceStatus.externalName,\n })\n })\n });\n\n return (\n <Table\n title={app}\n columns={columns}\n data={data}\n\n />\n );\n};","import {Entity} from '@backstage/catalog-model';\nimport React, {useEffect, useState} from \"react\";\nimport {useKubernetesObjects} from \"@backstage/plugin-kubernetes\";\nimport {Ecs, Resource, ResourceStatus, UpboundAwsCrd} from \"../../type\";\nimport {FetchResponse} from \"@backstage/plugin-kubernetes-common\";\nimport {Content, Page, Progress, ResponseErrorPanel} from \"@backstage/core-components\";\nimport {Grid} from \"@material-ui/core\";\nimport {ResourceTable} from \"../ResourceTable\";\n\ntype KubernetesContentProps = {\n entity: Entity;\n refreshIntervalMs?: number;\n children?: React.ReactNode;\n}\n\nexport const CrossplaneAwsComponent = ({entity, refreshIntervalMs}: KubernetesContentProps) => {\n const {kubernetesObjects, error} = useKubernetesObjects(\n entity,\n refreshIntervalMs,\n );\n\n const [loading, setLoading] = useState(true); // State to manage loading state\n\n useEffect(() => {\n // This useEffect will run whenever kubernetesObjects changes\n // If kubernetesObjects is not undefined or null, setLoading to false\n if (kubernetesObjects !== undefined && kubernetesObjects !== null) {\n setLoading(false);\n }\n }, [kubernetesObjects]);\n\n const ecss = [] as Ecs[];\n\n if (kubernetesObjects !== undefined) {\n for (let clusterCnt = 0; clusterCnt < kubernetesObjects.items.length; clusterCnt++) {\n const customResources = kubernetesObjects?.items[clusterCnt].resources.filter(isCustomResource);\n\n // get ecsCrs\n const upboundEcsCRs = customResources?.map((r) => {\n return {...r, resources: r.resources.filter(isUpboundEcs)}\n });\n\n // flatMap\n const flattenUpboundEcsAny = upboundEcsCRs?.flatMap(({resources}) =>\n [...resources]\n ) ?? [];\n\n const ecsCrds = flattenUpboundEcsAny as UpboundAwsCrd[];\n\n for (let crdCnt = 0; crdCnt < ecsCrds.length; crdCnt++) {\n\n const appName = ecsCrds[crdCnt].metadata.labels[\"app.kubernetes.io/part-of\"]\n\n const kind = ecsCrds[crdCnt].kind\n\n const resource = {\n name: ecsCrds[crdCnt].metadata.name,\n externalName: ecsCrds[crdCnt].metadata.annotations[\"crossplane.io/external-name\"],\n } as ResourceStatus;\n\n for (let condCnt = 0; condCnt < ecsCrds[crdCnt].status.conditions.length; condCnt++) {\n const condition = ecsCrds[crdCnt].status.conditions[condCnt];\n const type = condition.type;\n switch (type) {\n case (\"Ready\"):\n resource.ready = condition.status;\n break;\n case(\"Synced\"):\n resource.synced = condition.status;\n break;\n default:\n break;\n }\n }\n\n let ecs = {} as Ecs;\n const appIndex = ecss.findIndex(\n (item) => item.name === appName\n )\n if (appIndex !== -1) {\n ecs = ecss[appIndex];\n } else {\n ecs.name = appName;\n ecs.resources = [];\n }\n\n const kindIndex = ecs.resources.findIndex(\n (item) => item.kind === kind\n )\n\n if (kindIndex !== -1) {\n ecs.resources[kindIndex].resources.push(resource);\n } else {\n ecs.resources.push({\n kind: kind,\n resources: [resource]\n })\n }\n\n if (appIndex === -1) {\n ecss.push(ecs);\n }\n }\n\n }\n }\n\n return (\n <Page themeId=\"tool\">\n <Content>\n {loading ? ( // Display progress bar while loading\n <div className=\"progress-bar-container\">\n <Progress/>\n </div>\n ) : (kubernetesObjects?.items !== undefined && ecss?.length > 0 &&\n (ecss.map((ecs) =>\n (<Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResourceTable app={ecs.name} resources={ecs.resources}/>\n </Grid>\n </Grid>)\n )))\n }\n {error !== undefined &&\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResponseErrorPanel error={(new Error(error))}/>;\n </Grid>\n </Grid>\n }\n </Content>\n </Page>\n );\n}\n\nfunction isCustomResource(n: FetchResponse) {\n return n.type === 'customresources';\n}\n\nfunction isUpboundEcs(n: any): n is Resource {\n return n.apiVersion.endsWith('aws.upbound.io/v1beta1');\n}","import {useEntity} from \"@backstage/plugin-catalog-react\";\nimport React from \"react\";\nimport {Route, Routes} from \"react-router-dom\";\nimport {CrossplaneAwsComponent} from \"./components/CrossplaneAws\";\n\nexport const Router = (props: { refreshIntervalMs?: number }) => {\n const {entity} = useEntity();\n\n\n return (\n\n <Routes>\n <Route\n path=\"/\"\n element={\n <CrossplaneAwsComponent\n entity={entity}\n refreshIntervalMs={props.refreshIntervalMs}\n />\n }\n />\n </Routes>\n\n );\n}"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -15,4 +15,4 @@ declare const EntityCrossplaneAwsContent: (props: EntityCrossplaneAwsContentProp
|
|
15
15
|
|
16
16
|
declare const TanzuAWSPlugin: AppPluginInterface;
|
17
17
|
|
18
|
-
export { EntityCrossplaneAwsContent,
|
18
|
+
export { EntityCrossplaneAwsContent, crossplaneAwsPlugin, TanzuAWSPlugin as plugin };
|
package/dist/index.esm.js
CHANGED
@@ -16,7 +16,7 @@ const crossplaneAwsPlugin = createPlugin({
|
|
16
16
|
const EntityCrossplaneAwsContent = crossplaneAwsPlugin.provide(
|
17
17
|
createRoutableExtension({
|
18
18
|
name: "EntityCrossplaneAwsContent",
|
19
|
-
component: () => import('./esm/Router-
|
19
|
+
component: () => import('./esm/Router-6e363902.esm.js').then((m) => m.Router),
|
20
20
|
mountPoint: rootRouteRef
|
21
21
|
})
|
22
22
|
);
|
@@ -34,5 +34,5 @@ const TanzuAWSPlugin = () => (context) => {
|
|
34
34
|
);
|
35
35
|
};
|
36
36
|
|
37
|
-
export { EntityCrossplaneAwsContent,
|
37
|
+
export { EntityCrossplaneAwsContent, crossplaneAwsPlugin, TanzuAWSPlugin as plugin };
|
38
38
|
//# sourceMappingURL=index.esm.js.map
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
export {crossplaneAwsPlugin, EntityCrossplaneAwsContent} from './plugin';
|
2
|
-
export {TanzuAWSPlugin} from "./TanzuAWSPlugin";
|
2
|
+
export {TanzuAWSPlugin as plugin} from "./TanzuAWSPlugin";
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Router-7e4981b2.esm.js","sources":["../../src/components/ResourceTable/ResourceTable.tsx","../../src/components/CrossplaneAws/CrossplaneAwsComponent.tsx","../../src/Router.tsx"],"sourcesContent":["import React from \"react\";\nimport {Resource} from \"../../type\";\nimport {Table, TableColumn} from \"@backstage/core-components\";\n\nexport const ResourceTable = (props: { app: string, resources: Resource[] }) => {\n const {app, resources} = props;\n\n\n const columns: TableColumn[] = [\n {title: 'Kind', field: 'kind'},\n {title: 'Name', field: 'name'},\n {title: 'Ready', field: 'ready'},\n {title: 'Synced', field: 'synced'},\n {title: 'External Name', field: 'externalName'},\n ];\n\n const data = [] as {\n kind: string,\n name: string,\n ready: string,\n synced: string,\n externalName: string\n }[];\n\n resources.map(resource => {\n resource.resources.map(resourceStatus => {\n data.push({\n kind: resource.kind,\n name: resourceStatus.name,\n ready: resourceStatus.ready,\n synced: resourceStatus.synced,\n externalName: resourceStatus.externalName,\n })\n })\n });\n\n return (\n <Table\n title={app}\n columns={columns}\n data={data}\n\n />\n );\n};","import {Entity} from '@backstage/catalog-model';\nimport React, {useEffect, useState} from \"react\";\nimport {useKubernetesObjects} from \"@backstage/plugin-kubernetes\";\nimport {Ecs, Resource, ResourceStatus, UpboundECSCrd} from \"../../type\";\nimport {FetchResponse} from \"@backstage/plugin-kubernetes-common\";\nimport {Content, Page, Progress, ResponseErrorPanel} from \"@backstage/core-components\";\nimport {Grid} from \"@material-ui/core\";\nimport {ResourceTable} from \"../ResourceTable\";\n\ntype KubernetesContentProps = {\n entity: Entity;\n refreshIntervalMs?: number;\n children?: React.ReactNode;\n}\n\nexport const CrossplaneAwsComponent = ({entity, refreshIntervalMs}: KubernetesContentProps) => {\n const {kubernetesObjects, error} = useKubernetesObjects(\n entity,\n refreshIntervalMs,\n );\n\n const [loading, setLoading] = useState(true); // State to manage loading state\n\n useEffect(() => {\n // This useEffect will run whenever kubernetesObjects changes\n // If kubernetesObjects is not undefined or null, setLoading to false\n if (kubernetesObjects !== undefined && kubernetesObjects !== null) {\n setLoading(false);\n }\n }, [kubernetesObjects]);\n\n const ecss = [] as Ecs[];\n\n if (kubernetesObjects !== undefined) {\n for (let clusterCnt = 0; clusterCnt < kubernetesObjects.items.length; clusterCnt++) {\n const customResources = kubernetesObjects?.items[clusterCnt].resources.filter(isCustomResource);\n\n // get ecsCrs\n const upboundEcsCRs = customResources?.map((r) => {\n return {...r, resources: r.resources.filter(isUpboundEcs)}\n });\n\n // flatMap\n const flattenUpboundEcsAny = upboundEcsCRs?.flatMap(({resources}) =>\n [...resources]\n ) ?? [];\n\n const ecsCrds = flattenUpboundEcsAny as UpboundECSCrd[];\n\n for (let crdCnt = 0; crdCnt < ecsCrds.length; crdCnt++) {\n\n const appName = ecsCrds[crdCnt].metadata.labels[\"app.kubernetes.io/part-of\"]\n\n const kind = ecsCrds[crdCnt].kind\n\n const resource = {\n name: ecsCrds[crdCnt].metadata.name,\n externalName: ecsCrds[crdCnt].metadata.annotations[\"crossplane.io/external-name\"],\n } as ResourceStatus;\n\n for (let condCnt = 0; condCnt < ecsCrds[crdCnt].status.conditions.length; condCnt++) {\n const condition = ecsCrds[crdCnt].status.conditions[condCnt];\n const type = condition.type;\n switch (type) {\n case (\"Ready\"):\n resource.ready = condition.status;\n break;\n case(\"Synced\"):\n resource.synced = condition.status;\n break;\n default:\n break;\n }\n }\n\n let ecs = {} as Ecs;\n const appIndex = ecss.findIndex(\n (item) => item.name === appName\n )\n if (appIndex !== -1) {\n ecs = ecss[appIndex];\n } else {\n ecs.name = appName;\n ecs.resources = [];\n }\n\n const kindIndex = ecs.resources.findIndex(\n (item) => item.kind === kind\n )\n\n if (kindIndex !== -1) {\n ecs.resources[kindIndex].resources.push(resource);\n } else {\n ecs.resources.push({\n kind: kind,\n resources: [resource]\n })\n }\n\n if (appIndex === -1) {\n ecss.push(ecs);\n }\n }\n\n }\n }\n\n return (\n <Page themeId=\"tool\">\n <Content>\n {loading ? ( // Display progress bar while loading\n <div className=\"progress-bar-container\">\n <Progress/>\n </div>\n ) : (kubernetesObjects?.items !== undefined && ecss?.length > 0 &&\n (ecss.map((ecs) =>\n (<Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResourceTable app={ecs.name} resources={ecs.resources}/>\n </Grid>\n </Grid>)\n )))\n }\n {error !== undefined &&\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResponseErrorPanel error={(new Error(error))}/>;\n </Grid>\n </Grid>\n }\n </Content>\n </Page>\n );\n}\n\nfunction isCustomResource(n: FetchResponse) {\n return n.type === 'customresources';\n}\n\nfunction isUpboundEcs(n: any): n is Resource {\n return n.apiVersion.endsWith('aws.upbound.io/v1beta1');\n}","import {useEntity} from \"@backstage/plugin-catalog-react\";\nimport React from \"react\";\nimport {Route, Routes} from \"react-router-dom\";\nimport {CrossplaneAwsComponent} from \"./components/CrossplaneAws\";\n\nexport const Router = (props: { refreshIntervalMs?: number }) => {\n const {entity} = useEntity();\n\n\n return (\n\n <Routes>\n <Route\n path=\"/\"\n element={\n <CrossplaneAwsComponent\n entity={entity}\n refreshIntervalMs={props.refreshIntervalMs}\n />\n }\n />\n </Routes>\n\n );\n}"],"names":[],"mappings":";;;;;;;AAIa,MAAA,aAAA,GAAgB,CAAC,KAAkD,KAAA;AAC5E,EAAM,MAAA,EAAC,GAAK,EAAA,SAAA,EAAa,GAAA,KAAA,CAAA;AAGzB,EAAA,MAAM,OAAyB,GAAA;AAAA,IAC3B,EAAC,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,MAAM,EAAA;AAAA,IAC7B,EAAC,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,MAAM,EAAA;AAAA,IAC7B,EAAC,KAAA,EAAO,OAAS,EAAA,KAAA,EAAO,OAAO,EAAA;AAAA,IAC/B,EAAC,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,QAAQ,EAAA;AAAA,IACjC,EAAC,KAAA,EAAO,eAAiB,EAAA,KAAA,EAAO,cAAc,EAAA;AAAA,GAClD,CAAA;AAEA,EAAA,MAAM,OAAO,EAAC,CAAA;AAQd,EAAA,SAAA,CAAU,IAAI,CAAY,QAAA,KAAA;AACtB,IAAS,QAAA,CAAA,SAAA,CAAU,IAAI,CAAkB,cAAA,KAAA;AACrC,MAAA,IAAA,CAAK,IAAK,CAAA;AAAA,QACN,MAAM,QAAS,CAAA,IAAA;AAAA,QACf,MAAM,cAAe,CAAA,IAAA;AAAA,QACrB,OAAO,cAAe,CAAA,KAAA;AAAA,QACtB,QAAQ,cAAe,CAAA,MAAA;AAAA,QACvB,cAAc,cAAe,CAAA,YAAA;AAAA,OAChC,CAAA,CAAA;AAAA,KACJ,CAAA,CAAA;AAAA,GACJ,CAAA,CAAA;AAED,EACI,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,KAAO,EAAA,GAAA;AAAA,MACP,OAAA;AAAA,MACA,IAAA;AAAA,KAAA;AAAA,GAEJ,CAAA;AAER,CAAA;;AC7BO,MAAM,sBAAyB,GAAA,CAAC,EAAC,MAAA,EAAQ,mBAA+C,KAAA;AAf/F,EAAA,IAAA,EAAA,CAAA;AAgBI,EAAM,MAAA,EAAC,iBAAmB,EAAA,KAAA,EAAS,GAAA,oBAAA;AAAA,IAC/B,MAAA;AAAA,IACA,iBAAA;AAAA,GACJ,CAAA;AAEA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,IAAI,CAAA,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AAGZ,IAAI,IAAA,iBAAA,KAAsB,KAAa,CAAA,IAAA,iBAAA,KAAsB,IAAM,EAAA;AAC/D,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,KACpB;AAAA,GACJ,EAAG,CAAC,iBAAiB,CAAC,CAAA,CAAA;AAEtB,EAAA,MAAM,OAAO,EAAC,CAAA;AAEd,EAAA,IAAI,sBAAsB,KAAW,CAAA,EAAA;AACjC,IAAA,KAAA,IAAS,aAAa,CAAG,EAAA,UAAA,GAAa,iBAAkB,CAAA,KAAA,CAAM,QAAQ,UAAc,EAAA,EAAA;AAChF,MAAA,MAAM,eAAkB,GAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAmB,KAAM,CAAA,UAAA,CAAA,CAAY,UAAU,MAAO,CAAA,gBAAA,CAAA,CAAA;AAG9E,MAAA,MAAM,aAAgB,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,GAAI,CAAA,CAAC,CAAM,KAAA;AAC9C,QAAO,OAAA,EAAC,GAAG,CAAG,EAAA,SAAA,EAAW,EAAE,SAAU,CAAA,MAAA,CAAO,YAAY,CAAC,EAAA,CAAA;AAAA,OAC7D,CAAA,CAAA;AAGA,MAAA,MAAM,wBAAuB,EAAe,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAA,OAAA;AAAA,QAAQ,CAAC,EAAC,SAAA,EAClD,KAAA,CAAC,GAAG,SAAS,CAAA;AAAA,OAAA,KADY,YAExB,EAAC,CAAA;AAEN,MAAA,MAAM,OAAU,GAAA,oBAAA,CAAA;AAEhB,MAAA,KAAA,IAAS,MAAS,GAAA,CAAA,EAAG,MAAS,GAAA,OAAA,CAAQ,QAAQ,MAAU,EAAA,EAAA;AAEpD,QAAA,MAAM,UAAU,OAAQ,CAAA,MAAM,CAAE,CAAA,QAAA,CAAS,OAAO,2BAA2B,CAAA,CAAA;AAE3E,QAAM,MAAA,IAAA,GAAO,OAAQ,CAAA,MAAM,CAAE,CAAA,IAAA,CAAA;AAE7B,QAAA,MAAM,QAAW,GAAA;AAAA,UACb,IAAM,EAAA,OAAA,CAAQ,MAAM,CAAA,CAAE,QAAS,CAAA,IAAA;AAAA,UAC/B,cAAc,OAAQ,CAAA,MAAM,CAAE,CAAA,QAAA,CAAS,YAAY,6BAA6B,CAAA;AAAA,SACpF,CAAA;AAEA,QAAS,KAAA,IAAA,OAAA,GAAU,GAAG,OAAU,GAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,MAAA,CAAO,UAAW,CAAA,MAAA,EAAQ,OAAW,EAAA,EAAA;AACjF,UAAA,MAAM,YAAY,OAAQ,CAAA,MAAM,CAAE,CAAA,MAAA,CAAO,WAAW,OAAO,CAAA,CAAA;AAC3D,UAAA,MAAM,OAAO,SAAU,CAAA,IAAA,CAAA;AACvB,UAAA,QAAQ,IAAM;AAAA,YACV,KAAM,OAAA;AACF,cAAA,QAAA,CAAS,QAAQ,SAAU,CAAA,MAAA,CAAA;AAC3B,cAAA,MAAA;AAAA,YACJ,KAAK,QAAA;AACD,cAAA,QAAA,CAAS,SAAS,SAAU,CAAA,MAAA,CAAA;AAC5B,cAAA,MAAA;AAEA,WACR;AAAA,SACJ;AAEA,QAAA,IAAI,MAAM,EAAC,CAAA;AACX,QAAA,MAAM,WAAW,IAAK,CAAA,SAAA;AAAA,UAClB,CAAC,IAAS,KAAA,IAAA,CAAK,IAAS,KAAA,OAAA;AAAA,SAC5B,CAAA;AACA,QAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACjB,UAAA,GAAA,GAAM,KAAK,QAAQ,CAAA,CAAA;AAAA,SAChB,MAAA;AACH,UAAA,GAAA,CAAI,IAAO,GAAA,OAAA,CAAA;AACX,UAAA,GAAA,CAAI,YAAY,EAAC,CAAA;AAAA,SACrB;AAEA,QAAM,MAAA,SAAA,GAAY,IAAI,SAAU,CAAA,SAAA;AAAA,UAC5B,CAAC,IAAS,KAAA,IAAA,CAAK,IAAS,KAAA,IAAA;AAAA,SAC5B,CAAA;AAEA,QAAA,IAAI,cAAc,CAAI,CAAA,EAAA;AAClB,UAAA,GAAA,CAAI,SAAU,CAAA,SAAS,CAAE,CAAA,SAAA,CAAU,KAAK,QAAQ,CAAA,CAAA;AAAA,SAC7C,MAAA;AACH,UAAA,GAAA,CAAI,UAAU,IAAK,CAAA;AAAA,YACf,IAAA;AAAA,YACA,SAAA,EAAW,CAAC,QAAQ,CAAA;AAAA,WACvB,CAAA,CAAA;AAAA,SACL;AAEA,QAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACjB,UAAA,IAAA,CAAK,KAAK,GAAG,CAAA,CAAA;AAAA,SACjB;AAAA,OACJ;AAAA,KAEJ;AAAA,GACJ;AAEA,EAAA,uBACK,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,OAAQ,EAAA,MAAA,EAAA,sCACT,OACI,EAAA,IAAA,EAAA,OAAA;AAAA;AAAA,wCACI,KAAI,EAAA,EAAA,SAAA,EAAU,wBACX,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAQ,CACb,CAAA;AAAA,MAAA,CACC,uDAAmB,KAAU,MAAA,KAAA,CAAA,IAAA,CAAa,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,IAAS,KACzD,IAAK,CAAA,GAAA;AAAA,IAAI,CAAC,wBACL,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,WAAS,IAAC,EAAA,OAAA,EAAS,CAAG,EAAA,SAAA,EAAU,QACnC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAA,kBACL,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,EAAc,GAAK,EAAA,GAAA,CAAI,MAAM,SAAW,EAAA,GAAA,CAAI,SAAU,EAAA,CAC3D,CACJ,CAAA;AAAA,GACJ,EAEH,KAAU,KAAA,KAAA,CAAA,oBACN,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,OAAS,EAAA,CAAA,EAAG,SAAU,EAAA,QAAA,EAAA,kBACjC,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,MAAI,IACN,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,kBAAmB,EAAA,EAAA,KAAA,EAAQ,IAAI,KAAA,CAAM,KAAK,CAAA,EAAG,CAAE,EAAA,GACpD,CACJ,CAER,CACJ,CAAA,CAAA;AAER,CAAA,CAAA;AAEA,SAAS,iBAAiB,CAAkB,EAAA;AACxC,EAAA,OAAO,EAAE,IAAS,KAAA,iBAAA,CAAA;AACtB,CAAA;AAEA,SAAS,aAAa,CAAuB,EAAA;AACzC,EAAO,OAAA,CAAA,CAAE,UAAW,CAAA,QAAA,CAAS,wBAAwB,CAAA,CAAA;AACzD;;ACxIa,MAAA,MAAA,GAAS,CAAC,KAA0C,KAAA;AAC7D,EAAM,MAAA,EAAC,MAAM,EAAA,GAAI,SAAU,EAAA,CAAA;AAG3B,EAAA,2CAEK,MACG,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,IAAK,EAAA,GAAA;AAAA,MACL,OACI,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,sBAAA;AAAA,QAAA;AAAA,UACG,MAAA;AAAA,UACA,mBAAmB,KAAM,CAAA,iBAAA;AAAA,SAAA;AAAA,OAC7B;AAAA,KAAA;AAAA,GAGZ,CAAA,CAAA;AAGR;;;;"}
|