@daohost/host 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +39 -0
  3. package/out/activity.d.ts +16 -0
  4. package/out/activity.d.ts.map +1 -0
  5. package/out/activity.js +25 -0
  6. package/out/activity.js.map +1 -0
  7. package/out/agents.d.ts +15 -0
  8. package/out/agents.d.ts.map +1 -0
  9. package/out/agents.js +14 -0
  10. package/out/agents.js.map +1 -0
  11. package/out/api.d.ts +115 -0
  12. package/out/api.d.ts.map +1 -0
  13. package/out/api.js +3 -0
  14. package/out/api.js.map +1 -0
  15. package/out/assets.d.ts +46 -0
  16. package/out/assets.d.ts.map +1 -0
  17. package/out/assets.js +1645 -0
  18. package/out/assets.js.map +1 -0
  19. package/out/chains.d.ts +106 -0
  20. package/out/chains.d.ts.map +1 -0
  21. package/out/chains.js +605 -0
  22. package/out/chains.js.map +1 -0
  23. package/out/deployments.d.ts +9 -0
  24. package/out/deployments.d.ts.map +1 -0
  25. package/out/deployments.js +18 -0
  26. package/out/deployments.js.map +1 -0
  27. package/out/host/types.d.ts +59 -0
  28. package/out/host/types.d.ts.map +1 -0
  29. package/out/host/types.js +35 -0
  30. package/out/host/types.js.map +1 -0
  31. package/out/host.d.ts +387 -0
  32. package/out/host.d.ts.map +1 -0
  33. package/out/host.js +948 -0
  34. package/out/host.js.map +1 -0
  35. package/out/index.d.ts +15 -0
  36. package/out/index.d.ts.map +1 -0
  37. package/out/index.js +45 -0
  38. package/out/index.js.map +1 -0
  39. package/out/storage/daos.d.ts +3 -0
  40. package/out/storage/daos.d.ts.map +1 -0
  41. package/out/storage/daos.js +374 -0
  42. package/out/storage/daos.js.map +1 -0
  43. package/out/storage/metaData.d.ts +5 -0
  44. package/out/storage/metaData.d.ts.map +1 -0
  45. package/out/storage/metaData.js +44 -0
  46. package/out/storage/metaData.js.map +1 -0
  47. package/out/tokenlist.json +2098 -0
  48. package/out/unit.d.ts +75 -0
  49. package/out/unit.d.ts.map +1 -0
  50. package/out/unit.js +3 -0
  51. package/out/unit.js.map +1 -0
  52. package/out/validation.d.ts +15 -0
  53. package/out/validation.d.ts.map +1 -0
  54. package/out/validation.js +105 -0
  55. package/out/validation.js.map +1 -0
  56. package/package.json +37 -0
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # DAO.Host: Where True DAOs Live & Work
2
+
3
+ ![GitHub Tag](https://img.shields.io/github/v/tag/stabilitydao/host)
4
+ ![NPM Version](https://img.shields.io/npm/v/%40stabilitydao%2Fhost?label=NPM%20version)
5
+
6
+ ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/stabilitydao/host?label=code%20size)
7
+ ![NPM Unpacked Size](https://img.shields.io/npm/unpacked-size/%40stabilitydao%2Fhost?label=NPM%20unpacked%20size)
8
+
9
+ <p align="left">
10
+ <a href="https://dao.host">
11
+ <img src="/logo.png" title="Infrastructure layer for strategic DeFi Assets Management">
12
+ </a>
13
+ </p>
14
+
15
+ Unit Status: **BUILDING_PROTOTYPE**
16
+
17
+ **Host** is an Operating System of Self-developing Decentralized Autonomous Organizations.
18
+
19
+ This repository contains the core Host integration library and its typescript implementation.
20
+
21
+ ## Use in project
22
+
23
+ ```shell
24
+ yarn add @stabilitydao/host
25
+ ```
26
+
27
+ ## Tools
28
+
29
+ ```shell
30
+ yarn overview
31
+ yarn draw:dao
32
+ ```
33
+
34
+ ## Develop
35
+
36
+ ```shell
37
+ yarn coverage
38
+ yarn prettier --write .
39
+ ```
@@ -0,0 +1,16 @@
1
+ import { UnitType } from "./host/types";
2
+ /** Organization activities supported by OS. */
3
+ export declare enum Activity {
4
+ /** Owner of Decentralized Finance protocols */
5
+ DEFI = "DEFI",
6
+ /** Owner of Maximum Extractable Value tools */
7
+ MEV = "MEV"
8
+ }
9
+ export declare const activities: {
10
+ [activity in Activity]: {
11
+ title: string;
12
+ unitTypes: UnitType[];
13
+ description?: string;
14
+ };
15
+ };
16
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,+CAA+C;AAC/C,oBAAY,QAAQ;IAClB,+CAA+C;IAC/C,IAAI,SAAS;IACb,+CAA+C;IAC/C,GAAG,QAAQ;CAGZ;AAED,eAAO,MAAM,UAAU,EAAE;KACtB,QAAQ,IAAI,QAAQ,GAAG;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,QAAQ,EAAE,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;CAUF,CAAC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.activities = exports.Activity = void 0;
4
+ const types_1 = require("./host/types");
5
+ /** Organization activities supported by OS. */
6
+ var Activity;
7
+ (function (Activity) {
8
+ /** Owner of Decentralized Finance protocols */
9
+ Activity["DEFI"] = "DEFI";
10
+ /** Owner of Maximum Extractable Value tools */
11
+ Activity["MEV"] = "MEV";
12
+ /** Owner of Software as a Service business */
13
+ //SAAS_OPERATOR = "SAAS_OPERATOR",
14
+ })(Activity || (exports.Activity = Activity = {}));
15
+ exports.activities = {
16
+ [Activity.DEFI]: {
17
+ title: "Decentralized Finance Protocol Operator",
18
+ unitTypes: [types_1.UnitType.DEFI_PROTOCOL],
19
+ },
20
+ [Activity.MEV]: {
21
+ title: "Maximum Extractable Value tools",
22
+ unitTypes: [types_1.UnitType.MEV_SEARCHER],
23
+ },
24
+ };
25
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":";;;AAAA,wCAAwC;AAExC,+CAA+C;AAC/C,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,+CAA+C;IAC/C,yBAAa,CAAA;IACb,+CAA+C;IAC/C,uBAAW,CAAA;IACX,8CAA8C;IAC9C,kCAAkC;AACpC,CAAC,EAPW,QAAQ,wBAAR,QAAQ,QAOnB;AAEY,QAAA,UAAU,GAMnB;IACF,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACf,KAAK,EAAE,yCAAyC;QAChD,SAAS,EAAE,CAAC,gBAAQ,CAAC,aAAa,CAAC;KACpC;IACD,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QACd,KAAK,EAAE,iCAAiC;QACxC,SAAS,EAAE,CAAC,gBAAQ,CAAC,YAAY,CAAC;KACnC;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ export interface IAgent {
2
+ api: string[];
3
+ roles: AgentRole[];
4
+ name: string;
5
+ unitIds: string[];
6
+ directives?: string[];
7
+ image?: string;
8
+ telegram?: `@${string}`;
9
+ }
10
+ export declare const enum AgentRole {
11
+ API_OPERATOR = "API_OPERATOR",
12
+ TX_SENDER = "TX_SENDER",
13
+ MEV_SEARCHER = "MEV_SEARCHER"
14
+ }
15
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;CACzB;AAED,0BAAkB,SAAS;IACzB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B"}
package/out/agents.js ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /*
3
+ * Agent is highly abstract and high-level entity that follow role directives.
4
+ * Agents are owned by DAOs built on Host.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.AgentRole = void 0;
8
+ var AgentRole;
9
+ (function (AgentRole) {
10
+ AgentRole["API_OPERATOR"] = "API_OPERATOR";
11
+ AgentRole["TX_SENDER"] = "TX_SENDER";
12
+ AgentRole["MEV_SEARCHER"] = "MEV_SEARCHER";
13
+ })(AgentRole || (exports.AgentRole = AgentRole = {}));
14
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../src/agents.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH,IAAkB,SAIjB;AAJD,WAAkB,SAAS;IACzB,0CAA6B,CAAA;IAC7B,oCAAuB,CAAA;IACvB,0CAA6B,CAAA;AAC/B,CAAC,EAJiB,SAAS,yBAAT,SAAS,QAI1B"}
package/out/api.d.ts ADDED
@@ -0,0 +1,115 @@
1
+ import { IGithubIssueV2, IGithubUser } from "./unit";
2
+ export interface IAgentMemory {
3
+ /** When generated */
4
+ timestamp: number;
5
+ /** Private memory data allow to show only overview by agent API */
6
+ private: boolean;
7
+ /** Memory data overview */
8
+ overview: {
9
+ [title: string]: string;
10
+ };
11
+ /** Timestamp when agent instance launched */
12
+ started: number;
13
+ /** EVM transaction sender */
14
+ txSender?: {
15
+ /** EOA */
16
+ account: `0x${string}`;
17
+ /** Coin balances */
18
+ balance: {
19
+ [chainId: string]: {
20
+ coin: string;
21
+ usd: number;
22
+ };
23
+ };
24
+ /** Spent for gas */
25
+ spent: {
26
+ [date: string]: {
27
+ txs: number;
28
+ usd: {
29
+ [chainId: string]: number;
30
+ };
31
+ };
32
+ };
33
+ };
34
+ /** Data specific for agent */
35
+ data: any;
36
+ }
37
+ export interface IHostAgentMemoryV3 extends IAgentMemory {
38
+ data: {
39
+ /** Prices of assets */
40
+ prices: Prices;
41
+ /** Total Value Locked in blockchains */
42
+ chainTvl: {
43
+ [chainId: string]: number;
44
+ };
45
+ /** DAO runtime data. Updates each minute or faster. */
46
+ daos: {
47
+ [symbol: string]: IDAOAPIDataV2;
48
+ };
49
+ /** Instant Updates by subscribing to github application webhooks */
50
+ builders: IBuildersMemoryV3;
51
+ };
52
+ }
53
+ export interface IDAOAPIDataV2 {
54
+ /** Price from Stability interchain oracle */
55
+ oraclePrice: string;
56
+ /** Coingecko price */
57
+ coingeckoPrice?: string;
58
+ /** Data for total revenue chart */
59
+ revenueChart: RevenueChart;
60
+ /** Extracted on-chain data */
61
+ onChainData: {
62
+ [chainId: string]: {
63
+ stakingAPR: number;
64
+ staked: number;
65
+ units: {
66
+ [unitId: string]: {
67
+ pendingRevenueUSD: number;
68
+ pendingRevenueAssetAmount: number;
69
+ pendingRevenueAssetSymbol: string;
70
+ pendingRevenueAssetAddress?: string;
71
+ }[];
72
+ };
73
+ revenueTokens?: `0x${string}`[];
74
+ };
75
+ };
76
+ /** Users / followers in tracked socials */
77
+ socialUsers: {
78
+ [socialLink: string]: number;
79
+ };
80
+ holders?: IDAOHolders;
81
+ }
82
+ export interface IDAOHolders {
83
+ [addr: string]: IDAOHoldings;
84
+ }
85
+ export interface IDAOHoldings {
86
+ address: `0x${string}`;
87
+ balance: string;
88
+ percentage?: string;
89
+ }
90
+ export type Prices = {
91
+ [symbol: string]: {
92
+ priceUsd: string;
93
+ priceChange: number;
94
+ };
95
+ };
96
+ export type RevenueChart = Record<number, string>;
97
+ /**
98
+ DAO can build by installing Host Agent GitHub App and emitting `IUnitPool` by pool key of `IUnitEmitData`
99
+ */
100
+ export interface IBuildersMemoryV3 {
101
+ [tokenSymbol: string]: {
102
+ openIssues: {
103
+ [unitId: string]: IGithubIssueV2[];
104
+ };
105
+ repos: {
106
+ [repo: string]: {
107
+ openIssues: number;
108
+ private: boolean;
109
+ access?: IGithubUser[];
110
+ stars?: number;
111
+ };
112
+ };
113
+ };
114
+ }
115
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAElB,mEAAmE;IACnE,OAAO,EAAE,OAAO,CAAC;IAEjB,2BAA2B;IAC3B,QAAQ,EAAE;QACR,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;KACzB,CAAC;IAEF,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAEhB,6BAA6B;IAC7B,QAAQ,CAAC,EAAE;QACT,UAAU;QACV,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;QACvB,oBAAoB;QACpB,OAAO,EAAE;YACP,CAAC,OAAO,EAAE,MAAM,GAAG;gBACjB,IAAI,EAAE,MAAM,CAAC;gBACb,GAAG,EAAE,MAAM,CAAC;aACb,CAAC;SACH,CAAC;QACF,oBAAoB;QACpB,KAAK,EAAE;YACL,CAAC,IAAI,EAAE,MAAM,GAAG;gBACd,GAAG,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE;oBACH,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;iBAC3B,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;IAEF,8BAA8B;IAC9B,IAAI,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,IAAI,EAAE;QACJ,uBAAuB;QACvB,MAAM,EAAE,MAAM,CAAC;QAEf,wCAAwC;QACxC,QAAQ,EAAE;YAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QAExC,uDAAuD;QACvD,IAAI,EAAE;YACJ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC;SACjC,CAAC;QAEF,oEAAoE;QACpE,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,8BAA8B;IAC9B,WAAW,EAAE;QACX,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE;gBACL,CAAC,MAAM,EAAE,MAAM,GAAG;oBAChB,iBAAiB,EAAE,MAAM,CAAC;oBAC1B,yBAAyB,EAAE,MAAM,CAAC;oBAClC,yBAAyB,EAAE,MAAM,CAAC;oBAClC,0BAA0B,CAAC,EAAE,MAAM,CAAC;iBACrC,EAAE,CAAC;aACL,CAAC;YACF,aAAa,CAAC,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC;SACjC,CAAC;KACH,CAAC;IACF,2CAA2C;IAC3C,WAAW,EAAE;QACX,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;KAC9B,CAAC;IACF,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,CAAC,MAAM,EAAE,MAAM,GAAG;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,WAAW,EAAE,MAAM,GAAG;QACrB,UAAU,EAAE;YACV,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;SACpC,CAAC;QACF,KAAK,EAAE;YACL,CAAC,IAAI,EAAE,MAAM,GAAG;gBACd,UAAU,EAAE,MAAM,CAAC;gBACnB,OAAO,EAAE,OAAO,CAAC;gBACjB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;gBACvB,KAAK,CAAC,EAAE,MAAM,CAAC;aAChB,CAAC;SACH,CAAC;KACH,CAAC;CACH"}
package/out/api.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=api.js.map
package/out/api.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ export type Asset = {
2
+ addresses: {
3
+ [chainId: string]: `0x${string}` | `0x${string}`[];
4
+ };
5
+ symbol: string;
6
+ description?: string;
7
+ website: string;
8
+ color?: string;
9
+ mintApp?: string;
10
+ };
11
+ export declare const assets: Asset[];
12
+ export declare const getAsset: (chainId: string, tokenAddress: `0x${string}`) => Asset | undefined;
13
+ export declare function getAssetBySymbol(symbol: string): Asset | undefined;
14
+ export type TokenData = {
15
+ address: `0x${string}`;
16
+ name: string;
17
+ symbol: string;
18
+ chainId: number;
19
+ decimals: number;
20
+ logoURI: string;
21
+ tags?: string[];
22
+ };
23
+ /**
24
+ * Function to get token data from token list
25
+ *
26
+ * @example
27
+ *
28
+ * ```
29
+ * getTokenData("146", "0x2791bca1f2de4661ed88a30c99a7a9449aa84174")
30
+ * ```
31
+ *
32
+ * @param chainId - Chain ID string
33
+ * @param address - Token address
34
+ *
35
+ * @returns {Object} Token Information
36
+ * @property {`0x${string}`} address - Token contract address
37
+ * @property {number} chainId - ID of the blockchain network (e.g., 137 for Polygon)
38
+ * @property {number} decimals - Number of decimals the token uses
39
+ * @property {string} name - Full name of the token (e.g., "Dai Stablecoin").
40
+ * @property {string} symbol - Token ticker symbol (e.g., "DAI").
41
+ * @property {string} logoURI - URL of the token's logo image.
42
+ * @property {string[]} tags - Array of tags related to the token (e.g., ["stablecoin", "DeFi"]).
43
+ *
44
+ **/
45
+ export declare const getTokenData: (chainId: string, address: `0x${string}`) => TokenData | undefined;
46
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAAK,EA0lDzB,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,SAAS,MAAM,EACf,cAAc,KAAK,MAAM,EAAE,KAC1B,KAAK,GAAG,SAkBV,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAMlE;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;IAqBI;AACJ,eAAO,MAAM,YAAY,GACvB,SAAS,MAAM,EACf,SAAS,KAAK,MAAM,EAAE,KACrB,SAAS,GAAG,SAkBd,CAAC"}