@loaders.gl/tile-converter 4.0.0-beta.8 → 4.0.1

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.
Files changed (39) hide show
  1. package/dist/converter.min.cjs +109 -109
  2. package/dist/i3s-converter/helpers/attribute-metadata-info.d.ts +74 -0
  3. package/dist/i3s-converter/helpers/attribute-metadata-info.d.ts.map +1 -0
  4. package/dist/i3s-converter/helpers/attribute-metadata-info.js +157 -0
  5. package/dist/i3s-converter/helpers/attribute-metadata-info.js.map +1 -0
  6. package/dist/i3s-converter/helpers/feature-attributes.d.ts +3 -28
  7. package/dist/i3s-converter/helpers/feature-attributes.d.ts.map +1 -1
  8. package/dist/i3s-converter/helpers/feature-attributes.js +16 -125
  9. package/dist/i3s-converter/helpers/feature-attributes.js.map +1 -1
  10. package/dist/i3s-converter/i3s-converter.d.ts +11 -5
  11. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  12. package/dist/i3s-converter/i3s-converter.js +31 -44
  13. package/dist/i3s-converter/i3s-converter.js.map +1 -1
  14. package/dist/i3s-converter/types.d.ts +15 -0
  15. package/dist/i3s-converter/types.d.ts.map +1 -1
  16. package/dist/i3s-converter/types.js +6 -0
  17. package/dist/i3s-converter/types.js.map +1 -1
  18. package/dist/i3s-server/app.d.ts.map +1 -1
  19. package/dist/i3s-server/app.js +3 -6
  20. package/dist/i3s-server/app.js.map +1 -1
  21. package/dist/i3s-server/bin/i3s-server.min.cjs +86 -86
  22. package/dist/i3s-server/bin/www.js.map +1 -1
  23. package/dist/i3s-server/routes/index.d.ts +1 -1
  24. package/dist/i3s-server/routes/index.d.ts.map +1 -1
  25. package/dist/i3s-server/routes/index.js +2 -5
  26. package/dist/i3s-server/routes/index.js.map +1 -1
  27. package/dist/i3s-server/routes/slpk-router.d.ts.map +1 -1
  28. package/dist/i3s-server/routes/slpk-router.js +3 -3
  29. package/dist/i3s-server/routes/slpk-router.js.map +1 -1
  30. package/dist/index.cjs +269 -173
  31. package/package.json +15 -15
  32. package/src/i3s-converter/helpers/attribute-metadata-info.ts +246 -0
  33. package/src/i3s-converter/helpers/feature-attributes.ts +18 -180
  34. package/src/i3s-converter/i3s-converter.ts +46 -65
  35. package/src/i3s-converter/types.ts +16 -0
  36. package/src/i3s-server/app.ts +9 -4
  37. package/src/i3s-server/bin/www.ts +6 -0
  38. package/src/i3s-server/routes/index.ts +2 -4
  39. package/src/i3s-server/routes/slpk-router.ts +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"www.js","names":["app","https","http","fs","path","formErrorHandler","formListeningHandler","normalizePort","httpPort","process","env","PORT","console","error","exit","httpsPort","HTTPS_PORT","options","key","readFileSync","join","__dirname","cert","httpServer","createServer","httpsServer","listen","on"],"sources":["../../../src/i3s-server/bin/www.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport {app} from '../app';\nimport https from 'https';\nimport http from 'http';\nimport fs from 'fs';\nimport path from 'path';\nimport {formErrorHandler, formListeningHandler, normalizePort} from '../utils/server-utils';\n\n/** Get port from environment and store in Express. */\nconst httpPort = normalizePort(process.env.PORT || '80');\nif (httpPort === false) {\n console.error(`Incorrect HTTP port`);\n process.exit(1);\n}\nconst httpsPort = normalizePort(process.env.HTTPS_PORT || '443');\nif (httpsPort === false) {\n console.error(`Incorrect HTTPs port`);\n process.exit(1);\n}\n\n/** Create HTTP server. */\nconst options = {\n key: fs.readFileSync(path.join(__dirname, '../certs/key.pem')),\n cert: fs.readFileSync(path.join(__dirname, '../certs/cert.pem'))\n};\n\nconst httpServer = http.createServer(app);\nconst httpsServer = https.createServer(options, app);\n\n/** Listen on provided port, on all network interfaces. */\nhttpServer.listen(httpPort);\nhttpServer.on('error', formErrorHandler(httpPort));\nhttpServer.on('listening', formListeningHandler(httpServer));\n\nhttpsServer.listen(httpsPort);\nhttpsServer.on('error', formErrorHandler(httpsPort));\nhttpsServer.on('listening', formListeningHandler(httpsServer));\n"],"mappings":"AAAA;AAAmB,SAEXA,GAAG;AACX,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AAAC,SAChBC,gBAAgB,EAAEC,oBAAoB,EAAEC,aAAa;AAG7D,MAAMC,QAAQ,GAAGD,aAAa,CAACE,OAAO,CAACC,GAAG,CAACC,IAAI,IAAI,IAAI,CAAC;AACxD,IAAIH,QAAQ,KAAK,KAAK,EAAE;EACtBI,OAAO,CAACC,KAAK,CAAE,qBAAoB,CAAC;EACpCJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AACjB;AACA,MAAMC,SAAS,GAAGR,aAAa,CAACE,OAAO,CAACC,GAAG,CAACM,UAAU,IAAI,KAAK,CAAC;AAChE,IAAID,SAAS,KAAK,KAAK,EAAE;EACvBH,OAAO,CAACC,KAAK,CAAE,sBAAqB,CAAC;EACrCJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AACjB;AAGA,MAAMG,OAAO,GAAG;EACdC,GAAG,EAAEf,EAAE,CAACgB,YAAY,CAACf,IAAI,CAACgB,IAAI,CAACC,SAAS,EAAE,kBAAkB,CAAC,CAAC;EAC9DC,IAAI,EAAEnB,EAAE,CAACgB,YAAY,CAACf,IAAI,CAACgB,IAAI,CAACC,SAAS,EAAE,mBAAmB,CAAC;AACjE,CAAC;AAED,MAAME,UAAU,GAAGrB,IAAI,CAACsB,YAAY,CAACxB,GAAG,CAAC;AACzC,MAAMyB,WAAW,GAAGxB,KAAK,CAACuB,YAAY,CAACP,OAAO,EAAEjB,GAAG,CAAC;AAGpDuB,UAAU,CAACG,MAAM,CAAClB,QAAQ,CAAC;AAC3Be,UAAU,CAACI,EAAE,CAAC,OAAO,EAAEtB,gBAAgB,CAACG,QAAQ,CAAC,CAAC;AAClDe,UAAU,CAACI,EAAE,CAAC,WAAW,EAAErB,oBAAoB,CAACiB,UAAU,CAAC,CAAC;AAE5DE,WAAW,CAACC,MAAM,CAACX,SAAS,CAAC;AAC7BU,WAAW,CAACE,EAAE,CAAC,OAAO,EAAEtB,gBAAgB,CAACU,SAAS,CAAC,CAAC;AACpDU,WAAW,CAACE,EAAE,CAAC,WAAW,EAAErB,oBAAoB,CAACmB,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"www.js","names":["app","https","http","fs","path","formErrorHandler","formListeningHandler","normalizePort","httpPort","process","env","PORT","console","error","exit","httpsPort","HTTPS_PORT","options","key","readFileSync","join","__dirname","cert","httpServer","createServer","httpsServer","listen","on"],"sources":["../../../src/i3s-server/bin/www.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport {app} from '../app';\nimport https from 'https';\nimport http from 'http';\nimport fs from 'fs';\nimport path from 'path';\n// For local debug\n// import {fileURLToPath} from 'url';\nimport {formErrorHandler, formListeningHandler, normalizePort} from '../utils/server-utils';\n\n// For local debug\n// const __filename = fileURLToPath(import.meta.url);\n// const __dirname = path.dirname(__filename);\n\n/** Get port from environment and store in Express. */\nconst httpPort = normalizePort(process.env.PORT || '80');\nif (httpPort === false) {\n console.error(`Incorrect HTTP port`);\n process.exit(1);\n}\nconst httpsPort = normalizePort(process.env.HTTPS_PORT || '443');\nif (httpsPort === false) {\n console.error(`Incorrect HTTPs port`);\n process.exit(1);\n}\n\n/** Create HTTP server. */\nconst options = {\n key: fs.readFileSync(path.join(__dirname, '../certs/key.pem')),\n cert: fs.readFileSync(path.join(__dirname, '../certs/cert.pem'))\n};\n\nconst httpServer = http.createServer(app);\nconst httpsServer = https.createServer(options, app);\n\n/** Listen on provided port, on all network interfaces. */\nhttpServer.listen(httpPort);\nhttpServer.on('error', formErrorHandler(httpPort));\nhttpServer.on('listening', formListeningHandler(httpServer));\n\nhttpsServer.listen(httpsPort);\nhttpsServer.on('error', formErrorHandler(httpsPort));\nhttpsServer.on('listening', formListeningHandler(httpsServer));\n"],"mappings":"AAAA;AAAmB,SAEXA,GAAG;AACX,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,IAAI,MAAM,MAAM;AACvB,OAAOC,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AAAC,SAGhBC,gBAAgB,EAAEC,oBAAoB,EAAEC,aAAa;AAO7D,MAAMC,QAAQ,GAAGD,aAAa,CAACE,OAAO,CAACC,GAAG,CAACC,IAAI,IAAI,IAAI,CAAC;AACxD,IAAIH,QAAQ,KAAK,KAAK,EAAE;EACtBI,OAAO,CAACC,KAAK,CAAE,qBAAoB,CAAC;EACpCJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AACjB;AACA,MAAMC,SAAS,GAAGR,aAAa,CAACE,OAAO,CAACC,GAAG,CAACM,UAAU,IAAI,KAAK,CAAC;AAChE,IAAID,SAAS,KAAK,KAAK,EAAE;EACvBH,OAAO,CAACC,KAAK,CAAE,sBAAqB,CAAC;EACrCJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;AACjB;AAGA,MAAMG,OAAO,GAAG;EACdC,GAAG,EAAEf,EAAE,CAACgB,YAAY,CAACf,IAAI,CAACgB,IAAI,CAACC,SAAS,EAAE,kBAAkB,CAAC,CAAC;EAC9DC,IAAI,EAAEnB,EAAE,CAACgB,YAAY,CAACf,IAAI,CAACgB,IAAI,CAACC,SAAS,EAAE,mBAAmB,CAAC;AACjE,CAAC;AAED,MAAME,UAAU,GAAGrB,IAAI,CAACsB,YAAY,CAACxB,GAAG,CAAC;AACzC,MAAMyB,WAAW,GAAGxB,KAAK,CAACuB,YAAY,CAACP,OAAO,EAAEjB,GAAG,CAAC;AAGpDuB,UAAU,CAACG,MAAM,CAAClB,QAAQ,CAAC;AAC3Be,UAAU,CAACI,EAAE,CAAC,OAAO,EAAEtB,gBAAgB,CAACG,QAAQ,CAAC,CAAC;AAClDe,UAAU,CAACI,EAAE,CAAC,WAAW,EAAErB,oBAAoB,CAACiB,UAAU,CAAC,CAAC;AAE5DE,WAAW,CAACC,MAAM,CAACX,SAAS,CAAC;AAC7BU,WAAW,CAACE,EAAE,CAAC,OAAO,EAAEtB,gBAAgB,CAACU,SAAS,CAAC,CAAC;AACpDU,WAAW,CAACE,EAAE,CAAC,WAAW,EAAErB,oBAAoB,CAACmB,WAAW,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export declare const router: import("express-serve-static-core").Router;
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/i3s-server/routes/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/i3s-server/routes/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,MAAM,4CAAmB,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import express from 'express';
2
- const router = express.Router();
3
- const {
4
- getFileNameByUrl
5
- } = require('../controllers/index-controller');
2
+ import { getFileNameByUrl } from "../controllers/index-controller.js";
3
+ export const router = express.Router();
6
4
  router.get('*', async function (req, res, next) {
7
5
  const fileName = await getFileNameByUrl(req.path);
8
6
  if (fileName) {
@@ -12,5 +10,4 @@ router.get('*', async function (req, res, next) {
12
10
  res.send('File not found');
13
11
  }
14
12
  });
15
- module.exports = router;
16
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["express","router","Router","getFileNameByUrl","require","get","req","res","next","fileName","path","sendFile","status","send","module","exports"],"sources":["../../../src/i3s-server/routes/index.ts"],"sourcesContent":["import express from 'express';\n\nconst router = express.Router();\nconst {getFileNameByUrl} = require('../controllers/index-controller');\n\n/* GET home page. */\nrouter.get('*', async function (req, res, next) {\n const fileName = await getFileNameByUrl(req.path);\n if (fileName) {\n res.sendFile(fileName);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n\nmodule.exports = router;\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAE7B,MAAMC,MAAM,GAAGD,OAAO,CAACE,MAAM,CAAC,CAAC;AAC/B,MAAM;EAACC;AAAgB,CAAC,GAAGC,OAAO,CAAC,iCAAiC,CAAC;AAGrEH,MAAM,CAACI,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EAC9C,MAAMC,QAAQ,GAAG,MAAMN,gBAAgB,CAACG,GAAG,CAACI,IAAI,CAAC;EACjD,IAAID,QAAQ,EAAE;IACZF,GAAG,CAACI,QAAQ,CAACF,QAAQ,CAAC;EACxB,CAAC,MAAM;IACLF,GAAG,CAACK,MAAM,CAAC,GAAG,CAAC;IACfL,GAAG,CAACM,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC;AAEFC,MAAM,CAACC,OAAO,GAAGd,MAAM"}
1
+ {"version":3,"file":"index.js","names":["express","getFileNameByUrl","router","Router","get","req","res","next","fileName","path","sendFile","status","send"],"sources":["../../../src/i3s-server/routes/index.ts"],"sourcesContent":["import express from 'express';\nimport {getFileNameByUrl} from '../controllers/index-controller';\n\nexport const router = express.Router();\n\n/* GET home page. */\nrouter.get('*', async function (req, res, next) {\n const fileName = await getFileNameByUrl(req.path);\n if (fileName) {\n res.sendFile(fileName);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAAC,SACtBC,gBAAgB;AAExB,OAAO,MAAMC,MAAM,GAAGF,OAAO,CAACG,MAAM,CAAC,CAAC;AAGtCD,MAAM,CAACE,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EAC9C,MAAMC,QAAQ,GAAG,MAAMP,gBAAgB,CAACI,GAAG,CAACI,IAAI,CAAC;EACjD,IAAID,QAAQ,EAAE;IACZF,GAAG,CAACI,QAAQ,CAACF,QAAQ,CAAC;EACxB,CAAC,MAAM;IACLF,GAAG,CAACK,MAAM,CAAC,GAAG,CAAC;IACfL,GAAG,CAACM,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-router.d.ts","sourceRoot":"","sources":["../../../src/i3s-server/routes/slpk-router.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iBAAiB,4CAAmB,CAAC;AAalD,eAAO,MAAM,MAAM,4CAAmB,CAAC"}
1
+ {"version":3,"file":"slpk-router.d.ts","sourceRoot":"","sources":["../../../src/i3s-server/routes/slpk-router.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iBAAiB,4CAAmB,CAAC;AAalD,eAAO,MAAM,MAAM,4CAAmB,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import express from 'express';
2
2
  import { getFileByUrl } from "../controllers/slpk-controller.js";
3
3
  import { createSceneServer } from "../utils/create-scene-server.js";
4
+ const textDecoder = new TextDecoder();
4
5
  export const sceneServerRouter = express.Router();
5
6
  sceneServerRouter.get('*', async function (req, res, next) {
6
7
  const file = await getFileByUrl('/');
7
8
  if (file) {
8
- const layer = JSON.parse(file.toString());
9
+ const layer = JSON.parse(textDecoder.decode(file));
9
10
  const sceneServerResponse = createSceneServer(layer.name, layer);
10
11
  res.send(sceneServerResponse);
11
12
  } else {
@@ -15,10 +16,9 @@ sceneServerRouter.get('*', async function (req, res, next) {
15
16
  });
16
17
  export const router = express.Router();
17
18
  router.get('*', async function (req, res, next) {
18
- console.log(req.path);
19
19
  const file = await getFileByUrl(req.path);
20
20
  if (file) {
21
- res.send(file);
21
+ res.send(Buffer.from(file));
22
22
  } else {
23
23
  res.status(404);
24
24
  res.send('File not found');
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-router.js","names":["express","getFileByUrl","createSceneServer","sceneServerRouter","Router","get","req","res","next","file","layer","JSON","parse","toString","sceneServerResponse","name","send","status","router","console","log","path"],"sources":["../../../src/i3s-server/routes/slpk-router.ts"],"sourcesContent":["import express from 'express';\nimport {getFileByUrl} from '../controllers/slpk-controller';\nimport {createSceneServer} from '../utils/create-scene-server';\n\nexport const sceneServerRouter = express.Router();\nsceneServerRouter.get('*', async function (req, res, next) {\n const file = await getFileByUrl('/');\n if (file) {\n const layer = JSON.parse(file.toString());\n const sceneServerResponse = createSceneServer(layer.name, layer);\n res.send(sceneServerResponse);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n\nexport const router = express.Router();\nrouter.get('*', async function (req, res, next) {\n console.log(req.path);\n const file = await getFileByUrl(req.path);\n if (file) {\n res.send(file);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAAC,SACtBC,YAAY;AAAA,SACZC,iBAAiB;AAEzB,OAAO,MAAMC,iBAAiB,GAAGH,OAAO,CAACI,MAAM,CAAC,CAAC;AACjDD,iBAAiB,CAACE,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EACzD,MAAMC,IAAI,GAAG,MAAMR,YAAY,CAAC,GAAG,CAAC;EACpC,IAAIQ,IAAI,EAAE;IACR,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAACI,QAAQ,CAAC,CAAC,CAAC;IACzC,MAAMC,mBAAmB,GAAGZ,iBAAiB,CAACQ,KAAK,CAACK,IAAI,EAAEL,KAAK,CAAC;IAChEH,GAAG,CAACS,IAAI,CAACF,mBAAmB,CAAC;EAC/B,CAAC,MAAM;IACLP,GAAG,CAACU,MAAM,CAAC,GAAG,CAAC;IACfV,GAAG,CAACS,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC;AAEF,OAAO,MAAME,MAAM,GAAGlB,OAAO,CAACI,MAAM,CAAC,CAAC;AACtCc,MAAM,CAACb,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EAC9CW,OAAO,CAACC,GAAG,CAACd,GAAG,CAACe,IAAI,CAAC;EACrB,MAAMZ,IAAI,GAAG,MAAMR,YAAY,CAACK,GAAG,CAACe,IAAI,CAAC;EACzC,IAAIZ,IAAI,EAAE;IACRF,GAAG,CAACS,IAAI,CAACP,IAAI,CAAC;EAChB,CAAC,MAAM;IACLF,GAAG,CAACU,MAAM,CAAC,GAAG,CAAC;IACfV,GAAG,CAACS,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"slpk-router.js","names":["express","getFileByUrl","createSceneServer","textDecoder","TextDecoder","sceneServerRouter","Router","get","req","res","next","file","layer","JSON","parse","decode","sceneServerResponse","name","send","status","router","path","Buffer","from"],"sources":["../../../src/i3s-server/routes/slpk-router.ts"],"sourcesContent":["import express from 'express';\nimport {getFileByUrl} from '../controllers/slpk-controller';\nimport {createSceneServer} from '../utils/create-scene-server';\n\nconst textDecoder = new TextDecoder();\n\nexport const sceneServerRouter = express.Router();\nsceneServerRouter.get('*', async function (req, res, next) {\n const file = await getFileByUrl('/');\n if (file) {\n const layer = JSON.parse(textDecoder.decode(file));\n const sceneServerResponse = createSceneServer(layer.name, layer);\n res.send(sceneServerResponse);\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n\nexport const router = express.Router();\nrouter.get('*', async function (req, res, next) {\n const file = await getFileByUrl(req.path);\n if (file) {\n res.send(Buffer.from(file));\n } else {\n res.status(404);\n res.send('File not found');\n }\n});\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,SAAS;AAAC,SACtBC,YAAY;AAAA,SACZC,iBAAiB;AAEzB,MAAMC,WAAW,GAAG,IAAIC,WAAW,CAAC,CAAC;AAErC,OAAO,MAAMC,iBAAiB,GAAGL,OAAO,CAACM,MAAM,CAAC,CAAC;AACjDD,iBAAiB,CAACE,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EACzD,MAAMC,IAAI,GAAG,MAAMV,YAAY,CAAC,GAAG,CAAC;EACpC,IAAIU,IAAI,EAAE;IACR,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACX,WAAW,CAACY,MAAM,CAACJ,IAAI,CAAC,CAAC;IAClD,MAAMK,mBAAmB,GAAGd,iBAAiB,CAACU,KAAK,CAACK,IAAI,EAAEL,KAAK,CAAC;IAChEH,GAAG,CAACS,IAAI,CAACF,mBAAmB,CAAC;EAC/B,CAAC,MAAM;IACLP,GAAG,CAACU,MAAM,CAAC,GAAG,CAAC;IACfV,GAAG,CAACS,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC;AAEF,OAAO,MAAME,MAAM,GAAGpB,OAAO,CAACM,MAAM,CAAC,CAAC;AACtCc,MAAM,CAACb,GAAG,CAAC,GAAG,EAAE,gBAAgBC,GAAG,EAAEC,GAAG,EAAEC,IAAI,EAAE;EAC9C,MAAMC,IAAI,GAAG,MAAMV,YAAY,CAACO,GAAG,CAACa,IAAI,CAAC;EACzC,IAAIV,IAAI,EAAE;IACRF,GAAG,CAACS,IAAI,CAACI,MAAM,CAACC,IAAI,CAACZ,IAAI,CAAC,CAAC;EAC7B,CAAC,MAAM;IACLF,GAAG,CAACU,MAAM,CAAC,GAAG,CAAC;IACfV,GAAG,CAACS,IAAI,CAAC,gBAAgB,CAAC;EAC5B;AACF,CAAC,CAAC"}