@vita-mojo/auth 1.0.13 → 1.0.14
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/package.json +2 -1
- package/src/decorators/index.d.ts +0 -1
- package/src/decorators/index.js +1 -3
- package/src/decorators/index.js.map +1 -1
- package/src/guards/index.d.ts +0 -1
- package/src/guards/index.js +1 -3
- package/src/guards/index.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/permissions-checker/index.d.ts +1 -0
- package/src/permissions-checker/index.js +6 -0
- package/src/permissions-checker/index.js.map +1 -0
- package/src/permissions-checker/permissions-checker.d.ts +12 -0
- package/src/permissions-checker/permissions-checker.js +45 -0
- package/src/permissions-checker/permissions-checker.js.map +1 -0
- package/src/decorators/permission-resource.decorator.d.ts +0 -1
- package/src/decorators/permission-resource.decorator.js +0 -7
- package/src/decorators/permission-resource.decorator.js.map +0 -1
- package/src/guards/auth-permissions.guard.d.ts +0 -11
- package/src/guards/auth-permissions.guard.js +0 -53
- package/src/guards/auth-permissions.guard.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vita-mojo/auth",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.14",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@nestjs/common": ">=8 <= 9",
|
|
6
6
|
"@nestjs/core": ">=8 <= 9",
|
|
7
7
|
"reflect-metadata": "^0.1.13",
|
|
8
|
+
"@vita-mojo/types": "1.0.18",
|
|
8
9
|
"tslib": "2.4.1"
|
|
9
10
|
},
|
|
10
11
|
"dependencies": {
|
package/src/decorators/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Permissions =
|
|
4
|
-
var permission_resource_decorator_1 = require("./permission-resource.decorator");
|
|
5
|
-
Object.defineProperty(exports, "createPermissionResourceDecorator", { enumerable: true, get: function () { return permission_resource_decorator_1.createPermissionResourceDecorator; } });
|
|
3
|
+
exports.Permissions = void 0;
|
|
6
4
|
var permissions_decorator_1 = require("./permissions.decorator");
|
|
7
5
|
Object.defineProperty(exports, "Permissions", { enumerable: true, get: function () { return permissions_decorator_1.Permissions; } });
|
|
8
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/auth/src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/auth/src/decorators/index.ts"],"names":[],"mappings":";;;AAAA,iEAAsD;AAA7C,oHAAA,WAAW,OAAA"}
|
package/src/guards/index.d.ts
CHANGED
package/src/guards/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PermissionsGuard =
|
|
4
|
-
var auth_permissions_guard_1 = require("./auth-permissions.guard");
|
|
5
|
-
Object.defineProperty(exports, "AuthPermissionsGuard", { enumerable: true, get: function () { return auth_permissions_guard_1.AuthPermissionsGuard; } });
|
|
3
|
+
exports.PermissionsGuard = void 0;
|
|
6
4
|
var permissions_guard_1 = require("./permissions.guard");
|
|
7
5
|
Object.defineProperty(exports, "PermissionsGuard", { enumerable: true, get: function () { return permissions_guard_1.PermissionsGuard; } });
|
|
8
6
|
//# sourceMappingURL=index.js.map
|
package/src/guards/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/auth/src/guards/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/auth/src/guards/index.ts"],"names":[],"mappings":";;;AAAA,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA"}
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -4,5 +4,6 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
tslib_1.__exportStar(require("./auth"), exports);
|
|
5
5
|
tslib_1.__exportStar(require("./decorators"), exports);
|
|
6
6
|
tslib_1.__exportStar(require("./guards"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./permissions-checker"), exports);
|
|
7
8
|
tslib_1.__exportStar(require("./types"), exports);
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/auth/src/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,uDAA6B;AAC7B,mDAAyB;AACzB,kDAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/auth/src/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,uDAA6B;AAC7B,mDAAyB;AACzB,gEAAsC;AACtC,kDAAwB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PermissionsChecker } from './permissions-checker';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PermissionsChecker = void 0;
|
|
4
|
+
var permissions_checker_1 = require("./permissions-checker");
|
|
5
|
+
Object.defineProperty(exports, "PermissionsChecker", { enumerable: true, get: function () { return permissions_checker_1.PermissionsChecker; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/auth/src/permissions-checker/index.ts"],"names":[],"mappings":";;;AAAA,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import type { Reflector } from '@nestjs/core';
|
|
3
|
+
import { User } from '@vita-mojo/types';
|
|
4
|
+
import { PermissionDefinition, PermissionsMap } from '../types';
|
|
5
|
+
export declare class PermissionsChecker {
|
|
6
|
+
static permissionsMap: PermissionsMap;
|
|
7
|
+
static registerPermissions(permissionList: readonly PermissionDefinition[]): void;
|
|
8
|
+
static getPermissionResource(reflector: Reflector, context: ExecutionContext): string;
|
|
9
|
+
static createPlainPermissionResource(namespace: string): (resource?: string) => string;
|
|
10
|
+
static createPermissionResource(namespace: string): (resource?: string) => import("@nestjs/common").CustomDecorator<string>;
|
|
11
|
+
static check(user: User, resource: string): boolean;
|
|
12
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PermissionsChecker = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
class PermissionsChecker {
|
|
6
|
+
static registerPermissions(permissionList) {
|
|
7
|
+
PermissionsChecker.permissionsMap = permissionList.reduce((accumulator, current) => {
|
|
8
|
+
accumulator[current.resource
|
|
9
|
+
? `${current.namespace}__${current.resource}`
|
|
10
|
+
: current.namespace] = current;
|
|
11
|
+
return accumulator;
|
|
12
|
+
}, {});
|
|
13
|
+
}
|
|
14
|
+
static getPermissionResource(reflector, context) {
|
|
15
|
+
const classResource = reflector.get('permissionResource', context.getClass());
|
|
16
|
+
const methodResource = reflector.get('permissionResource', context.getHandler());
|
|
17
|
+
return methodResource || classResource;
|
|
18
|
+
}
|
|
19
|
+
static createPlainPermissionResource(namespace) {
|
|
20
|
+
return (resource) => resource ? `${namespace}__${resource}` : namespace;
|
|
21
|
+
}
|
|
22
|
+
static createPermissionResource(namespace) {
|
|
23
|
+
return (resource) => (0, common_1.SetMetadata)('permissionResource', PermissionsChecker.createPlainPermissionResource(namespace)(resource));
|
|
24
|
+
}
|
|
25
|
+
static check(user, resource) {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
if (!user || !PermissionsChecker.permissionsMap)
|
|
28
|
+
return false;
|
|
29
|
+
if (!resource)
|
|
30
|
+
return true;
|
|
31
|
+
const permissionsMap = PermissionsChecker.permissionsMap;
|
|
32
|
+
if (!permissionsMap[resource])
|
|
33
|
+
return false;
|
|
34
|
+
if (((_a = user.role) === null || _a === void 0 ? void 0 : _a.slug) === 'service-account')
|
|
35
|
+
return true;
|
|
36
|
+
if (!permissionsMap[resource].permission ||
|
|
37
|
+
permissionsMap[resource].permission === '*')
|
|
38
|
+
return true;
|
|
39
|
+
if (!((_b = user.role) === null || _b === void 0 ? void 0 : _b.permissions))
|
|
40
|
+
return false;
|
|
41
|
+
return user.role.permissions.includes(permissionsMap[resource].permission);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.PermissionsChecker = PermissionsChecker;
|
|
45
|
+
//# sourceMappingURL=permissions-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-checker.js","sourceRoot":"","sources":["../../../../../packages/auth/src/permissions-checker/permissions-checker.ts"],"names":[],"mappings":";;;AAAA,2CAAoE;AAMpE,MAAa,kBAAkB;IAG7B,MAAM,CAAC,mBAAmB,CAAC,cAA+C;QACxE,kBAAkB,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CACvD,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE;YACvB,WAAW,CACT,OAAO,CAAC,QAAQ;gBACd,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,QAAQ,EAAE;gBAC7C,CAAC,CAAC,OAAO,CAAC,SAAS,CACtB,GAAG,OAAO,CAAC;YAEZ,OAAO,WAAW,CAAC;QACrB,CAAC,EACD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,qBAAqB,CAC1B,SAAoB,EACpB,OAAyB;QAEzB,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CACjC,oBAAoB,EACpB,OAAO,CAAC,QAAQ,EAAE,CACnB,CAAC;QACF,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAClC,oBAAoB,EACpB,OAAO,CAAC,UAAU,EAAE,CACrB,CAAC;QAEF,OAAO,cAAc,IAAI,aAAa,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,6BAA6B,CAAC,SAAiB;QACpD,OAAO,CAAC,QAAiB,EAAE,EAAE,CAC3B,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,SAAiB;QAC/C,OAAO,CAAC,QAAiB,EAAE,EAAE,CAC3B,IAAA,oBAAW,EACT,oBAAoB,EACpB,kBAAkB,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CACtE,CAAC;IACN,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAU,EAAE,QAAgB;;QACvC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QAE9D,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,cAAc,GAAG,kBAAkB,CAAC,cAAc,CAAC;QAEzD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAC;QAE5C,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,MAAK,iBAAiB;YAAE,OAAO,IAAI,CAAC;QAEvD,IACE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU;YACpC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,KAAK,GAAG;YAE3C,OAAO,IAAI,CAAC;QAEd,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,WAAW,CAAA;YAAE,OAAO,KAAK,CAAC;QAE1C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7E,CAAC;CACF;AApED,gDAoEC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const createPermissionResourceDecorator: <T>(namespace: T) => <T_1>(resource?: T_1 | undefined) => import("@nestjs/common").CustomDecorator<string>;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createPermissionResourceDecorator = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const createPermissionResourceDecorator = (namespace) => (resource) => (0, common_1.SetMetadata)('permissionResource', resource ? `${namespace}__${resource}` : namespace);
|
|
6
|
-
exports.createPermissionResourceDecorator = createPermissionResourceDecorator;
|
|
7
|
-
//# sourceMappingURL=permission-resource.decorator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permission-resource.decorator.js","sourceRoot":"","sources":["../../../../../packages/auth/src/decorators/permission-resource.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEtC,MAAM,iCAAiC,GAC5C,CAAI,SAAY,EAAE,EAAE,CACpB,CAAI,QAAY,EAAE,EAAE,CAClB,IAAA,oBAAW,EACT,oBAAoB,EACpB,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CACnD,CAAC;AANO,QAAA,iCAAiC,qCAMxC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
-
import { Reflector } from '@nestjs/core';
|
|
3
|
-
import { PermissionDefinition, PermissionsMap } from '../types';
|
|
4
|
-
export declare class AuthPermissionsGuard implements CanActivate {
|
|
5
|
-
private readonly reflector;
|
|
6
|
-
static permissionsMapInit: boolean;
|
|
7
|
-
static permissionsMap: PermissionsMap;
|
|
8
|
-
static setPermissionsMap(permissionList: readonly PermissionDefinition[]): void;
|
|
9
|
-
constructor(reflector: Reflector);
|
|
10
|
-
canActivate(context: ExecutionContext): boolean;
|
|
11
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var AuthPermissionsGuard_1;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AuthPermissionsGuard = void 0;
|
|
5
|
-
const tslib_1 = require("tslib");
|
|
6
|
-
const common_1 = require("@nestjs/common");
|
|
7
|
-
const core_1 = require("@nestjs/core");
|
|
8
|
-
let AuthPermissionsGuard = AuthPermissionsGuard_1 = class AuthPermissionsGuard {
|
|
9
|
-
static setPermissionsMap(permissionList) {
|
|
10
|
-
if (AuthPermissionsGuard_1.permissionsMapInit)
|
|
11
|
-
return;
|
|
12
|
-
AuthPermissionsGuard_1.permissionsMap = permissionList.reduce((accumulator, current) => {
|
|
13
|
-
accumulator[current.resource
|
|
14
|
-
? `${current.namespace}__${current.resource}`
|
|
15
|
-
: current.namespace] = current;
|
|
16
|
-
return accumulator;
|
|
17
|
-
}, {});
|
|
18
|
-
AuthPermissionsGuard_1.permissionsMapInit = true;
|
|
19
|
-
}
|
|
20
|
-
constructor(reflector) {
|
|
21
|
-
this.reflector = reflector;
|
|
22
|
-
if (!AuthPermissionsGuard_1.permissionsMapInit) {
|
|
23
|
-
throw new Error('Permissions were not initialised, use AuthPermissionsGuard.setPermissionsMap in the project bootstrap.');
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
canActivate(context) {
|
|
27
|
-
var _a, _b, _c, _d, _e, _f;
|
|
28
|
-
const classResource = this.reflector.get('permissionResource', context.getClass());
|
|
29
|
-
const methodResource = this.reflector.get('permissionResource', context.getHandler());
|
|
30
|
-
const request = context.switchToHttp().getRequest();
|
|
31
|
-
if (!request.res.locals.decodedToken ||
|
|
32
|
-
!request.res.locals.decodedToken.user) {
|
|
33
|
-
throw new common_1.UnauthorizedException();
|
|
34
|
-
}
|
|
35
|
-
const permissionsMap = AuthPermissionsGuard_1.permissionsMap;
|
|
36
|
-
if (!((_a = permissionsMap[classResource]) === null || _a === void 0 ? void 0 : _a.permission) &&
|
|
37
|
-
!((_b = permissionsMap[methodResource]) === null || _b === void 0 ? void 0 : _b.permission)) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
const user = request.res.locals.decodedToken.user;
|
|
41
|
-
if (((_c = user.role) === null || _c === void 0 ? void 0 : _c.slug) === 'service-account') {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
return (_e = (_d = user === null || user === void 0 ? void 0 : user.role) === null || _d === void 0 ? void 0 : _d.permissions) === null || _e === void 0 ? void 0 : _e.includes((_f = permissionsMap[methodResource || classResource]) === null || _f === void 0 ? void 0 : _f.permission);
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
AuthPermissionsGuard.permissionsMapInit = false;
|
|
48
|
-
AuthPermissionsGuard = AuthPermissionsGuard_1 = tslib_1.__decorate([
|
|
49
|
-
(0, common_1.Injectable)(),
|
|
50
|
-
tslib_1.__metadata("design:paramtypes", [core_1.Reflector])
|
|
51
|
-
], AuthPermissionsGuard);
|
|
52
|
-
exports.AuthPermissionsGuard = AuthPermissionsGuard;
|
|
53
|
-
//# sourceMappingURL=auth-permissions.guard.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-permissions.guard.js","sourceRoot":"","sources":["../../../../../packages/auth/src/guards/auth-permissions.guard.ts"],"names":[],"mappings":";;;;;AAAA,2CAKwB;AACxB,uCAAyC;AAIzC,IACa,oBAAoB,4BADjC,MACa,oBAAoB;IAI/B,MAAM,CAAC,iBAAiB,CAAC,cAA+C;QACtE,IAAI,sBAAoB,CAAC,kBAAkB;YAAE,OAAO;QAEpD,sBAAoB,CAAC,cAAc,GAAG,cAAc,CAAC,MAAM,CACzD,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE;YACvB,WAAW,CACT,OAAO,CAAC,QAAQ;gBACd,CAAC,CAAC,GAAG,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,QAAQ,EAAE;gBAC7C,CAAC,CAAC,OAAO,CAAC,SAAS,CACtB,GAAG,OAAO,CAAC;YAEZ,OAAO,WAAW,CAAC;QACrB,CAAC,EACD,EAAE,CACH,CAAC;QAEF,sBAAoB,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACjD,CAAC;IAED,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAC/C,IAAI,CAAC,sBAAoB,CAAC,kBAAkB,EAAE;YAC5C,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;SACH;IACH,CAAC;IAED,WAAW,CAAC,OAAyB;;QACnC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACtC,oBAAoB,EACpB,OAAO,CAAC,QAAQ,EAAE,CACnB,CAAC;QACF,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CACvC,oBAAoB,EACpB,OAAO,CAAC,UAAU,EAAE,CACrB,CAAC;QAEF,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAEpD,IACE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY;YAChC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EACrC;YACA,MAAM,IAAI,8BAAqB,EAAE,CAAC;SACnC;QAED,MAAM,cAAc,GAAG,sBAAoB,CAAC,cAAc,CAAC;QAE3D,IACE,CAAC,CAAA,MAAA,cAAc,CAAC,aAAa,CAAC,0CAAE,UAAU,CAAA;YAC1C,CAAC,CAAA,MAAA,cAAc,CAAC,cAAc,CAAC,0CAAE,UAAU,CAAA,EAC3C;YACA,OAAO,IAAI,CAAC;SACb;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;QAElD,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,IAAI,MAAK,iBAAiB,EAAE;YACzC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,MAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,0CAAE,WAAW,0CAAE,QAAQ,CACtC,MAAA,cAAc,CAAC,cAAc,IAAI,aAAa,CAAC,0CAAE,UAAU,CAC5D,CAAC;IACJ,CAAC;;AAnEM,uCAAkB,GAAG,KAAK,AAAR,CAAS;AADvB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;6CAwB6B,gBAAS;GAvBtC,oBAAoB,CAqEhC;AArEY,oDAAoB"}
|