Contributed by Emilie Rigaud
Contributed by Benoît Bodhuin
Contributed by lionel catelan
Contributed by Abyme