geonetwork-ui 2.7.0-dev.b9840dab3 → 2.7.0-dev.d51ff2ddf

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 (25) hide show
  1. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +47 -3
  2. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  3. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  4. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  5. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  6. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  7. package/fesm2022/geonetwork-ui.mjs +2383 -2282
  8. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  9. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  10. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  11. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  12. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  13. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  14. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  15. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  16. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  17. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  18. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  19. package/package.json +1 -1
  20. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +50 -3
  21. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  22. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  23. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  24. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  25. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @returns The geometry if available, otherwise null.
3
+ */
1
4
  export function getGeometryFromGeoJSON(data) {
2
5
  if (data.type === 'FeatureCollection') {
3
6
  return data?.features?.[0]?.geometry || null;
@@ -18,4 +21,58 @@ export function getGeometryFromGeoJSON(data) {
18
21
  }
19
22
  return null;
20
23
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjL2xpYi91dGlscy9nZW9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsSUFBNEM7SUFFNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQTtJQUM5QyxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUE7SUFDL0IsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUN0QyxDQUFDO0lBQ0QsSUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDdkIsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUMxQixJQUFJLENBQUMsSUFBSSxLQUFLLGNBQWM7UUFDNUIsSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQzFCLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQy9CLENBQUM7UUFDRCxPQUFPLElBQUksSUFBSSxJQUFJLENBQUE7SUFDckIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZlYXR1cmUsIEZlYXR1cmVDb2xsZWN0aW9uLCBHZW9tZXRyeSB9IGZyb20gJ2dlb2pzb24nXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW9tZXRyeUZyb21HZW9KU09OKFxuICBkYXRhOiBGZWF0dXJlQ29sbGVjdGlvbiB8IEZlYXR1cmUgfCBHZW9tZXRyeVxuKTogR2VvbWV0cnkge1xuICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRhdGE/LmZlYXR1cmVzPy5bMF0/Lmdlb21ldHJ5IHx8IG51bGxcbiAgfVxuICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICByZXR1cm4gZGF0YT8uZ2VvbWV0cnkgfHwgbnVsbFxuICB9XG4gIGlmIChkYXRhLnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRhdGE/Lmdlb21ldHJpZXM/LlswXSB8fCBudWxsXG4gIH1cbiAgaWYgKFxuICAgIGRhdGEudHlwZSA9PT0gJ1BvbHlnb24nIHx8XG4gICAgZGF0YS50eXBlID09PSAnUG9pbnQnIHx8XG4gICAgZGF0YS50eXBlID09PSAnTGluZVN0cmluZycgfHxcbiAgICBkYXRhLnR5cGUgPT09ICdNdWx0aVBvbHlnb24nIHx8XG4gICAgZGF0YS50eXBlID09PSAnTXVsdGlQb2ludCcgfHxcbiAgICBkYXRhLnR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBkYXRhIHx8IG51bGxcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIl19
24
+ export function getGeometryBoundingBox(geometry) {
25
+ // use the bounding box if specified in the GeoJSON object
26
+ if (geometry.bbox) {
27
+ return geometry.bbox.length > 4
28
+ ? [geometry.bbox[0], geometry.bbox[1], geometry.bbox[3], geometry.bbox[4]]
29
+ : geometry.bbox;
30
+ }
31
+ const coordinatesReducer = (prev, coords) => [
32
+ Math.min(prev[0], coords[0]),
33
+ Math.min(prev[1], coords[1]),
34
+ Math.max(prev[2], coords[0]),
35
+ Math.max(prev[3], coords[1]),
36
+ ];
37
+ const coordinatesArrayReducer = (prev, coordsArray) => {
38
+ const bbox = coordsArray.reduce(coordinatesReducer, emptyExtent);
39
+ return [
40
+ Math.min(prev[0], bbox[0]),
41
+ Math.min(prev[1], bbox[1]),
42
+ Math.max(prev[2], bbox[2]),
43
+ Math.max(prev[3], bbox[3]),
44
+ ];
45
+ };
46
+ const emptyExtent = [Infinity, Infinity, -Infinity, -Infinity];
47
+ switch (geometry.type) {
48
+ case 'MultiPolygon':
49
+ return geometry.coordinates.reduce((prev, polygonCoords) => {
50
+ const bbox = polygonCoords.reduce(coordinatesArrayReducer, emptyExtent);
51
+ return [
52
+ Math.min(prev[0], bbox[0]),
53
+ Math.min(prev[1], bbox[1]),
54
+ Math.max(prev[2], bbox[2]),
55
+ Math.max(prev[3], bbox[3]),
56
+ ];
57
+ }, emptyExtent);
58
+ case 'GeometryCollection':
59
+ return geometry.geometries.reduce((prev, geom) => {
60
+ const bbox = getGeometryBoundingBox(geom);
61
+ return [
62
+ Math.min(prev[0], bbox[0]),
63
+ Math.min(prev[1], bbox[1]),
64
+ Math.max(prev[2], bbox[2]),
65
+ Math.max(prev[3], bbox[3]),
66
+ ];
67
+ }, emptyExtent);
68
+ case 'Polygon':
69
+ case 'MultiLineString':
70
+ return geometry.coordinates.reduce(coordinatesArrayReducer, emptyExtent);
71
+ case 'LineString':
72
+ case 'MultiPoint':
73
+ return geometry.coordinates.reduce(coordinatesReducer, emptyExtent);
74
+ case 'Point':
75
+ return coordinatesReducer(emptyExtent, geometry.coordinates);
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvanNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjL2xpYi91dGlscy9nZW9qc29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxJQUE0QztJQUU1QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLElBQUksSUFBSSxDQUFBO0lBQzlDLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDNUIsT0FBTyxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQTtJQUMvQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFLENBQUM7UUFDdkMsT0FBTyxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFBO0lBQ3RDLENBQUM7SUFDRCxJQUNFLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUztRQUN2QixJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU87UUFDckIsSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQzFCLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYztRQUM1QixJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDMUIsSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFDL0IsQ0FBQztRQUNELE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQTtJQUNyQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBS0QsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFFBQWtCO0lBQ3ZELDBEQUEwRDtJQUMxRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztR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SUFBSSxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN6QyxPQUFPO29CQUNMLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDWixDQUFBO1lBQ2xCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUNqQixLQUFLLFNBQVMsQ0FBQztRQUNmLEtBQUssaUJBQWlCO1lBQ3BCLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDMUUsS0FBSyxZQUFZLENBQUM7UUFDbEIsS0FBSyxZQUFZO1lBQ2YsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDaEMsa0JBQWtCLEVBQ2xCLFdBQVcsQ0FDWixDQUFBO1FBQ0gsS0FBSyxPQUFPO1lBQ1YsT0FBTyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGZWF0dXJlLCBGZWF0dXJlQ29sbGVjdGlvbiwgR2VvbWV0cnksIFBvc2l0aW9uIH0gZnJvbSAnZ2VvanNvbidcblxuLyoqXG4gKiBAcmV0dXJucyBUaGUgZ2VvbWV0cnkgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgbnVsbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlb21ldHJ5RnJvbUdlb0pTT04oXG4gIGRhdGE6IEZlYXR1cmVDb2xsZWN0aW9uIHwgRmVhdHVyZSB8IEdlb21ldHJ5XG4pOiBHZW9tZXRyeSB8IG51bGwge1xuICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRhdGE/LmZlYXR1cmVzPy5bMF0/Lmdlb21ldHJ5IHx8IG51bGxcbiAgfVxuICBpZiAoZGF0YS50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICByZXR1cm4gZGF0YT8uZ2VvbWV0cnkgfHwgbnVsbFxuICB9XG4gIGlmIChkYXRhLnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRhdGE/Lmdlb21ldHJpZXM/LlswXSB8fCBudWxsXG4gIH1cbiAgaWYgKFxuICAgIGRhdGEudHlwZSA9PT0gJ1BvbHlnb24nIHx8XG4gICAgZGF0YS50eXBlID09PSAnUG9pbnQnIHx8XG4gICAgZGF0YS50eXBlID09PSAnTGluZVN0cmluZycgfHxcbiAgICBkYXRhLnR5cGUgPT09ICdNdWx0aVBvbHlnb24nIHx8XG4gICAgZGF0YS50eXBlID09PSAnTXVsdGlQb2ludCcgfHxcbiAgICBkYXRhLnR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBkYXRhIHx8IG51bGxcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBGSVhNRTogdGhpcyB0eXBlIHNob3VsZCBiZSBtb3JlIGdlbmVyaWMgYWNyb3NzIHRoZSBwcm9qZWN0XG5leHBvcnQgdHlwZSBCb3VuZGluZ0JveCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW9tZXRyeUJvdW5kaW5nQm94KGdlb21ldHJ5OiBHZW9tZXRyeSk6IEJvdW5kaW5nQm94IHtcbiAgLy8gdXNlIHRoZSBib3VuZGluZyBib3ggaWYgc3BlY2lmaWVkIGluIHRoZSBHZW9KU09OIG9iamVjdFxuICBpZiAoZ2VvbWV0cnkuYmJveCkge1xuICAgIHJldHVybiBnZW9tZXRyeS5iYm94Lmxlbmd0aCA+IDRcbiAgICAgID8gW2dlb21ldHJ5LmJib3hbMF0sIGdlb21ldHJ5LmJib3hbMV0sIGdlb21ldHJ5LmJib3hbM10sIGdlb21ldHJ5LmJib3hbNF1dXG4gICAgICA6IChnZW9tZXRyeS5iYm94IGFzIEJvdW5kaW5nQm94KVxuICB9XG5cbiAgY29uc3QgY29vcmRpbmF0ZXNSZWR1Y2VyID0gKHByZXY6IEJvdW5kaW5nQm94LCBjb29yZHM6IFBvc2l0aW9uKSA9PlxuICAgIFtcbiAgICAgIE1hdGgubWluKHByZXZbMF0sIGNvb3Jkc1swXSksXG4gICAgICBNYXRoLm1pbihwcmV2WzFdLCBjb29yZHNbMV0pLFxuICAgICAgTWF0aC5tYXgocHJldlsyXSwgY29vcmRzWzBdKSxcbiAgICAgIE1hdGgubWF4KHByZXZbM10sIGNvb3Jkc1sxXSksXG4gICAgXSBhcyBCb3VuZGluZ0JveFxuICBjb25zdCBjb29yZGluYXRlc0FycmF5UmVkdWNlciA9IChcbiAgICBwcmV2OiBCb3VuZGluZ0JveCxcbiAgICBjb29yZHNBcnJheTogUG9zaXRpb25bXVxuICApID0+IHtcbiAgICBjb25zdCBiYm94ID0gY29vcmRzQXJyYXkucmVkdWNlKGNvb3JkaW5hdGVzUmVkdWNlciwgZW1wdHlFeHRlbnQpXG4gICAgcmV0dXJuIFtcbiAgICAgIE1hdGgubWluKHByZXZbMF0sIGJib3hbMF0pLFxuICAgICAgTWF0aC5taW4ocHJldlsxXSwgYmJveFsxXSksXG4gICAgICBNYXRoLm1heChwcmV2WzJdLCBiYm94WzJdKSxcbiAgICAgIE1hdGgubWF4KHByZXZbM10sIGJib3hbM10pLFxuICAgIF0gYXMgQm91bmRpbmdCb3hcbiAgfVxuICBjb25zdCBlbXB0eUV4dGVudCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XSBhcyBCb3VuZGluZ0JveFxuXG4gIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICByZXR1cm4gZ2VvbWV0cnkuY29vcmRpbmF0ZXMucmVkdWNlKChwcmV2LCBwb2x5Z29uQ29vcmRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGJib3ggPSBwb2x5Z29uQ29vcmRzLnJlZHVjZShjb29yZGluYXRlc0FycmF5UmVkdWNlciwgZW1wdHlFeHRlbnQpXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgTWF0aC5taW4ocHJldlswXSwgYmJveFswXSksXG4gICAgICAgICAgTWF0aC5taW4ocHJldlsxXSwgYmJveFsxXSksXG4gICAgICAgICAgTWF0aC5tYXgocHJldlsyXSwgYmJveFsyXSksXG4gICAgICAgICAgTWF0aC5tYXgocHJldlszXSwgYmJveFszXSksXG4gICAgICAgIF0gYXMgQm91bmRpbmdCb3hcbiAgICAgIH0sIGVtcHR5RXh0ZW50KVxuICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XG4gICAgICByZXR1cm4gZ2VvbWV0cnkuZ2VvbWV0cmllcy5yZWR1Y2UoKHByZXYsIGdlb20pID0+IHtcbiAgICAgICAgY29uc3QgYmJveCA9IGdldEdlb21ldHJ5Qm91bmRpbmdCb3goZ2VvbSlcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBNYXRoLm1pbihwcmV2WzBdLCBiYm94WzBdKSxcbiAgICAgICAgICBNYXRoLm1pbihwcmV2WzFdLCBiYm94WzFdKSxcbiAgICAgICAgICBNYXRoLm1heChwcmV2WzJdLCBiYm94WzJdKSxcbiAgICAgICAgICBNYXRoLm1heChwcmV2WzNdLCBiYm94WzNdKSxcbiAgICAgICAgXSBhcyBCb3VuZGluZ0JveFxuICAgICAgfSwgZW1wdHlFeHRlbnQpXG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgIHJldHVybiBnZW9tZXRyeS5jb29yZGluYXRlcy5yZWR1Y2UoY29vcmRpbmF0ZXNBcnJheVJlZHVjZXIsIGVtcHR5RXh0ZW50KVxuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgcmV0dXJuIGdlb21ldHJ5LmNvb3JkaW5hdGVzLnJlZHVjZTxCb3VuZGluZ0JveD4oXG4gICAgICAgIGNvb3JkaW5hdGVzUmVkdWNlcixcbiAgICAgICAgZW1wdHlFeHRlbnRcbiAgICAgIClcbiAgICBjYXNlICdQb2ludCc6XG4gICAgICByZXR1cm4gY29vcmRpbmF0ZXNSZWR1Y2VyKGVtcHR5RXh0ZW50LCBnZW9tZXRyeS5jb29yZGluYXRlcylcbiAgfVxufVxuIl19