jbrowse-plugin-gwas 1.0.6 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +9 -2
  2. package/README.md +13 -8
  3. package/dist/LinearManhattanDisplay/TooltipComponent.d.ts +15 -0
  4. package/dist/LinearManhattanDisplay/TooltipComponent.js +31 -0
  5. package/dist/LinearManhattanDisplay/TooltipComponent.js.map +1 -0
  6. package/dist/LinearManhattanDisplay/configSchemaFactory.d.ts +70 -2
  7. package/dist/LinearManhattanDisplay/configSchemaFactory.js +59 -0
  8. package/dist/LinearManhattanDisplay/configSchemaFactory.js.map +1 -0
  9. package/dist/LinearManhattanDisplay/index.d.ts +2 -10
  10. package/dist/LinearManhattanDisplay/index.js +19 -0
  11. package/dist/LinearManhattanDisplay/index.js.map +1 -0
  12. package/dist/LinearManhattanDisplay/stateModelFactory.d.ts +424 -0
  13. package/dist/LinearManhattanDisplay/stateModelFactory.js +48 -0
  14. package/dist/LinearManhattanDisplay/stateModelFactory.js.map +1 -0
  15. package/dist/LinearManhattanRenderer/LinearManhattanRenderer.d.ts +57 -6
  16. package/dist/LinearManhattanRenderer/LinearManhattanRenderer.js +69 -0
  17. package/dist/LinearManhattanRenderer/LinearManhattanRenderer.js.map +1 -0
  18. package/dist/LinearManhattanRenderer/LinearManhattanRendering.d.ts +17 -0
  19. package/dist/LinearManhattanRenderer/LinearManhattanRendering.js +37 -0
  20. package/dist/LinearManhattanRenderer/LinearManhattanRendering.js.map +1 -0
  21. package/dist/LinearManhattanRenderer/configSchema.d.ts +11 -0
  22. package/dist/LinearManhattanRenderer/configSchema.js +13 -0
  23. package/dist/LinearManhattanRenderer/configSchema.js.map +1 -0
  24. package/dist/LinearManhattanRenderer/index.d.ts +2 -2
  25. package/dist/LinearManhattanRenderer/index.js +16 -0
  26. package/dist/LinearManhattanRenderer/index.js.map +1 -0
  27. package/dist/index.d.ts +6 -6
  28. package/dist/index.js +13 -7
  29. package/dist/index.js.map +1 -0
  30. package/dist/jbrowse-plugin-gwas.umd.production.min.js +94 -1
  31. package/dist/jbrowse-plugin-gwas.umd.production.min.js.map +7 -1
  32. package/package.json +58 -44
  33. package/src/LinearManhattanDisplay/TooltipComponent.tsx +59 -0
  34. package/src/LinearManhattanDisplay/configSchemaFactory.ts +41 -37
  35. package/src/LinearManhattanDisplay/index.ts +23 -33
  36. package/src/LinearManhattanDisplay/stateModelFactory.ts +73 -0
  37. package/src/LinearManhattanRenderer/LinearManhattanRenderer.ts +64 -32
  38. package/src/LinearManhattanRenderer/LinearManhattanRendering.tsx +69 -0
  39. package/src/LinearManhattanRenderer/configSchema.ts +17 -0
  40. package/src/LinearManhattanRenderer/index.ts +17 -14
  41. package/src/index.ts +9 -44
  42. package/dist/jbrowse-plugin-gwas.cjs.development.js +0 -503
  43. package/dist/jbrowse-plugin-gwas.cjs.development.js.map +0 -1
  44. package/dist/jbrowse-plugin-gwas.cjs.production.min.js +0 -2
  45. package/dist/jbrowse-plugin-gwas.cjs.production.min.js.map +0 -1
  46. package/dist/jbrowse-plugin-gwas.esm.js +0 -497
  47. package/dist/jbrowse-plugin-gwas.esm.js.map +0 -1
  48. package/dist/jbrowse-plugin-gwas.umd.development.js +0 -504
  49. package/dist/jbrowse-plugin-gwas.umd.development.js.map +0 -1
  50. package/src/declare.d.ts +0 -3
  51. package/src/index.test.ts +0 -3
package/CHANGELOG.md CHANGED
@@ -1,10 +1,16 @@
1
+ # v2.0.0
2
+
3
+ - Add clickable features
4
+ - Add click map
5
+
1
6
  # v1.0.6
2
7
 
3
8
  - Fix passing feature context variable to the color callback
4
9
 
5
10
  # v1.0.5
6
11
 
7
- - Fix ability to configure the renderer on the display, see sample config.json for custom coloring
12
+ - Fix ability to configure the renderer on the display, see sample config.json
13
+ for custom coloring
8
14
 
9
15
  # v1.0.4
10
16
 
@@ -12,7 +18,8 @@
12
18
 
13
19
  # v1.0.3
14
20
 
15
- - Fix for v1.1.0 of jbrowse-web requires passing pluginManager to renderer constructor
21
+ - Fix for v1.1.0 of jbrowse-web requires passing pluginManager to renderer
22
+ constructor
16
23
 
17
24
  # v1.0.2
18
25
 
package/README.md CHANGED
@@ -4,19 +4,22 @@ Plugin for displaying GWAS results such as manhattan plot renderings
4
4
 
5
5
  ## Screenshot
6
6
 
7
- ![](img/1.png)
8
- ![](img/2.png)
7
+ ![](img/1.png) ![](img/2.png)
9
8
 
10
9
  ## Data format
11
10
 
12
- jbrowse-plugin-gwas will render any features with a "score". A common format is a BED-like file, perhaps with tabix added. Example with plain BED, where the score is in column 5
11
+ jbrowse-plugin-gwas will render any features with a "score". A common format is
12
+ a BED-like file, perhaps with tabix added. Example with plain BED, where the
13
+ score is in column 5
13
14
 
14
15
  ```
15
16
  chr22 1000 5000 rs123 84.141
16
17
  chr22 2000 6000 rs456 40.12312
17
18
  ```
18
19
 
19
- Sometimes, the file format is not a strict BED but something with just one coordinate instead of a start and end. Example with BED-like data (only one coordinate column)
20
+ Sometimes, the file format is not a strict BED but something with just one
21
+ coordinate instead of a start and end. Example with BED-like data (only one
22
+ coordinate column)
20
23
 
21
24
  ```
22
25
  #chrom pos rsid ref alt neg_log_pvalue beta stderr_beta alt_allele_freq
@@ -45,8 +48,8 @@ p-values, you may need to modify them or add a -log10(p) to the file)
45
48
 
46
49
  ## Example config
47
50
 
48
- The below config uses the "scoreColumn" attribute to set neg_log_pvalue (as
49
- seen in above section) to be the score that is plotted
51
+ The below config uses the "scoreColumn" attribute to set neg_log_pvalue (as seen
52
+ in above section) to be the score that is plotted
50
53
 
51
54
  ```json
52
55
  {
@@ -79,7 +82,8 @@ seen in above section) to be the score that is plotted
79
82
 
80
83
  ## Usage in jbrowse-web
81
84
 
82
- Add to the "plugins" of your JBrowse Web config. The unpkg CDN should be stable, or you can download the js file to your server
85
+ Add to the "plugins" of your JBrowse Web config. The unpkg CDN should be stable,
86
+ or you can download the js file to your server
83
87
 
84
88
  ```json
85
89
  {
@@ -92,7 +96,8 @@ Add to the "plugins" of your JBrowse Web config. The unpkg CDN should be stable,
92
96
  }
93
97
  ```
94
98
 
95
- This plugin is currently quite basic, and there is no mouseover interactivity or drawn labels on features
99
+ This plugin is currently quite basic, and there is no mouseover interactivity or
100
+ drawn labels on features
96
101
 
97
102
  #### Demo
98
103
 
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { Feature } from '@jbrowse/core/util';
3
+ import type { TooltipContentsComponent } from '@jbrowse/plugin-wiggle';
4
+ type Coord = [number, number];
5
+ declare const TooltipComponent: (props: {
6
+ model: {
7
+ featureUnderMouse?: Feature;
8
+ };
9
+ height: number;
10
+ offsetMouseCoord: Coord;
11
+ clientMouseCoord: Coord;
12
+ clientRect?: DOMRect;
13
+ TooltipContents?: TooltipContentsComponent;
14
+ }) => React.JSX.Element;
15
+ export default TooltipComponent;
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { Tooltip } from '@jbrowse/plugin-wiggle';
3
+ import { observer } from 'mobx-react';
4
+ const en = (n) => n.toLocaleString('en-US');
5
+ function toP(s = 0) {
6
+ return +(+s).toPrecision(6);
7
+ }
8
+ const TooltipContents = React.forwardRef(function TooltipContents2({ feature }, ref) {
9
+ const start = feature.get('start') + 1;
10
+ const end = feature.get('end');
11
+ const refName = feature.get('refName');
12
+ const name = feature.get('name');
13
+ const rsid = feature.get('rsid');
14
+ const loc = [
15
+ refName,
16
+ start === end ? en(start) : `${en(start)}..${en(end)}`,
17
+ ]
18
+ .filter(f => !!f)
19
+ .join(':');
20
+ return (React.createElement("div", { ref: ref },
21
+ loc,
22
+ React.createElement("br", null),
23
+ `${toP(feature.get('score'))}`,
24
+ React.createElement("br", null),
25
+ name || rsid));
26
+ });
27
+ const TooltipComponent = observer(function (props) {
28
+ return React.createElement(Tooltip, { TooltipContents: TooltipContents, ...props });
29
+ });
30
+ export default TooltipComponent;
31
+ //# sourceMappingURL=TooltipComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TooltipComponent.js","sourceRoot":"","sources":["../../src/LinearManhattanDisplay/TooltipComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAKrC,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;AAEnD,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC;IAChB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;AAC7B,CAAC;AAKD,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CACtC,SAAS,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG;QACV,OAAO;QACP,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE;KACvD;SACE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SAChB,IAAI,CAAC,GAAG,CAAC,CAAA;IAEZ,OAAO,CACL,6BAAK,GAAG,EAAE,GAAG;QACV,GAAG;QACJ,+BAAM;QACL,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE;QAC/B,+BAAM;QACL,IAAI,IAAI,IAAI,CACT,CACP,CAAA;AACH,CAAC,CACF,CAAA;AAID,MAAM,gBAAgB,GAAG,QAAQ,CAAC,UAAU,KAS3C;IACC,OAAO,oBAAC,OAAO,IAAC,eAAe,EAAE,eAAe,KAAM,KAAK,GAAI,CAAA;AACjE,CAAC,CAAC,CAAA;AAEF,eAAe,gBAAgB,CAAA"}
@@ -1,2 +1,70 @@
1
- import PluginManager from "@jbrowse/core/PluginManager";
2
- export declare function configSchemaFactory(pluginManager: PluginManager): import("@jbrowse/core/configuration/configurationSchema").AnyConfigurationSchemaType;
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
+ export declare function configSchemaFactory(pluginManager: PluginManager): import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
3
+ autoscale: {
4
+ type: string;
5
+ defaultValue: string;
6
+ model: import("mobx-state-tree").ISimpleType<string>;
7
+ description: string;
8
+ };
9
+ minScore: {
10
+ type: string;
11
+ defaultValue: number;
12
+ description: string;
13
+ };
14
+ maxScore: {
15
+ type: string;
16
+ description: string;
17
+ defaultValue: number;
18
+ };
19
+ numStdDev: {
20
+ type: string;
21
+ description: string;
22
+ defaultValue: number;
23
+ };
24
+ scaleType: {
25
+ type: string;
26
+ model: import("mobx-state-tree").ISimpleType<string>;
27
+ description: string;
28
+ defaultValue: string;
29
+ };
30
+ inverted: {
31
+ type: string;
32
+ description: string;
33
+ defaultValue: boolean;
34
+ };
35
+ defaultRendering: {
36
+ type: string;
37
+ model: import("mobx-state-tree").ISimpleType<string>;
38
+ defaultValue: string;
39
+ };
40
+ renderers: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
41
+ LinearManhattanRenderer: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
42
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
43
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
44
+ maxFeatureScreenDensity: {
45
+ type: string;
46
+ description: string;
47
+ defaultValue: number;
48
+ };
49
+ fetchSizeLimit: {
50
+ type: string;
51
+ defaultValue: number;
52
+ description: string;
53
+ };
54
+ height: {
55
+ type: string;
56
+ defaultValue: number;
57
+ description: string;
58
+ };
59
+ mouseover: {
60
+ type: string;
61
+ description: string;
62
+ defaultValue: string;
63
+ contextVariable: string[];
64
+ };
65
+ jexlFilters: {
66
+ type: string;
67
+ description: string;
68
+ defaultValue: never[];
69
+ };
70
+ }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, "displayId">>, undefined>>;
@@ -0,0 +1,59 @@
1
+ import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
+ import { types } from 'mobx-state-tree';
3
+ export function configSchemaFactory(pluginManager) {
4
+ const LGVPlugin = pluginManager.getPlugin('LinearGenomeViewPlugin');
5
+ const { baseLinearDisplayConfigSchema } = LGVPlugin.exports;
6
+ const LinearManhattanRendererConfigSchema = pluginManager.getRendererType('LinearManhattanRenderer').configSchema;
7
+ return ConfigurationSchema('LinearManhattanDisplay', {
8
+ autoscale: {
9
+ type: 'stringEnum',
10
+ defaultValue: 'local',
11
+ model: types.enumeration('Autoscale type', [
12
+ 'global',
13
+ 'local',
14
+ 'globalsd',
15
+ 'localsd',
16
+ 'zscore',
17
+ ]),
18
+ description: 'global/local using their min/max values or w/ standard deviations (globalsd/localsd)',
19
+ },
20
+ minScore: {
21
+ type: 'number',
22
+ defaultValue: Number.MIN_VALUE,
23
+ description: 'minimum value for the y-scale',
24
+ },
25
+ maxScore: {
26
+ type: 'number',
27
+ description: 'maximum value for the y-scale',
28
+ defaultValue: Number.MAX_VALUE,
29
+ },
30
+ numStdDev: {
31
+ type: 'number',
32
+ description: 'number of standard deviations to use for autoscale types globalsd or localsd',
33
+ defaultValue: 3,
34
+ },
35
+ scaleType: {
36
+ type: 'stringEnum',
37
+ model: types.enumeration('Scale type', ['linear', 'log']), // todo zscale
38
+ description: 'The type of scale to use',
39
+ defaultValue: 'linear',
40
+ },
41
+ inverted: {
42
+ type: 'boolean',
43
+ description: 'draw upside down',
44
+ defaultValue: false,
45
+ },
46
+ defaultRendering: {
47
+ type: 'stringEnum',
48
+ model: types.enumeration('Rendering', ['density', 'xyplot', 'line']),
49
+ defaultValue: 'xyplot',
50
+ },
51
+ renderers: ConfigurationSchema('RenderersConfiguration', {
52
+ LinearManhattanRenderer: LinearManhattanRendererConfigSchema,
53
+ }),
54
+ }, {
55
+ baseConfiguration: baseLinearDisplayConfigSchema,
56
+ explicitlyTyped: true,
57
+ });
58
+ }
59
+ //# sourceMappingURL=configSchemaFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configSchemaFactory.js","sourceRoot":"","sources":["../../src/LinearManhattanDisplay/configSchemaFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAKvC,MAAM,UAAU,mBAAmB,CAAC,aAA4B;IAC9D,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CACvC,wBAAwB,CACZ,CAAA;IACd,MAAM,EAAE,6BAA6B,EAAE,GAAG,SAAS,CAAC,OAAO,CAAA;IAE3D,MAAM,mCAAmC,GAAG,aAAa,CAAC,eAAe,CACvE,yBAAyB,CACzB,CAAC,YAAY,CAAA;IACf,OAAO,mBAAmB,CACxB,wBAAwB,EACxB;QACE,SAAS,EAAE;YACT,IAAI,EAAE,YAAY;YAClB,YAAY,EAAE,OAAO;YACrB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,EAAE;gBACzC,QAAQ;gBACR,OAAO;gBACP,UAAU;gBACV,SAAS;gBACT,QAAQ;aACT,CAAC;YACF,WAAW,EACT,sFAAsF;SACzF;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,MAAM,CAAC,SAAS;YAC9B,WAAW,EAAE,+BAA+B;SAC7C;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+BAA+B;YAC5C,YAAY,EAAE,MAAM,CAAC,SAAS;SAC/B;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,8EAA8E;YAChF,YAAY,EAAE,CAAC;SAChB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,EAAE,cAAc;YACzE,WAAW,EAAE,0BAA0B;YACvC,YAAY,EAAE,QAAQ;SACvB;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,kBAAkB;YAC/B,YAAY,EAAE,KAAK;SACpB;QAED,gBAAgB,EAAE;YAChB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpE,YAAY,EAAE,QAAQ;SACvB;QACD,SAAS,EAAE,mBAAmB,CAAC,wBAAwB,EAAE;YACvD,uBAAuB,EAAE,mCAAmC;SAC7D,CAAC;KACH,EACD;QACE,iBAAiB,EAAE,6BAA6B;QAChD,eAAe,EAAE,IAAI;KACtB,CACF,CAAA;AACH,CAAC"}
@@ -1,10 +1,2 @@
1
- import PluginManager from "@jbrowse/core/PluginManager";
2
- export { configSchemaFactory } from "./configSchemaFactory";
3
- export declare function stateModelFactory(pluginManager: PluginManager, configSchema: any): import("mobx-state-tree").IModelType<import("mobx-state-tree").ModelProperties & {
4
- type: import("mobx-state-tree").ISimpleType<"LinearManhattanDisplay">;
5
- }, {
6
- readonly rendererTypeName: string;
7
- readonly needsScalebar: boolean;
8
- readonly regionTooLarge: boolean;
9
- }, import("mobx-state-tree")._NotCustomized, import("mobx-state-tree")._NotCustomized>;
10
- export declare type LinearManhattanDisplayModel = ReturnType<typeof stateModelFactory>;
1
+ import type PluginManager from '@jbrowse/core/PluginManager';
2
+ export default function LinearManhattanDisplayF(pluginManager: PluginManager): void;
@@ -0,0 +1,19 @@
1
+ import { DisplayType } from '@jbrowse/core/pluggableElementTypes';
2
+ import { configSchemaFactory } from './configSchemaFactory';
3
+ import { stateModelFactory } from './stateModelFactory';
4
+ export default function LinearManhattanDisplayF(pluginManager) {
5
+ const WigglePlugin = pluginManager.getPlugin('WigglePlugin');
6
+ const { LinearWiggleDisplayReactComponent } = WigglePlugin.exports;
7
+ pluginManager.addDisplayType(() => {
8
+ const configSchema = configSchemaFactory(pluginManager);
9
+ return new DisplayType({
10
+ name: 'LinearManhattanDisplay',
11
+ configSchema,
12
+ stateModel: stateModelFactory(pluginManager, configSchema),
13
+ trackType: 'FeatureTrack',
14
+ viewType: 'LinearGenomeView',
15
+ ReactComponent: LinearWiggleDisplayReactComponent,
16
+ });
17
+ });
18
+ }
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/LinearManhattanDisplay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,aAA4B;IAC1E,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,cAAc,CAAiB,CAAA;IAE5E,MAAM,EAAE,iCAAiC,EAAE,GAAG,YAAY,CAAC,OAAO,CAAA;IAElE,aAAa,CAAC,cAAc,CAAC,GAAG,EAAE;QAChC,MAAM,YAAY,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;QACvD,OAAO,IAAI,WAAW,CAAC;YACrB,IAAI,EAAE,wBAAwB;YAC9B,YAAY;YACZ,UAAU,EAAE,iBAAiB,CAAC,aAAa,EAAE,YAAY,CAAC;YAC1D,SAAS,EAAE,cAAc;YACzB,QAAQ,EAAE,kBAAkB;YAC5B,cAAc,EAAE,iCAAiC;SAClD,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}