aboutsummaryrefslogtreecommitdiff
path: root/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic')
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts5
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js30
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map1
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts5
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js51
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map1
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts3
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js9
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js.map1
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts3
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js16
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map1
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts3
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js10
-rw-r--r--sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map1
15 files changed, 140 insertions, 0 deletions
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts
new file mode 100644
index 00000000..56212139
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts
@@ -0,0 +1,5 @@
+import type { CodeKeywordDefinition } from "../../types";
+import type { KeywordCxt } from "../../compile/validate";
+declare const def: CodeKeywordDefinition;
+export declare function dynamicAnchor(cxt: KeywordCxt, anchor: string): void;
+export default def;
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js
new file mode 100644
index 00000000..972dc35c
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js
@@ -0,0 +1,30 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.dynamicAnchor = void 0;
+const codegen_1 = require("../../compile/codegen");
+const names_1 = require("../../compile/names");
+const compile_1 = require("../../compile");
+const ref_1 = require("../core/ref");
+const def = {
+ keyword: "$dynamicAnchor",
+ schemaType: "string",
+ code: (cxt) => dynamicAnchor(cxt, cxt.schema),
+};
+function dynamicAnchor(cxt, anchor) {
+ const { gen, it } = cxt;
+ it.schemaEnv.root.dynamicAnchors[anchor] = true;
+ const v = (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`;
+ const validate = it.errSchemaPath === "#" ? it.validateName : _getValidate(cxt);
+ gen.if((0, codegen_1._) `!${v}`, () => gen.assign(v, validate));
+}
+exports.dynamicAnchor = dynamicAnchor;
+function _getValidate(cxt) {
+ const { schemaEnv, schema, self } = cxt.it;
+ const { root, baseId, localRefs, meta } = schemaEnv.root;
+ const { schemaId } = self.opts;
+ const sch = new compile_1.SchemaEnv({ schema, schemaId, root, baseId, localRefs, meta });
+ compile_1.compileSchema.call(self, sch);
+ return (0, ref_1.getValidate)(cxt, sch);
+}
+exports.default = def;
+//# sourceMappingURL=dynamicAnchor.js.map \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map
new file mode 100644
index 00000000..e70afe30
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dynamicAnchor.js","sourceRoot":"","sources":["../../../lib/vocabularies/dynamic/dynamicAnchor.ts"],"names":[],"mappings":";;;AAEA,mDAA0D;AAC1D,+CAAmC;AACnC,2CAAsD;AACtD,qCAAuC;AAEvC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CAC9C,CAAA;AAED,SAAgB,aAAa,CAAC,GAAe,EAAE,MAAc;IAC3D,MAAM,EAAC,GAAG,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;IACrB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC/C,MAAM,CAAC,GAAG,IAAA,WAAC,EAAA,GAAG,eAAC,CAAC,cAAc,GAAG,IAAA,qBAAW,EAAC,MAAM,CAAC,EAAE,CAAA;IACtD,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAC/E,GAAG,CAAC,EAAE,CAAC,IAAA,WAAC,EAAA,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;AACjD,CAAC;AAND,sCAMC;AAED,SAAS,YAAY,CAAC,GAAe;IACnC,MAAM,EAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAC,GAAG,GAAG,CAAC,EAAE,CAAA;IACxC,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,GAAG,SAAS,CAAC,IAAI,CAAA;IACtD,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,IAAI,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAI,mBAAS,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC,CAAA;IAC5E,uBAAa,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC7B,OAAO,IAAA,iBAAW,EAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,kBAAe,GAAG,CAAA"} \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts
new file mode 100644
index 00000000..fa2f2b81
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts
@@ -0,0 +1,5 @@
+import type { CodeKeywordDefinition } from "../../types";
+import type { KeywordCxt } from "../../compile/validate";
+declare const def: CodeKeywordDefinition;
+export declare function dynamicRef(cxt: KeywordCxt, ref: string): void;
+export default def;
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js
new file mode 100644
index 00000000..9f010a0d
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js
@@ -0,0 +1,51 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.dynamicRef = void 0;
+const codegen_1 = require("../../compile/codegen");
+const names_1 = require("../../compile/names");
+const ref_1 = require("../core/ref");
+const def = {
+ keyword: "$dynamicRef",
+ schemaType: "string",
+ code: (cxt) => dynamicRef(cxt, cxt.schema),
+};
+function dynamicRef(cxt, ref) {
+ const { gen, keyword, it } = cxt;
+ if (ref[0] !== "#")
+ throw new Error(`"${keyword}" only supports hash fragment reference`);
+ const anchor = ref.slice(1);
+ if (it.allErrors) {
+ _dynamicRef();
+ }
+ else {
+ const valid = gen.let("valid", false);
+ _dynamicRef(valid);
+ cxt.ok(valid);
+ }
+ function _dynamicRef(valid) {
+ // TODO the assumption here is that `recursiveRef: #` always points to the root
+ // of the schema object, which is not correct, because there may be $id that
+ // makes # point to it, and the target schema may not contain dynamic/recursiveAnchor.
+ // Because of that 2 tests in recursiveRef.json fail.
+ // This is a similar problem to #815 (`$id` doesn't alter resolution scope for `{ "$ref": "#" }`).
+ // (This problem is not tested in JSON-Schema-Test-Suite)
+ if (it.schemaEnv.root.dynamicAnchors[anchor]) {
+ const v = gen.let("_v", (0, codegen_1._) `${names_1.default.dynamicAnchors}${(0, codegen_1.getProperty)(anchor)}`);
+ gen.if(v, _callRef(v, valid), _callRef(it.validateName, valid));
+ }
+ else {
+ _callRef(it.validateName, valid)();
+ }
+ }
+ function _callRef(validate, valid) {
+ return valid
+ ? () => gen.block(() => {
+ (0, ref_1.callRef)(cxt, validate);
+ gen.let(valid, true);
+ })
+ : () => (0, ref_1.callRef)(cxt, validate);
+ }
+}
+exports.dynamicRef = dynamicRef;
+exports.default = def;
+//# sourceMappingURL=dynamicRef.js.map \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map
new file mode 100644
index 00000000..921c893f
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dynamicRef.js","sourceRoot":"","sources":["../../../lib/vocabularies/dynamic/dynamicRef.ts"],"names":[],"mappings":";;;AAEA,mDAAgE;AAChE,+CAAmC;AACnC,qCAAmC;AAEnC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,aAAa;IACtB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CAC3C,CAAA;AAED,SAAgB,UAAU,CAAC,GAAe,EAAE,GAAW;IACrD,MAAM,EAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAC,GAAG,GAAG,CAAA;IAC9B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,yCAAyC,CAAC,CAAA;IACzF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC3B,IAAI,EAAE,CAAC,SAAS,EAAE;QAChB,WAAW,EAAE,CAAA;KACd;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACrC,WAAW,CAAC,KAAK,CAAC,CAAA;QAClB,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;KACd;IAED,SAAS,WAAW,CAAC,KAAY;QAC/B,+EAA+E;QAC/E,4EAA4E;QAC5E,sFAAsF;QACtF,qDAAqD;QACrD,kGAAkG;QAClG,yDAAyD;QACzD,IAAI,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;YAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAA,WAAC,EAAA,GAAG,eAAC,CAAC,cAAc,GAAG,IAAA,qBAAW,EAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACrE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAA;SAChE;aAAM;YACL,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAA;SACnC;IACH,CAAC;IAED,SAAS,QAAQ,CAAC,QAAc,EAAE,KAAY;QAC5C,OAAO,KAAK;YACV,CAAC,CAAC,GAAG,EAAE,CACH,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;gBACb,IAAA,aAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;gBACtB,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;YACtB,CAAC,CAAC;YACN,CAAC,CAAC,GAAG,EAAE,CAAC,IAAA,aAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC;AACH,CAAC;AApCD,gCAoCC;AAED,kBAAe,GAAG,CAAA"} \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts
new file mode 100644
index 00000000..0c751d93
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts
@@ -0,0 +1,3 @@
+import type { Vocabulary } from "../../types";
+declare const dynamic: Vocabulary;
+export default dynamic;
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js
new file mode 100644
index 00000000..f2388a75
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js
@@ -0,0 +1,9 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const dynamicAnchor_1 = require("./dynamicAnchor");
+const dynamicRef_1 = require("./dynamicRef");
+const recursiveAnchor_1 = require("./recursiveAnchor");
+const recursiveRef_1 = require("./recursiveRef");
+const dynamic = [dynamicAnchor_1.default, dynamicRef_1.default, recursiveAnchor_1.default, recursiveRef_1.default];
+exports.default = dynamic;
+//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js.map b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js.map
new file mode 100644
index 00000000..f96ba76d
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/index.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/vocabularies/dynamic/index.ts"],"names":[],"mappings":";;AACA,mDAA2C;AAC3C,6CAAqC;AACrC,uDAA+C;AAC/C,iDAAyC;AAEzC,MAAM,OAAO,GAAe,CAAC,uBAAa,EAAE,oBAAU,EAAE,yBAAe,EAAE,sBAAY,CAAC,CAAA;AAEtF,kBAAe,OAAO,CAAA"} \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts
new file mode 100644
index 00000000..cde2aa27
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts
@@ -0,0 +1,3 @@
+import type { CodeKeywordDefinition } from "../../types";
+declare const def: CodeKeywordDefinition;
+export default def;
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js
new file mode 100644
index 00000000..9fd83235
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js
@@ -0,0 +1,16 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const dynamicAnchor_1 = require("./dynamicAnchor");
+const util_1 = require("../../compile/util");
+const def = {
+ keyword: "$recursiveAnchor",
+ schemaType: "boolean",
+ code(cxt) {
+ if (cxt.schema)
+ (0, dynamicAnchor_1.dynamicAnchor)(cxt, "");
+ else
+ (0, util_1.checkStrictMode)(cxt.it, "$recursiveAnchor: false is ignored");
+ },
+};
+exports.default = def;
+//# sourceMappingURL=recursiveAnchor.js.map \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map
new file mode 100644
index 00000000..5d5e381b
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"recursiveAnchor.js","sourceRoot":"","sources":["../../../lib/vocabularies/dynamic/recursiveAnchor.ts"],"names":[],"mappings":";;AACA,mDAA6C;AAC7C,6CAAkD;AAElD,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,kBAAkB;IAC3B,UAAU,EAAE,SAAS;IACrB,IAAI,CAAC,GAAG;QACN,IAAI,GAAG,CAAC,MAAM;YAAE,IAAA,6BAAa,EAAC,GAAG,EAAE,EAAE,CAAC,CAAA;;YACjC,IAAA,sBAAe,EAAC,GAAG,CAAC,EAAE,EAAE,oCAAoC,CAAC,CAAA;IACpE,CAAC;CACF,CAAA;AAED,kBAAe,GAAG,CAAA"} \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts
new file mode 100644
index 00000000..cde2aa27
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts
@@ -0,0 +1,3 @@
+import type { CodeKeywordDefinition } from "../../types";
+declare const def: CodeKeywordDefinition;
+export default def;
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js
new file mode 100644
index 00000000..8cd5c696
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js
@@ -0,0 +1,10 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+const dynamicRef_1 = require("./dynamicRef");
+const def = {
+ keyword: "$recursiveRef",
+ schemaType: "string",
+ code: (cxt) => (0, dynamicRef_1.dynamicRef)(cxt, cxt.schema),
+};
+exports.default = def;
+//# sourceMappingURL=recursiveRef.js.map \ No newline at end of file
diff --git a/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map
new file mode 100644
index 00000000..f8138044
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"recursiveRef.js","sourceRoot":"","sources":["../../../lib/vocabularies/dynamic/recursiveRef.ts"],"names":[],"mappings":";;AACA,6CAAuC;AAEvC,MAAM,GAAG,GAA0B;IACjC,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,QAAQ;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAA,uBAAU,EAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;CAC3C,CAAA;AAED,kBAAe,GAAG,CAAA"} \ No newline at end of file