summarylogtreecommitdiffstats
path: root/Changelog-Suite.txt
blob: 233869fea66347853d2d83ae4239af9012552066 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
Changelog for AirVPN Suite

Version 2.0.0 beta 1 - 13 May 2024

- [ProMIND] updated install.sh and uninstall.sh scripts for suspend and resume services

airvpnmanifest

- [ProMIND] searchServer(): pattern is now searched in continent code and name as well


airvpnserver

- [ProMIND] method getContinent() renamed to getContinentCode()
- [ProMIND] method setContinent() renamed to setContinentCode()
- [ProMIND] added method getContinentName()
- [ProMIND] implemented boolean comparison methods for std::sort


airvpnserverprovider

- [ProMIND] getFilteredServerList(): added handling for continents in country white and black lists
- [ProMIND] method compareServerScore() moved to AirVPNServer class


airvpntools

- [ProMIND] added method directoryExists()
- [ProMIND] added method startsWith()
- [ProMIND] method getLoad() renamed to getTrafficLoad()
- [ProMIND] split() fixed bug in case string does not contain delimiter
- [ProMIND] SERVER_READ_TIMEOUT is now set to 15 seconds
- [ProMIND] requestAirVPNDocument(): vector bootServerList is now shuffled before starting the document request


countrycontinent

- [ProMIND] Added method realCountryName()
- [ProMIND] Added constants EARTH, AFRICA, AMERICA, NORTH_AMERICA, SOUTH_AMERICA, ASIA, EUROPE and OCEANIA


dnsmanager

- [ProMIND] All binary paths are now searched at construction time
- [ProMIND] Added DNSManagerException class


execproc.c

- [ProMIND] Added function exec_error_description()
- [ProMIND] Added function exec_cmd_error_description()
- [ProMIND] Added function exec_cmd_args_error_description()


loadmod.c

- [ProMIND] Added function is_module_loaded()


netfilter

- [ProMIND] All binary paths are now searched at construction time
- [ProMIND] Added method isNftUsingIptables()
- [ProMIND] Added iptables-nft support to iptablesSave() and iptablesRestore() methods
- [ProMIND] Added method isPfEnabled()
- [ProMIND] Added methods allowPrivateNetwork() and isPrivateNetworkAllowed()
- [ProMIND] Added local and service IPv6 network classes to the default initialization of netfilter
- [ProMIND] setup(): added optional argument for private network management


network

- [ProMIND] struct Gateway: added isDefault field
- [ProMIND] method scanDefaultGateway() renamed to scanGateway()
- [ProMIND] added method getGatewayFromRouteTable()
- [ProMIND] added method getGateway()
- [ProMIND] removed member defaultGateway
- [ProMIND] added members IPv4Gateway and IPv6Gateway


openvpnclient

- [ProMIND] implemented OpenVpnClient::acc_event() in order to comply to new master specifications. Event is ignored.
- [ProMIND] Added private network option for constructors using a private NetFilter


optionparser

- [ProMIND] added mode to OptionConfig and Option structures
- [ProMIND] added function getOptionsForMode()
- [ProMIND] added function getInvalidOptionsForMode()


trafficsplit

- [ProMIND] added methods removeNamespaceDirectory(), namespaceConfigurationExists(), isDirty() and recover()
- [ProMIND] removed methods removeDefaultNamespaceDirectory(), defaultNamespaceConfigurationExists()
- [ProMIND] added methods getIPv4Gateway(), setIPv4Gateway(), getIPv6Gateway() and setIPv6Gateway()


wireguardclient

- [ProMIND] added method setEndPointPort()
- [ProMIND] added method removeDevice()
- [ProMIND] added methods createInterfaceDevice(), setDeviceConfiguration(), getDeviceList(), changeWgFilesOwnership() ands restoreWgFilesOwnership() (macOS support)
- [ProMIND] Added private network option for constructors using a private NetFilter
- [ProMIND] Implemented event management
- [ProMIND] Improved handshake timeout management


vpnclient

- [ProMIND] Added private network option for constructors using a private NetFilter


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 2.0.0 alpha 2 - 24 November 2023

execproc.c

- [ProMIND] added macros EXEC_MODE_VECTOR, EXEC_MODE_VECTOR_PATH, EXEC_MODE_VECTOR_PATH_ENV and EXEC_MODE_DEFAULT
- [ProMIND] added functions exec_set_mode(), exec_set_environ() and exec_reset()
- [ProMIND] do_execute(): added mode and environment handling
- [ProMIND] execute_process(), execute_process_args(): call exec_reset() before returning
- [ProMIND] get_exec_path(): renamed to exec_get_path() and added an extra argument to specify a colon separated search path

airvpntools

- [ProMIND] method architecture() now uses GCC macros only
- [ProMIND] added method platform()


dnsmanager

- [ProMIND] addAddressToResolvDotConf() now requires IPAddress type


logger

- [ProMIND] added overloaded log metoths for std::ostringstream


network

- [ProMIND] added methods setupInterface(), enableInterface() and setInterfaceMtu()
- [ProMIND] added method setIPAddress() to Interface class
- [ProMIND] scanLocalIpAddresses() renamed to scanLocalInterfaces()
- [ProMIND] Interface: added method getAddressCount()


openvpnclient

- [ProMIND] added inheritance from vpnclient class
- [ProMIND] get_connection_stats(): added timestamp item
- [ProMIND] function openVPNInfo() renamed to getInfo()
- [ProMIND] function openVPNCopyright() renamed to getCopyright()


wireguardclient

- [ProMIND] added inheritance from vpnclient class
- [ProMIND] implemented connection management methods


vpnclient

- [ProMIND] new class


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 2.0.0 alpha 1 - 15 September 2023

- [ProMIND] updated to OpenVPN3 AirVPN 3.9
- [ProMIND] updated install.sh and uninstall.sh scripts
- [ProMIND] updated bluetit.rc template
- [ProMIND] updated nsswitch.conf template
- [ProMIND] added cuckoo tool to the project


airvpntools

- [ProMIND] formatTransferRate(): replaced sprintf with snprintf
- [ProMIND] formatDataVolume(): replaced sprintf with snprintf
- [ProMIND] formatTime(): replaced sprintf with snprintf


execproc.c

- [ProMIND] execute_process(): added stderr redirection to char *error argument
- [ProMIND] do_execute(): renamed parent_pipe and child_pipe to stdin_pipe and stdout_pipe respectively
- [ProMIND] do_execute(): added stderr_pipe array
- [ProMIND] do_execute(): added stderr redirection to char *error argument


localnetwork

- [ProMIND] Class renamed to Network


netfilter

- [ProMIND] translateItemToNFTables(): added dormant flag to table creation
- [ProMIND] added method getSystemFirewallBackend()
- [ProMIND] added TARGET_IPTABLES_LEGACY and TARGET_UNKNOWN members
- [ProMIND] added method itemToCommandRule()


network

- [ProMIND] added method interfaceExists()
- [ProMIND] added overloaded method incrementIpAddress()
- [ProMIND] added new public class Interface
- [ProMIND] removed old interface and IP address collection in favor of class Interface
- [ProMIND] removed methods scanIpAddresses() and scanInterfaces()
- [ProMIND] default gateway is now evaluated at object construction and stored in member defaultGateway
- [ProMIND] struct Gateway member address is now defined as IPAddress
- [ProMIND] added excludeIpAddresses() and worker methods to compute a route by excluding an IP address range
- [ProMIND] added getIpAddressNetmask(), getIpAddressHostmask() and getIpAddressNetwork() methods
- [ProMIND] added internetChecksum() method
- [ProMIND] added getNextUnusedIpAddress() method and worker methods
- [ProMIND] added LocalNetworkException class


openvpnclient

- [ProMIND] profileNeedsResolution(): added check for ClientAPI::EvalConfig.reouteList
- [ProMIND] resolveProfile(): added resolution for ClientAPI::EvalConfig.reouteList
- [ProMIND] onResolveEvent(): removed log display of local interfaces/addresses
- [ProMIND] saveSystemDNS(): replaced deprecated inet_ntoa() with inet_ntop()
- [ProMIND] added new method getSystemDnsTable()


trafficsplit

- [ProMIND] new class


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.3.0 - 1 June 2023

- [ProMIND] updated to OpenVPN3 AirVPN 3.8.4
- [ProMIND] replaced include guards with #pragma once in all include files
- [ProMIND] added file continent_names.csv
- [ProMIND] installation script: improved group management for specific system cases


airvpnmanifest

- [ProMIND] updated to AirVPN document version 288
- [ProMIND] loadManifest() can now force the loading of the local instance (if any)
- [ProMIND] loadManifest() statistics are now counted for continent and earth as well
- [ProMIND] loadManifest() added support for new AirVPNServer class members compliance
- [ProMIND] processXmlManifest() countryStats now includes closed servers as well
- [ProMIND] getServerListByCountry() now accepts continents as well


airvpnserver

- [ProMIND] renamed specific OpenVPN members
- [ProMIND] added members for WireGuard support
- [ProMIND] added members for Perfect Forward Secrecy (PFS) support
- [ProMIND] members supportIPv4 renamed to IPv4Available
- [ProMIND] members supportIPv6 renamed to IPv6Available


airvpnserverprovider

- [ProMIND] members supportIPv4 renamed to IPv4Available
- [ProMIND] members supportIPv6 renamed to IPv6Available


airvpntools

- [ProMIND] updated to AirVPN document version 288
- [ProMIND] added int AirVpnDocumentVersion
- [ProMIND] added std::string wireguardPublicKey
- [ProMIND] added method getAirVpnDocumentVersion()
- [ProMIND] requestAirVPNDocument(): in case document version is not set by caller, it is then set to the default value
- [ProMIND] added methods getWireGuardPublicKey() and setWireGuardPublicKey()
- [ProMIND] added method getWireGuardProfile()
- [ProMIND] added method realCountryName(): return the normalized country/continent name
- [ProMIND] added method loadLinuxModule()
- [ProMIND] added method replaceAll()
- [ProMIND] added method formatTimestamp()
- [ProMIND] added methods getVPNConfigFileType() and getVPNProfileType()
- [ProMIND] added unit of measure mode to formatTransferRate() and formatDataVolume() methods (defaults to decimal mode)


airvpnuser

- [ProMIND] updated to AirVPN document version 288
- [ProMIND] added WireGuard members to struct UserKey
- [ProMIND] added method getWireGuardProfile()
- [ProMIND] getOpenVPNProfile(): replaced "cipher" with "data-ciphers"
- [ProMIND] getOpenVPNProfile(): removed "comp-lzo" support


countrycontinent

- [ProMIND] added method isContinent()
- [ProMIND] added method getContinentCode()
- [ProMIND] added method getContinentName()


dbusconnector

- [ProMIND] mutex lock operations are now depending on timeout


loadmod

- [ProMIND] added MODULE_IS_EMBEDDED, MODULE_DEP_FILE_NOT_FOUND and MODULE_BUILTIN_FILE_NOT_FOUND macros
- [ProMIND] load_kernel_module(): added check to modules.builtin


localnetwork

- [ProMIND] added struct IPAddress and enum IPFamily
- [ProMIND] removed local struct IPEntry (superseeded by IPAddress and IPFamily)
- [ProMIND] added method parseIpSpecification()


netfilter

- [ProMIND] removed method loadLinuxModule() (moved to airvpntools)
- [ProMIND] enum Direction replaced by enum Hook
- [ProMIND] Replaced enum IP with LocalNetwork's enum IPFamily
- [ProMIND] extensive and complete re-engineering and revision in order to allow a full and dynamic management of rules (notably nftables)


openvpnclient

- [ProMIND] added method profileNeedsResolution()
- [ProMIND] added method resolveProfile()
- [ProMIND] system DNS operations are now handled by methods saveSystemDNS(), allowSystemDNS() and rejectSystemDNS()
- [ProMIND] bypass routes are now added at connection establishment in order to allow "redirect-gateway" ignore to work properly
- [ProMIND] onAssignIpEvent(): add local gateway to netFilter in case gateway has not been redirected (pull-filter ignore "redirect-gateway")
- [ProMIND] print_stats(): stats are now shown only in case of connection to VPN server
- [ProMIND] removed references to LocalNetwork::IPEntry and replaced with IPAddress and IPFamily
- [ProMIND] implemented and overridden all virtual tun_builder_* methods
- [ProMIND] tun_builder_set_mtu(): now correctly sets MTU according to tun-mtu directive
- [ProMIND] Replaced struct IPClass with LocalNetwork's enum IPFamily
- [ProMIND] onResolveEvent(): proxy is now properly added to the network filter


vpnclient

- [ProMIND] refactored and renamed to openvpnclient


wireguardclient

- [ProMIND] new class


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.1 - 9 December 2022

- [ProMIND] production release


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.1 RC 1 - 30 November 2022

- [ProMIND] updated all dependencies and libraries
- [ProMIND] package is now realeased both for OpenSSL 3.0 and OpenSSL 1.1.x (legacy)


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.0 - 22 March 2022

- [ProMIND] production release


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.0 RC 3 - 17 March 2022

- [ProMIND] updated to OpenVPN3 AirVPN 3.8.1
- [ProMIND] vpnclient.hpp: changed references of ClientAPI::OpenVPNClient class to ClientAPI::OpenVPNClientHelper to conform to the new OpenVPN3 client class names
- [ProMIND] vpnclient.hpp: added private members event_error and event_fatal_error to reflect client's event errors
- [ProMIND] vpnclient.hpp: added public methods eventError() and eventFatalError()
- [ProMIND] vpnclient.hpp: get_connection_stats() added topology, cipher, ping and ping_restart values from OpenVPN3 options


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.0 RC 2 - 8 March 2022

- [ProMIND] vpnclient.hpp: added methods init(), initSupportedDataCiphers(), isDataCipherSupported() and getSupportedDataCiphers()
- [ProMIND] vpnclient.hpp: added getPushedDns() method
- [ProMIND] airvpntools.cpp: added normalizeBoolValue() method for the normalization of "simple" bools to extended values conforming to Suite's option parser and to be used to extend OpenVPN3 "simple" bool options
- [ProMIND] logger.hpp: class is now synchronized and thread safe


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.0 RC 1 - 15 February 2022

- [ProMIND] Updated to OpenVPN 3.7.2 AirVPN


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.2.0 Beta 1 - 7 February 2022

- [ProMIND] Updated to OpenVPN 3.7.1 AirVPN, latest support libraries and support projects
- [ProMIND] vpnclient.hpp: added methods openVPNInfo(), openVPNCopyright() and sslLibraryVersion()
- [ProMIND] vpnclient.hpp: added event management (subscription, unsubscription, raising) via callback functions for all native ClientEvent::Type
- [ProMIND] loadmod.c: added support for gz and zstd modules
- [ProMIND] netfilter.cpp: changed firewall priority scheme into nftables, iptables-legacy, iptables, pf
- [ProMIND] netfilter.cpp: added workaround for iptables modules in order to comply to kernel 5.15.x
- [ProMIND] netfilter.cpp: init(): in case netlock is set to iptables, force the initial loading of system rules by adding and then immediately removing two IPv4 and IPv6 "fake rules" in order to have netlock work in distributions running under kernel 5.15.x and iptables 1.8.7
- [ProMIND] dnsmanager.cpp: systemHasResolved() method renamed as systemHasSystemdResolved()
- [ProMIND] dnsmanager.cpp: added systemHasResolvectl() method
- [ProMIND] optionparser.cpp: added description and order members to OptionConfig and Option structures
- [ProMIND] airvpntools.cpp: added automatic support and selection for AirVPN IPv6 bootstrap servers
- [ProMIND] airvpnserverprovider.cpp: getFilteredServerList() includes all AirVPN server. Those not meeting the connection priority scheme are sent to the bottom of the list with the highest possible penalty. This is needed in case the country black list includes all of the connection priority scheme's countries


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 - 4 June 2021

- [ProMIND] updated all dependencies and libraries
- [ProMIND] vpnclient.hpp: restoreNetworkSettings() now returns a warning in case backup files are not found
- [ProMIND] vpnclient.hpp: restoreNetworkSettings() improved restoring management with more cases/scenarios


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 RC 4 - 14 May 2021

- [ProMIND] optionparser.cpp: added proper message errors in case of invalid argument and allocation
            memory error
- [ProMIND] netfilter.cpp: systemBackupExists() now evaluate every firewall mode backup file name
- [ProMIND] netfilter.cpp: restore() now check for every firewall mode backup and restore it accordingly
- [ProMIND] netfilter.cpp: IPv6 rules are now allowed or added only in case IPv6 is available in the system


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 RC 3 - 16 April 2021

- [ProMIND] Updated to OpenVPN 3.7 AirVPN
- [ProMIND] vpnclient.hpp: avoid netFilter setup in case NetFilter object is not private
- [ProMIND] dbusconnector.cpp: fine tuned D-Bus wait cycle in R/W dispatch. Implemented a thread
            safe wait in order to avoid D-Bus timeout policy


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 RC 2 - 14 April 2021

- [ProMIND] Updated to OpenVPN 3.6.7 AirVPN


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 RC 1 - 7 April 2021

- [ProMIND] Release Candidate 1


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 Beta 2 - 2 April 2021

- [ProMIND] localnetwork.cpp: added getDefaultGatewayInterface() method


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.1.0 Beta 1 - 11 March 2021

- [ProMIND] rcparser.cpp: removed formal list control for STRING type
- [ProMIND] netfilter.hpp, netfilter.cpp: added functions to set the availability of specific iptables tables
            in order to properly use available tables only
- [ProMIND] vpnclient.hpp: onResolveEvent() sets iptables tables according to the loaded modules
- [ProMIND] vpnclient.hpp: Changed constructor in order to use both private and external NetFilter object
- [ProMIND] localnetwork.cpp: added getLoopbackInterface(), getLocalIPaddresses() and getLocalInterfaces() methods
- [ProMIND] airvpntools.cpp: added detectLocation() method to retrieve location data from ipleak.net
- [ProMIND] airvpnuser.cpp: detectUserLocation() now uses AirVPNTools::detectLocation()
- [ProMIND] airvpnuser.cpp: loadUserProfile() now correctly sets userProfileErrorDescription in case of network failure
- [ProMIND] airvpnserverprovider.cpp: added "DEFAULT" rule to getUserConnectionPriority() in case user's country or
            continent is undefined
- [ProMIND] airvpnmanifest.cpp: loadManifest() now correctly sets the status STORED in case of network failure
- [ProMIND] Added Semaphore class
- [ProMIND] dnsmanager.hpp: method revertAllResolved() renamed to restoreResolved(). Besides reverting all interfaces
            it now restarts systemd-resolved service as well.
- [ProMIND] install.sh: improved update/upgrade process


*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


Version 1.0.0 - 7 January 2021

- [ProMIND] Production release