@royalschedule/validators 1.0.13 → 1.0.17
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/build/validators/courses.js +6 -1
- package/build/validators/courses.js.map +1 -1
- package/build/validators/divisions.js.map +1 -1
- package/build/validators/groups.js +23 -1
- package/build/validators/groups.js.map +1 -1
- package/build/validators/locked-times.js +2 -1
- package/build/validators/locked-times.js.map +1 -1
- package/build/validators/overlap-groups.js +2 -1
- package/build/validators/overlap-groups.js.map +1 -1
- package/build/validators/teachers.js +23 -1
- package/build/validators/teachers.js.map +1 -1
- package/package.json +3 -3
|
@@ -14,7 +14,12 @@ exports.default = joi_1.default.object({
|
|
|
14
14
|
ids: joi_1.default.string(),
|
|
15
15
|
color: joi_1.default.string().regex(new RegExp('^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{8})$')).allow(null, ''),
|
|
16
16
|
subject: joi_1.default.string().allow(null, ''),
|
|
17
|
-
overlapGroup:
|
|
17
|
+
overlapGroup: [
|
|
18
|
+
joi_1.default.string().allow(null, ''),
|
|
19
|
+
joi_1.default.object({
|
|
20
|
+
id: joi_1.default.string()
|
|
21
|
+
})
|
|
22
|
+
],
|
|
18
23
|
lockedTimes: joi_1.default.array().items(locked_times_1.default),
|
|
19
24
|
intervals: joi_1.default.array().items(intervals_1.default),
|
|
20
25
|
minBreakLength: break_length_1.default,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"courses.js","sourceRoot":"","sources":["../../src/validators/courses.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,kEAAiE;AACjE,4DAA8D;AAC9D,kDAAyD;AACzD,kEAAiE;
|
|
1
|
+
{"version":3,"file":"courses.js","sourceRoot":"","sources":["../../src/validators/courses.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,kEAAiE;AACjE,4DAA8D;AAC9D,kDAAyD;AACzD,kEAAiE;AAIjE,kBAAe,aAAG,CAAC,MAAM,CAAC;IACxB,EAAE,EAAc,aAAG,CAAC,MAAM,EAAE;IAE5B,WAAW,EAAK,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5C,GAAG,EAAa,aAAG,CAAC,MAAM,EAAE;IAC5B,KAAK,EAAW,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,mDAAmD,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACnH,OAAO,EAAS,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5C,YAAY,EAAI;QACE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5B,aAAG,CAAC,MAAM,CAAC;YACG,EAAE,EAAE,aAAG,CAAC,MAAM,EAAE;SACjB,CAAC;KAEf;IAEjB,WAAW,EAAK,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,sBAAW,CAAC;IAC9C,SAAS,EAAO,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,mBAAS,CAAC;IAC5C,cAAc,EAAE,sBAAY;IAC5B,IAAI,EAAY,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAK,CAAC;IAExC,MAAM,EAAU,aAAG,CAAC,KAAK,EAAE;SACP,KAAK,CAAC,aAAG,CAAC,MAAM,CAAC;QACG,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;QACzB,GAAG,EAAU,aAAG,CAAC,MAAM,EAAE;KAC1B,CAAC,CAAC;IACzC,QAAQ,EAAQ,aAAG,CAAC,KAAK,EAAE;SACP,KAAK,CAAC,aAAG,CAAC,MAAM,CAAC;QACG,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;QACzB,GAAG,EAAU,aAAG,CAAC,MAAM,EAAE;KAC1B,CAAC,CAAC;IACzC,SAAS,EAAO,aAAG,CAAC,KAAK,EAAE;SACP,KAAK,CACJ,aAAG,CAAC,MAAM,CAAC;QACT,IAAI,EAAQ,aAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,UAAU,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzC,SAAS,EAAG,aAAG,CAAC,KAAK,EAAE;aACP,KAAK,CAAC,aAAG,CAAC,MAAM,CAAC;YACE,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;YACzB,GAAG,EAAU,aAAG,CAAC,MAAM,EAAE;YACzB,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE;SAC1B,CAAC,CAAC;KACrC,CAAC,CACH;CACrB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"divisions.js","sourceRoot":"","sources":["../../src/validators/divisions.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,0DAAiE;AAEjE,kBAAe,cAAQ,CAAC,MAAM,CAAC;IAC7B,EAAE,
|
|
1
|
+
{"version":3,"file":"divisions.js","sourceRoot":"","sources":["../../src/validators/divisions.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,0DAAiE;AAEjE,kBAAe,cAAQ,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;IAEzB,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE;IAEzB,KAAK,EAAQ,cAAQ,CAAC,MAAM,EAAE;IAC9B,GAAG,EAAU,cAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;CACzD,CAAC,CAAC"}
|
|
@@ -16,6 +16,28 @@ exports.default = joi_1.default.object({
|
|
|
16
16
|
lunch: joi_1.default.array().items(locked_times_1.default),
|
|
17
17
|
intervals: joi_1.default.array().items(intervals_1.default),
|
|
18
18
|
minBreakLength: break_length_1.default,
|
|
19
|
-
days: joi_1.default.array().items(days_1.default)
|
|
19
|
+
days: joi_1.default.array().items(days_1.default),
|
|
20
|
+
forbidOverlappingEvents: joi_1.default.boolean(),
|
|
21
|
+
disableDayLengthPunishment: joi_1.default.boolean(),
|
|
22
|
+
maxNumWorkingHours: joi_1.default.number()
|
|
23
|
+
.integer()
|
|
24
|
+
.min(0),
|
|
25
|
+
maxNumDailyWorkingHours: [
|
|
26
|
+
joi_1.default.number()
|
|
27
|
+
.integer()
|
|
28
|
+
.min(0)
|
|
29
|
+
.max(24),
|
|
30
|
+
joi_1.default.array()
|
|
31
|
+
.items(joi_1.default.number()
|
|
32
|
+
.integer()
|
|
33
|
+
.min(0)
|
|
34
|
+
.max(24))
|
|
35
|
+
],
|
|
36
|
+
weight: joi_1.default.number()
|
|
37
|
+
.integer()
|
|
38
|
+
.min(0),
|
|
39
|
+
rank: joi_1.default.number()
|
|
40
|
+
.integer()
|
|
41
|
+
.min(0),
|
|
20
42
|
}).or('id', 'ids');
|
|
21
43
|
//# sourceMappingURL=groups.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/validators/groups.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,kEAAiE;AACjE,4DAA8D;AAC9D,kEAAiE;AACjE,kDAAyD;AAEzD,kBAAe,aAAG,CAAC,MAAM,CAAC;IACxB,EAAE,
|
|
1
|
+
{"version":3,"file":"groups.js","sourceRoot":"","sources":["../../src/validators/groups.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,kEAAiE;AACjE,4DAA8D;AAC9D,kEAAiE;AACjE,kDAAyD;AAEzD,kBAAe,aAAG,CAAC,MAAM,CAAC;IACxB,EAAE,EAA0B,aAAG,CAAC,MAAM,EAAE;IAExC,WAAW,EAAiB,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACxD,GAAG,EAAyB,aAAG,CAAC,MAAM,EAAE;IAExC,WAAW,EAAiB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,sBAAW,CAAC;IAC1D,KAAK,EAAuB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,sBAAW,CAAC;IAC1D,SAAS,EAAmB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,mBAAS,CAAC;IACxD,cAAc,EAAc,sBAAY;IACxC,IAAI,EAAwB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAK,CAAC;IAEpD,uBAAuB,EAAK,aAAG,CAAC,OAAO,EAAE;IACzC,0BAA0B,EAAE,aAAG,CAAC,OAAO,EAAE;IACzC,kBAAkB,EAAU,aAAG,CAAC,MAAM,EAAE;SACR,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC;IACtC,uBAAuB,EAAI;QACG,aAAG,CAAC,MAAM,EAAE;aACR,OAAO,EAAE;aACT,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;QACX,aAAG,CAAC,KAAK,EAAE;aACP,KAAK,CACJ,aAAG,CAAC,MAAM,EAAE;aACR,OAAO,EAAE;aACT,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC,CACZ;KACL;IAC7B,MAAM,EAAsB,aAAG,CAAC,MAAM,EAAE;SACR,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC;IACtC,IAAI,EAAwB,aAAG,CAAC,MAAM,EAAE;SACR,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC;CACvC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const joi_1 = __importDefault(require("joi"));
|
|
7
7
|
const date_1 = __importDefault(require("../common/date"));
|
|
8
|
+
const collections = ['courses', 'locations', 'courseevents', 'groups', 'teachers'];
|
|
8
9
|
exports.default = date_1.default.object({
|
|
9
10
|
id: joi_1.default.string(),
|
|
10
11
|
displayName: joi_1.default.string().allow(null, ''),
|
|
@@ -16,7 +17,7 @@ exports.default = date_1.default.object({
|
|
|
16
17
|
joi_1.default.string(),
|
|
17
18
|
joi_1.default.object({ id: joi_1.default.string() })
|
|
18
19
|
],
|
|
19
|
-
toModel: joi_1.default.string().valid(
|
|
20
|
+
toModel: joi_1.default.string().valid(...collections)
|
|
20
21
|
}))
|
|
21
22
|
});
|
|
22
23
|
//# sourceMappingURL=locked-times.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locked-times.js","sourceRoot":"","sources":["../../src/validators/locked-times.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AACtD,0DAAiE;AAEjE,kBAAe,cAAQ,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;IAEzB,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACzC,KAAK,EAAQ,cAAQ,CAAC,MAAM,EAAE;IAC9B,GAAG,EAAU,cAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxD,SAAS,EAAI,aAAG,CAAC,KAAK,EAAE;SACT,KAAK,CACJ,aAAG,CAAC,MAAM,CAAC;QACT,EAAE,EAAO;YACE,aAAG,CAAC,MAAM,EAAE;YACZ,aAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,aAAG,CAAC,MAAM,EAAE,EAAE,CAAC;SACjC;QACV,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"locked-times.js","sourceRoot":"","sources":["../../src/validators/locked-times.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AACtD,0DAAiE;AAEjE,MAAM,WAAW,GAAa,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE7F,kBAAe,cAAQ,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;IAEzB,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACzC,KAAK,EAAQ,cAAQ,CAAC,MAAM,EAAE;IAC9B,GAAG,EAAU,cAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACxD,SAAS,EAAI,aAAG,CAAC,KAAK,EAAE;SACT,KAAK,CACJ,aAAG,CAAC,MAAM,CAAC;QACT,EAAE,EAAO;YACE,aAAG,CAAC,MAAM,EAAE;YACZ,aAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,aAAG,CAAC,MAAM,EAAE,EAAE,CAAC;SACjC;QACV,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;KAC5C,CAAC,CACH;CAChB,CAAC,CAAC"}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const joi_1 = __importDefault(require("joi"));
|
|
7
7
|
const date_1 = __importDefault(require("../common/date"));
|
|
8
|
+
const courses_1 = __importDefault(require("./courses"));
|
|
8
9
|
exports.default = date_1.default.object({
|
|
9
10
|
id: joi_1.default.string(),
|
|
10
11
|
ids: joi_1.default.string(),
|
|
@@ -12,7 +13,7 @@ exports.default = date_1.default.object({
|
|
|
12
13
|
.items(joi_1.default.object({
|
|
13
14
|
to: [
|
|
14
15
|
joi_1.default.string(),
|
|
15
|
-
|
|
16
|
+
courses_1.default
|
|
16
17
|
],
|
|
17
18
|
toModel: joi_1.default.string().valid('courses')
|
|
18
19
|
}))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlap-groups.js","sourceRoot":"","sources":["../../src/validators/overlap-groups.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;
|
|
1
|
+
{"version":3,"file":"overlap-groups.js","sourceRoot":"","sources":["../../src/validators/overlap-groups.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,0DAAiE;AAEjE,wDAA4D;AAE5D,kBAAe,cAAQ,CAAC,MAAM,CAAC;IAC7B,EAAE,EAAW,aAAG,CAAC,MAAM,EAAE;IAEzB,GAAG,EAAU,aAAG,CAAC,MAAM,EAAE;IACzB,SAAS,EAAI,aAAG,CAAC,KAAK,EAAE;SACP,KAAK,CACJ,aAAG,CAAC,MAAM,CAAC;QACT,EAAE,EAAO;YACE,aAAG,CAAC,MAAM,EAAE;YACZ,iBAAO;SACR;QACV,OAAO,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;KACvC,CAAC,CACH;CAClB,CAAC,CAAC"}
|
|
@@ -16,6 +16,28 @@ exports.default = joi_1.default.object({
|
|
|
16
16
|
lunch: joi_1.default.array().items(locked_times_1.default),
|
|
17
17
|
intervals: joi_1.default.array().items(intervals_1.default),
|
|
18
18
|
minBreakLength: break_length_1.default,
|
|
19
|
-
days: joi_1.default.array().items(days_1.default)
|
|
19
|
+
days: joi_1.default.array().items(days_1.default),
|
|
20
|
+
forbidOverlappingEvents: joi_1.default.boolean(),
|
|
21
|
+
disableDayLengthPunishment: joi_1.default.boolean(),
|
|
22
|
+
maxNumWorkingHours: joi_1.default.number()
|
|
23
|
+
.integer()
|
|
24
|
+
.min(0),
|
|
25
|
+
maxNumDailyWorkingHours: [
|
|
26
|
+
joi_1.default.number()
|
|
27
|
+
.integer()
|
|
28
|
+
.min(0)
|
|
29
|
+
.max(24),
|
|
30
|
+
joi_1.default.array()
|
|
31
|
+
.items(joi_1.default.number()
|
|
32
|
+
.integer()
|
|
33
|
+
.min(0)
|
|
34
|
+
.max(24))
|
|
35
|
+
],
|
|
36
|
+
weight: joi_1.default.number()
|
|
37
|
+
.integer()
|
|
38
|
+
.min(0),
|
|
39
|
+
rank: joi_1.default.number()
|
|
40
|
+
.integer()
|
|
41
|
+
.min(0)
|
|
20
42
|
}).or('id', 'ids');
|
|
21
43
|
//# sourceMappingURL=teachers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teachers.js","sourceRoot":"","sources":["../../src/validators/teachers.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,kEAAiE;AACjE,4DAA8D;AAC9D,kEAAiE;AACjE,kDAAyD;AAEzD,kBAAe,aAAG,CAAC,MAAM,CAAC;IACxB,EAAE,
|
|
1
|
+
{"version":3,"file":"teachers.js","sourceRoot":"","sources":["../../src/validators/teachers.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AAEtD,kEAAiE;AACjE,4DAA8D;AAC9D,kEAAiE;AACjE,kDAAyD;AAEzD,kBAAe,aAAG,CAAC,MAAM,CAAC;IACxB,EAAE,EAA0B,aAAG,CAAC,MAAM,EAAE;IAExC,WAAW,EAAiB,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACxD,GAAG,EAAyB,aAAG,CAAC,MAAM,EAAE;IAExC,WAAW,EAAiB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,sBAAW,CAAC;IAC1D,KAAK,EAAuB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,sBAAW,CAAC;IAC1D,SAAS,EAAmB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,mBAAS,CAAC;IACxD,cAAc,EAAc,sBAAY;IACxC,IAAI,EAAwB,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,cAAK,CAAC;IAEpD,uBAAuB,EAAK,aAAG,CAAC,OAAO,EAAE;IACzC,0BAA0B,EAAE,aAAG,CAAC,OAAO,EAAE;IACzC,kBAAkB,EAAU,aAAG,CAAC,MAAM,EAAE;SACR,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC;IACtC,uBAAuB,EAAI;QACG,aAAG,CAAC,MAAM,EAAE;aACR,OAAO,EAAE;aACT,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;QACX,aAAG,CAAC,KAAK,EAAE;aACP,KAAK,CACJ,aAAG,CAAC,MAAM,EAAE;aACR,OAAO,EAAE;aACT,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC,CACZ;KACL;IAC7B,MAAM,EAAsB,aAAG,CAAC,MAAM,EAAE;SACR,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC;IACtC,IAAI,EAAwB,aAAG,CAAC,MAAM,EAAE;SACR,OAAO,EAAE;SACT,GAAG,CAAC,CAAC,CAAC;CACvC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@royalschedule/validators",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"description": "validators",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -18,11 +18,11 @@
|
|
|
18
18
|
"author": "",
|
|
19
19
|
"license": "ISC",
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"typescript": "^4.
|
|
21
|
+
"typescript": "^4.5.2"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@meanie/joi-moment": "^2.5.1",
|
|
25
|
-
"joi": "^17.4.
|
|
25
|
+
"joi": "^17.4.2",
|
|
26
26
|
"moment": "^2.29.1"
|
|
27
27
|
}
|
|
28
28
|
}
|