Content uploaded by Fabien Leboeuf
Author content
All content in this area was uploaded by Fabien Leboeuf on Feb 08, 2019
Content may be subject to copyright.
Contents lists available at ScienceDirect
Gait & Posture
journal homepage: www.elsevier.com/locate/gaitpost
The conventional gait model, an open-source implementation that
reproduces the past but prepares for the future
F. Leboeuf
a,⁎
, R. Baker
a
, A. Barré
b
, J. Reay
a
, R. Jones
a
, M. Sangeux
c
a
School of Health & Society, The University of Salford, UK
b
Moveck Solution inc., Canada
c
The Murdoch Children’s Research Institute, Melbourne, Australia
ARTICLE INFO
Keywords:
Conventional gait model
Gait analysis
Python
Open-source
ABSTRACT
Background: The Conventional Gait Model (CGM), known by a variety of different names, is widely used in
clinical gait analysis. We present pyCGM2, an open-source implementation of the CGM with two versions. The
first, CGM1.0, is a clone of Vicon Plug In Gait (PiG) with all its variants. CGM1.0 provides a platform to test the
effect of modifications to the CGM on data collected and processed retrospectively or to provide backward
compatibility. The second version, CGM1.1, offers some practical modifications and includes three well docu-
mented improvements.
Research question: How do improvements of the conventional gait model affect joint kinematics and kinetics?
Method: The practical modifications include the possibility to use a medial knee epicondyle marker, during static
calibration only, to define the medio-lateral axis of the femur in place of the knee alignment device. The three
improvements correspond to the change of pelvis angle decomposition sequence, the adoption of a single tibia
coordinate system, and the default decomposition of the joint moments in the joint coordinate system. We
validated the outputs of version CGM1.0 against Vicon-PiG, and estimated the effect of the modifications in-
cluded in version CGM1.1 using gait data collected in 16 healthy participants.
Results: Kinematics and kinetics of CGM1.0 were superimposed with that of Vicon-PiG, with root mean square
differences less than 0.04° for kinematics and less than 0.05 N.m.kg-1 for kinetics.
Significance: The differences between the CGM1.1 and CGM1.0 were minimal in the healthy participant cohort
but we discussed the expected difference in participants with different gait pathologies. We hope that the
pyCGM2 will facilitate the systematic testing and the use of improved processing methods for the conventional
gait model.
1. Introduction
The Conventional Gait Model (CGM) is the predominant bio-
mechanical model used in clinical gait analysis [1]. Originating in the
1970′s and developed by various individuals [1,2], the strengths asso-
ciated with the CGM include being understandable by a large com-
munity, even non-experts in Biomechanics [1]. The CGM became
popular because it was distributed as a package (first Vicon Clinical
Manager, then Plug in Gait) within the Vicon (Oxford Metrics, UK)
clinical motion capture software.
Extensive application of the CGM in clinics and medical research
[2,3] have exposed the model to criticism. For example, the lack of
accuracy in positioning the thigh and shank segment wand-mounted
markers has been responsible for large errors in the definition of the
coronal planes for these segments [4,5]. The Knee Alignment Device
(KAD) [6] was introduced to reduce these errors, by improving the
location of the Knee Joint Centre (KJC) and the alignment of the medio-
lateral axis of the femur with the trans-epicondylar axis. However, use
of the KAD may be outdated now that most clinical gait analysis sys-
tems have resolutions sufficient to capture a small (i.e. < 9 mm in
diameter) additional reflective marker on the medial femoral epi-
condyle.
Similarly, the clinical relevance of CGM outputs may benefit from
research that has been published since its inception but have not been
implemented yet. For example, Baker et al. [7] demonstrated that the
CGM’s angular decomposition does not correspond to the clinical de-
finition of the terms for the pelvis. Pelvis tilt is defined clinically as the
rotation of the pelvis around its medio-lateral axis, but it is calculated
by the CGM as the rotation around the medio-lateral axis of the la-
boratory’s coordinate system.
https://doi.org/10.1016/j.gaitpost.2019.01.034
Received 20 March 2018; Received in revised form 21 January 2019; Accepted 22 January 2019
⁎
Corresponding author at: School of Health & Society, Brian Blatchford Building, Frederick Road Campus, Salford, M6 6PU, UK.
E-mail address: f.leboeuf@salford.ac.uk (F. Leboeuf).
Gait & Posture 69 (2019) 126–129
0966-6362/ Crown Copyright © 2019 Published by Elsevier B.V. All rights reserved.
T
Schache et al. [8] showed that the decomposition of joint moments
in different coordinate systems leads to different outputs. In a further
study, [9], they suggested the Joint Coordinate System (JCS) was more
indicative of clinical understanding and may be preferred for the re-
porting of joint moments. However, the current implementation of the
CGM does not allow to decompose in the JCS, it only allows to de-
compose the joint moments in the proximal or the distal segment’s
coordinate system. In addition, decomposition in the distal segment is
the default option but Passmore and Sangeux [10] have shown that
decomposition in the distal segment is problematic for the hip joint
when the subject presents with torsional deformities in the lower limb,
which is a common clinical problem.
Various projects have attempted to replicate the CGM. The Advanced
Gait Work Flow, distributed by Vicon and written in Matlab (The
Mathworks Inc., Natick, USA) has been proposed but is not validated
against the CGM. Open-source versions, including pyCGM [11] in py-
thon, the Biomechanical Toolkit project in C++ [12] and BiomechZoo
in Matlab [13], have also been proposed. However, these im-
plementations have only tackled the basic CGM options, they did not
include improvement of the static calibration with the KAD, precluding
utility to many users.
The commercial software Visual 3D (C-Motion, Inc., Germantown,
USA) has implemented all CGM variants, but has not replicated Vicon-
PiG outputs exactly [14]. In Visual 3D, the segment pose is estimated
through least-square segment fitting, which is different from CGM’s
direct kinematics [1].
This paper aims to present an open-source implementation of the
CGM, pyCGM2 [15]. The pyCGM2 package proposes two versions: the
CGM1.0 which replicates outputs of the Vicon-PiG implementation, and
the CGM1.1 which addresses the shortcomings of the Vicon-PiG im-
plementation without modifying the core of the model.
We present a comprehensive overview of the current Vicon-PiG
variants and the improvements we implemented in the pyCGM2 version
CGM1.1. We validated the implementation of the CGM1.0 against the
Vicon-PiG outputs, and determined the differences between the
CGM1.0 and CGM1.1 versions in a healthy population.
2. Method
2.1. Variants of the CGM
The original version of the CGM as implemented in Vicon-PiG is
well described (Fig. 1a) [16]. An improved variant, using the knee
alignment device (KAD), was introduced but was not clearly referenced
in the literature [6]. The KAD is clamped to the medial and lateral
epicondyles of the knee and defines the coronal plane of the femur
(Fig. 1b, the KAD variant). Rotational offsets between the KAD and the
thigh and shank wand markers are stored in the parameter file during
static calibration and applied during the processing of dynamic trials.
A second variant (Fig 1c, the KAD-med variant) added the use of a
calibration marker on the ankle medial malleolus to define the trans-
malleolar axis and the coronal plane of the tibia. Tibial torsion can then
be calculated during static calibration (and output as knee rotation
kinematics in the static trial) and the tibia is modelled as two segments:
one, proximal aligned with the femur, and one, distal aligned with the
trans-malleolar axis. During dynamic processing, the proximal tibia
section is used to calculate knee kinematics, whereas the distal tibia
section is used to calculate ankle kinematics. This explains why Vicon-
PiG knee rotation kinematics has a mean value over the gait cycle that
is approximately zero, since the medio-lateral axes of the femur and
proximal tibia coordinate systems were aligned during static calibra-
tion. Without the use of a proximal tibia coordinate system to calculate
knee kinematics, knee rotation kinematics would oscillate around the
value of tibial torsion. The average knee rotation kinematics over the
gait cycle would therefore be non-zero since tibial torsion is non-zero in
normal subjects, because the ankle transmalleolar axis is known to be
externally rotated with respect to the femoral epicondyles. Our ex-
perience indicates that most gait analysts are not aware of this subtlety
in Vicon-PiG.
We also identified a processing error due to the complexity of
dealing with two tibia coordinate systems. During static calibration the
heel marker (HEE) may be used to determine the alignment of the
longitudinal axis of the foot (defined as the vector from HEE to the
forefoot marker, TOE) with respect to the vector from the ankle joint
centre (AJC) to the TOE marker. This process allows to remove the HEE
marker during dynamic trial and may be used to adjust for sole height
differences [17,18]. The alignment of the longitudinal axis of the foot is
stored as two parameters: the static plantarflexion and rotation offsets
obtained through decomposing the orientation of the HEE-TOE axis
compared to the AJC-TOE axis with respect to the medio-lateral and
longitudinal axes of the static distal tibia coordinate system, respec-
tively. However, these parameters are applied to the proximal tibia
coordinate system during dynamic processing which introduces a small
error in the ankle inversion/eversion kinematics.
2.2. pyCGM2 implementation
The pyCGM2 package has been developed as an open-source plat-
form to replicate the CGM, to allow users to explore the code, and to
provide a common platform to integrate improved processing methods.
The pyCGM2 is written in python and employs standard python
packages for numerical computation. The pyCGM2 is supplemented
with the Biomechanical ToolKit (BTK) [12] and its evolution Open
Movement Analysis (OpenMA) [19]. Both offer convenient methods for
handling c3d files.
A pyCGM2 program is composed of a series of blocks or filters, each
performing a specific operation, like computation of kinematics or ki-
netics. The pyCGM2 can be used to replicate the processing and outputs
of the Vicon-PiG operations exactly. Therefore, the operations called
PiG static and Pig Dynamic within Vicon Nexus have been implemented
and named pyCGM2 Calibration and pyCGM2 Fitting respectively. The
Calibration operation constructs a geometric multi-segment model by
locating joint centres and computing segment offsets, and outputs static
joint angles. The Fitting operation fits the calibrated model to the
marker data and performs the kinematics and kinetics analyses.
In its CGM1.0 version, the pyCGM2 was designed to replicate Vicon-
PiG outputs exactly. The kinematics are obtained using the same
Cardan angle decomposition sequences and adopt the same sign con-
ventions. The KAD-med variant includes two tibia coordinate systems
and we reproduced the processing error pertaining to the offset para-
meters that describe the alignment of the longitudinal axis of the foot.
The kinetics are computed from inverse dynamics using anthropo-
metric segment measurements according to Dempster [20]. Inverse
dynamic calculations follow the iterative Newton-Euler equations de-
scribed in Dumas et al. [21], where linear velocities and accelerations
are computed with quintic-spline fitting derivation (function : splev of
the Numpy package [22]) and 2
nd
order numerical differentiation of the
rotation matrix for angular quantities.
2.3. CGM1.1: a CGM as it should work
2.3.1. Practical improvement
Most current gait analysis services are equipped with motion cap-
ture systems able to collect the position of medial knee markers. The
CGM1.1 allows the option of using medial epicondyle knee markers
instead of a KAD while maintaining the same logic as the KAD or KAD-
med variants. The medial epicondyle knee markers can be removed
after static calibration to avoid subject discomfort during dynamic
trials. This is already the case for the medial malleolus ankle markers.
We also corrected the processing error pertaining to the offset para-
meters that describe the alignment of the longitudinal axis of the foot.
F. Leboeuf et al. Gait & Posture 69 (2019) 126–129
127
2.3.2. Clinically relevant methods
After almost three decades of extensive use and testing in the clin-
ical setting, we believe there are three modifications to the CGM that
are required immediately. It is important to note that these modifica-
tions do not alter the core characteristics of the CGM as a model but aim
to clarify the clinical interpretation of the kinematic or kinetic outputs.
Firstly, the Cardan sequence for the pelvis kinematics is modified to
a Rotation-Obliquity-Tilt mobile axes sequence. This choice ensures
that pelvis rotation reflects the rotation of the pelvis with respect to the
vertical axis of the laboratory, and that pelvis tilt is the rotation of the
pelvis around its medio-lateral axis, and not around the medio-lateral
axis of the laboratory [7]. Secondly, the CGM1.1 implements a single
tibia coordinate system using the transmalleolar axis to avoid the
confusion between Vicon-PiG static (which uses the torsioned tibia) and
dynamic (which uses the untorsioned tibia) knee rotation outputs.
Thirdly, the default projection of the joint moments is in the JCS rather
than in the distal segment coordinate system to improve clinical in-
terpretation of kinetic graphs [9,10,23].
2.4. Validation
A dataset comprised of 3D gait data of 16 healthy adult participants
(8 males and 8 females, with a mean age of 33 ± 17 years, height of
1.68 ± 0.10 m, mass of 64 ± 15 kg and Body Mass Index (BMI) of
23.0 ± 3.6 kg/m
2
) was used to validate the replication of Vicon-PiG
(CGM1.0) and to estimate the differences induced by the modifications
implemented in the CGM1.1. Static calibration was carried out with the
KAD-Med variant. Joint moments were decomposed into the distal
segment for both Vicon-PiG-KAD-Med and its clone (CGM1.0-KAD-
Med). Quantification of differences were calculated using the Root
Mean Square Difference (RMSD):
∑
=⎛
⎝
⎜−
⎞
⎠
⎟
=
R
MSD nqiqi
1(() ())
i
n
CGM PiG
1
2
where qrepresents either kinematic of kinetic outputs, and nis the
number of frame (i.e. 101).
Although ankle inversion/eversion is calculated by the conventional
gait model, the default markerset used for the foot segment does not
allow an accurate measurement for this parameter. We included ankle
inversion/eversion in our comparison only to provide a comprehensive
comparison.
3. Results
Table 1 presents the difference between Vicon-PiG-KAD-Med,
pyCGM2 clone (CGM1.0-KAD-Med) and the new version (CGM1.1-
KAD-Med). The CGM1.0 kinematic outputs were almost identical to
Vicon-PiG. Maximal RMSD was 0.04° for ankle dorsi/plantar-flexion.
Maximum RMSD was 0.05 N.m.kg-1 for the hip flexion/extension mo-
ment.
Regarding the comparison between CGM1.0 and CGM1.1, the
change in Cardan angle decomposition sequence at the pelvis had
minimal effect. RMSD in the three planes were less than 0.8°. As ex-
pected, the knee rotation trace (Fig 1) exhibited a large RMSD (17.2°)
which matched average tibial torsion (17°). The Vicon-PiG exhibited a
marked ankle eversion in swing phase, whereas ankle eversion was
neutral with CGM1.1. Finally, the projection of moments into the JCS
instead of the distal segment did not result in marked differences in our
healthy cohort (Fig 3).
4. Discussion
We have proposed pyCGM2, an open-source platform to replicate
the CGM as implemented in Vicon-PiG in its version CGM1.0, and to
implement three clinically relevant improvements in its version
CGM1.1. The three improvements were: (i) change of angle decom-
position sequence for the pelvis, (ii) adoption of a single segment de-
finition for the tibia, and (iii) default decomposition of the moments in
the JCS coordinate system. Vicon-PiG was compared to CGM1.0 in a
cohort of 16 healthy participants to validate our implementation and
was compared to CGM1.1 to estimate the differences induced by the
improvements in normative reference datasets.
We showed that pyCGM2 version CGM1.0 produces almost identical
outputs compared to Vicon-PiG’s implementation of the CGM.
Therefore, gait analysts may use one or the other interchangeably. The
improved version, CGM1.1, produced similar outputs in a healthy co-
hort, with the exception of knee rotation kinematics which oscillates
around the value calculated for tibial torsion during static calibration
for CGM 1.1, rather than zero with CGM 1.0.
Similar outputs for CGM 1.0 and 1.1 in a healthy cohort are desir-
able for practical reasons since it indicates that the effect of these CGM
versions will be minimal on published, or laboratory-based, normative
datasets. It is important to note however that data collected by the
different clinical gait centres for their normative datasets may be
readily reprocessed using CGM1.1.
The absence of major differences in this study’s healthy cohort does
not imply there would be no differences in individuals with gait
pathologies, depending on their pathology. The differences to expect
between CGM1.0 and CGM1.1 in individuals with gait pathologies are
well documented for each of the three modifications we included in
CGM1.1.
Baker et al. showed that the change of the pelvis angular decom-
position sequence primarily affects subjects walking with large pelvis
rotation or large pelvic obliquity, which are two common clinical pre-
sentations [7].
The adoption of a unique segment definition for the tibia clarifies
the interpretation of knee rotation kinematics as composed of tibial
Table 1
Root mean square difference between Vicon-PiG (KAD-MED Variant) and both pyCGM2 versions: CGM1.0 (the PiG clone) and CGM1.1 (the PiG as it should (have)
work(ed)). Zero indicates a value inferior to 0.01.
Version Angles (°) Mean(sd) Moment (Nm. kg
−1
) Mean(sd) Power (W. kg
−1
) Mean(sd)
Sagittal Coronal Transversal sagittal coronal transversal
Pelvis CGM1.0 0 0 0 ––– –
CGM1.1 0.21(0.13) 0.76(0.42) 0.42(0.24) ––– –
Hip CGM1.0 0 0.01(0.05) 0.03(0.14) 0.04(0.02) 0.02(0.01) 0 0
CGM1.1 0 0.01(0.05) 0.03(0.14) 0.07(0.02) 0.06(0.04) 0 0.06(0.04)
Knee CGM1.0 0.01(0.05) 0.01(0.05) 0.03(0.14) 0.02(0) 0 0 0
CGM1.1 0.01(0.05) 0.02(0.11) 17.3(7.4) 0.03(0.01) 0.04(0.02) 0 0.08(0.03)
Ankle CGM1.0 0.04(0.26) 0.02(0.11) 0.02(0.11) 0.01(0) 0 0 0
CGM1.1 0.16(0.27) 3.21(1.72) 0.48(0.37) 0.01(0) 0 0.02(0.01) 0.06(0.03)
Foot CGM1.0 ––0.02(0.11) ––– –
CGM1.1 ––0.48(0.37) ––– –
F. Leboeuf et al. Gait & Posture 69 (2019) 126–129
128
torsion plus the knee dynamic rotation. Many individuals with pa-
thology undergoing clinical gait analysis present with large tibial tor-
sion. With Vicon-PiG, or CGM1.0, the value of tibial torsion is hidden in
the parameter file and does not appear in the knee rotation kinematics.
This sometimes leads to inefficient reasoning, whereby clinicians need
to add multiple transverse plane kinematics (pelvis, hip, knee, ankle
and foot progression) to estimate a static parameter, tibial torsion, that
is readily available in the parameter file but not apparent in the kine-
matics graph. With the CGM1.1 version, tibial torsion appears in the
knee rotation kinematics graph directly. We believe this may not only
clarify, but probably even fast-track clinical interpretation.
Furthermore, it is likely to facilitate comparison with alternative
models that also use a single definition for the tibia [9,10].
The use of the joint coordinate system as the default option to
project the 3D vector of the net joint moment leads to major differences
whenever transverse plane joint rotations are large, for example in
subjects with large internal/external hip rotation or large internal/ex-
ternal knee rotation [10]. The default setting in Vicon-PiG is to de-
compose the moment in the distal segment coordinate system. As a
result, the component of the net joint moment vector lying in the sa-
gittal plane of the femur, rather than that of the pelvis, is currently
called hip extensor/flexor moment. Similarly, when using a single tibia
coordinate system, the component of the knee moment vector projected
in the sagittal plane of the tibia (determined using the ankle trans-
malleolar axis) is labelled knee flexor/extensor moment.
On the contrary, the default choice of the joint coordinate system
aligns well with the interpretation of muscle groups acting as motor
torques, although the limitations of such interpretation need to be
considered carefully [23].
In conclusion, this study has produced an open-source package,
pyCGM2, that delivers both a clone to Vicon-PiG and an updated ver-
sion of the CGM, CGM 1.1, that addresses what we believe are the most
pressing improvements to the CGM. The open-source package intends
to serve as a platform to test new methods, to evaluate the changes
induced by the new methods systematically, and to support multi-
centric studies.
Conflict of interest statement
Fabien Leboeuf, Richard Baker and Morgan Sangeux received
funding from Vicon (Oxford UK)
We confirm that the manuscript has been read and approved by all
named authors and that there are no other persons who satisfied the
criteria for authorship but are not listed. We further confirm that the
order of authors listed in the manuscript has been approved by all of us.
We further confirm that any aspect of the work covered in this
manuscript that has involved humans has been conducted with the
ethical approval of all relevant bodies and that such approvals are ac-
knowledged within the manuscript.
Acknowledgements
This work is supported by The University of Salford, United-
Kingdom. Funding was also provided by Vicon (Oxford, UK).
References
[1] R. Baker, F. Leboeuf, J. Reay, M. Sangeux, The conventional gait model -success and
limitations, Handb. Hum. Motion. (2017).
[2] T.L. Wren, G.E. Gorton, S. Õunpuu, C. Tucker, S. Ounpuu, C. Tucker, Efficacy of
clinical gait analysis: a systematic review, Gait Posture 34 (2011) 149–153.
[3] M.H. Schwartz, E. Viehweger, J. Stout, T.F. Novacheck, J.R. Gage, Comprehensive
treatment of ambulatory children with cerebral palsy: an outcome assessment, J.
Pediatr. Orthop. 24 (2004) 45–53.
[4] J. Cockcroft, Q. Louw, R. Baker, Proximal placement of lateral thigh skin markers
reduces soft tissue artefact during normal gait using the Conventional Gait Model,
Comput. Methods Biomech. Biomed. Eng. 5842 (2016) 1–8.
[5] U. Della Croce, A. Leardini, L. Chiari, A. Cappozzo, Human movement analysis
using stereophotogrammetry. Part 4: assessment of anatomical landmark mis-
placement and its effects on joint kinematics, Gait Posture 21 (2005) 226–237.
[6] A.G. Schache, R. Baker, L. Lamoreux, Defining the knee joint flexion–extension axis
for purposes of quantitative gait analysis: an evaluation of methods, Gait Posture 24
(2006) 100–109.
[7] R. Baker, Pelvic angles: a mathematically rigorous definition which is consistent
with a conventional clinical understanding of the terms, Gait Posture 13
(2001) 1–6.
[8] A.G. Schache, R. Baker, C.L. Vaughan, Differences in lower limb transverse plane
joint moments during gait when expressed in two alternative reference frames, J.
Biomech. 40 (2007) 9–19.
[9] A.G. Schache, R. Baker, On the expression of joint moments during gait, Gait
Posture 25 (2007) 440–452.
[10] E. Passmore, M. Sangeux, O 002- Is it the right moment to change how we report
kinetics? Gait Posture 65 (2018) 3–4.
[11] M. Schwartz, P.C. Dixon, The effect of subject measurement error on joint kine-
matics in the conventional gait model : insights from the open-source pyCGM tool
using high performance computing methods, PLoS One (2018) 1–24.
[12] A. Barre, S. Armand, Comparison of biomechanical gait models with open-source
biomechanical toolkit (BTK) : preliminary results, Gait Posture 39 (2008) 73–74.
[13] P.C. Dixon, J.J. Loh, Y. Michaud-Paquette, D.J. Pearsall, biomechZoo: an open-
source toolbox for the processing, analysis, and visualization of biomechanical
movement data, Comput. Methods Programs Biomed. 140 (2017) 1–10.
[14] C-motion, Visual 3d - CGM documentation, (n.d.). https://www.c-motion.com/
v3dwiki/index.php/PiG_LL_Original.
[15] F. Leboeuf, M. Sangeux, R. Baker, An open source implementation of the
Conventional Gait Model in Python, Gait Posture 57 (2017) 236.
[16] R. Baker, Measuring Walking: A Handbook of Clinical Gait Analysis, (2013).
[17] M.G.Y. Louey, A. Mudge, E. Wojciechowski, M. Sangeux, A model to calculate the
progression of the centre of pressure under the foot during gait analysis, Gait
Posture 57 (2017) 147–153.
[18] M.G.Y. Louey, M. Sangeux, Shod wear and foot alignment in clinical gait analysis,
Gait Posture 49 (2016) 144–147.
[19] A. Barre, F. Leboeuf, S. Armand, OpenMA : a new open source library for homo-
geneizing and processing gait data, Clin. Neurophysiol. 46 (2016) 243–244.
[20] Dempster, Body Segment Parameter Data for 2-D Studies, (1955), pp. 1–2.
[21] R. Dumas, R. Aissaoui, J. a de Guise, A 3D generic inverse dynamic method using
wrench notation and quaternion algebra, Comput. Methods Biomech. Biomed. Eng.
7 (2004) 159–166.
[22] S. Van Der Walt, S.C. Colbert, G. Varoquaux, The NumPy array: a structure for
efficient numerical computation, Comput. Sci. Eng. 13 (2011) 22–30.
[23] R. Dumas, L. Cheze, Letter to the editor: joint moments in the joint coordinate
system, Euler or dual Euler basis, J. Biomech. Eng. 136 (2014).
F. Leboeuf et al. Gait & Posture 69 (2019) 126–129
129