{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":81691611,"defaultBranch":"v2c","name":"trRouting","ownerLogin":"chairemobilite","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-02-12T00:07:23.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/11738785?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1697654974.0","currentOid":""},"activityList":{"items":[{"before":"ed0fcf74613968ba8e73a956372a81ce29ccb98d","after":"6bde986dab66709e476d4d97bb06b2c85c2edf60","ref":"refs/heads/v2c","pushedAt":"2024-06-17T14:00:22.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add a new error code for invalid scenario\n\nCurrently, if we send a scenario id but that ID is not in the available cache data,\nwe return the error MISSING_SCENARIO, which is missleading.\n\nWe add a new error code INVALID_SCENARIO, that will be returned if the scenario_id\nis not a valid uuid, or it's not present in our data source\n\nFixes: #295","shortMessageHtmlLink":"Add a new error code for invalid scenario"}},{"before":"88c3b580b2b9e9eaefa196e6b99d55dbb5ab3d2f","after":"ed0fcf74613968ba8e73a956372a81ce29ccb98d","ref":"refs/heads/v2c","pushedAt":"2024-06-11T19:50:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Check for index in path node list when parsing connection\n\nWe had an issue when the data got corrupted and the number of entry in the path was not the same\nas in the schedule. This was corrupting the memory.\nWe use the at() instead of [] when accessing the vector in the parsing loop in\ngetSchedules() and we display a meaningful error message if we\nget the exceptiono","shortMessageHtmlLink":"Check for index in path node list when parsing connection"}},{"before":"f7bf8edcbd86be8133eb3f7b40181d52f4091a34","after":"88c3b580b2b9e9eaefa196e6b99d55dbb5ab3d2f","ref":"refs/heads/v2c","pushedAt":"2024-04-30T15:44:14.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Fix build for macos\n\nThe homebrew location for boost have changed, it's not in the default search path anymore.\n\nWe add the BOOST_CPPFLAGS to our CPPFLAGS\nand we update all extra autoconf macro to have the latest update from the autoconf-archive.\nThe boost packages are updated to search boost in /opt/homebrew\n(the update to ax_cxx_compile for C++20 is also included while at it)\n\nAlso remove an old comment that should have been removed before in the build workflow","shortMessageHtmlLink":"Fix build for macos"}},{"before":"7b88b328a005fc4b6d5b48a83e5b3a33e6008c41","after":"f7bf8edcbd86be8133eb3f7b40181d52f4091a34","ref":"refs/heads/v2c","pushedAt":"2024-04-30T14:14:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Upgrade checkout action in github workflow\n\ncheckout@v3 is deprecated, so switch to v4","shortMessageHtmlLink":"Upgrade checkout action in github workflow"}},{"before":"dbf18ddb3ae38fddb58a94bd9cf7527d5985ed34","after":"7b88b328a005fc4b6d5b48a83e5b3a33e6008c41","ref":"refs/heads/v2c","pushedAt":"2024-03-13T14:46:07.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add python 3.12 to brew workaround in CI","shortMessageHtmlLink":"Add python 3.12 to brew workaround in CI"}},{"before":"2bcf11c3040ea8ba35238caeb8354420e6e219a2","after":"dbf18ddb3ae38fddb58a94bd9cf7527d5985ed34","ref":"refs/heads/v2c","pushedAt":"2024-02-21T16:16:58.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add a constructor to CalculationTime\n\nThis to insure we always use properly initialized variable\n\nAlso split the asserts, to make it easier to know which part failed","shortMessageHtmlLink":"Add a constructor to CalculationTime"}},{"before":"d21d157d644f6c8f0fcddfa50fc646b95042a580","after":"2bcf11c3040ea8ba35238caeb8354420e6e219a2","ref":"refs/heads/v2c","pushedAt":"2023-11-28T18:30:55.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Use external nlohmann-json library instead of copying the files in the project\n\nDistro have packages for the json library that we use. Instead of having to maintain a local\nfile in the repo, we will rely on external files on the system.\n\nWe changed the #include reference to point the the standard files and added a check in the configure\nto make sure the file is available.\nAlso updated the github actions to install the right packages and updated the README to add the package\nto the install instructions","shortMessageHtmlLink":"Use external nlohmann-json library instead of copying the files in th…"}},{"before":"2e1fd304d0d5cc9f71071eb1152761184027965d","after":"d21d157d644f6c8f0fcddfa50fc646b95042a580","ref":"refs/heads/v2c","pushedAt":"2023-11-27T20:14:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Use cmath instead of math.h","shortMessageHtmlLink":"Use cmath instead of math.h"}},{"before":"dae309b6619cdecc0076c5e83023835360ff19e2","after":"2e1fd304d0d5cc9f71071eb1152761184027965d","ref":"refs/heads/v2c","pushedAt":"2023-11-27T14:20:09.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"In the OSRMGeoFilter, if the first euclidean pass did not return any node, don't request data from OSRM\n\nOSRM would return no results as at best it can do the euclidean distance.\n\nCloses: #264","shortMessageHtmlLink":"In the OSRMGeoFilter, if the first euclidean pass did not return any …"}},{"before":"4a61e26e1ad14d17a9c751cee402d1f0e4dffdf5","after":"dae309b6619cdecc0076c5e83023835360ff19e2","ref":"refs/heads/v2c","pushedAt":"2023-11-24T21:56:42.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add a Reading/Writer lock to the ScenarioConnectionCaches\n\nWe add this shared mutex to make insure an ordely operation in a multithreaded environment.\nConst read operation should be ok the map version, but others are not atomic.","shortMessageHtmlLink":"Add a Reading/Writer lock to the ScenarioConnectionCaches"}},{"before":"ac98819d97cf056fc18fd0009cf4da47f1769027","after":"4a61e26e1ad14d17a9c751cee402d1f0e4dffdf5","ref":"refs/heads/v2c","pushedAt":"2023-11-24T20:03:53.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Remove unused benchmarking object","shortMessageHtmlLink":"Remove unused benchmarking object"}},{"before":"c9d03a44fb78327f763711b3c1429dbf0dfa6fea","after":"ac98819d97cf056fc18fd0009cf4da47f1769027","ref":"refs/heads/v2c","pushedAt":"2023-11-20T15:38:44.000Z","pushType":"pr_merge","commitsCount":9,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Remove the legacy Parameters class\n\nWe moved the remaining parameters to an OdTripLegacyParameters object. Those now only contains\nthe default values necessary of the od_trips_routing calculation. We don't have a API for it\nat the moment, so it's just to keep it compiling.\n\nWe removed the calls to setDefaultValues() and removed the params instance in the Calculation object.\n\nWe also removed the legacy V1 specific unit tests","shortMessageHtmlLink":"Remove the legacy Parameters class"}},{"before":"c1bfd1154b437caecc52d57b856ae3fe5c82abc6","after":"c9d03a44fb78327f763711b3c1429dbf0dfa6fea","ref":"refs/heads/v2c","pushedAt":"2023-11-13T18:11:44.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Don't copie the scenario filter into the commonparameters\n\nWhen creating the initial ConnectionSet, we fetch the filters directly from the\nscenario object. With the current code copying the filter data, we would\nreapply the same filters to the trips list in the reset functions, spending time\nfor no use.","shortMessageHtmlLink":"Don't copie the scenario filter into the commonparameters"}},{"before":"4a51d5b7b0aa953e705f8284cd197de1e324921c","after":"c1bfd1154b437caecc52d57b856ae3fe5c82abc6","ref":"refs/heads/v2c","pushedAt":"2023-11-13T18:11:30.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add a local uid to the Line object.\n\nSame as we did for Node and others. Gains about 5% in profiled runs","shortMessageHtmlLink":"Add a local uid to the Line object."}},{"before":"58789bd482c97dba22c1e5724059a749d71a0ac7","after":"4a51d5b7b0aa953e705f8284cd197de1e324921c","ref":"refs/heads/v2c","pushedAt":"2023-11-08T02:15:07.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Update CSA article link","shortMessageHtmlLink":"Update CSA article link"}},{"before":"78975f8a6747bc3c0b4f98ed5d87460cd3f10997","after":"58789bd482c97dba22c1e5724059a749d71a0ac7","ref":"refs/heads/v2c","pushedAt":"2023-10-31T14:03:46.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Migrate the forwardJourneysSteps and reverseJourneysSteps from a map to a vector\n\nThe vector is indexed by the Node::uid like the similar vectors in calculator.hpp\n\nWe gain about 5% to 10% in benchmarks with this change","shortMessageHtmlLink":"Migrate the forwardJourneysSteps and reverseJourneysSteps from a map …"}},{"before":"60c4fb687c25b5bcb6c683a235301bc5a62a651c","after":"78975f8a6747bc3c0b4f98ed5d87460cd3f10997","ref":"refs/heads/v2c","pushedAt":"2023-10-28T13:22:16.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Optimise the tripsQueryOverlay by moving it to a vector\n\nWe gain around 10% to 20% in execution time","shortMessageHtmlLink":"Optimise the tripsQueryOverlay by moving it to a vector"}},{"before":"ccb1149876ead4b74256bd7e0d892b3e31bb77de","after":"60c4fb687c25b5bcb6c683a235301bc5a62a651c","ref":"refs/heads/v2c","pushedAt":"2023-10-25T12:09:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Move nodesReverseTentativeTime to a vector\n\nApply the same optimisation than nodesTentativeTime","shortMessageHtmlLink":"Move nodesReverseTentativeTime to a vector"}},{"before":"9b91783bc1f532d79e36decc814ade20547788e7","after":"ccb1149876ead4b74256bd7e0d892b3e31bb77de","ref":"refs/heads/v2c","pushedAt":"2023-10-24T15:03:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"v2: Log the parameters received as debug\n\nWhen running in debug mode, this allows to see the various parameters\nsent to the request.","shortMessageHtmlLink":"v2: Log the parameters received as debug"}},{"before":"47b1615a8c2675cbfa2785cffd817cc01e98e9e9","after":"9b91783bc1f532d79e36decc814ade20547788e7","ref":"refs/heads/v2c","pushedAt":"2023-10-23T17:17:52.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Replace the nodesTentativeTime from a map to a vector\n\nWe used the node global as a max entry to size the vector.\n\nFetching the temporary data from a map in the calculation loop is too intensive.\nUsing a vector with a constant access is more efficient. We just need to be\ncareful in match the UID of the Nodes","shortMessageHtmlLink":"Replace the nodesTentativeTime from a map to a vector"}},{"before":"443551c73223b22a0f3fd61d4c3d1c3b25a6026c","after":"47b1615a8c2675cbfa2785cffd817cc01e98e9e9","ref":"refs/heads/v2c","pushedAt":"2023-10-23T15:10:28.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add a comment to explain why we do not directly call EuclideanGeoFilter in\nthe OSRMGeoFilter, in the first filter pass","shortMessageHtmlLink":"Add a comment to explain why we do not directly call EuclideanGeoFilt…"}},{"before":"f828d81c0143ec55d8d1bf5adcc3fe43ff288701","after":"443551c73223b22a0f3fd61d4c3d1c3b25a6026c","ref":"refs/heads/v2c","pushedAt":"2023-10-19T15:16:17.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Also add request id to log of summary and accessbility requests","shortMessageHtmlLink":"Also add request id to log of summary and accessbility requests"}},{"before":"449362361bfbe4def94441834460eeea3ed39871","after":"f828d81c0143ec55d8d1bf5adcc3fe43ff288701","ref":"refs/heads/v2c","pushedAt":"2023-10-19T14:20:08.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add a unique request id to the request/complete info log\n\nThis will allow us to match the start and end of the request and easilly see if\nwe have unmatched pair. (and calculate duration just from those logs)","shortMessageHtmlLink":"Add a unique request id to the request/complete info log"}},{"before":"d54fe37ed93f690efd3ebfa5ff74cfda793baeb1","after":"449362361bfbe4def94441834460eeea3ed39871","ref":"refs/heads/v2c","pushedAt":"2023-10-10T18:15:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tahini","name":"Geneviève Bastien","path":"/tahini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4398897?s=80&v=4"},"commit":{"message":"Reset global params object in calculator at beginning of V2 request.\n\nIf we were doing a request with the old V1 API, you could set some global\nflags that would not be reseted when then calling a V2 API.\n\nWe were hitting the assert in forward_calculation in the forwardCalculation() call","shortMessageHtmlLink":"Reset global params object in calculator at beginning of V2 request."}},{"before":"8e7aeb9651b4dbbcd68ca6a76f924abffb0e9072","after":"d54fe37ed93f690efd3ebfa5ff74cfda793baeb1","ref":"refs/heads/v2c","pushedAt":"2023-08-30T19:55:56.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add an option to cache all connectionSets from all scenarios\n\nIn a situation where you have multiple scenario and where you often switch between\nthem, having only one connection set in the cache does not offer lot of perf\nimprovement.\n\nThis add a --cacheAllConnectionSets parameter, which when set to true will\ncache all connection cache.\n\nThis is implemented with a new ScenarioConnectionCacheAll class. (the old one renamed to ScenarioConnectionCacheOne)\nThe flag define which one the TransitData class will instanciate.\n\nIssue #252","shortMessageHtmlLink":"Add an option to cache all connectionSets from all scenarios"}},{"before":"21c32ec402266ff139d903455c412a07fb17e58e","after":"8e7aeb9651b4dbbcd68ca6a76f924abffb0e9072","ref":"refs/heads/v2c","pushedAt":"2023-08-29T14:00:13.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Change log levels of endpoint entry/exit\n\nPart of #248\n\nThe alternatives calculation statements are set to 'debug' instead of\n'info'.\n\nThe log statement at the beginning and end of the v2/* routes are set to\n'info' and parameters are removed, spdlog will associate a timestamp with\nthe log, so no need to display the application's time.\n\nIf a catchall exception occurs, the log level is 'error'.\n\nTODO\nCleanup the 'debug' statements and set a few as 'trace'","shortMessageHtmlLink":"Change log levels of endpoint entry/exit"}},{"before":"8339af92b311adf06b499065baa89607c6267550","after":"21c32ec402266ff139d903455c412a07fb17e58e","ref":"refs/heads/v2c","pushedAt":"2023-08-28T17:36:29.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"tahini","name":"Geneviève Bastien","path":"/tahini","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/4398897?s=80&v=4"},"commit":{"message":"csa: Make sure the connection arrival node is a candidate\n\nfixes #250\n\nLookup the arrival node in the reverse journey steps map to make sure\nthe arrival node of the connection is a candidate for the journey.\nCandidate nodes are added to the map as connections having them as\ndeparture node are found to be possible shortest path candidate.\n\nOtherwise, it throws an exception when calling the `at`, making the\nwhole query fail.","shortMessageHtmlLink":"csa: Make sure the connection arrival node is a candidate"}},{"before":"3622e9b0fa20b6998dd97b7af92ba075c0f473f5","after":"8339af92b311adf06b499065baa89607c6267550","ref":"refs/heads/v2c","pushedAt":"2023-04-19T21:56:59.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"TransitData: Save the connections as reference_wrappers\n\nThe TransitData class keeps a base vector of connection objects, which\ncan then be referenced by the forward and reverse connection vectors.\nAll std::shared_ptr are replaced with\nstd::reference_wrapper.","shortMessageHtmlLink":"TransitData: Save the connections as reference_wrappers"}},{"before":"3c9ae40a7e40f14f5d6e6ac6c045d7bf3b557dd6","after":"3622e9b0fa20b6998dd97b7af92ba075c0f473f5","ref":"refs/heads/v2c","pushedAt":"2023-03-29T22:07:23.744Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"csa: Fix the alternatives' maximum travel time\n\nFixes #246\n\nThe maximum travel time for the alternatives calculation should be\nbounded by the value received in parameter and not just by a function of\nthe first calculation.\n\nAdd a unit test that previously failed and passes with this fix.","shortMessageHtmlLink":"csa: Fix the alternatives' maximum travel time"}},{"before":"4b25a6cfee030958eb291288f81269a880438050","after":"3c9ae40a7e40f14f5d6e6ac6c045d7bf3b557dd6","ref":"refs/heads/v2c","pushedAt":"2023-03-29T22:06:10.158Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"greenscientist","name":"Yannick Brosseau","path":"/greenscientist","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/145653?s=80&v=4"},"commit":{"message":"Add missing spdlog install instruction for macOS","shortMessageHtmlLink":"Add missing spdlog install instruction for macOS"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNi0xN1QxNDowMDoyMi4wMDAwMDBazwAAAARncNjU","startCursor":"Y3Vyc29yOnYyOpK7MjAyNC0wNi0xN1QxNDowMDoyMi4wMDAwMDBazwAAAARncNjU","endCursor":"Y3Vyc29yOnYyOpK7MjAyMy0wMy0yOVQyMjowNjoxMC4xNTg3MDBazwAAAAMOKjna"}},"title":"Activity · chairemobilite/trRouting"}