@strapi/strapi 4.23.1 → 4.24.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.
@@ -1 +1 @@
1
- {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/middlewares/cors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAWF,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CA2CjD,CAAC"}
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../src/middlewares/cors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC9D,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAWF,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAyCjD,CAAC"}
@@ -23,21 +23,19 @@ const cors = (config) => {
23
23
  }
24
24
  return koaCors__default.default({
25
25
  async origin(ctx) {
26
+ if (!ctx.get("Origin")) {
27
+ return "*";
28
+ }
26
29
  let originList;
27
30
  if (typeof origin === "function") {
28
31
  originList = await origin(ctx);
29
32
  } else {
30
33
  originList = origin;
31
34
  }
32
- const whitelist = Array.isArray(originList) ? originList : originList.split(/\s*,\s*/);
33
- const requestOrigin = ctx.headers.origin ?? "";
34
- if (whitelist.includes("*")) {
35
- return credentials ? requestOrigin : "*";
36
- }
37
- if (!whitelist.includes(requestOrigin)) {
38
- return ctx.throw(`${requestOrigin} is not a valid origin`);
35
+ if (Array.isArray(originList)) {
36
+ return originList.includes(ctx.get("Origin")) ? ctx.get("Origin") : false;
39
37
  }
40
- return requestOrigin;
38
+ return originList;
41
39
  },
42
40
  exposeHeaders: expose,
43
41
  maxAge,
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Common.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n const whitelist = Array.isArray(originList) ? originList : originList.split(/\\s*,\\s*/);\n\n const requestOrigin = ctx.headers.origin ?? '';\n if (whitelist.includes('*')) {\n return credentials ? requestOrigin : '*';\n }\n\n if (!whitelist.includes(requestOrigin)) {\n return ctx.throw(`${requestOrigin} is not a valid origin`);\n }\n return requestOrigin;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["koaCors"],"mappings":";;;;;AAeA,MAAM,WAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,SAAS,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,QAAQ,SAAS;AAAA,EACpE,SAAS,CAAC,gBAAgB,iBAAiB,UAAU,QAAQ;AAAA,EAC7D,oBAAoB;AACtB;AAEa,MAAA,OAAyC,CAAC,WAAW;AAC1D,QAAA,EAAE,QAAQ,QAAQ,QAAQ,aAAa,SAAS,SAAS,uBAAuB;AAAA,IACpF,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAGD,MAAA,OAAO,YAAY,QAAW;AAChC,WAAO,IAAI;AAAA,MACT;AAAA,IAAA;AAAA,EAIJ;AAEA,SAAOA,yBAAQ;AAAA,IACb,MAAM,OAAO,KAAK;AACZ,UAAA;AAEA,UAAA,OAAO,WAAW,YAAY;AACnB,qBAAA,MAAM,OAAO,GAAG;AAAA,MAAA,OACxB;AACQ,qBAAA;AAAA,MACf;AAEM,YAAA,YAAY,MAAM,QAAQ,UAAU,IAAI,aAAa,WAAW,MAAM,SAAS;AAE/E,YAAA,gBAAgB,IAAI,QAAQ,UAAU;AACxC,UAAA,UAAU,SAAS,GAAG,GAAG;AAC3B,eAAO,cAAc,gBAAgB;AAAA,MACvC;AAEA,UAAI,CAAC,UAAU,SAAS,aAAa,GAAG;AACtC,eAAO,IAAI,MAAM,GAAG,aAAa,wBAAwB;AAAA,MAC3D;AACO,aAAA;AAAA,IACT;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,IACd;AAAA,EAAA,CACD;AACH;;"}
1
+ {"version":3,"file":"cors.js","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Common.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : false;\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":["koaCors"],"mappings":";;;;;AAeA,MAAM,WAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,SAAS,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,QAAQ,SAAS;AAAA,EACpE,SAAS,CAAC,gBAAgB,iBAAiB,UAAU,QAAQ;AAAA,EAC7D,oBAAoB;AACtB;AAEa,MAAA,OAAyC,CAAC,WAAW;AAC1D,QAAA,EAAE,QAAQ,QAAQ,QAAQ,aAAa,SAAS,SAAS,uBAAuB;AAAA,IACpF,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAGD,MAAA,OAAO,YAAY,QAAW;AAChC,WAAO,IAAI;AAAA,MACT;AAAA,IAAA;AAAA,EAIJ;AAEA,SAAOA,yBAAQ;AAAA,IACb,MAAM,OAAO,KAAK;AAChB,UAAI,CAAC,IAAI,IAAI,QAAQ,GAAG;AACf,eAAA;AAAA,MACT;AAEI,UAAA;AAEA,UAAA,OAAO,WAAW,YAAY;AACnB,qBAAA,MAAM,OAAO,GAAG;AAAA,MAAA,OACxB;AACQ,qBAAA;AAAA,MACf;AAEI,UAAA,MAAM,QAAQ,UAAU,GAAG;AACtB,eAAA,WAAW,SAAS,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,QAAQ,IAAI;AAAA,MACtE;AAEO,aAAA;AAAA,IACT;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,IACd;AAAA,EAAA,CACD;AACH;;"}
@@ -19,21 +19,19 @@ const cors = (config) => {
19
19
  }
20
20
  return koaCors({
21
21
  async origin(ctx) {
22
+ if (!ctx.get("Origin")) {
23
+ return "*";
24
+ }
22
25
  let originList;
23
26
  if (typeof origin === "function") {
24
27
  originList = await origin(ctx);
25
28
  } else {
26
29
  originList = origin;
27
30
  }
28
- const whitelist = Array.isArray(originList) ? originList : originList.split(/\s*,\s*/);
29
- const requestOrigin = ctx.headers.origin ?? "";
30
- if (whitelist.includes("*")) {
31
- return credentials ? requestOrigin : "*";
32
- }
33
- if (!whitelist.includes(requestOrigin)) {
34
- return ctx.throw(`${requestOrigin} is not a valid origin`);
31
+ if (Array.isArray(originList)) {
32
+ return originList.includes(ctx.get("Origin")) ? ctx.get("Origin") : false;
35
33
  }
36
- return requestOrigin;
34
+ return originList;
37
35
  },
38
36
  exposeHeaders: expose,
39
37
  maxAge,
@@ -1 +1 @@
1
- {"version":3,"file":"cors.mjs","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Common.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n const whitelist = Array.isArray(originList) ? originList : originList.split(/\\s*,\\s*/);\n\n const requestOrigin = ctx.headers.origin ?? '';\n if (whitelist.includes('*')) {\n return credentials ? requestOrigin : '*';\n }\n\n if (!whitelist.includes(requestOrigin)) {\n return ctx.throw(`${requestOrigin} is not a valid origin`);\n }\n return requestOrigin;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":[],"mappings":";AAeA,MAAM,WAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,SAAS,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,QAAQ,SAAS;AAAA,EACpE,SAAS,CAAC,gBAAgB,iBAAiB,UAAU,QAAQ;AAAA,EAC7D,oBAAoB;AACtB;AAEa,MAAA,OAAyC,CAAC,WAAW;AAC1D,QAAA,EAAE,QAAQ,QAAQ,QAAQ,aAAa,SAAS,SAAS,uBAAuB;AAAA,IACpF,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAGD,MAAA,OAAO,YAAY,QAAW;AAChC,WAAO,IAAI;AAAA,MACT;AAAA,IAAA;AAAA,EAIJ;AAEA,SAAO,QAAQ;AAAA,IACb,MAAM,OAAO,KAAK;AACZ,UAAA;AAEA,UAAA,OAAO,WAAW,YAAY;AACnB,qBAAA,MAAM,OAAO,GAAG;AAAA,MAAA,OACxB;AACQ,qBAAA;AAAA,MACf;AAEM,YAAA,YAAY,MAAM,QAAQ,UAAU,IAAI,aAAa,WAAW,MAAM,SAAS;AAE/E,YAAA,gBAAgB,IAAI,QAAQ,UAAU;AACxC,UAAA,UAAU,SAAS,GAAG,GAAG;AAC3B,eAAO,cAAc,gBAAgB;AAAA,MACvC;AAEA,UAAI,CAAC,UAAU,SAAS,aAAa,GAAG;AACtC,eAAO,IAAI,MAAM,GAAG,aAAa,wBAAwB;AAAA,MAC3D;AACO,aAAA;AAAA,IACT;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,IACd;AAAA,EAAA,CACD;AACH;"}
1
+ {"version":3,"file":"cors.mjs","sources":["../../src/middlewares/cors.ts"],"sourcesContent":["import koaCors from '@koa/cors';\n\nimport type { Common } from '@strapi/types';\n\nexport type Config = {\n enabled?: boolean;\n origin: string | string[] | ((ctx: any) => string | string[]);\n expose?: string | string[];\n maxAge?: number;\n credentials?: boolean;\n methods?: string | string[];\n headers?: string | string[];\n keepHeadersOnError?: boolean;\n};\n\nconst defaults: Config = {\n origin: '*',\n maxAge: 31536000,\n credentials: true,\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n headers: ['Content-Type', 'Authorization', 'Origin', 'Accept'],\n keepHeadersOnError: false,\n};\n\nexport const cors: Common.MiddlewareFactory<Config> = (config) => {\n const { origin, expose, maxAge, credentials, methods, headers, keepHeadersOnError } = {\n ...defaults,\n ...config,\n };\n\n if (config.enabled !== undefined) {\n strapi.log.warn(\n 'The strapi::cors middleware no longer supports the `enabled` option. Using it' +\n ' to conditionally enable CORS might cause an insecure default. To disable strapi::cors, remove it from' +\n ' the exported array in config/middleware.js'\n );\n }\n\n return koaCors({\n async origin(ctx) {\n if (!ctx.get('Origin')) {\n return '*';\n }\n\n let originList: string | string[];\n\n if (typeof origin === 'function') {\n originList = await origin(ctx);\n } else {\n originList = origin;\n }\n\n if (Array.isArray(originList)) {\n return originList.includes(ctx.get('Origin')) ? ctx.get('Origin') : false;\n }\n\n return originList;\n },\n exposeHeaders: expose,\n maxAge,\n credentials,\n allowMethods: methods,\n allowHeaders: headers,\n keepHeadersOnError,\n });\n};\n"],"names":[],"mappings":";AAeA,MAAM,WAAmB;AAAA,EACvB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,SAAS,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,QAAQ,SAAS;AAAA,EACpE,SAAS,CAAC,gBAAgB,iBAAiB,UAAU,QAAQ;AAAA,EAC7D,oBAAoB;AACtB;AAEa,MAAA,OAAyC,CAAC,WAAW;AAC1D,QAAA,EAAE,QAAQ,QAAQ,QAAQ,aAAa,SAAS,SAAS,uBAAuB;AAAA,IACpF,GAAG;AAAA,IACH,GAAG;AAAA,EAAA;AAGD,MAAA,OAAO,YAAY,QAAW;AAChC,WAAO,IAAI;AAAA,MACT;AAAA,IAAA;AAAA,EAIJ;AAEA,SAAO,QAAQ;AAAA,IACb,MAAM,OAAO,KAAK;AAChB,UAAI,CAAC,IAAI,IAAI,QAAQ,GAAG;AACf,eAAA;AAAA,MACT;AAEI,UAAA;AAEA,UAAA,OAAO,WAAW,YAAY;AACnB,qBAAA,MAAM,OAAO,GAAG;AAAA,MAAA,OACxB;AACQ,qBAAA;AAAA,MACf;AAEI,UAAA,MAAM,QAAQ,UAAU,GAAG;AACtB,eAAA,WAAW,SAAS,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,QAAQ,IAAI;AAAA,MACtE;AAEO,aAAA;AAAA,IACT;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,IACd;AAAA,EAAA,CACD;AACH;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/strapi",
3
- "version": "4.23.1",
3
+ "version": "4.24.0",
4
4
  "description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
5
5
  "keywords": [
6
6
  "strapi",
@@ -111,24 +111,24 @@
111
111
  "watch": "pack-up watch"
112
112
  },
113
113
  "dependencies": {
114
- "@koa/cors": "3.4.3",
114
+ "@koa/cors": "5.0.0",
115
115
  "@koa/router": "10.1.1",
116
- "@strapi/admin": "4.23.1",
117
- "@strapi/content-releases": "4.23.1",
118
- "@strapi/data-transfer": "4.23.1",
119
- "@strapi/database": "4.23.1",
120
- "@strapi/generate-new": "4.23.1",
121
- "@strapi/generators": "4.23.1",
122
- "@strapi/logger": "4.23.1",
116
+ "@strapi/admin": "4.24.0",
117
+ "@strapi/content-releases": "4.24.0",
118
+ "@strapi/data-transfer": "4.24.0",
119
+ "@strapi/database": "4.24.0",
120
+ "@strapi/generate-new": "4.24.0",
121
+ "@strapi/generators": "4.24.0",
122
+ "@strapi/logger": "4.24.0",
123
123
  "@strapi/pack-up": "4.23.0",
124
- "@strapi/permissions": "4.23.1",
125
- "@strapi/plugin-content-manager": "4.23.1",
126
- "@strapi/plugin-content-type-builder": "4.23.1",
127
- "@strapi/plugin-email": "4.23.1",
128
- "@strapi/plugin-upload": "4.23.1",
129
- "@strapi/types": "4.23.1",
130
- "@strapi/typescript-utils": "4.23.1",
131
- "@strapi/utils": "4.23.1",
124
+ "@strapi/permissions": "4.24.0",
125
+ "@strapi/plugin-content-manager": "4.24.0",
126
+ "@strapi/plugin-content-type-builder": "4.24.0",
127
+ "@strapi/plugin-email": "4.24.0",
128
+ "@strapi/plugin-upload": "4.24.0",
129
+ "@strapi/types": "4.24.0",
130
+ "@strapi/typescript-utils": "4.24.0",
131
+ "@strapi/utils": "4.24.0",
132
132
  "bcryptjs": "2.4.3",
133
133
  "boxen": "5.1.2",
134
134
  "chalk": "4.1.2",
@@ -194,13 +194,13 @@
194
194
  "@types/node-schedule": "2.1.0",
195
195
  "@types/nodemon": "1.19.6",
196
196
  "@types/statuses": "2.0.1",
197
- "eslint-config-custom": "4.23.1",
197
+ "eslint-config-custom": "4.24.0",
198
198
  "supertest": "6.3.3",
199
- "tsconfig": "4.23.1"
199
+ "tsconfig": "4.24.0"
200
200
  },
201
201
  "engines": {
202
202
  "node": ">=18.0.0 <=20.x.x",
203
203
  "npm": ">=6.0.0"
204
204
  },
205
- "gitHead": "655449af8ada3439d781bf5df22d18a600284831"
205
+ "gitHead": "bfa510961926a8c9b5ad75b1c1338479e91c71e9"
206
206
  }