diff --git a/go.sum b/go.sum
index e6d5a75..1ea6864 100644
--- a/go.sum
+++ b/go.sum
@@ -1,12 +1,8 @@
github.com/aws/aws-sdk-go v1.49.12/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go v1.51.1 h1:AFvTihcDPanvptoKS09a4yYmNtPm3+pXlk6uYHmZiFk=
github.com/aws/aws-sdk-go v1.51.1/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
-github.com/aws/aws-sdk-go-v2 v1.25.3 h1:xYiLpZTQs1mzvz5PaI6uR0Wh57ippuEthxS4iK5v0n0=
-github.com/aws/aws-sdk-go-v2 v1.25.3/go.mod h1:35hUlJVYd+M++iLI3ALmVwMOyRYMmRqUXpTtRGW+K9I=
github.com/aws/aws-sdk-go-v2 v1.43.3 h1:XJIcfv8uDs2ukdQsoAC8/Ebu1ejxwzlayl2ZsiFns2A=
github.com/aws/aws-sdk-go-v2 v1.43.3/go.mod h1:70vwSy16txshwG+g55WkpgPKDIByzHI8ccBsOteo3bQ=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.16 h1:aiuaKlDweRC5qExJondpWjOgyzMHpofpwspGXUtwn4c=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.16/go.mod h1:nG/LOlmox9BDe9HvQnXWzgcK8uKbgBMZ/Hp5pVt/21I=
github.com/aws/aws-sdk-go-v2/config v1.27.7 h1:JSfb5nOQF01iOgxFI5OIKWwDiEXWTyTgg1Mm1mHi0A4=
@@ -17,38 +13,22 @@ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.3 h1:p+y7FvkK2dxS+FEwRIDHDe/
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.3/go.mod h1:/fYB+FZbDlwlAiynK9KDXlzZl3ANI9JkD0Uhz5FjNT4=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.11 h1:QLDOiTR87HT9qViYMD27DHA55TsMRyfscY/AOoYShh4=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.16.11/go.mod h1:vMy68zrZJ6mOjPOYypUtCEEeLtgVlzbqSE4zLBSPpYw=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.3 h1:ifbIbHZyGl1alsAhPIYsHOg5MuApgqOvVeI8wIugXfs=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.3/go.mod h1:oQZXg3c6SNeY6OZrDY+xHcF4VGIEoNotX2B4PrDeoJI=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.34 h1:vuIfjzoeqhQMGJyOBU3t0ZEjn2jrN8Bbg1N4CgjzM5Q=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.34/go.mod h1:hP28cN4CPJLZHirdQPrZR50JcLN4ApRJP2tzG8cRlhY=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.3 h1:Qvodo9gHG9F3E8SfYOspPeBt0bjSbsevK8WhRAUHcoY=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.3/go.mod h1:vCKrdLXtybdf/uQd/YfVR2r5pcbNuEYKzMQpcxmeSJw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.34 h1:9faHsnqxJ1vDvB4wMZy/ajIDyz5QhllQjjc72RJpXAw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.34/go.mod h1:Yp6nIyejpa23nzlB/LhT63KTla9Jdi06nv/HH/OkAH8=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.3 h1:mDnFOE2sVkyphMWtTH+stv0eW3k0OTx94K63xpxHty4=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.3/go.mod h1:V8MuRVcCRt5h1S+Fwu8KbC7l/gBGo3yBAyUbJM2IJOk=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.35 h1:Oe8gMKJLO5awqpa5EhAGKVnBv1s+brdWVuxM2mDa7zA=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.35/go.mod h1:FZevcG9cOST/FWAAUhHIchjR9fXFXFRCWodOhx+PDLA=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.15 h1:JJLBQxwY+AFwuPAi5ivGc1ChnTdUt4cXMv7e76m2c/Y=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.15/go.mod h1:lQknBIe78MVL0cQOQDlag8KGflMbMEVFx9mB6O8ENvk=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.5 h1:mbWNpfRUTT6bnacmvOTKXZjR/HycibdWzNpfbrbLDIs=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.5/go.mod h1:FCOPWGjsshkkICJIn9hq9xr6dLKtyaWpuUojiN3W1/8=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.27 h1:zwB6ltUc0UiyOsRQaMQ8jNLjKECbjhadCyl4hqV0y/c=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.27/go.mod h1:ce9y+Y+hGLUyPKJZZJGoFLuFJNfCNuWZTujUJAsckQA=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.5 h1:K/NXvIftOlX+oGgWGIa3jDyYLDNsdVhsjHmsBH2GLAQ=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.5/go.mod h1:cl9HGLV66EnCmMNzq4sYOti+/xo8w34CsgzVtm2GgsY=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.34 h1:sYg4qHWLqsjp15PzX7XCOHSOgKEGoZ5vQY43VvZ1pas=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.34/go.mod h1:N58SSz3roKf1HzW5qRaOiyk6MbDLTKgLPvlTfJ90iyI=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.3 h1:4t+QEX7BsXz98W8W1lNvMAG+NX8qHz2CjLBxQKku40g=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.3/go.mod h1:oFcjjUq5Hm09N9rpxTdeMeLeQcxS7mIkBkL8qUKng+A=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.35 h1:ohfdSAm4TA6nryIY7mLqe4mnSIAnAreoAPBM81ZVoIM=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.35/go.mod h1:uUjphnxMb3HH3vIiOHl4dH0fGNKL+csjqRQEabbfw5k=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.52.1 h1:Y/TTvxMdYwNvhzolvneV1wEEN/ncQUSd1AnzFGTMPqM=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.52.1/go.mod h1:MGTaf3x/+z7ZGugCGvepnx2DS6+caCYYqKhzVoLNYPk=
github.com/aws/aws-sdk-go-v2/service/s3 v1.106.4 h1:nN+nb2rhWmPOMwFA+e6xDJZJ0h/VAI39XVBzn52Fn8A=
github.com/aws/aws-sdk-go-v2/service/s3 v1.106.4/go.mod h1:lWk6L5Q3YkaC7so1bQUJkvF7hj2KUFzdZ4w15wc2GHY=
github.com/aws/aws-sdk-go-v2/service/sns v1.29.2 h1:kHm1SYs/NkxZpKINc4zOXOLJHVMzKtU4d7FlAMtDm50=
@@ -63,8 +43,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.28.4 h1:Ppup1nVNAOWbBOrcoOxaxPeEnSFB
github.com/aws/aws-sdk-go-v2/service/sts v1.28.4/go.mod h1:+K1rNPVyGxkRuv9NNiaZ4YhBFuyw2MMA9SlIJ1Zlpz8=
github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v1.1.0 h1:EJsHUYgFBV7/N1YtL73lsfZODAOU+CnNSZfEAlqqQaA=
github.com/aws/aws-sigv4-auth-cassandra-gocql-driver-plugin v1.1.0/go.mod h1:AxKuXHc0zv2yYaeueUG7R3ONbcnQIuDj0bkdFmPVRzU=
-github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw=
-github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
github.com/aws/smithy-go v1.27.6 h1:0zjT8jgK3jbrTT7JJ3EE6JsMhX8JTrZ+f1sEndYDXrA=
github.com/aws/smithy-go v1.27.6/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
@@ -141,8 +119,6 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs=
golang.org/x/text v0.40.0/go.mod h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
diff --git a/sc3ml/sc3ml.go b/sc3ml/sc3ml.go
index 249c8c0..006d60d 100644
--- a/sc3ml/sc3ml.go
+++ b/sc3ml/sc3ml.go
@@ -19,6 +19,7 @@ const (
sc3ml11 = `http://geofon.gfz-potsdam.de/ns/seiscomp3-schema/0.11`
sc3ml12 = `http://geofon.gfz-potsdam.de/ns/seiscomp3-schema/0.12`
sc3ml13 = `http://geofon.gfz-potsdam.de/ns/seiscomp3-schema/0.13`
+ sc3ml14 = `http://geofon.gfz.de/ns/seiscomp-schema/0.14`
)
type Seiscomp struct {
@@ -146,7 +147,7 @@ type Amplitude struct {
// the objects referenced by ID in the SeisComPML e.g., PreferredOrigin,
// PreferredMagnitude etc.
//
-// Supported SC3ML versions are 0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13
+// Supported SC3ML versions are 0.6, 0.7, 0.8, 0.9, 0.10, 0.11, 0.12, 0.13, 0.14
// Any other versions will result in a error.
func Unmarshal(b []byte, s *Seiscomp) error {
if err := xml.Unmarshal(b, s); err != nil {
@@ -162,6 +163,7 @@ func Unmarshal(b []byte, s *Seiscomp) error {
case sc3ml11:
case sc3ml12:
case sc3ml13:
+ case sc3ml14:
default:
return errors.New("unsupported SC3ML version")
}
diff --git a/sc3ml/sc3ml_test.go b/sc3ml/sc3ml_test.go
index ac29bf4..c4159b5 100644
--- a/sc3ml/sc3ml_test.go
+++ b/sc3ml/sc3ml_test.go
@@ -20,6 +20,7 @@ the version. The validating them using the XSDs:
xmllint --noout --schema sc3ml_0.11.xsd 2015p768477_0.11.xml
xmllint --noout --schema sc3ml_0.12.xsd 2024p344188_0.12.xml
xmllint --noout --schema sc3ml_0.13.xsd 2024p344188_0.13.xml
+ xmllint --noout --schema scml_0.14.xsd 2026p748403_0.14.xml
*/
func TestUnmarshal(t *testing.T) {
for _, input := range []string{"2015p768477_0.7.xml", "2015p768477_0.8.xml", "2015p768477_0.9.xml", "2015p768477_0.10.xml", "2015p768477_0.11.xml"} {
@@ -552,6 +553,91 @@ func TestUnmarshall12_13(t *testing.T) {
}
}
+func TestUnmarshall14(t *testing.T) {
+ for _, input := range []string{"2026p748403_0.14.xml"} {
+ b, err := os.ReadFile("testdata/" + input) //nolint:gosec
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ var s sc3ml.Seiscomp
+
+ if err = sc3ml.Unmarshal(b, &s); err != nil {
+ t.Errorf("%s: %s", input, err.Error())
+ }
+
+ if len(s.EventParameters.Events) != 1 {
+ t.Errorf("should have found 1 event for %s.", input)
+ }
+
+ e := s.EventParameters.Events[0]
+
+ if e.PublicID != "2026p748403" {
+ t.Errorf("%s: expected publicID 2026p748403 got %s", input, e.PublicID)
+ }
+
+ if e.Type != "earthquake" {
+ t.Errorf("%s: expected type earthquake got %s", input, e.Type)
+ }
+
+ if e.PreferredOriginID != "Origin/20261004215844.377698.20945" {
+ t.Errorf("%s: expected preferredOriginID Origin/20261004215844.377698.20945 got %s", input, e.PreferredOriginID)
+ }
+
+ if e.PreferredOrigin.Time.Value.Format(time.RFC3339Nano) != "2026-10-04T21:49:33.737549Z" {
+ t.Errorf("%s: expected 2026-10-04T21:49:33.737549Z, got %s", input, e.PreferredOrigin.Time.Value.Format(time.RFC3339Nano))
+ }
+
+ if e.PreferredOrigin.Latitude.Value != -42.1883659362793 {
+ t.Errorf("%s: Latitude expected -42.1883659362793 got %f", input, e.PreferredOrigin.Latitude.Value)
+ }
+
+ if e.PreferredOrigin.Longitude.Value != 172.7863311767578 {
+ t.Errorf("%s: Longitude expected 172.7863311767578 got %f", input, e.PreferredOrigin.Longitude.Value)
+ }
+
+ if e.PreferredOrigin.Depth.Value != 33.001792907714844 {
+ t.Errorf("%s: Depth expected 33.001792907714844 got %f", input, e.PreferredOrigin.Depth.Value)
+ }
+
+ if e.PreferredOrigin.MethodID != "LOCSAT" {
+ t.Errorf("%s: MethodID expected LOCSAT got %s", input, e.PreferredOrigin.MethodID)
+ }
+
+ if e.PreferredOrigin.EarthModelID != "iasp91" {
+ t.Errorf("%s: EarthModelID expected iasp91 got %s", input, e.PreferredOrigin.EarthModelID)
+ }
+
+ if e.PreferredOrigin.Quality.AzimuthalGap != 60.37852478027344 {
+ t.Errorf("%s: AzimuthalGap expected 60.37852478027344 got %f", input, e.PreferredOrigin.Quality.AzimuthalGap)
+ }
+
+ if e.PreferredOrigin.Quality.MinimumDistance != 0.4347148835659027 {
+ t.Errorf("%s: MinimumDistance expected 0.4347148835659027 got %f", input, e.PreferredOrigin.Quality.MinimumDistance)
+ }
+
+ if e.PreferredOrigin.Quality.UsedPhaseCount != 18 {
+ t.Errorf("%s: UsedPhaseCount expected 18 got %d", input, e.PreferredOrigin.Quality.UsedPhaseCount)
+ }
+
+ if e.PreferredOrigin.Quality.UsedStationCount != 12 {
+ t.Errorf("%s: UsedStationCount expected 12 got %d", input, e.PreferredOrigin.Quality.UsedStationCount)
+ }
+
+ if e.PreferredMagnitude.Magnitude.Value != 2.1051612378064357 {
+ t.Errorf("%s: Magnitude expected 2.1051612378064357 got %f", input, e.PreferredMagnitude.Magnitude.Value)
+ }
+
+ if e.PreferredMagnitude.Type != "MLv" {
+ t.Errorf("%s: Magnitude type expected MLv got %s", input, e.PreferredMagnitude.Type)
+ }
+
+ if e.PreferredMagnitude.StationCount != 6 {
+ t.Errorf("%s: Expected StationCount 6 got %d", input, e.PreferredMagnitude.StationCount)
+ }
+ }
+}
+
func TestUnmarshalUnsupported(t *testing.T) {
for _, input := range []string{"2015p768477_0.4.xml"} {
b, err := os.ReadFile("testdata/" + input) //nolint:gosec
diff --git a/sc3ml/testdata/2026p748403_0.14.xml b/sc3ml/testdata/2026p748403_0.14.xml
new file mode 100644
index 0000000..1bd62be
--- /dev/null
+++ b/sc3ml/testdata/2026p748403_0.14.xml
@@ -0,0 +1,1526 @@
+
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:49:57.227154Z
+
+
+ 273.32401464576316
+ SNR
+
+
+
+
+
+ S
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:56:45.834028Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:00.24253Z
+
+
+ 32.44827214200906
+ SNR
+
+
+
+
+
+ S
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:56:45.834101Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:02.253145Z
+
+
+ 64.98143332465274
+ SNR
+
+
+
+
+
+ S
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:56:45.834147Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:49:59.238455Z
+
+
+ 72.70146794595989
+ SNR
+
+
+
+
+
+ S
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:56:45.834193Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:00.244216Z
+
+
+ 23.24712582047558
+ SNR
+
+
+
+
+
+ S
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:56:45.834239Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:03.762255Z
+
+
+ 50.56031823376074
+ SNR
+
+
+
+
+
+ S
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:56:45.834284Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:06.777864Z
+
+
+ 37.115471804355565
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:23.363981Z
+
+
+ 16.691102798089897
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:06.276194Z
+
+
+ 12.203573199092647
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:08.787978Z
+
+
+ 18.862299834374664
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:08.789535Z
+
+
+ 10.0578593943272
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:13.310609Z
+
+
+ 12.501200384944003
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:14.315899Z
+
+
+ 15.89636693325971
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:16.327493Z
+
+
+ 19.929990519068003
+ SNR
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:22.358216Z
+
+
+ 6.341734882350531
+ SNR
+
+
+
+
+
+ BW(4,2,15)
+ P
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:04.185528Z
+
+
+
+
+
+ BW(4,2.5,15)
+ AIC
+ P
+ automatic
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:34.420791Z
+
+
+ 11.293270001210665
+ SNR
+
+
+
+ ML
+
+ 0.14698983868113347
+ 0.011937559206586457
+ 0.01193755920658643
+
+
+ 2026-10-04T21:49:53.855Z
+ -14.064999
+ 37.545
+
+ 3.56760621697432
+ 20261004.214944.79-AIC-NZ.THZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:36.609188Z
+
+
+
+ ML
+
+ 0.06823010236492164
+ 0.014637352781648127
+ 0.014637352781648141
+
+
+ 2026-10-04T21:50:11.815Z
+ -30.244999
+ 26.375
+
+ 1.5471271477608173
+ 20261004.214946.57-AIC-NZ.KHZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:42.619622Z
+
+
+
+ ML
+
+ 0.08314056030910544
+ 0.011406849883520961
+ 0.011406849883520961
+
+
+ 2026-10-04T21:50:13.985Z
+ -30.944999
+ 29.965
+
+ 2.0215234371516377
+ 20261004.214948.04-AIC-NZ.LTZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:49.632083Z
+
+
+
+ ML
+
+ 0.1862119581943305
+ 0.02291403323777394
+ 0.022914033237773967
+
+
+ 2026-10-04T21:50:01.745Z
+ -18.074999
+ 44.835
+
+ 5.542271909179336
+ 20261004.214948.67-AIC-NZ.CRSZ.10.EHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:49.631538Z
+
+
+
+ ML
+
+ 0.12182966338010706
+ 0.013251430113040683
+ 0.013251430113040696
+
+
+ 2026-10-04T21:50:07.025Z
+ -22.764999
+ 41.165
+
+ 1.3142327541560725
+ 20261004.214949.26-AIC-NZ.GVZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:53.13741Z
+
+
+
+ ML
+
+ 0.10654788338220003
+ 0.017923865257322993
+ 0.017923865257323007
+
+
+ 2026-10-04T21:50:13.103131Z
+ -28.379999
+ 39.11
+
+ 1.517433517962381
+ 20261004.214949.72-AIC-NZ.DSZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:00.650889Z
+
+
+
+ ML
+
+ 0.14219503513933904
+ 0.0016993525160352574
+ 0.0016993525160352574
+
+
+ 2026-10-04T21:50:19.165Z
+ -34.134999
+ 32.915
+
+ 1.8113854773859477
+ 20261004.214950.03-AIC-NZ.HPRZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:57.144949Z
+
+
+
+ ML
+
+ 0.06109764694663072
+ 0.008325352554965595
+ 0.008325352554965595
+
+
+ 2026-10-04T21:50:09.92Z
+ -21.399999
+ 56.26
+
+ 6.077569419425141
+ 20261004.214953.52-AIC-NZ.TUWZ.10.EHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:36.520225Z
+
+
+
+ ML
+
+ 0.17487333709905617
+ 0.021486293478961332
+ 0.021486293478961305
+
+
+ 2026-10-04T21:50:09.945Z
+ -20.774999
+ 57.815
+
+ 10.969245285527442
+ 20261004.214954.17-AIC-NZ.TKNZ.10.EHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:12.672067Z
+
+
+
+ ML
+
+ 0.06982657761651777
+ 0.006744539185135373
+ 0.006744539185135373
+
+
+ 2026-10-04T21:50:41.73Z
+ -50.509999
+ 36.15
+
+ 1.3568507653148822
+ 20261004.214956.22-AIC-NZ.QRZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:21.188862Z
+
+
+
+ ML
+
+ 0.06262575452203761
+ 0.0040602023770242995
+ 0.0040602023770242995
+
+
+ 2026-10-04T21:50:18.305Z
+ -25.794999
+ 64.175
+
+ 4.928944868292221
+ 20261004.214957.51-AIC-NZ.TCW.10.EHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:26.200199Z
+
+
+
+ ML
+
+ 0.04419406482690147
+ 0.006317780748801759
+ 0.006317780748801759
+
+
+ 2026-10-04T21:50:21.62Z
+ -26.059999
+ 69.66
+
+ 1.8914762400614769
+ 20261004.215000.56-AIC-NZ.DUWZ.10.EHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:36.528326Z
+
+
+
+ MLv
+
+ 0.17308190861132908
+
+
+ 2026-10-04T21:49:53.94Z
+ -14.15
+ 36.96
+
+ 1.9815012133771874
+ 20261004.214944.79-AIC-NZ.THZ.10.HHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:59:20.258225Z
+
+
+
+ MLv
+
+ 0.13837987951459865
+
+
+ 2026-10-04T21:49:48.06Z
+ -5.02
+ 56.11
+
+ 1.229231033893249
+ 20261004.214948.04-AIC-NZ.LTZ.10.HHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:59:54.969329Z
+
+
+
+ MLv
+
+ 0.21849767134525414
+
+
+ 2026-10-04T21:50:01.69Z
+ -18.02
+ 45.38
+
+ 8.742489115402066
+ 20261004.214948.67-AIC-NZ.CRSZ.10.EHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:59:10.234587Z
+
+
+
+ MLv
+
+ 0.17797463804000774
+
+
+ 2026-10-04T21:50:03.18Z
+ -18.15
+ 48.73
+
+ 1.9585483789113007
+ 20261004.214950.03-AIC-NZ.HPRZ.10.HHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:09.663877Z
+
+
+
+ MLv
+
+ 0.0691767240017245
+
+
+ 2026-10-04T21:50:09.69Z
+ -21.17
+ 56.46
+
+ 4.0649836956180234
+ 20261004.214953.52-AIC-NZ.TUWZ.10.EHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:59:10.235804Z
+
+
+
+ MLv
+
+ 0.1672100120210893
+
+
+ 2026-10-04T21:50:10.46Z
+ -21.29
+ 56.75
+
+ 8.694970146399676
+ 20261004.214954.17-AIC-NZ.TKNZ.10.EHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:59:10.236153Z
+
+
+
+ MLv
+
+ 0.05370323245342679
+
+
+ 2026-10-04T21:50:18.16Z
+ -25.65
+ 64.32
+
+ 3.108748254213565
+ 20261004.214957.51-AIC-NZ.TCW.10.EHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:59:10.236796Z
+
+
+
+ MLv
+
+ 0.04678163715986884
+
+
+ 2026-10-04T21:50:21.88Z
+ -26.32
+ 68.98
+
+ 2.0744477483684984
+ 20261004.215000.56-AIC-NZ.DUWZ.10.EHZ
+
+ manual
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:22.921024Z
+
+
+
+ MLv
+
+ 0.18210498455415475
+
+
+ 2026-10-04T21:50:48.39Z
+ -66.82
+ 38.18
+
+ 2.025792541753873
+ 20261004.214946.57-AIC-NZ.KHZ.10.HHZ
+
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:51:30.207511Z
+
+
+
+
+
+ -42.1883659362793
+ 3.658012208726112
+ 89.99999761581421
+
+
+ 172.7863311767578
+ 4.088202385001626
+ 89.99999761581421
+
+
+ 33.001792907714844
+ 9.051712439234787
+ 89.99999761581421
+
+ LOCSAT
+ iasp91
+
+ 23
+ 18
+ 17
+ 12
+ 0
+ 0.2857422462758345
+ 60.37852478027344
+ 1.6269042491912842
+ 0.4347148835659027
+ 0.7998679280281067
+
+
+ 5.485840990577438
+ 4.355579307802058
+ 5.679209085308983
+ 122.36013339055887
+
+ 13826.94756377829
+ 5067.559313919867
+ 6479.622330012122
+ 83.58553419297853
+ 112.18087098973027
+ 178.73601361961775
+
+ confidence ellipsoid
+
+ manual
+ preliminary
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:44.37788Z
+ 2026-10-04T22:00:49.4018Z
+
+
+ 20261004.214944.79-AIC-NZ.THZ.10.HHZ
+ P
+ 11.805644989013672
+ 0.4347148835659027
+ 0.2469768524169922
+ true
+ false
+ false
+ 1
+
+
+ Pick/20261004215645.833897.20900
+ S
+ 11.805644989013672
+ 0.4347148835659027
+ -0.18769454956054688
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214946.57-AIC-NZ.KHZ.10.HHZ
+ P
+ 112.41768646240234
+ 0.6029001474380493
+ -0.05361652374267578
+ true
+ false
+ false
+ 1
+
+
+ Pick/20261004215645.83407.20901
+ S
+ 112.41768646240234
+ 0.6029001474380493
+ -0.17084312438964844
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214948.04-AIC-NZ.LTZ.10.HHZ
+ P
+ 212.5614471435547
+ 0.704879879951477
+ 0.15493106842041016
+ true
+ false
+ false
+ 1
+
+
+ Pick/20261004215645.834126.20902
+ S
+ 212.5614471435547
+ 0.704879879951477
+ -0.14000511169433594
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214948.67-AIC-NZ.CRSZ.10.EHZ
+ P
+ 87.07003021240234
+ 0.7662926316261292
+ 0.010166168212890625
+ true
+ false
+ false
+ 1
+
+
+ Pick/20261004215645.834173.20903
+ S
+ 87.07003021240234
+ 0.7662926316261292
+ 0.3911314010620117
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214949.26-AIC-NZ.GVZ.10.HHZ
+ P
+ 166.8224334716797
+ 0.7998679280281067
+ 0.19919395446777344
+ true
+ false
+ false
+ 1
+
+
+ Pick/20261004215645.834218.20904
+ S
+ 166.8224334716797
+ 0.7998679280281067
+ -0.20206356048583984
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214950.03-AIC-NZ.HPRZ.10.HHZ
+ P
+ 240.47584533691406
+ 0.860072910785675
+ 0.22164249420166016
+ true
+ false
+ false
+ 1
+
+
+ Pick/20261004215645.834264.20905
+ S
+ 240.47584533691406
+ 0.860072910785675
+ -0.033133506774902344
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214949.72-AIC-NZ.DSZ.10.HHZ
+ P
+ 300.8543701171875
+ 0.8557566404342651
+ -0.03604888916015625
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214953.52-AIC-NZ.TUWZ.10.EHZ
+ P
+ 49.13036346435547
+ 1.1500869989395142
+ -0.08463382720947266
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214954.17-AIC-NZ.TKNZ.10.EHZ
+ P
+ 6.516433715820312
+ 1.16124427318573
+ 0.41042327880859375
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214956.22-AIC-NZ.QRZ.10.HHZ
+ P
+ 351.8409118652344
+ 1.3753302097320557
+ -0.4760217666625977
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214957.51-AIC-NZ.TCW.10.EHZ
+ P
+ 49.28347778320312
+ 1.4831823110580444
+ -0.6633453369140625
+ true
+ false
+ false
+ 1
+
+
+ 20261004.214958.55-AIC-NZ.RACZ.10.EHZ
+ P
+ 196.93832397460938
+ 1.6095657348632812
+ -1.3416128158569336
+ false
+ false
+ false
+ 0
+
+
+ 20261004.215000.56-AIC-NZ.DUWZ.10.EHZ
+ P
+ 31.99152946472168
+ 1.6269042491912842
+ 0.41283130645751953
+ true
+ false
+ false
+ 1
+
+
+ 20261004.215005.21-AIC-NZ.KIW.10.EHZ
+ P
+ 50.94822311401367
+ 2.073864459991455
+ -1.0733938217163086
+ false
+ false
+ false
+ 0
+
+
+ 20261004.215007.19-AIC-NZ.OGWZ.10.EHZ
+ P
+ 53.36233520507812
+ 2.2548036575317383
+ -1.5774755477905273
+ false
+ false
+ false
+ 0
+
+
+ Pick/20261004215804.185412.20931
+ P
+ 237.4206085205078
+ 2.563654661178589
+ -1.0007104873657227
+ false
+ false
+ false
+ 0
+
+
+ 20261004.215021.36-AIC-NZ.ODZ.10.HHZ
+ P
+ 207.85491943359375
+ 3.250609874725342
+ -1.0761957168579102
+ false
+ false
+ false
+ 0
+
+
+
+ 1.6764396144888294
+
+ ML
+ Amplitude/20261004215036.609132.279124
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.221786Z
+
+
+
+
+ 1.6683343196519294
+
+ ML
+ Amplitude/20261004215042.619566.279126
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.221911Z
+
+
+
+
+ 1.811531698828681
+
+ ML
+ Amplitude/20261004215049.632053.279130
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.222006Z
+
+
+
+
+ 2.1947699804333878
+
+ ML
+ Amplitude/20261004215049.631484.279129
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.222091Z
+
+
+
+
+ 2.03063737684844
+
+ ML
+ Amplitude/20261004215053.137339.279131
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.222423Z
+
+
+
+
+ 2.0023768693712536
+
+ ML
+ Amplitude/20261004215100.65084.279136
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.222755Z
+
+
+
+
+ 2.1300275707828726
+
+ ML
+ Amplitude/20261004215057.144931.279134
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.222853Z
+
+
+
+
+ 1.9245887664717007
+
+ ML
+ Amplitude/20261004215136.5202.279233
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.222952Z
+
+
+
+
+ 2.388842445339451
+
+ ML
+ Amplitude/20261004215112.672014.279138
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.223047Z
+
+
+
+
+ 2.1092563865644873
+
+ ML
+ Amplitude/20261004215121.18879.279139
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.223147Z
+
+
+
+
+ 2.1202741995374694
+
+ ML
+ Amplitude/20261004215126.200176.279142
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.223237Z
+
+
+
+
+ 2.0497078482291378
+
+ ML
+ Amplitude/20261004215136.528302.279234
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.223388Z
+
+
+
+
+ 1.7474039768299903
+
+ MLv
+ Amplitude/20261004215920.258151.21032
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.66462Z
+
+
+
+
+ 2.032791699941785
+
+ MLv
+ Amplitude/20261004215954.969277.21052
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.664792Z
+
+
+
+
+ 2.2642092260945486
+
+ MLv
+ Amplitude/20261004215910.2345.21027
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.664895Z
+
+
+
+
+ 2.227501256239425
+
+ MLv
+ Amplitude/20261004220009.663811.21054
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.665007Z
+
+
+
+
+ 1.9785242731939325
+
+ MLv
+ Amplitude/20261004215910.235776.21028
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.665119Z
+
+
+
+
+ 2.369381125700613
+
+ MLv
+ Amplitude/20261004215910.236135.21029
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.665218Z
+
+
+
+
+ 2.053521655325501
+
+ MLv
+ Amplitude/20261004215910.236774.21030
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.665308Z
+
+
+
+
+ 2.074419316043424
+
+ MLv
+ Amplitude/20261004220022.920924.21059
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.665405Z
+
+
+
+
+ 2.0955194832421462
+
+ MLv
+ 20261004.214946.57-AIC-NZ.KHZ.10.HHZ.MLv
+
+ true
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:49.568321Z
+
+
+
+
+ 2.0126672793439058
+ 0.14044639900905642
+
+ ML
+ trimmed mean
+ 10
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:58:58.221554Z
+
+
+ StationMagnitude/20261004215858.221756.21007
+ -0.3362276648550764
+ 0.5
+
+
+ StationMagnitude/20261004215858.2219.21008
+ -0.3443329596919764
+ 0
+
+
+ StationMagnitude/20261004215858.221997.21009
+ -0.20113558051522484
+ 1
+
+
+ StationMagnitude/20261004215858.222083.21010
+ 0.182102701089482
+ 0.5
+
+
+ StationMagnitude/20261004215858.222407.21011
+ 0.017970097504534266
+ 1
+
+
+ StationMagnitude/20261004215858.22274.21012
+ -0.010290409972652181
+ 1
+
+
+ StationMagnitude/20261004215858.222844.21013
+ 0.11736029143896687
+ 1
+
+
+ StationMagnitude/20261004215858.222944.21014
+ -0.08807851287220503
+ 1
+
+
+ StationMagnitude/20261004215858.223038.21015
+ 0.37617516599554524
+ 0
+
+
+ StationMagnitude/20261004215858.223139.21016
+ 0.09658910722058156
+ 1
+
+
+ StationMagnitude/20261004215858.223228.21017
+ 0.10760692019356366
+ 1
+
+
+ StationMagnitude/20261004215858.223374.21018
+ 0.037040568885231995
+ 1
+
+
+
+
+ 2.1051612378064357
+ 0.11414843471391074
+
+ MLv
+ trimmed mean
+ 6
+ confirmed
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:32.664335Z
+
+
+ StationMagnitude/20261004220032.664596.21062
+ -0.35775726097644545
+ 0
+
+
+ StationMagnitude/20261004220032.664774.21063
+ -0.07236953786465072
+ 1
+
+
+ StationMagnitude/20261004220032.664885.21064
+ 0.15904798828811284
+ 1
+
+
+ StationMagnitude/20261004220032.664997.21065
+ 0.12234001843298925
+ 1
+
+
+ StationMagnitude/20261004220032.66511.21066
+ -0.12663696461250318
+ 1
+
+
+ StationMagnitude/20261004220032.66521.21067
+ 0.26421988789417705
+ 0
+
+
+ StationMagnitude/20261004220032.665301.21068
+ -0.05163958248093481
+ 1
+
+
+ StationMagnitude/20261004220032.665397.21069
+ -0.030741921763011604
+ 1
+
+
+
+
+ 2.1051612378064357
+
+ M
+ weighted average
+ 6
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T22:00:49.569486Z
+
+
+
+
+ Origin/20261004215844.377698.20945
+ Magnitude/20261004215858.223443.21019
+ earthquake
+
+ WEL(GNS_StagingRapid)
+ 2026-10-04T21:50:13.359732Z
+ 2026-10-04T22:00:49.645897Z
+
+
+ Marlborough
+ region name
+
+ Origin/20261004215844.377698.20945
+
+
+
diff --git a/sc3ml/testdata/scml_0.14.xsd b/sc3ml/testdata/scml_0.14.xsd
new file mode 100644
index 0000000..07f1e11
--- /dev/null
+++ b/sc3ml/testdata/scml_0.14.xsd
@@ -0,0 +1,1304 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+