Commit graph

4562 commits

Author SHA1 Message Date
Artem Pavlenko
720fbc74a1 move sparsehash out of mapnik dir 2020-01-29 14:16:47 +00:00
Artem Pavlenko
c7d29b826f Add "darkslategray" and "rebeccapurple" named colors (ref: https://drafts.csswg.org/css-color/#typedef-color) 2020-01-24 15:26:10 +00:00
Artem Pavlenko
d87cf7db48 re-use code [skip ci] 2020-01-22 13:40:33 +00:00
Artem Pavlenko
cab05f1f2c Only use reflection of the second control point on the previous command relative to the current point as first control point when both last and prev( NOTE: before last command in AGG logic!) are curve commands. This fixes long outstanding SVG rendering bug aka Octocat bug (ref #4115) 2020-01-21 15:49:00 +00:00
Artem Pavlenko
c30adf39c8 format 2020-01-21 15:48:32 +00:00
Artem Pavlenko
60a33a9b8f use numeric parser for arc flags 2020-01-16 10:38:10 +00:00
Artem Pavlenko
222835e73a Fix SVG path grammar - parse arc and sweep flags using special single digit parser, numeric int_ parser was over greedy and didn't handle compact notation produced by svgo (https://github.com/svg/svgo). 2020-01-14 14:38:10 +00:00
Artem Pavlenko
59e5f50e26 Use boost::spirit::x3::standard::char_ parser 2019-12-13 17:04:54 +00:00
Artem Pavlenko
44198d1ac2 more const-ness 2019-11-27 16:16:09 +00:00
Artem Pavlenko
94dd756669 Fix compiler warning 2019-11-20 09:43:31 +00:00
Artem Pavlenko
fc25053e8b Set initial STACK_SIZE to 16 (plenty), make it private static member var (ref #4096) 2019-11-18 09:59:26 +00:00
Artem Pavlenko
9e82006314 make ScriptRun class visible 2019-11-06 15:08:30 +00:00
Artem Pavlenko
33fac6d47d use std::vector to avoid limiting number of paired characters. 2019-11-04 13:59:23 +00:00
Artem Pavlenko
1edd3b7a93 use & mask for array bounds clipping (provided array size is 2^n) 2019-11-01 16:16:57 +00:00
Artem Pavlenko
c9da5cbd8e support for boost < 1.69 2019-10-21 18:21:51 +01:00
Artem Pavlenko
0b4f3dc497 fix support for BOOST 1_71 2019-10-21 16:42:58 +01:00
Mickey Rose
d1697efe6d install mapbox includes into subdir mapnik/deps/ 2019-09-20 20:15:53 +02:00
Mickey Rose
b541c3595f rename MAPNIK_MAKE_VERSION to MAPNIK_VERSION_ENCODE
Both forms can be seen in various other libraries. However, I think that
macro names with common prefix serving as substitute for namespace are
the better convention. MAPNIK_MAKE_VERSION hasn't appeared in any Mapnik
release yet, so this shouldn't break anything.

I'm not renaming other MAPNIK_*_VERSION defines that don't have the same
prefix simply because they've been there for ages, so renaming those now
might break stuff outside of Mapnik.
2019-08-30 16:30:28 +02:00
Artem Pavlenko
f68a147ff4 don't log identical error messages 2019-08-08 11:42:45 +01:00
Artem Pavlenko
7d1bfaeb4b
Merge pull request #3999 from mapnik/test-placement-type
Tests of text_placements_simple and text_placements_list
2019-07-02 11:56:39 +01:00
Nikita Kniazev
c191e196c0 Replace MAPNIK_INIT_PRIORITY workaround
Spirit rules are just placeholders. They are cheap to construct and by doing
this static initialization order fiasco problem is effectively avoided.

Also had to fix name clash between geojson and generic json parsers.
2019-07-02 01:04:31 +03:00
Artem Pavlenko
e90a4fca7d add missing image scaling property meta type + replace to integer conversion with comparison operator in enumeration_wrapper + change order in value_base_type (ref #4045) 2019-06-12 09:40:10 +01:00
Jiri Drbalek
a74543a145 New raster colorizer modes linear-rgba and linear-bgra 2019-05-17 21:54:24 +02:00
Michael Holloway
918e1a3a90 Ditch rint
Removes all usages of rint from the codebase, in favor of the standard
rounding and casting formula used throughout the codebase:

  static_cast<int>(std::floor(<val> + .5))

Fixes #2392
2019-03-22 14:23:32 -04:00
Jiri Drbalek
2dde0eb257 Adaptive smooth 2019-02-09 15:24:12 +00:00
Artem Pavlenko
16ae1c0472 CSS parser - use appropriate storage type for hue value (0..320) (#4020) 2019-01-14 16:21:53 +00:00
Artem Pavlenko
bcb1e67507 fix Boost.GIL includes for BOOST_VERSION >= 1.69 (ref #4000) 2018-12-13 15:46:57 +00:00
Gaetano Checinski
e583063ab5 fix: makes serveral header definitions static to support static library builds 2018-12-03 09:58:18 +00:00
Jiri Drbalek
2344fe3ac2 Vector patterns with Cairo 2018-11-21 12:20:31 +00:00
Artem Pavlenko
940f0dc39d bump version to 4.0.0 2018-11-21 11:03:00 +00:00
Artem Pavlenko
9406eb4c44 use c++-stype casts + compare the same types 2018-11-20 14:35:36 +00:00
Artem Pavlenko
c08b639902 fix compiler warnings e.g warning: class 'xxx' was previously declared as a struct [-Wmismatched-tags] 2018-11-20 14:13:25 +00:00
Artem Pavlenko
c6cd132c31 explicit cast to native enum type in switch statements to address error: case value is not a constant expression
(clang version 8.0.0 (trunk 347189))
2018-11-20 13:47:44 +00:00
talaj
7dcf5ee082
Merge pull request #3989 from mapycz/fix-pattern-alignment
True global pattern alignment, fixed local alignment
2018-11-02 14:31:31 +01:00
Jiri Drbalek
3b188b4c26 Remove method declaration that is not implemented 2018-10-20 20:59:20 +00:00
Tomek Dubrownik
c067eb7eec Compatibility patch for Boost GIL v1.68
A number of basic typedef were removed in the Boost GIL 1.68 release,
notably `bits32` and `bits32f`. Additionally the
`GIL_DEFINE_ALL_TYPEDEFS` macro signature changed.

This commit introduces compatibility type aliases and conditionally
calls the new macro if `BOOST_VERSION` is high enough.
2018-09-29 13:43:44 +08:00
Jiri Drbalek
776fa0d2f8 True global pattern alignment, fixed local alignment 2018-09-19 13:21:59 +00:00
Jiri Drbalek
692fc7f107 render_pattern() needs its own rasterizer 2018-09-19 08:33:24 +00:00
Jiri Drbalek
d823378260 Polygon pattern on line geometries for Cairo backend 2018-09-18 12:12:21 +00:00
Jiri Drbalek
18c1a99604 Polygon pattern on line geometries for AGG backend 2018-09-18 12:12:21 +00:00
lightmare
a6e0b6b857
Merge pull request #3958 from mapycz/fix-buffer-size-with-scale-factor
Fix buffer-size with scale-factor
2018-08-14 17:11:31 +02:00
Mickey Rose
8a1fdb3900 dodge operator precedence warning 2018-08-13 19:11:58 +02:00
Mickey Rose
2b8226316f topojson: fix parsing empty topology 2018-08-13 19:08:38 +02:00
Artem Pavlenko
c2251faa91 second time lucky 2018-08-07 14:58:21 +01:00
Artem Pavlenko
242c9eba3c Revert "opps, adding lost change (re: boost>=1.67)"
This reverts commit 22f913d892.
2018-08-07 14:26:34 +01:00
Artem Pavlenko
22f913d892 opps, adding lost change (re: boost>=1.67) 2018-08-07 14:09:30 +01:00
Jiri Drbalek
8a0dca38a3 Fix buffer-size with scale-factor 2018-08-01 08:06:37 +00:00
Artem Pavlenko
af842a8bf9 Merge branch 'pi-is-wrong' of https://github.com/lightmare/mapnik into lightmare-pi-is-wrong 2018-07-30 10:40:51 +01:00
Jiri Drbalek
4a93209423 render building symbolizer rewrite
- make projection and view transforms first
- removed dependency on segment_t
- no need for sorting faces
2018-07-27 10:23:33 +00:00
Artem Pavlenko
5eca7731e9 rely on implicit std::reference_wrapper<T> -> T conversions (thanks @lightmare) 2018-07-23 13:26:22 +01:00
Artem Pavlenko
93d0eea8af Merge branch 'master' into boost_1_67 2018-07-23 11:35:14 +01:00
Artem Pavlenko
65080e2a95 add support for BOOST_VERSION < 106700 2018-07-23 10:58:27 +01:00
Emil Gedda
93c566638f
remove old render_box function declaration from cairo_renderer.hpp 2018-07-20 14:02:51 +02:00
Artem Pavlenko
5fe0dda890 Merge branch 'master' into boost_1_67 2018-07-20 11:53:47 +01:00
Artem Pavlenko
bdf7876652 const-ness 2018-07-19 15:36:00 +01:00
Artem Pavlenko
67dbb96580 use uint8_t to parse hex2 values to avoid overflowing (boost >= 1.67) 2018-07-19 15:34:40 +01:00
Artem Pavlenko
a98d1b8071 use std::uint8_t as an attribute for hex2 parser 2018-07-18 10:40:41 +01:00
Artem Pavlenko
4c31bd16d2 Merge branch 'master' into boost_1_67 2018-07-18 09:27:56 +01:00
Mickey Rose
f84191204e eradicate M_PI 2018-07-16 14:18:49 +02:00
Mickey Rose
32e7202223 well_known_srs: move implementation to .cpp
- add lonlat2merc, merc2lonlat overloads for single point
- add stride argument to overloads for coordinate arrays
- make all functions exported
- change static string constants to exported
- change static numeric constants to constexpr
- remove superfluous numeric constants
2018-07-16 14:18:32 +02:00
Mickey Rose
e11f3a660a offset_converter: minor refactoring
DRY: extract method for `joint_angle` calculation.
2018-07-14 12:46:53 +02:00
Mickey Rose
a0a2c78950 util/math: clamp, degrees, radians
Use common functions for degrees <-> radians conversions, except when
dealing with agg, where it makes sense to use available deg2rad/rad2deg
functions instead of including another header.
2018-07-13 12:34:25 +02:00
Mickey Rose
7c4ccf0209 make util::normalize_angle reasonably fast on large values
Because it simply calculates the remainder after division by full turn,
it shouldn't take time proportional to the magnitude of its operand.
2018-07-11 23:14:23 +02:00
Mickey Rose
c2c00570b3 define MAPNIK_MAKE_VERSION, MAPNIK_VERSION_AT_LEAST 2018-07-11 10:38:32 +02:00
Artem Pavlenko
2c2669d655 fixes typo (#3930) 2018-07-05 09:37:49 +02:00
Artem Pavlenko
9d44a73ad0 fix - add single quoted string escaped chars support + allow backtracking when escaped characters are not part of /u, /U. /x encodings (ref 3433397c30 (commitcomment-29512684)) 2018-07-02 15:07:41 +02:00
Raul Marin
8e11ef3fd7 Improve padding calculation 2018-06-06 18:39:15 +02:00
Artem Pavlenko
95d5fabad0 Merge branch 'master' into boost_1_67 2018-05-21 15:58:24 +01:00
Raul Marin
0195047d7a Marker symbolizer: Fix bug with lines with 0 length (division by zero) 2018-05-11 12:24:01 +02:00
Jiri Drbalek
89b5cb4f22 Remove useless ellipsoid.hpp 2018-05-08 15:39:13 +00:00
Artem Pavlenko
b7bdd08837 define BOOST_SPIRIT_INSTANTIATE_UNUSED once and re-use [skip-ci] 2018-04-18 14:18:40 +02:00
Artem Pavlenko
664d3508de remove reference_wrapper usage when injecting attributes into grammar ( >= boost_1_67) [skip-ci] 2018-04-18 12:53:17 +02:00
Artem Pavlenko
9e79e1edf1 update const-ness in x3::context definitions to support boost 1_67 [skip-ci] 2018-04-17 15:41:17 +02:00
Artem Pavlenko
def0fd1f31 prepare for breaking change in spirit::x3 (from boost 1.67.0) - remove with_context usage
(ref https://github.com/boostorg/spirit/pull/239)
2018-04-16 15:25:39 +02:00
Artem Pavlenko
b392b8214e add explicit instantiation declarations to DEFINE_ENUM macro to fix -Wundefined-var-template warnings. 2018-04-16 11:12:05 +02:00
Artem Pavlenko
fe5c4bb978 supress unused variable warning in boost state_machine 2018-04-16 11:08:08 +02:00
Raul Marin
1ddfe6c315 Qualify ICU types explicitly
ICU 61 has dropped the global `using namespace icu;`
http://site.icu-project.org/download/61#TOC-Migration-Issues
2018-04-03 13:18:43 +02:00
Blake Thompson
25e4bb3f6c A fix for two distinct issues associated with gdal featuresets, the first is overviews were not properly being utilized based on the resolution of the final image requested. The second is that allocation of far too much memory could be possible in GDAL to attempt to do resampling internally in mapnik. This now has a hard cap so that we allocate less memory in these situations but are still able to resample internally in mapnik. 2018-03-30 15:10:29 -05:00
Artem Pavlenko
a8d7fc1cfb Revert "avoid symbols duplication"
This reverts commit c737f4d56f.
2018-03-15 15:58:23 +01:00
Artem Pavlenko
c737f4d56f avoid symbols duplication 2018-03-09 09:57:49 +01:00
Artem Pavlenko
eb1a32eb79 fix dereferencing out-of-range iterator (caught by -fsanitize=undefined,integer) (#3867) 2018-03-01 11:54:41 +01:00
Artem Pavlenko
5b8b75e680 fix compiler warning
```include/mapnik/text/symbolizer_helpers.hpp:164:45: warning: template template parameter using 'typename' is a C++17 extension
      [-Wc++17-extensions]
    template <template <typename, typename> typename GridAdapter>
                                            ^~~~~~~~
                                            class
```
2018-03-01 10:56:55 +01:00
Artem Pavlenko
3ad43a33ae check language variable to avoid SIGILL in '-fsanitize-trap=integer,undefined' builds. 2018-02-28 15:20:13 +01:00
Artem Pavlenko
37b7f05180 Merge branch 'offset-converter-topology' of https://github.com/mapycz/mapnik into mapycz-offset-converter-topology 2018-02-26 16:06:19 +01:00
Artem Pavlenko
8876d13356 improve errors reporting in mapnik-index 2018-02-21 16:02:12 +01:00
Artem Pavlenko
bac24cd844 Fix apply_color_blind_filter to use correct color-space and avoid NAN which results in SIGILL when compiled with DEBUG_UNDEFINED=yes (#3861) 2018-02-20 11:19:53 +01:00
Jiri Drbalek
b6c451d7e3 grid_vertex_converter: Fix handling of empty polygon 2018-02-13 15:00:25 +00:00
Jiri Drbalek
f10e051e17 Add grid placement for text and shield symbolizer 2018-02-06 15:19:05 +00:00
Jiri Drbalek
fb5ca1bb8e offset_converter: Don't filter out closing and moving segments 2018-01-26 11:55:04 +00:00
Jiri Drbalek
99038229f7 Polylabel: cover the case of empty polygon or exterior ring 2018-01-17 13:39:15 +00:00
Jiri Drbalek
a97eace434 Interior: cover the case of empty polygon or exterior ring 2018-01-17 12:58:42 +00:00
Jiri Drbalek
ec53f3d879 Fix crash in case of empty ring 2018-01-17 09:53:45 +00:00
Artem Pavlenko
ff31c6d6eb SVG parser - add ignore_ member variable to allow skipping of unsupported elements, currently clipPath (#3818) 2018-01-09 15:19:52 +00:00
Artem Pavlenko
c24568f033 Merge branch 'polylabel-as-interior' of https://github.com/mapycz/mapnik into mapycz-polylabel-as-interior 2018-01-08 10:21:09 +00:00
Artem Pavlenko
e2d741bdb7
Merge pull request #3809 from IMQS/pr-text-placements-export
Export all text_placements_ classes from mapnik.dll
2018-01-05 13:02:58 +00:00
Artem Pavlenko
c29f944726 Merge branch 'fix-group-symbolizer-crash' of https://github.com/lightmare/mapnik into lightmare-fix-group-symbolizer-crash 2018-01-05 12:16:41 +00:00
Artem Pavlenko
92afd0bebf Use macro to apply __attribute__((init_priority(val))) where it's supported (gcc+clang) (#3821) 2018-01-04 14:29:00 +00:00
Artem Pavlenko
50169e95b2 Enforce global variables initialisation order via __attribute__((init_priority(<priority>))) (#3821) 2018-01-04 12:22:04 +00:00
Artem Pavlenko
a67f5abb67 consistent syntax 2018-01-03 17:38:16 +00:00
Jiri Drbalek
f52a0fa4f6 new interior algorithm 2017-12-13 21:48:13 +00:00
Jiri Drbalek
ea7ba2c099 add polylabel placement method 2017-12-13 21:48:13 +00:00
Ben Harper
5507ab817a Export all text_placements_ classes from mapnik.dll
Previously, only text_placements_dummy had a MAPNIK_DECL annotation.
This commit adds that annotation to text_placements_simple and
text_placements_list, so that they are also exposed from the Windows DLL
build.
2017-11-28 11:30:35 +02:00
Artem Pavlenko
3cb74f0871 attempting to fix #3793 2017-11-14 10:10:26 +01:00
Artem Pavlenko
97f520c7cf cleanup 2017-11-14 10:10:26 +01:00
Jiri Drbalek
fe268b0e71 char_array_buffer should implement also seekpos() 2017-11-13 22:42:37 +00:00
Artem Pavlenko
5db45d9fa3 use semantic actions to fix #3744 ( >= boost_1_65) 2017-11-13 13:15:47 +01:00
Artem Pavlenko
743c14d3ff add UDL via operator"" _case 2017-11-06 10:31:53 +01:00
Artem Pavlenko
2271e4a5a4 use unsigned int for indexed access 2017-10-31 10:52:09 +01:00
Ben Harper
05849f0da5 Add new angled-point marker placement mode for lines
This adds a new mode called 'angled-point' to the marker-placement modes.
The full list of modes is then:
  point, angled-point, interior, line, vertex-first, vertex-last

Angled point is identical to point, except that when placing a marker on
a line, the marker's angle is taken from the angle of the line segment.

There is another possible use of the "angled-point" concept for polygons,
and that is for placing labels on stand (aka erf) polygons. By computing
a dominant angle for a mostly rectangular polygon, this can produce quite
good results. I'm not sure whether I should implement that now, or if I
could do that later.
2017-10-26 15:09:17 +02:00
talaj
f3cf1ad388 Fix centroid and interior algorithms (#3771)
* fix interior algorithm - closing segment handling

* fix centroid algorithm - closing segment handling

* update visual tests
2017-09-25 15:45:02 +02:00
Artem Pavlenko
3d4963f40c move implementatio into *.cpp + return 'closest_point_result' struct. 2017-09-22 13:21:50 +02:00
Artem Pavlenko
143d1e57cf add 'closest_point' geometry algorithm 2017-09-21 15:40:30 +02:00
Artem Pavlenko
5d5ef602be rename 'geometry_type' to 'topojson_geometry_type' to avoid names clashing
(this was causing miscompilation on linux (ubuntu 17.04/clang))
2017-09-18 11:35:39 +01:00
talaj
d14203561d color font support improvements (#3758)
👍
2017-09-13 10:14:46 +01:00
Artem Pavlenko
acec6ae824 Merge branch 'master' into bbox-index 2017-09-12 14:57:12 +01:00
Artem Pavlenko
8bc080c7b8 Merge branch 'nested-layers-fixes' of https://github.com/mapycz/mapnik into mapycz-nested-layers-fixes 2017-09-12 14:09:47 +01:00
Artem Pavlenko
04f9db4b18 minor format 2017-09-11 17:30:37 +01:00
Jiri Drbalek
6777721391 enclosing calls forgotten in https://github.com/mapnik/mapnik/pull/3474 2017-09-11 15:25:19 +00:00
artemp
441687ecff boost_adapters - apply temp fix via @Algunenano for boost 1.64 (ref #3733) 2017-08-21 14:14:00 +01:00
artemp
9b0fd7a8d7 boost_adapters - apply temp fix via @Algunenano for boost 1.64. 2017-08-21 14:12:12 +01:00
artemp
40c51c469c shape.input/shapeindex - update to use bounding box per item *.index format. 2017-08-21 11:02:34 +01:00
artemp
6c19efa990 store box2d<float> directly in index_record to avoid conversions. 2017-08-18 16:59:58 +01:00
artemp
2aa0ce9d74 New *.index format (bounding box per item) implementation 2017-08-18 11:16:44 +01:00
artemp
2426a44671 initial updated spatial-index implementation 2017-08-16 13:59:44 +01:00
artemp
add410e619 use arch independent types for serialised values 2017-08-15 11:14:11 +01:00
artemp
c4a1df6e91 simplify impl + const correctness + minor cleanup 2017-08-15 11:13:11 +01:00
artemp
6f73181e9b Enforce consistent error handling policy - always throw on fatal errors (both strict and non-strict). In strict mode throw on first parsing error. Remove return values from parse,parse_from_string and traverse_tree methods. Update unit tests. 2017-08-02 10:32:13 +01:00
artemp
093fcee6d1 only include <unicode/unistr.h> if ICU >= 59 (attempting to fix current coverage build on travis). 2017-07-21 10:37:22 +02:00
artemp
9e58c89043 Add support for U_ICU_VERSION_MAJOR_NUM >= 59 (#3729) 2017-07-19 16:07:39 +02:00
artemp
3ae71eea0f JSON - wrap lamda functions into anonymous namespace to fix linking on Windows with VS2017. 2017-07-06 16:09:38 +02:00
artemp
e653f4cc4c make constructor explicit to avoid C2664 error with VS2017. 2017-07-06 16:01:06 +02:00
artemp
e08616aed3 Didn't play well with VS2017, reverting "re-use lamdas definitions and aviod duplicate symbols when building with vs2017"
This reverts commit 4c9322bc0d.
2017-07-06 11:17:14 +02:00
artemp
631c0a59c4 Revert "trying to inline lambdas (VS2017) (!)" this is not allowed in c++14 requires c++17
This reverts commit 0ad1c58009.
2017-07-06 11:14:24 +02:00
artemp
0ad1c58009 trying to inline lambdas (VS2017) (!) 2017-07-06 11:11:01 +02:00
artemp
4c9322bc0d re-use lamdas definitions and aviod duplicate symbols when building with vs2017 2017-07-06 10:59:42 +02:00
artemp
148e77884c don't include xml_parser_read_rapidxml.hpp - forward declaring xml_node is sufficient. 2017-06-29 09:41:16 +02:00
artemp
3fbce913d0 store viewbox transform 2017-06-29 09:41:16 +02:00
artemp
87abf93da3 move name_to_int into separate header for re-use. 2017-06-29 09:41:16 +02:00
artemp
53a69463ea SVG parser - add support for <use> element (ref #763). 2017-06-29 09:41:16 +02:00
artemp
a4e8603af1 svg transform - correct rotate(<a> [<x> <y>]) rule (ref #763)
(The transform attribute defines a list of transform definitions that are applied to an element and the element's children. The items in the transform list are separated by whitespace and/or commas, and are applied from right to left.)
2017-06-29 09:41:16 +02:00
artemp
b6aa45144c svg_parser - refactor => remove mutable temporary_gradient_ member variable + process stop elements from within linearGradient and radialGradient. 2017-06-29 09:41:16 +02:00
artemp
6da83bc986 svg_parser - store unresolved gradient nodes for deferred initalisation. 2017-06-29 09:41:16 +02:00
artemp
ef6c2e71b8 svg-parser : handle parsing failures via error_handler ( throw in strict mode and log+continue when strict==false) 2017-06-29 09:41:16 +02:00
artemp
3f591af871 initial support for strict SVG parsing (WIP) 2017-06-29 09:41:16 +02:00
artemp
dfa8f100b2 freetype_engine - port singleton changes from v3.0.x 2017-06-01 12:47:18 +02:00
Jiri Drbalek
7590cdabb0 fix typo in file name 2017-05-24 13:59:47 +00:00
Jiri Drbalek
0781f230be fix polygon handling 2017-05-24 13:59:44 +00:00
Jiri Drbalek
4084e670ec fix closing polygons on reprojection 2017-05-24 12:10:11 +00:00
artemp
1725b1ebba TIFF.input - port changes from https://github.com/mapnik/mapnik/pull/3668 (ref #3669) 2017-05-10 14:33:29 +02:00
artemp
97a796ba0e fix polygon_coord rule to generate required enclosing brackets. 2017-05-05 16:29:33 +02:00