@lindorm/okp 0.2.10 → 0.2.11
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/CHANGELOG.md +4 -0
- package/README.md +2 -2
- package/dist/classes/OkpKit.js +4 -4
- package/dist/classes/OkpKit.js.map +1 -1
- package/dist/internal/get-key.d.ts.map +1 -0
- package/dist/{utils/private → internal}/get-key.js +1 -1
- package/dist/internal/get-key.js.map +1 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/{utils/private → internal}/okp-signature.d.ts +1 -1
- package/dist/internal/okp-signature.d.ts.map +1 -0
- package/dist/{utils/private → internal}/okp-signature.js +1 -1
- package/dist/internal/okp-signature.js.map +1 -0
- package/package.json +5 -5
- package/dist/utils/private/get-key.d.ts.map +0 -1
- package/dist/utils/private/get-key.js.map +0 -1
- package/dist/utils/private/index.d.ts.map +0 -1
- package/dist/utils/private/index.js.map +0 -1
- package/dist/utils/private/okp-signature.d.ts.map +0 -1
- package/dist/utils/private/okp-signature.js.map +0 -1
- /package/dist/{utils/private → internal}/get-key.d.ts +0 -0
- /package/dist/{utils/private → internal}/index.d.ts +0 -0
- /package/dist/{utils/private → internal}/index.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.2.11](https://github.com/lindorm-io/monorepo/compare/@lindorm/okp@0.2.10...@lindorm/okp@0.2.11) (2026-04-19)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @lindorm/okp
|
|
9
|
+
|
|
6
10
|
## [0.2.10](https://github.com/lindorm-io/monorepo/compare/@lindorm/okp@0.2.9...@lindorm/okp@0.2.10) (2026-04-15)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @lindorm/okp
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @lindorm/okp
|
|
2
2
|
|
|
3
|
-
EdDSA signature kit built on Node's `crypto` module and [`@lindorm/kryptos`](
|
|
3
|
+
EdDSA signature kit built on Node's `crypto` module and [`@lindorm/kryptos`](https://github.com/lindorm-io/monorepo/tree/main/packages/kryptos). Provides an `OkpKit` class that implements the `IKeyKit` contract used across the Lindorm cryptography packages.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -62,7 +62,7 @@ class OkpKit implements IKeyKit {
|
|
|
62
62
|
| Ed25519 | EdDSA | Signing |
|
|
63
63
|
| Ed448 | EdDSA | Signing |
|
|
64
64
|
|
|
65
|
-
X25519 and X448 are encryption curves and are not supported by `OkpKit`. Use the [`@lindorm/aes`](
|
|
65
|
+
X25519 and X448 are encryption curves and are not supported by `OkpKit`. Use the [`@lindorm/aes`](https://github.com/lindorm-io/monorepo/tree/main/packages/aes) package for encryption with OKP keys.
|
|
66
66
|
|
|
67
67
|
## Error Handling
|
|
68
68
|
|
package/dist/classes/OkpKit.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.OkpKit = void 0;
|
|
4
4
|
const kryptos_1 = require("@lindorm/kryptos");
|
|
5
5
|
const errors_1 = require("../errors");
|
|
6
|
-
const
|
|
6
|
+
const index_1 = require("../internal/index");
|
|
7
7
|
class OkpKit {
|
|
8
8
|
dsa;
|
|
9
9
|
encoding;
|
|
@@ -20,14 +20,14 @@ class OkpKit {
|
|
|
20
20
|
this.kryptos = options.kryptos;
|
|
21
21
|
}
|
|
22
22
|
sign(data) {
|
|
23
|
-
return (0,
|
|
23
|
+
return (0, index_1.createOkpSignature)({
|
|
24
24
|
data,
|
|
25
25
|
dsaEncoding: this.dsa,
|
|
26
26
|
kryptos: this.kryptos,
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
verify(data, signature) {
|
|
30
|
-
return (0,
|
|
30
|
+
return (0, index_1.verifyOkpSignature)({
|
|
31
31
|
data,
|
|
32
32
|
dsaEncoding: this.dsa,
|
|
33
33
|
encoding: this.encoding,
|
|
@@ -36,7 +36,7 @@ class OkpKit {
|
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
assert(data, signature) {
|
|
39
|
-
return (0,
|
|
39
|
+
return (0, index_1.assertOkpSignature)({
|
|
40
40
|
data,
|
|
41
41
|
dsaEncoding: this.dsa,
|
|
42
42
|
encoding: this.encoding,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OkpKit.js","sourceRoot":"","sources":["../../src/classes/OkpKit.ts"],"names":[],"mappings":";;;AAAA,8CAAwF;AAExF,sCAAqC;AAErC,
|
|
1
|
+
{"version":3,"file":"OkpKit.js","sourceRoot":"","sources":["../../src/classes/OkpKit.ts"],"names":[],"mappings":";;;AAAA,8CAAwF;AAExF,sCAAqC;AAErC,6CAI2B;AAE3B,MAAa,MAAM;IACA,GAAG,CAAc;IACjB,QAAQ,CAAiB;IACzB,OAAO,CAAc;IAEtC,YAAmB,OAAsB;QACvC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAE7C,IAAI,CAAC,oBAAU,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,iBAAQ,CAAC,0BAA0B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,wBAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAoB,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,iBAAQ,CAAC,sDAAsD,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAEM,IAAI,CAAC,IAAa;QACvB,OAAO,IAAA,0BAAkB,EAAC;YACxB,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,GAAG;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,IAAa,EAAE,SAAkB;QAC7C,OAAO,IAAA,0BAAkB,EAAC;YACxB,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,GAAG;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,IAAa,EAAE,SAAkB;QAC7C,OAAO,IAAA,0BAAkB,EAAC;YACxB,IAAI;YACJ,WAAW,EAAE,IAAI,CAAC,GAAG;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS;SACV,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;CACF;AAnDD,wBAmDC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-key.d.ts","sourceRoot":"","sources":["../../src/internal/get-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,KAAG,MAQjD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,MAQnD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getVerifyKey = exports.getSignKey = void 0;
|
|
4
|
-
const errors_1 = require("
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
5
|
const getSignKey = (kryptos) => {
|
|
6
6
|
const { privateKey } = kryptos.export("pem");
|
|
7
7
|
if (!privateKey) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-key.js","sourceRoot":"","sources":["../../src/internal/get-key.ts"],"names":[],"mappings":";;;AACA,sCAAqC;AAE9B,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAU,EAAE;IACzD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,iBAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB;AAEK,MAAM,YAAY,GAAG,CAAC,OAAoB,EAAU,EAAE;IAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,iBAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AARW,QAAA,YAAY,gBAQvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/internal/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,kDAAgC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CreateOkpSignatureOptions, VerifyOkpSignatureOptions } from "
|
|
1
|
+
import { CreateOkpSignatureOptions, VerifyOkpSignatureOptions } from "../types/okp-kit";
|
|
2
2
|
export declare const createOkpSignature: ({ data, dsaEncoding, kryptos, }: CreateOkpSignatureOptions) => Buffer;
|
|
3
3
|
export declare const verifyOkpSignature: ({ data, dsaEncoding, encoding, kryptos, signature, }: VerifyOkpSignatureOptions) => boolean;
|
|
4
4
|
export declare const assertOkpSignature: ({ data, dsaEncoding, encoding, kryptos, signature, }: VerifyOkpSignatureOptions) => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okp-signature.d.ts","sourceRoot":"","sources":["../../src/internal/okp-signature.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGxF,eAAO,MAAM,kBAAkB,GAAI,iCAIhC,yBAAyB,KAAG,MAI3B,CAAC;AAEL,eAAO,MAAM,kBAAkB,GAAI,sDAMhC,yBAAyB,KAAG,OAM5B,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,sDAMhC,yBAAyB,KAAG,IAG9B,CAAC"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.assertOkpSignature = exports.verifyOkpSignature = exports.createOkpSignature = void 0;
|
|
4
4
|
const is_1 = require("@lindorm/is");
|
|
5
5
|
const crypto_1 = require("crypto");
|
|
6
|
-
const errors_1 = require("
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
7
|
const get_key_1 = require("./get-key");
|
|
8
8
|
const createOkpSignature = ({ data, dsaEncoding, kryptos, }) => (0, crypto_1.sign)(undefined, (0, is_1.isString)(data) ? Buffer.from(data, "utf8") : data, {
|
|
9
9
|
key: (0, get_key_1.getSignKey)(kryptos),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"okp-signature.js","sourceRoot":"","sources":["../../src/internal/okp-signature.ts"],"names":[],"mappings":";;;AAAA,oCAAuC;AACvC,mCAAsC;AACtC,sCAAqC;AAErC,uCAAqD;AAE9C,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,OAAO,GACmB,EAAU,EAAE,CACtC,IAAA,aAAI,EAAC,SAAS,EAAE,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IACjE,GAAG,EAAE,IAAA,oBAAU,EAAC,OAAO,CAAC;IACxB,WAAW;CACZ,CAAC,CAAC;AARQ,QAAA,kBAAkB,sBAQ1B;AAEE,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,GACiB,EAAW,EAAE,CACvC,IAAA,eAAM,EACJ,SAAS,EACT,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EACjD,EAAE,GAAG,EAAE,IAAA,sBAAY,EAAC,OAAO,CAAC,EAAE,WAAW,EAAE,EAC3C,IAAA,aAAQ,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC;AAZS,QAAA,kBAAkB,sBAY3B;AAEG,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,GACiB,EAAQ,EAAE;IACpC,IAAI,IAAA,0BAAkB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAE,OAAO;IACpF,MAAM,IAAI,iBAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC1C,CAAC,CAAC;AATW,QAAA,kBAAkB,sBAS7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lindorm/okp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"license": "AGPL-3.0-or-later",
|
|
5
5
|
"author": "Jonn Nilsson",
|
|
6
6
|
"repository": {
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
"verify": "npm run typecheck && npm run build && npm test"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@lindorm/errors": "^0.1.
|
|
31
|
-
"@lindorm/is": "^0.1.
|
|
32
|
-
"@lindorm/kryptos": "^0.
|
|
30
|
+
"@lindorm/errors": "^0.1.18",
|
|
31
|
+
"@lindorm/is": "^0.1.16",
|
|
32
|
+
"@lindorm/kryptos": "^0.7.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@lindorm/types": "^0.5.0"
|
|
36
36
|
},
|
|
37
|
-
"gitHead": "
|
|
37
|
+
"gitHead": "2f258248c91376d768d11e26b72d26b57208007b"
|
|
38
38
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-key.d.ts","sourceRoot":"","sources":["../../../src/utils/private/get-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,KAAG,MAQjD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,WAAW,KAAG,MAQnD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-key.js","sourceRoot":"","sources":["../../../src/utils/private/get-key.ts"],"names":[],"mappings":";;;AACA,yCAAwC;AAEjC,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAU,EAAE;IACzD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,iBAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AARW,QAAA,UAAU,cAQrB;AAEK,MAAM,YAAY,GAAG,CAAC,OAAoB,EAAU,EAAE;IAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,iBAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AARW,QAAA,YAAY,gBAQvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/private/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/private/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,kDAAgC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"okp-signature.d.ts","sourceRoot":"","sources":["../../../src/utils/private/okp-signature.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAG7B,eAAO,MAAM,kBAAkB,GAAI,iCAIhC,yBAAyB,KAAG,MAI3B,CAAC;AAEL,eAAO,MAAM,kBAAkB,GAAI,sDAMhC,yBAAyB,KAAG,OAM5B,CAAC;AAEJ,eAAO,MAAM,kBAAkB,GAAI,sDAMhC,yBAAyB,KAAG,IAG9B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"okp-signature.js","sourceRoot":"","sources":["../../../src/utils/private/okp-signature.ts"],"names":[],"mappings":";;;AAAA,oCAAuC;AACvC,mCAAsC;AACtC,yCAAwC;AAKxC,uCAAqD;AAE9C,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,OAAO,GACmB,EAAU,EAAE,CACtC,IAAA,aAAI,EAAC,SAAS,EAAE,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IACjE,GAAG,EAAE,IAAA,oBAAU,EAAC,OAAO,CAAC;IACxB,WAAW;CACZ,CAAC,CAAC;AARQ,QAAA,kBAAkB,sBAQ1B;AAEE,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,GACiB,EAAW,EAAE,CACvC,IAAA,eAAM,EACJ,SAAS,EACT,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EACjD,EAAE,GAAG,EAAE,IAAA,sBAAY,EAAC,OAAO,CAAC,EAAE,WAAW,EAAE,EAC3C,IAAA,aAAQ,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CACnE,CAAC;AAZS,QAAA,kBAAkB,sBAY3B;AAEG,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,GACiB,EAAQ,EAAE;IACpC,IAAI,IAAA,0BAAkB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAE,OAAO;IACpF,MAAM,IAAI,iBAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC1C,CAAC,CAAC;AATW,QAAA,kBAAkB,sBAS7B"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|