@yongdall/user-rbac 0.4.0 → 0.5.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/index.mjs +21 -2
- package/index.mjs.map +1 -0
- package/models-C4PS3teD.mjs +27 -0
- package/models-C4PS3teD.mjs.map +1 -0
- package/package.json +10 -9
- package/yongdall/migration.mjs +11 -0
- package/yongdall/migration.mjs.map +1 -0
- package/yongdall/model.mjs +26 -0
- package/yongdall/model.mjs.map +1 -0
- package/yongdall/user.mjs +11 -0
- package/yongdall/user.mjs.map +1 -0
- package/yongdall.plugin.yml +1 -0
- package/hooks.yongdall.mjs +0 -31
- package/hooks.yongdall.mjs.map +0 -1
- package/user-rbac-C3V-krDr.mjs +0 -44
- package/user-rbac-C3V-krDr.mjs.map +0 -1
package/index.mjs
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as UserRole_default } from "./models-C4PS3teD.mjs";
|
|
2
|
+
import { Query } from "@yongdall/model";
|
|
3
|
+
import { RolePermission } from "@yongdall/role";
|
|
4
|
+
import { connect } from "@yongdall/connection";
|
|
5
|
+
import { createKeyStore } from "@yongdall/context";
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
//#region plugins/user-rbac/index.mjs
|
|
8
|
+
/** @type {(user?: string?) => Promise<string[]>} */
|
|
9
|
+
const useRoleIds = createKeyStore(async (user) => {
|
|
10
|
+
if (!user) return [];
|
|
11
|
+
return (await connect("rdb").select(new Query(UserRole_default).select("roleId").where("userId", user))).map((v) => v.roleId);
|
|
12
|
+
}, (user) => user || "");
|
|
13
|
+
/** @type {(user?: string?) => Promise<string[]>} */
|
|
14
|
+
const usePermissions = createKeyStore(async (user) => {
|
|
15
|
+
const roleIds = await useRoleIds(user);
|
|
16
|
+
if (!roleIds.length) return [];
|
|
17
|
+
return (await connect("rdb").select(new Query(RolePermission).select("permission").where("roleId", "in", roleIds))).map((v) => v.permission);
|
|
18
|
+
}, (user) => user || "");
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { UserRole_default as UserRole, usePermissions, useRoleIds };
|
|
22
|
+
//# sourceMappingURL=index.mjs.map
|
package/index.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["UserRole"],"sources":["../../plugins/user-rbac/index.mjs"],"sourcesContent":["import { connect } from '@yongdall/connection';\nimport { createKeyStore } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { UserRole } from './models/index.mjs';\nimport { RolePermission } from '@yongdall/role';\n\nexport * from './models/index.mjs';\n\n\n/** @type {(user?: string?) => Promise<string[]>} */\nexport const useRoleIds = createKeyStore(async user => {\n\tif (!user) { return []; }\n\tconst list = await connect('rdb').select(\n\t\tnew Query(UserRole).select('roleId').where('userId', user)\n\t);\n\treturn list.map(v => v.roleId);\n}, user => user || '');\n\n/** @type {(user?: string?) => Promise<string[]>} */\nexport const usePermissions = createKeyStore(async user => {\n\tconst roleIds = await useRoleIds(user);\n\tif (!roleIds.length) { return []; };\n\tconst list = await connect('rdb').select(\n\t\tnew Query(RolePermission).select('permission').where('roleId', 'in', roleIds)\n\t);\n\treturn list.map(v => v.permission);\n}, user => user || '');\n"],"mappings":";;;;;;;;AAUA,MAAa,aAAa,eAAe,OAAM,SAAQ;AACtD,KAAI,CAAC,KAAQ,QAAO,EAAE;AAItB,SAHa,MAAM,QAAQ,MAAM,CAAC,OACjC,IAAI,MAAMA,iBAAS,CAAC,OAAO,SAAS,CAAC,MAAM,UAAU,KAAK,CAC1D,EACW,KAAI,MAAK,EAAE,OAAO;IAC5B,SAAQ,QAAQ,GAAG;;AAGtB,MAAa,iBAAiB,eAAe,OAAM,SAAQ;CAC1D,MAAM,UAAU,MAAM,WAAW,KAAK;AACtC,KAAI,CAAC,QAAQ,OAAU,QAAO,EAAE;AAIhC,SAHa,MAAM,QAAQ,MAAM,CAAC,OACjC,IAAI,MAAM,eAAe,CAAC,OAAO,aAAa,CAAC,MAAM,UAAU,MAAM,QAAQ,CAC7E,EACW,KAAI,MAAK,EAAE,WAAW;IAChC,SAAQ,QAAQ,GAAG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createField, createModel } from "@yongdall/model";
|
|
2
|
+
|
|
3
|
+
//#region plugins/user-rbac/models/UserRole.mjs
|
|
4
|
+
var UserRole_default = createModel("user.role", {
|
|
5
|
+
userId: createField("uuid", {
|
|
6
|
+
nullable: false,
|
|
7
|
+
model: "user",
|
|
8
|
+
label: "用户",
|
|
9
|
+
renderer: "document",
|
|
10
|
+
primary: 1
|
|
11
|
+
}),
|
|
12
|
+
no: createField("i32", {
|
|
13
|
+
nullable: false,
|
|
14
|
+
default: 1,
|
|
15
|
+
primary: 2
|
|
16
|
+
}),
|
|
17
|
+
roleId: createField("uuid", {
|
|
18
|
+
nullable: false,
|
|
19
|
+
model: "role",
|
|
20
|
+
label: "角色",
|
|
21
|
+
renderer: "document"
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { UserRole_default as t };
|
|
27
|
+
//# sourceMappingURL=models-C4PS3teD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-C4PS3teD.mjs","names":[],"sources":["../../plugins/user-rbac/models/UserRole.mjs"],"sourcesContent":["import { createModel, createField } from '@yongdall/model';\n\nexport default createModel('user.role', {\n\tuserId: createField('uuid', { nullable: false, model: 'user', label: '用户', renderer: 'document', primary: 1 }),\n\tno: createField('i32', { nullable: false, default: 1, primary: 2 }),\n\troleId: createField('uuid', { nullable: false, model: 'role', label: '角色', renderer: 'document' }),\n});\n"],"mappings":";;;AAEA,uBAAe,YAAY,aAAa;CACvC,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAQ,OAAO;EAAM,UAAU;EAAY,SAAS;EAAG,CAAC;CAC9G,IAAI,YAAY,OAAO;EAAE,UAAU;EAAO,SAAS;EAAG,SAAS;EAAG,CAAC;CACnE,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAQ,OAAO;EAAM,UAAU;EAAY,CAAC;CAClG,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yongdall/user-rbac",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.mjs",
|
|
6
6
|
"exports": {
|
|
@@ -11,17 +11,18 @@
|
|
|
11
11
|
"author": "",
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@yongdall/connection": "^0.
|
|
15
|
-
"@yongdall/context": "^0.
|
|
16
|
-
"@yongdall/core": "^0.
|
|
17
|
-
"@yongdall/model": "^0.
|
|
18
|
-
"@yongdall/role": "^0.
|
|
14
|
+
"@yongdall/connection": "^0.5.0",
|
|
15
|
+
"@yongdall/context": "^0.5.0",
|
|
16
|
+
"@yongdall/core": "^0.5.0",
|
|
17
|
+
"@yongdall/model": "^0.5.0",
|
|
18
|
+
"@yongdall/role": "^0.5.0"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@yongdall/
|
|
22
|
-
"@yongdall/types": "^0.
|
|
21
|
+
"@yongdall/migrate": "^0.5.0",
|
|
22
|
+
"@yongdall/types": "^0.5.0",
|
|
23
|
+
"@yongdall/web": "^0.5.0"
|
|
23
24
|
},
|
|
24
25
|
"peerDependencies": {
|
|
25
|
-
"@yongdall/web": "^0.
|
|
26
|
+
"@yongdall/web": "^0.5.0"
|
|
26
27
|
}
|
|
27
28
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { t as UserRole_default } from "../models-C4PS3teD.mjs";
|
|
2
|
+
import { Role } from "@yongdall/role";
|
|
3
|
+
|
|
4
|
+
//#region plugins/user-rbac/yongdall/migration.mjs
|
|
5
|
+
/** @import { Profile } from '@yongdall/migrate' */
|
|
6
|
+
/** @type {Profile['models']} */
|
|
7
|
+
const models = [UserRole_default, Role];
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { models };
|
|
11
|
+
//# sourceMappingURL=migration.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.mjs","names":["UserRole"],"sources":["../../../plugins/user-rbac/yongdall/migration.mjs"],"sourcesContent":["/** @import { Profile } from '@yongdall/migrate' */\nimport { UserRole } from '../models/index.mjs';\nimport { Role } from '@yongdall/role';\n\n\n/** @type {Profile['models']} */\nexport const models = [\n\tUserRole,\n\tRole,\n];\n"],"mappings":";;;;;;AAMA,MAAa,SAAS,CACrBA,kBACA,KACA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { t as UserRole_default } from "../models-C4PS3teD.mjs";
|
|
2
|
+
import { Role } from "@yongdall/role";
|
|
3
|
+
|
|
4
|
+
//#region plugins/user-rbac/yongdall/model.mjs
|
|
5
|
+
/** @import { ModelProfile } from '@yongdall/core' */
|
|
6
|
+
/** @type {ModelProfile['models']} */
|
|
7
|
+
const models = { role: Role };
|
|
8
|
+
/** @type {ModelProfile['modelExpands']} */
|
|
9
|
+
const modelExpands = { user: { roles: {
|
|
10
|
+
label: "角色",
|
|
11
|
+
nullable: false,
|
|
12
|
+
type: UserRole_default,
|
|
13
|
+
constraints: {
|
|
14
|
+
userId: { field: "id" },
|
|
15
|
+
no: { noField: true }
|
|
16
|
+
},
|
|
17
|
+
array: true,
|
|
18
|
+
layout: { columns: [{
|
|
19
|
+
actions: ["add", "remove"],
|
|
20
|
+
width: 100
|
|
21
|
+
}, { field: "roleId" }] }
|
|
22
|
+
} } };
|
|
23
|
+
|
|
24
|
+
//#endregion
|
|
25
|
+
export { modelExpands, models };
|
|
26
|
+
//# sourceMappingURL=model.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.mjs","names":["UserRole"],"sources":["../../../plugins/user-rbac/yongdall/model.mjs"],"sourcesContent":["/** @import { ModelProfile } from '@yongdall/core' */\nimport { UserRole } from '../models/index.mjs';\nimport { Role } from '@yongdall/role';\n\n/** @type {ModelProfile['models']} */\nexport const models = {\n\trole: Role,\n};\n\n/** @type {ModelProfile['modelExpands']} */\nexport const modelExpands = {\n\tuser: {\n\t\troles: {\n\t\t\tlabel: '角色',\n\t\t\tnullable: false,\n\t\t\ttype: UserRole,\n\t\t\tconstraints: {userId: {field: 'id'}, no: {noField: true}},\n\t\t\tarray: true,\n\t\t\tlayout: {\n\t\t\t\tcolumns: [{actions: ['add', 'remove'], width: 100}, {field: 'roleId'}]\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;AAKA,MAAa,SAAS,EACrB,MAAM,MACN;;AAGD,MAAa,eAAe,EAC3B,MAAM,EACL,OAAO;CACN,OAAO;CACP,UAAU;CACV,MAAMA;CACN,aAAa;EAAC,QAAQ,EAAC,OAAO,MAAK;EAAE,IAAI,EAAC,SAAS,MAAK;EAAC;CACzD,OAAO;CACP,QAAQ,EACP,SAAS,CAAC;EAAC,SAAS,CAAC,OAAO,SAAS;EAAE,OAAO;EAAI,EAAE,EAAC,OAAO,UAAS,CAAC,EACtE;CACD,EACD,EACD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import "../models-C4PS3teD.mjs";
|
|
2
|
+
import { usePermissions } from "../index.mjs";
|
|
3
|
+
|
|
4
|
+
//#region plugins/user-rbac/yongdall/user.mjs
|
|
5
|
+
/** @import { UserManager } from '@yongdall/core' */
|
|
6
|
+
/** @type {UserManager['getPermissions']} */
|
|
7
|
+
const getPermissions = (user) => usePermissions(user);
|
|
8
|
+
|
|
9
|
+
//#endregion
|
|
10
|
+
export { getPermissions };
|
|
11
|
+
//# sourceMappingURL=user.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.mjs","names":[],"sources":["../../../plugins/user-rbac/yongdall/user.mjs"],"sourcesContent":["/** @import { UserManager } from '@yongdall/core' */\nimport { usePermissions } from '../index.mjs';\n\n\n/** @type {UserManager['getPermissions']} */\nexport const getPermissions = user => usePermissions(user);\n"],"mappings":";;;;;;AAKA,MAAa,kBAAiB,SAAQ,eAAe,KAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
label: 基础用户权限
|
package/hooks.yongdall.mjs
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { r as UserRole_default, t as usePermissions } from "./user-rbac-C3V-krDr.mjs";
|
|
2
|
-
import { Role } from "@yongdall/role";
|
|
3
|
-
|
|
4
|
-
//#region plugins/user-rbac/hooks.yongdall.mjs
|
|
5
|
-
/** @import { Hooks, UserManager } from '@yongdall/core' */
|
|
6
|
-
/** @type {Hooks.Define['models']} */
|
|
7
|
-
const models = { role: Role };
|
|
8
|
-
/** @type {Hooks.Define['migrationModels']} */
|
|
9
|
-
const migrationModels = [UserRole_default, Role];
|
|
10
|
-
/** @type {Partial<UserManager>} */
|
|
11
|
-
const userManager = { getPermissions(user) {
|
|
12
|
-
return usePermissions(user);
|
|
13
|
-
} };
|
|
14
|
-
/** @type {Hooks.Define['modelExpands']} */
|
|
15
|
-
const modelExpands = { user: { roles: {
|
|
16
|
-
label: "角色",
|
|
17
|
-
type: UserRole_default,
|
|
18
|
-
constraints: {
|
|
19
|
-
userId: { field: "id" },
|
|
20
|
-
no: { noField: true }
|
|
21
|
-
},
|
|
22
|
-
array: true,
|
|
23
|
-
layout: { columns: [{
|
|
24
|
-
actions: ["add", "remove"],
|
|
25
|
-
width: 100
|
|
26
|
-
}, { field: "roleId" }] }
|
|
27
|
-
} } };
|
|
28
|
-
|
|
29
|
-
//#endregion
|
|
30
|
-
export { migrationModels, modelExpands, models, userManager };
|
|
31
|
-
//# sourceMappingURL=hooks.yongdall.mjs.map
|
package/hooks.yongdall.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.yongdall.mjs","names":["UserRole"],"sources":["../../plugins/user-rbac/hooks.yongdall.mjs"],"sourcesContent":["/** @import { Hooks, UserManager } from '@yongdall/core' */\nimport { UserRole } from './models/index.mjs';\nimport { usePermissions } from './index.mjs';\nimport { Role } from '@yongdall/role';\n\n/** @type {Hooks.Define['models']} */\nexport const models = {\n\trole: Role,\n};\n\n/** @type {Hooks.Define['migrationModels']} */\nexport const migrationModels = [\n\tUserRole,\n\tRole,\n];\n\n/** @type {Partial<UserManager>} */\nexport const userManager = {\n\tgetPermissions(user) {\n\t\treturn usePermissions(user);\n\t},\n}\n\n/** @type {Hooks.Define['modelExpands']} */\nexport const modelExpands = {\n\tuser: {\n\t\troles: {\n\t\t\tlabel: '角色',\n\t\t\ttype: UserRole,\n\t\t\tconstraints: {userId: {field: 'id'}, no: {noField: true}},\n\t\t\tarray: true,\n\t\t\tlayout: {\n\t\t\t\tcolumns: [{actions: ['add', 'remove'], width: 100}, {field: 'roleId'}]\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;AAMA,MAAa,SAAS,EACrB,MAAM,MACN;;AAGD,MAAa,kBAAkB,CAC9BA,kBACA,KACA;;AAGD,MAAa,cAAc,EAC1B,eAAe,MAAM;AACpB,QAAO,eAAe,KAAK;GAE5B;;AAGD,MAAa,eAAe,EAC3B,MAAM,EACL,OAAO;CACN,OAAO;CACP,MAAMA;CACN,aAAa;EAAC,QAAQ,EAAC,OAAO,MAAK;EAAE,IAAI,EAAC,SAAS,MAAK;EAAC;CACzD,OAAO;CACP,QAAQ,EACP,SAAS,CAAC;EAAC,SAAS,CAAC,OAAO,SAAS;EAAE,OAAO;EAAI,EAAE,EAAC,OAAO,UAAS,CAAC,EACtE;CACD,EACD,EACD"}
|
package/user-rbac-C3V-krDr.mjs
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { Query, createField, createModel } from "@yongdall/model";
|
|
2
|
-
import { connect } from "@yongdall/connection";
|
|
3
|
-
import { createKeyStore } from "@yongdall/context";
|
|
4
|
-
import { RolePermission } from "@yongdall/role";
|
|
5
|
-
|
|
6
|
-
//#region plugins/user-rbac/models/UserRole.mjs
|
|
7
|
-
var UserRole_default = createModel("user.role", {
|
|
8
|
-
userId: createField("uuid", {
|
|
9
|
-
nullable: false,
|
|
10
|
-
model: "user",
|
|
11
|
-
label: "用户",
|
|
12
|
-
renderer: "document",
|
|
13
|
-
primary: 1
|
|
14
|
-
}),
|
|
15
|
-
no: createField("i32", {
|
|
16
|
-
nullable: false,
|
|
17
|
-
default: 1,
|
|
18
|
-
primary: 2
|
|
19
|
-
}),
|
|
20
|
-
roleId: createField("uuid", {
|
|
21
|
-
nullable: false,
|
|
22
|
-
model: "role",
|
|
23
|
-
label: "角色",
|
|
24
|
-
renderer: "document"
|
|
25
|
-
})
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
//#endregion
|
|
29
|
-
//#region plugins/user-rbac/index.mjs
|
|
30
|
-
/** @type {(user?: string?) => Promise<string[]>} */
|
|
31
|
-
const useRoleIds = createKeyStore(async (user) => {
|
|
32
|
-
if (!user) return [];
|
|
33
|
-
return (await connect("rdb").select(new Query(UserRole_default).select("roleId").where("userId", user))).map((v) => v.roleId);
|
|
34
|
-
}, (user) => user || "");
|
|
35
|
-
/** @type {(user?: string?) => Promise<string[]>} */
|
|
36
|
-
const usePermissions = createKeyStore(async (user) => {
|
|
37
|
-
const roleIds = await useRoleIds(user);
|
|
38
|
-
if (!roleIds.length) return [];
|
|
39
|
-
return (await connect("rdb").select(new Query(RolePermission).select("permission").where("roleId", "in", roleIds))).map((v) => v.permission);
|
|
40
|
-
}, (user) => user || "");
|
|
41
|
-
|
|
42
|
-
//#endregion
|
|
43
|
-
export { useRoleIds as n, UserRole_default as r, usePermissions as t };
|
|
44
|
-
//# sourceMappingURL=user-rbac-C3V-krDr.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-rbac-C3V-krDr.mjs","names":["UserRole"],"sources":["../../plugins/user-rbac/models/UserRole.mjs","../../plugins/user-rbac/index.mjs"],"sourcesContent":["import { createModel, createField } from '@yongdall/model';\n\nexport default createModel('user.role', {\n\tuserId: createField('uuid', { nullable: false, model: 'user', label: '用户', renderer: 'document', primary: 1 }),\n\tno: createField('i32', { nullable: false, default: 1, primary: 2 }),\n\troleId: createField('uuid', { nullable: false, model: 'role', label: '角色', renderer: 'document' }),\n});\n","import { connect } from '@yongdall/connection';\nimport { createKeyStore } from '@yongdall/context';\nimport { Query } from '@yongdall/model';\nimport { UserRole } from './models/index.mjs';\nimport { RolePermission } from '@yongdall/role';\n\nexport * from './models/index.mjs';\n\n\n/** @type {(user?: string?) => Promise<string[]>} */\nexport const useRoleIds = createKeyStore(async user => {\n\tif (!user) { return []; }\n\tconst list = await connect('rdb').select(\n\t\tnew Query(UserRole).select('roleId').where('userId', user)\n\t);\n\treturn list.map(v => v.roleId);\n}, user => user || '');\n\n/** @type {(user?: string?) => Promise<string[]>} */\nexport const usePermissions = createKeyStore(async user => {\n\tconst roleIds = await useRoleIds(user);\n\tif (!roleIds.length) { return []; };\n\tconst list = await connect('rdb').select(\n\t\tnew Query(RolePermission).select('permission').where('roleId', 'in', roleIds)\n\t);\n\treturn list.map(v => v.permission);\n}, user => user || '');\n"],"mappings":";;;;;;AAEA,uBAAe,YAAY,aAAa;CACvC,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAQ,OAAO;EAAM,UAAU;EAAY,SAAS;EAAG,CAAC;CAC9G,IAAI,YAAY,OAAO;EAAE,UAAU;EAAO,SAAS;EAAG,SAAS;EAAG,CAAC;CACnE,QAAQ,YAAY,QAAQ;EAAE,UAAU;EAAO,OAAO;EAAQ,OAAO;EAAM,UAAU;EAAY,CAAC;CAClG,CAAC;;;;;ACIF,MAAa,aAAa,eAAe,OAAM,SAAQ;AACtD,KAAI,CAAC,KAAQ,QAAO,EAAE;AAItB,SAHa,MAAM,QAAQ,MAAM,CAAC,OACjC,IAAI,MAAMA,iBAAS,CAAC,OAAO,SAAS,CAAC,MAAM,UAAU,KAAK,CAC1D,EACW,KAAI,MAAK,EAAE,OAAO;IAC5B,SAAQ,QAAQ,GAAG;;AAGtB,MAAa,iBAAiB,eAAe,OAAM,SAAQ;CAC1D,MAAM,UAAU,MAAM,WAAW,KAAK;AACtC,KAAI,CAAC,QAAQ,OAAU,QAAO,EAAE;AAIhC,SAHa,MAAM,QAAQ,MAAM,CAAC,OACjC,IAAI,MAAM,eAAe,CAAC,OAAO,aAAa,CAAC,MAAM,UAAU,MAAM,QAAQ,CAC7E,EACW,KAAI,MAAK,EAAE,WAAW;IAChC,SAAQ,QAAQ,GAAG"}
|