is not a file.
diff --git a/src/main/resources/i18n_ja_JP.properties b/src/main/resources/i18n_ja_JP.properties
new file mode 100644
index 0000000..2385d63
--- /dev/null
+++ b/src/main/resources/i18n_ja_JP.properties
@@ -0,0 +1,68 @@
+dialog.quit=\u7d42\u4e86
+dialog.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
+dialog.msg1=\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002
+dialog.select=\u9078\u629e
+
+menu.tools=\u30c4\u30fc\u30eb
+menu.restamp=Restamp
+button.close=\u9589\u3058\u308b
+
+menu.quit=\u7d42\u4e86...
+button.next=\u6b21\u3078
+button.previous=\u623b\u308b
+button.execute=\u51e6\u7406\u5b9f\u884c
+button.select=\u9078\u629e...
+button.update=\u5909\u66f4...
+button.reset=\u518d\u8a2d\u5b9a...
+
+tab.100=1. \u753b\u50cf\u5143\u306e\u30d5\u30a1\u30a4\u30eb\u30d5\u30a9\u30eb\u30c0
+label.100=1. \u4f4d\u7f6e\u60c5\u5831\u3092\u4ed8\u52a0\u3057\u305f\u3044\u753b\u50cf\u30d5\u30a1\u30a4\u30eb\u304c\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
- \u30b3\u30d4\u30fc\u52d5\u4f5c\u3092\u884c\u3046\u3068\u3001\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u6642\u523b\u304c\u30b3\u30d4\u30fc\u3092\u5b9f\u884c\u3057\u305f\u6642\u523b\u306b\u66f8\u304d\u63db\u308f\u3063\u3066\u3057\u307e\u3046\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u30ab\u30e1\u30e9SD\u30ab\u30fc\u30c9\u5185\u306e\u30d5\u30a9\u30eb\u30c0\u3092\u76f4\u63a5\u6307\u5b9a\u3059\u308b\u3053\u3068\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002
+label.110=\u5bfe\u8c61\u30d5\u30a9\u30eb\u30c0
+
+tab.200=2. \u57fa\u6e96\u3068\u3059\u308b\u753b\u50cf\u306e\u9078\u629e
+tab.restamp.200=2. \u57fa\u6e96\u3068\u3059\u308b\u753b\u50cf(\u958b\u59cb\u753b\u50cf)\u306e\u9078\u629e
+tab.restamp.250=3. \u57fa\u6e96\u3068\u3059\u308b\u753b\u50cf(\u7d42\u4e86\u753b\u50cf)\u306e\u9078\u629e
+label.200=2. \u6b63\u78ba\u306a\u64ae\u5f71\u6642\u523b\u304c\u5224\u660e\u3067\u304d\u308b\u753b\u50cf\u3092\u9078\u3093\u3067\u304f\u3060\u3055\u3044\u3002
- \u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306e\u6642\u8a08\u753b\u9762\uff08\u79d2\u304c\u5224\u5225\u3067\u304d\u308b\u3053\u3068\uff09\u3092\u64ae\u5f71\u3057\u305f\u753b\u50cf
- \u30ab\u30e1\u30e9\u306e\u6642\u8a08\u304c\u6b63\u78ba\u306a\u3089\u3070\u3001\u3069\u306e\u753b\u50cf\u3092\u9078\u3093\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u3002
+label.210=\u57fa\u6e96\u6642\u523b\u753b\u50cf
+label.220=EXIF\u306e\u65e5\u6642\u3092\u57fa\u6e96\u306b\u3059\u308b
+label.230=\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0\u65e5\u6642\u3092\u57fa\u6e96\u306b\u3059\u308b
+
+tab.300=2a. \u672c\u5f53\u306e\u6642\u523b\u3092\u8a2d\u5b9a
+tab.restamp.300=2a. \u958b\u59cb\u753b\u50cf\u306e\u672c\u5f53\u306e\u6642\u523b\u3092\u8a2d\u5b9a
+tab.restamp.350=3a. \u7d42\u4e86\u753b\u50cf\u306e\u672c\u5f53\u306e\u6642\u523b\u3092\u8a2d\u5b9a
+label.300=3. \u6b63\u78ba\u306a\u64ae\u5f71\u6642\u523b\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
- \u30ab\u30e1\u30e9\u306e\u6642\u8a08\u304c\u6b63\u78ba\u306a\u3089\u3070\u3001\u8a2d\u5b9a\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002
+label.310=\u57fa\u6e96\u6642\u523b
+label.restamp.310=\u57fa\u6e96\u6642\u523b(\u958b\u59cb\u753b\u50cf)
+
+tab.400=3. GPX\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e
+label.400=4. \u30d2\u30e2\u4ed8\u3092\u884c\u3046GPX\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
- \u30d5\u30a9\u30eb\u30c0\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u30d5\u30a9\u30eb\u30c0\u5185\u306b\u3042\u308b\u3059\u3079\u3066\u306eGPX\u30d5\u30a1\u30a4\u30eb\u3092\u5bfe\u8c61\u3068\u3057\u307e\u3059\u3002
+label.410=GPX\u30d5\u30a9\u30eb\u30c0
+label.420=\u30bb\u30b0\u30e1\u30f3\u30c8'trkseg'\u306e\u6700\u521d\u306e\uff11\u30ce\u30fc\u30c9\u306f\u7121\u8996\u3059\u308b
+label.430=\u751f\u6210\u3055\u308c\u305fGPX\u30d5\u30a1\u30a4\u30eb\uff08\u30d5\u30a1\u30a4\u30eb\u540d\u304c'_.gpx'\u3067\u7d42\u308f\u308b\u3082\u306e\uff09\u3082\u5909\u63db\u306e\u5bfe\u8c61\u306b\u3059\u308b
+
+tab.500=4. EXIF\u5909\u63db\u306e\u5b9f\u884c
+label.500=EXIF\u5909\u63db\u3092\u884c\u3046\u304b\u3069\u3046\u304b\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+label.501=EXIF\u5909\u63db\u3092\u884c\u3046\u5834\u5408\u306b\u306f\u3001\u5909\u63db\u30d5\u30a1\u30a4\u30eb\u3092\u51fa\u529b\u3059\u308b\u30d5\u30a9\u30eb\u30c0\u3082\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+label.502=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0\u306b\u306f\u3001\u66f8\u304d\u8fbc\u307f\u6a29\u9650\u3068\u3001\u5341\u5206\u306a\u7a7a\u304d\u5bb9\u91cf\u304c\u5fc5\u8981\u3067\u3059\u3002
+label.510=IMG\u306e\u5909\u63db\u3092\u3059\u308b
+label.520=GPX\u30d5\u30a1\u30a4\u30eb\u6642\u9593\u5916\u306e\u30d5\u30a1\u30a4\u30eb\u3082\u30b3\u30d4\u30fc\u3059\u308b
+label.530=\u51fa\u529b\u30d5\u30a9\u30eb\u30c0
+label.540=EXIF\u306e\u5909\u63db\u3092\u3059\u308b
+label.550=\u30dd\u30a4\u30f3\u30c8\u30de\u30fc\u30ab\u30fc\u3092GPX\u30d5\u30a1\u30a4\u30eb\u306b\u51fa\u529b\u3059\u308b
+label.560=\u30bd\u30fc\u30b9GPX\u306e\u3092\u7121\u8996\u3059\u308b
+label.570=\u51fa\u529bGPX\u306b\u3092\u4e0a\u66f8\u304d\u3059\u308b
+
+tab.restamp.400=4. \u5909\u63db\u306e\u5b9f\u884c
+
+msg.100=GPX\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002('%s')
+msg.110=\u5bfe\u8c61\u3068\u306a\u308bGPX\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093('%s')
+msg.120=\u8907\u6570\u306eGPX\u30d5\u30a1\u30a4\u30eb\u304c\u3042\u308b\u3068\u304d\u306b\u306f\u3001'IMG.OUTPUT_ALL'\u30aa\u30d7\u30b7\u30e7\u30f3\u306f\u6307\u5b9a\u3067\u304d\u307e\u305b\u3093\u3002
+msg.130='%s'\u306e\u66f8\u5f0f\u304c\u9055\u3044\u307e\u3059(%s)
+msg.140='%s'\u306bEXIF\u60c5\u5831\u304c\u3042\u308a\u307e\u305b\u3093
+
+msg.200=[error] \u304c\u5b58\u5728\u3057\u307e\u305b\u3093
+msg.210=[error] \u304c\u30d5\u30a9\u30eb\u30c0\u3058\u3083\u306a\u3044
+msg.220=[error] \u304c\u5b58\u5728\u3057\u307e\u305b\u3093
+msg.230=[error] \u304c\u30d5\u30a1\u30a4\u30eb\u3058\u3083\u306a\u3044
+msg.240=[error] \u304c\u5b58\u5728\u3057\u307e\u305b\u3093
+msg.250=[error] \u304c\u30d5\u30a1\u30a4\u30eb\u3058\u3083\u306a\u3044
diff --git a/src/main/resources/images/Fit16.gif b/src/main/resources/images/Fit16.gif
new file mode 100644
index 0000000..0d94f66
--- /dev/null
+++ b/src/main/resources/images/Fit16.gif
Binary files differ
diff --git a/src/main/resources/images/Open16.gif b/src/main/resources/images/Open16.gif
new file mode 100644
index 0000000..fabd567
--- /dev/null
+++ b/src/main/resources/images/Open16.gif
Binary files differ
diff --git a/src/main/resources/images/Original16.gif b/src/main/resources/images/Original16.gif
new file mode 100644
index 0000000..57e71ce
--- /dev/null
+++ b/src/main/resources/images/Original16.gif
Binary files differ
diff --git a/src/main/resources/images/Rotate16.gif b/src/main/resources/images/Rotate16.gif
new file mode 100644
index 0000000..587b9d2
--- /dev/null
+++ b/src/main/resources/images/Rotate16.gif
Binary files differ
diff --git a/src/main/resources/images/Save16.gif b/src/main/resources/images/Save16.gif
new file mode 100644
index 0000000..954f1ac
--- /dev/null
+++ b/src/main/resources/images/Save16.gif
Binary files differ
diff --git a/src/main/resources/images/ZoomIn16.gif b/src/main/resources/images/ZoomIn16.gif
new file mode 100644
index 0000000..2329426
--- /dev/null
+++ b/src/main/resources/images/ZoomIn16.gif
Binary files differ
diff --git a/src/main/resources/images/ZoomOut16.gif b/src/main/resources/images/ZoomOut16.gif
new file mode 100644
index 0000000..f9f7565
--- /dev/null
+++ b/src/main/resources/images/ZoomOut16.gif
Binary files differ
diff --git a/src/main/resources/images/gifIcon.gif b/src/main/resources/images/gifIcon.gif
new file mode 100644
index 0000000..915e184
--- /dev/null
+++ b/src/main/resources/images/gifIcon.gif
Binary files differ
diff --git a/src/main/resources/images/jpgIcon.gif b/src/main/resources/images/jpgIcon.gif
new file mode 100644
index 0000000..7294f36
--- /dev/null
+++ b/src/main/resources/images/jpgIcon.gif
Binary files differ
diff --git a/src/main/resources/images/media_playback_start.png b/src/main/resources/images/media_playback_start.png
new file mode 100644
index 0000000..2f8c4b5
--- /dev/null
+++ b/src/main/resources/images/media_playback_start.png
Binary files differ
diff --git a/src/main/resources/images/pngIcon.png b/src/main/resources/images/pngIcon.png
new file mode 100644
index 0000000..bd2fd54
--- /dev/null
+++ b/src/main/resources/images/pngIcon.png
Binary files differ
diff --git a/src/main/resources/images/tiffIcon.gif b/src/main/resources/images/tiffIcon.gif
new file mode 100644
index 0000000..84b4132
--- /dev/null
+++ b/src/main/resources/images/tiffIcon.gif
Binary files differ
diff --git a/src/test/AdjustTime.ini b/src/test/AdjustTime.ini
new file mode 100644
index 0000000..cd653c8
--- /dev/null
+++ b/src/test/AdjustTime.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sat Jan 25 22:02:27 JST 2020
+GPX.OVERWRITE_MAGVAR=false
+IMG.BASE_FILE=00002.jpg
+GPX.OUTPUT_SPEED=false
+IMG.SOURCE_FOLDER=/mnt/ssd500/home/yuu/workspace/AdjustGps/src/test/data/images
+GPX.SOURCE_FOLDER=/mnt/ssd500/home/yuu/workspace/AdjustGps/src/test/data
+IMG.OUTPUT_FOLDER=/mnt/ssd500/home/yuu/workspace/AdjustGps/src/test/data/out
+GPX.noFirstNode=true
+GPX.gpxSplit=true
+IMG.OUTPUT=true
+GPX.OUTPUT_WPT=false
+GPX.REUSE=false
+IMG.TIME=2019-09-04T07\:26\:55Z
+IMG.OUTPUT_EXIF=true
+IMG.OUTPUT_ALL=false
+GPX.BASETIME=FILE_UPDATE
diff --git a/src/test/data/20170517.gpx b/src/test/data/20170517.gpx
new file mode 100644
index 0000000..d1c827b
--- /dev/null
+++ b/src/test/data/20170517.gpx
@@ -0,0 +1,7424 @@
+
+
+
+ ACTIVE LOG095807
+
+
+ 40.664
+
+
+
+ 39.233
+
+
+
+ 38.879
+
+
+
+ 39.321
+
+
+
+ 38.839
+
+
+
+ 33.392
+
+
+
+ 29.491
+
+
+
+ 27.843
+
+
+
+ 25.357
+
+
+
+ 23.539
+
+
+
+ 22.851
+
+
+
+ 21.926
+
+
+
+ 21.243
+
+
+
+ 20.950
+
+
+
+ 21.018
+
+
+
+ 21.071
+
+
+
+ 21.837
+
+
+
+ 21.948
+
+
+
+ 22.006
+
+
+
+ 21.446
+
+
+
+ 21.410
+
+
+
+ 21.952
+
+
+
+ 23.713
+
+
+
+ 24.738
+
+
+
+ 25.244
+
+
+
+ 25.777
+
+
+
+ 25.996
+
+
+
+ 26.247
+
+
+
+ 26.379
+
+
+
+ 26.517
+
+
+
+ 26.728
+
+
+
+ 26.927
+
+
+
+ 27.188
+
+
+
+ 27.789
+
+
+
+ 28.672
+
+
+
+ 28.999
+
+
+
+ 29.350
+
+
+
+ 29.730
+
+
+
+ 30.171
+
+
+
+ 30.468
+
+
+
+ 30.764
+
+
+
+ 30.900
+
+
+
+ 31.151
+
+
+
+ 31.440
+
+
+
+ 31.928
+
+
+
+ 32.253
+
+
+
+ 32.387
+
+
+
+ 32.626
+
+
+
+ 32.832
+
+
+
+ 32.886
+
+
+
+ 32.980
+
+
+
+ 33.004
+
+
+
+ 33.093
+
+
+
+ 33.046
+
+
+
+ 33.043
+
+
+
+ 33.013
+
+
+
+ 33.147
+
+
+
+ 33.131
+
+
+
+ 33.188
+
+
+
+ 33.329
+
+
+
+ 33.488
+
+
+
+ 33.635
+
+
+
+ 33.751
+
+
+
+ 33.625
+
+
+
+ 33.551
+
+
+
+ 33.481
+
+
+
+ 33.369
+
+
+
+ 33.316
+
+
+
+ 33.258
+
+
+
+ 33.150
+
+
+
+ 33.026
+
+
+
+ 32.984
+
+
+
+ 32.930
+
+
+
+ 32.927
+
+
+
+ 32.947
+
+
+
+ 32.850
+
+
+
+ 32.994
+
+
+
+ 33.009
+
+
+
+ 33.069
+
+
+
+ 33.247
+
+
+
+ 33.735
+
+
+
+ 34.147
+
+
+
+ 34.563
+
+
+
+ 35.077
+
+
+
+ 35.376
+
+
+
+ 35.896
+
+
+
+ 36.311
+
+
+
+ 36.825
+
+
+
+ 37.205
+
+
+
+ 37.355
+
+
+
+ 37.317
+
+
+
+ 37.305
+
+
+
+ 37.035
+
+
+
+ 36.754
+
+
+
+ 36.628
+
+
+
+ 36.487
+
+
+
+ 36.456
+
+
+
+ 36.411
+
+
+
+ 36.394
+
+
+
+ 36.369
+
+
+
+ 36.372
+
+
+
+ 36.332
+
+
+
+ 36.372
+
+
+
+ 36.407
+
+
+
+ 36.541
+
+
+
+ 36.665
+
+
+
+ 36.710
+
+
+
+ 36.797
+
+
+
+ 36.882
+
+
+
+ 36.811
+
+
+
+ 36.768
+
+
+
+ 36.847
+
+
+
+ 36.919
+
+
+
+ 36.956
+
+
+
+ 37.005
+
+
+
+ 37.137
+
+
+
+ 37.220
+
+
+
+ 37.381
+
+
+
+ 37.547
+
+
+
+ 37.699
+
+
+
+ 37.851
+
+
+
+ 37.931
+
+
+
+ 38.114
+
+
+
+ 38.373
+
+
+
+ 38.559
+
+
+
+ 38.607
+
+
+
+ 38.673
+
+
+
+ 38.791
+
+
+
+ 39.014
+
+
+
+ 39.180
+
+
+
+ 39.230
+
+
+
+ 39.412
+
+
+
+ 39.472
+
+
+
+ 39.616
+
+
+
+ 39.769
+
+
+
+ 39.872
+
+
+
+ 39.996
+
+
+
+ 40.143
+
+
+
+ 40.299
+
+
+
+ 40.497
+
+
+
+ 41.021
+
+
+
+ 41.277
+
+
+
+ 41.379
+
+
+
+ 41.479
+
+
+
+ 41.683
+
+
+
+ 41.926
+
+
+
+ 42.022
+
+
+
+ 42.184
+
+
+
+ 42.303
+
+
+
+ 42.385
+
+
+
+ 42.511
+
+
+
+ 42.651
+
+
+
+ 42.794
+
+
+
+ 42.889
+
+
+
+ 42.846
+
+
+
+ 42.865
+
+
+
+ 42.776
+
+
+
+ 42.888
+
+
+
+ 42.905
+
+
+
+ 42.919
+
+
+
+ 43.000
+
+
+
+ 42.792
+
+
+
+ 42.476
+
+
+
+ 42.003
+
+
+
+ 41.724
+
+
+
+ 41.350
+
+
+
+ 41.085
+
+
+
+ 40.979
+
+
+
+ 41.179
+
+
+
+ 41.260
+
+
+
+ 41.141
+
+
+
+ 40.948
+
+
+
+ 40.745
+
+
+
+ 40.618
+
+
+
+ 40.517
+
+
+
+ 40.465
+
+
+
+ 40.349
+
+
+
+ 40.321
+
+
+
+ 40.320
+
+
+
+ 40.322
+
+
+
+ 40.301
+
+
+
+ 40.230
+
+
+
+ 40.109
+
+
+
+ 40.063
+
+
+
+ 39.991
+
+
+
+ 39.926
+
+
+
+ 39.906
+
+
+
+ 39.859
+
+
+
+ 39.803
+
+
+
+ 39.742
+
+
+
+ 39.660
+
+
+
+ 39.584
+
+
+
+ 39.467
+
+
+
+ 39.359
+
+
+
+ 39.248
+
+
+
+ 39.123
+
+
+
+ 38.997
+
+
+
+ 38.797
+
+
+
+ 38.679
+
+
+
+ 38.523
+
+
+
+ 38.370
+
+
+
+ 38.201
+
+
+
+ 38.114
+
+
+
+ 37.945
+
+
+
+ 37.790
+
+
+
+ 37.650
+
+
+
+ 37.517
+
+
+
+ 37.347
+
+
+
+ 37.285
+
+
+
+ 37.277
+
+
+
+ 37.175
+
+
+
+ 37.096
+
+
+
+ 37.054
+
+
+
+ 37.028
+
+
+
+ 37.036
+
+
+
+ 37.115
+
+
+
+ 37.475
+
+
+
+ 37.929
+
+
+
+ 38.381
+
+
+
+ 38.858
+
+
+
+ 39.276
+
+
+
+ 39.211
+
+
+
+ 39.698
+
+
+
+ 40.199
+
+
+
+ 40.495
+
+
+
+ 40.550
+
+
+
+ 40.849
+
+
+
+ 41.138
+
+
+
+ 41.453
+
+
+
+ 41.665
+
+
+
+ 41.661
+
+
+
+ 41.468
+
+
+
+ 41.545
+
+
+
+ 41.579
+
+
+
+ 41.347
+
+
+
+ 41.316
+
+
+
+ 41.252
+
+
+
+ 41.279
+
+
+
+ 41.266
+
+
+
+ 41.412
+
+
+
+ 41.487
+
+
+
+ 41.656
+
+
+
+ 41.799
+
+
+
+ 41.907
+
+
+
+ 41.986
+
+
+
+ 42.079
+
+
+
+ 42.164
+
+
+
+ 42.160
+
+
+
+ 42.134
+
+
+
+ 42.131
+
+
+
+ 42.177
+
+
+
+ 42.245
+
+
+
+ 42.389
+
+
+
+ 42.409
+
+
+
+ 42.360
+
+
+
+ 42.338
+
+
+
+ 42.326
+
+
+
+ 42.228
+
+
+
+ 42.171
+
+
+
+ 42.094
+
+
+
+ 41.977
+
+
+
+ 41.841
+
+
+
+ 41.697
+
+
+
+ 41.640
+
+
+
+ 41.520
+
+
+
+ 41.331
+
+
+
+ 41.126
+
+
+
+ 40.994
+
+
+
+ 40.847
+
+
+
+ 40.697
+
+
+
+ 40.633
+
+
+
+ 40.587
+
+
+
+ 40.541
+
+
+
+ 40.579
+
+
+
+ 40.656
+
+
+
+ 40.613
+
+
+
+ 40.698
+
+
+
+ 40.878
+
+
+
+ 41.058
+
+
+
+ 41.361
+
+
+
+ 41.584
+
+
+
+ 41.848
+
+
+
+ 42.017
+
+
+
+ 42.139
+
+
+
+ 42.308
+
+
+
+ 42.405
+
+
+
+ 42.546
+
+
+
+ 42.779
+
+
+
+ 43.059
+
+
+
+ 43.270
+
+
+
+ 43.487
+
+
+
+ 43.619
+
+
+
+ 43.647
+
+
+
+ 43.695
+
+
+
+ 43.911
+
+
+
+ 44.085
+
+
+
+ 44.282
+
+
+
+ 44.443
+
+
+
+ 44.526
+
+
+
+ 44.606
+
+
+
+ 44.597
+
+
+
+ 44.636
+
+
+
+ 44.653
+
+
+
+ 44.646
+
+
+
+ 44.613
+
+
+
+ 44.547
+
+
+
+ 44.514
+
+
+
+ 44.507
+
+
+
+ 44.588
+
+
+
+ 44.672
+
+
+
+ 44.771
+
+
+
+ 44.836
+
+
+
+ 44.401
+
+
+
+ 43.828
+
+
+
+ 43.220
+
+
+
+ 42.716
+
+
+
+ 42.360
+
+
+
+ 41.916
+
+
+
+ 41.555
+
+
+
+ 41.251
+
+
+
+ 41.055
+
+
+
+ 40.848
+
+
+
+ 40.610
+
+
+
+ 40.449
+
+
+
+ 40.209
+
+
+
+ 40.076
+
+
+
+ 39.950
+
+
+
+ 39.787
+
+
+
+ 39.653
+
+
+
+ 39.630
+
+
+
+ 39.666
+
+
+
+ 39.699
+
+
+
+ 39.761
+
+
+
+ 39.829
+
+
+
+ 39.642
+
+
+
+ 39.475
+
+
+
+ 39.373
+
+
+
+ 39.158
+
+
+
+ 39.068
+
+
+
+ 38.738
+
+
+
+ 38.153
+
+
+
+ 37.802
+
+
+
+ 37.555
+
+
+
+ 37.495
+
+
+
+ 37.467
+
+
+
+ 37.267
+
+
+
+ 37.168
+
+
+
+ 37.014
+
+
+
+ 36.991
+
+
+
+ 37.025
+
+
+
+ 37.258
+
+
+
+ 37.450
+
+
+
+ 37.539
+
+
+
+ 37.657
+
+
+
+ 37.915
+
+
+
+ 38.135
+
+
+
+ 38.268
+
+
+
+ 38.347
+
+
+
+ 38.839
+
+
+
+ 39.324
+
+
+
+ 40.132
+
+
+
+ 40.520
+
+
+
+ 40.870
+
+
+
+ 41.369
+
+
+
+ 41.794
+
+
+
+ 42.125
+
+
+
+ 42.442
+
+
+
+ 42.734
+
+
+
+ 42.860
+
+
+
+ 42.983
+
+
+
+ 42.748
+
+
+
+ 42.571
+
+
+
+ 42.612
+
+
+
+ 42.745
+
+
+
+ 42.837
+
+
+
+ 43.037
+
+
+
+ 43.107
+
+
+
+ 43.143
+
+
+
+ 43.270
+
+
+
+ 43.301
+
+
+
+ 43.399
+
+
+
+ 43.426
+
+
+
+ 43.440
+
+
+
+ 43.851
+
+
+
+ 44.299
+
+
+
+ 44.742
+
+
+
+ 45.096
+
+
+
+ 45.428
+
+
+
+ 45.743
+
+
+
+ 46.031
+
+
+
+ 46.297
+
+
+
+ 46.553
+
+
+
+ 46.829
+
+
+
+ 47.422
+
+
+
+ 47.829
+
+
+
+ 48.229
+
+
+
+ 48.421
+
+
+
+ 48.472
+
+
+
+ 48.153
+
+
+
+ 47.834
+
+
+
+ 47.527
+
+
+
+ 47.219
+
+
+
+ 46.905
+
+
+
+ 46.813
+
+
+
+ 46.613
+
+
+
+ 46.267
+
+
+
+ 45.942
+
+
+
+ 45.556
+
+
+
+ 44.920
+
+
+
+ 44.293
+
+
+
+ 43.799
+
+
+
+ 43.457
+
+
+
+ 43.186
+
+
+
+ 42.969
+
+
+
+ 42.824
+
+
+
+ 42.639
+
+
+
+ 42.483
+
+
+
+ 42.300
+
+
+
+ 42.044
+
+
+
+ 41.847
+
+
+
+ 41.637
+
+
+
+ 41.640
+
+
+
+ 41.587
+
+
+
+ 41.516
+
+
+
+ 41.483
+
+
+
+ 41.535
+
+
+
+ 41.659
+
+
+
+ 41.685
+
+
+
+ 41.766
+
+
+
+ 42.210
+
+
+
+ 42.301
+
+
+
+ 42.382
+
+
+
+ 42.281
+
+
+
+ 42.049
+
+
+
+ 41.841
+
+
+
+ 42.034
+
+
+
+ 42.050
+
+
+
+ 41.929
+
+
+
+ 41.987
+
+
+
+ 42.106
+
+
+
+ 42.025
+
+
+
+ 41.852
+
+
+
+ 41.728
+
+
+
+ 41.696
+
+
+
+ 41.327
+
+
+
+ 40.883
+
+
+
+ 40.517
+
+
+
+ 40.207
+
+
+
+ 39.915
+
+
+
+ 39.907
+
+
+
+ 39.602
+
+
+
+ 39.313
+
+
+
+ 39.141
+
+
+
+ 39.092
+
+
+
+ 39.047
+
+
+
+ 39.029
+
+
+
+ 38.989
+
+
+
+ 39.013
+
+
+
+ 38.991
+
+
+
+ 38.990
+
+
+
+ 39.029
+
+
+
+ 38.960
+
+
+
+ 38.874
+
+
+
+ 38.899
+
+
+
+ 38.936
+
+
+
+ 39.058
+
+
+
+ 39.104
+
+
+
+ 39.094
+
+
+
+ 38.996
+
+
+
+ 38.947
+
+
+
+ 38.925
+
+
+
+ 39.151
+
+
+
+ 39.465
+
+
+
+ 39.586
+
+
+
+ 39.703
+
+
+
+ 40.138
+
+
+
+ 40.662
+
+
+
+ 41.192
+
+
+
+ 41.629
+
+
+
+ 42.375
+
+
+
+ 42.770
+
+
+
+ 43.177
+
+
+
+ 43.239
+
+
+
+ 43.490
+
+
+
+ 43.438
+
+
+
+ 43.457
+
+
+
+ 43.305
+
+
+
+ 43.285
+
+
+
+ 43.225
+
+
+
+ 43.381
+
+
+
+ 43.595
+
+
+
+ 43.859
+
+
+
+ 44.067
+
+
+
+ 44.236
+
+
+
+ 44.112
+
+
+
+ 44.019
+
+
+
+ 43.993
+
+
+
+ 44.105
+
+
+
+ 44.284
+
+
+
+ 44.516
+
+
+
+ 44.575
+
+
+
+ 44.536
+
+
+
+ 44.643
+
+
+
+ 44.768
+
+
+
+ 44.944
+
+
+
+ 45.034
+
+
+
+ 45.161
+
+
+
+ 45.343
+
+
+
+ 45.341
+
+
+
+ 45.464
+
+
+
+ 45.617
+
+
+
+ 45.929
+
+
+
+ 46.152
+
+
+
+ 46.550
+
+
+
+ 46.608
+
+
+
+ 46.623
+
+
+
+ 46.807
+
+
+
+ 46.977
+
+
+
+ 47.310
+
+
+
+ 47.566
+
+
+
+ 47.877
+
+
+
+ 48.052
+
+
+
+ 48.425
+
+
+
+ 48.767
+
+
+
+ 48.944
+
+
+
+ 49.163
+
+
+
+ 49.439
+
+
+
+ 49.639
+
+
+
+ 49.745
+
+
+
+ 49.866
+
+
+
+ 50.015
+
+
+
+ 50.109
+
+
+
+ 50.278
+
+
+
+ 50.509
+
+
+
+ 50.645
+
+
+
+ 50.573
+
+
+
+ 50.453
+
+
+
+ 50.484
+
+
+
+ 50.370
+
+
+
+ 50.354
+
+
+
+ 50.221
+
+
+
+ 50.036
+
+
+
+ 50.042
+
+
+
+ 49.978
+
+
+
+ 49.869
+
+
+
+ 49.838
+
+
+
+ 49.849
+
+
+
+ 50.060
+
+
+
+ 50.202
+
+
+
+ 50.237
+
+
+
+ 50.207
+
+
+
+ 50.339
+
+
+
+ 50.523
+
+
+
+ 50.655
+
+
+
+ 50.660
+
+
+
+ 50.793
+
+
+
+ 50.930
+
+
+
+ 51.033
+
+
+
+ 51.274
+
+
+
+ 51.551
+
+
+
+ 51.875
+
+
+
+ 52.266
+
+
+
+ 52.353
+
+
+
+ 52.493
+
+
+
+ 52.511
+
+
+
+ 52.499
+
+
+
+ 52.531
+
+
+
+ 52.621
+
+
+
+ 52.573
+
+
+
+ 52.744
+
+
+
+ 52.962
+
+
+
+ 53.055
+
+
+
+ 53.044
+
+
+
+ 52.736
+
+
+
+ 52.528
+
+
+
+ 51.923
+
+
+
+ 51.675
+
+
+
+ 51.379
+
+
+
+ 50.930
+
+
+
+ 50.432
+
+
+
+ 49.866
+
+
+
+ 49.351
+
+
+
+ 48.938
+
+
+
+ 48.732
+
+
+
+ 48.347
+
+
+
+ 48.059
+
+
+
+ 47.887
+
+
+
+ 47.905
+
+
+
+ 47.867
+
+
+
+ 47.775
+
+
+
+ 47.753
+
+
+
+ 47.799
+
+
+
+ 47.821
+
+
+
+ 47.968
+
+
+
+ 48.137
+
+
+
+ 48.291
+
+
+
+ 48.310
+
+
+
+ 48.506
+
+
+
+ 48.597
+
+
+
+ 48.621
+
+
+
+ 48.595
+
+
+
+ 48.791
+
+
+
+ 48.786
+
+
+
+ 48.625
+
+
+
+ 48.441
+
+
+
+ 48.258
+
+
+
+ 48.099
+
+
+
+ 47.948
+
+
+
+ 47.758
+
+
+
+ 47.478
+
+
+
+ 47.214
+
+
+
+ 46.950
+
+
+
+ 46.681
+
+
+
+ 46.660
+
+
+
+ 46.663
+
+
+
+ 46.668
+
+
+
+ 46.694
+
+
+
+ 46.665
+
+
+
+ 46.668
+
+
+
+ 46.819
+
+
+
+ 46.881
+
+
+
+ 46.901
+
+
+
+ 47.044
+
+
+
+ 47.168
+
+
+
+ 47.389
+
+
+
+ 47.518
+
+
+
+ 47.706
+
+
+
+ 47.911
+
+
+
+ 48.163
+
+
+
+ 48.356
+
+
+
+ 48.566
+
+
+
+ 48.835
+
+
+
+ 48.967
+
+
+
+ 49.096
+
+
+
+ 49.239
+
+
+
+ 49.264
+
+
+
+ 49.170
+
+
+
+ 49.126
+
+
+
+ 49.068
+
+
+
+ 48.951
+
+
+
+ 48.853
+
+
+
+ 48.699
+
+
+
+ 48.604
+
+
+
+ 48.609
+
+
+
+ 48.563
+
+
+
+ 48.577
+
+
+
+ 48.629
+
+
+
+ 48.695
+
+
+
+ 48.678
+
+
+
+ 48.663
+
+
+
+ 48.703
+
+
+
+ 48.697
+
+
+
+ 48.538
+
+
+
+ 48.390
+
+
+
+ 48.290
+
+
+
+ 48.191
+
+
+
+ 48.204
+
+
+
+ 48.046
+
+
+
+ 48.017
+
+
+
+ 47.955
+
+
+
+ 47.992
+
+
+
+ 48.084
+
+
+
+ 48.043
+
+
+
+ 48.015
+
+
+
+ 47.894
+
+
+
+ 47.619
+
+
+
+ 47.161
+
+
+
+ 46.575
+
+
+
+ 46.205
+
+
+
+ 45.835
+
+
+
+ 45.523
+
+
+
+ 45.079
+
+
+
+ 44.767
+
+
+
+ 44.311
+
+
+
+ 43.782
+
+
+
+ 43.408
+
+
+
+ 43.029
+
+
+
+ 42.626
+
+
+
+ 42.348
+
+
+
+ 42.115
+
+
+
+ 41.978
+
+
+
+ 41.780
+
+
+
+ 41.663
+
+
+
+ 41.571
+
+
+
+ 41.317
+
+
+
+ 41.343
+
+
+
+ 41.144
+
+
+
+ 40.981
+
+
+
+ 40.775
+
+
+
+ 40.604
+
+
+
+ 40.499
+
+
+
+ 40.312
+
+
+
+ 40.080
+
+
+
+ 39.698
+
+
+
+ 39.244
+
+
+
+ 38.720
+
+
+
+ 38.276
+
+
+
+ 37.955
+
+
+
+ 37.817
+
+
+
+ 37.742
+
+
+
+ 37.671
+
+
+
+ 37.554
+
+
+
+ 37.360
+
+
+
+ 37.225
+
+
+
+ 37.069
+
+
+
+ 36.985
+
+
+
+ 36.829
+
+
+
+ 36.675
+
+
+
+ 36.509
+
+
+
+ 36.535
+
+
+
+ 36.547
+
+
+
+ 36.625
+
+
+
+ 36.874
+
+
+
+ 37.195
+
+
+
+ 37.556
+
+
+
+ 37.900
+
+
+
+ 38.360
+
+
+
+ 38.643
+
+
+
+ 38.760
+
+
+
+ 38.827
+
+
+
+ 38.840
+
+
+
+ 38.962
+
+
+
+ 39.041
+
+
+
+ 39.009
+
+
+
+ 39.030
+
+
+
+ 38.873
+
+
+
+ 38.615
+
+
+
+ 38.388
+
+
+
+ 38.230
+
+
+
+ 38.115
+
+
+
+ 38.010
+
+
+
+ 37.807
+
+
+
+ 37.787
+
+
+
+ 37.905
+
+
+
+ 38.007
+
+
+
+ 37.725
+
+
+
+ 37.532
+
+
+
+ 37.387
+
+
+
+ 37.247
+
+
+
+ 36.977
+
+
+
+ 36.675
+
+
+
+ 36.425
+
+
+
+ 36.034
+
+
+
+ 35.895
+
+
+
+ 35.680
+
+
+
+ 35.283
+
+
+
+ 34.903
+
+
+
+ 34.366
+
+
+
+ 34.209
+
+
+
+ 34.153
+
+
+
+ 34.238
+
+
+
+ 34.424
+
+
+
+ 35.003
+
+
+
+ 35.137
+
+
+
+ 35.554
+
+
+
+ 35.751
+
+
+
+ 35.857
+
+
+
+ 35.832
+
+
+
+ 35.690
+
+
+
+ 35.363
+
+
+
+ 35.161
+
+
+
+ 34.925
+
+
+
+ 34.590
+
+
+
+ 34.507
+
+
+
+ 34.579
+
+
+
+ 34.646
+
+
+
+ 34.202
+
+
+
+ 33.714
+
+
+
+ 33.249
+
+
+
+ 32.925
+
+
+
+ 32.654
+
+
+
+ 32.537
+
+
+
+ 32.292
+
+
+
+ 32.320
+
+
+
+ 32.347
+
+
+
+ 32.402
+
+
+
+ 32.454
+
+
+
+ 32.593
+
+
+
+ 32.701
+
+
+
+ 32.792
+
+
+
+ 33.014
+
+
+
+ 33.367
+
+
+
+ 33.471
+
+
+
+ 33.512
+
+
+
+ 33.611
+
+
+
+ 33.768
+
+
+
+ 33.941
+
+
+
+ 34.157
+
+
+
+ 34.340
+
+
+
+ 34.404
+
+
+
+ 34.448
+
+
+
+ 34.406
+
+
+
+ 34.360
+
+
+
+ 34.352
+
+
+
+ 34.413
+
+
+
+ 34.587
+
+
+
+ 34.857
+
+
+
+ 35.182
+
+
+
+ 35.582
+
+
+
+ 35.865
+
+
+
+ 36.151
+
+
+
+ 36.355
+
+
+
+ 36.611
+
+
+
+ 36.769
+
+
+
+ 36.831
+
+
+
+ 36.927
+
+
+
+ 37.115
+
+
+
+ 37.285
+
+
+
+ 37.506
+
+
+
+ 37.798
+
+
+
+ 37.972
+
+
+
+ 38.044
+
+
+
+ 38.084
+
+
+
+ 37.938
+
+
+
+ 37.771
+
+
+
+ 37.676
+
+
+
+ 37.814
+
+
+
+ 37.971
+
+
+
+ 38.099
+
+
+
+ 38.301
+
+
+
+ 38.454
+
+
+
+ 38.647
+
+
+
+ 38.880
+
+
+
+ 38.805
+
+
+
+ 38.721
+
+
+
+ 38.872
+
+
+
+ 38.581
+
+
+
+ 38.344
+
+
+
+ 38.362
+
+
+
+ 38.454
+
+
+
+ 38.298
+
+
+
+ 38.435
+
+
+
+ 38.958
+
+
+
+ 39.500
+
+
+
+ 40.237
+
+
+
+ 40.769
+
+
+
+ 41.283
+
+
+
+ 41.642
+
+
+
+ 41.872
+
+
+
+ 42.038
+
+
+
+ 42.171
+
+
+
+ 42.483
+
+
+
+ 42.594
+
+
+
+ 42.710
+
+
+
+ 42.900
+
+
+
+ 43.132
+
+
+
+ 43.344
+
+
+
+ 43.555
+
+
+
+ 43.735
+
+
+
+ 43.792
+
+
+
+ 43.983
+
+
+
+ 44.176
+
+
+
+ 44.287
+
+
+
+ 44.276
+
+
+
+ 44.419
+
+
+
+ 44.511
+
+
+
+ 44.615
+
+
+
+ 44.709
+
+
+
+ 44.885
+
+
+
+ 45.040
+
+
+
+ 45.170
+
+
+
+ 45.263
+
+
+
+ 45.436
+
+
+
+ 45.577
+
+
+
+ 45.812
+
+
+
+ 45.830
+
+
+
+ 45.995
+
+
+
+ 46.197
+
+
+
+ 46.335
+
+
+
+ 46.428
+
+
+
+ 46.530
+
+
+
+ 46.673
+
+
+
+ 46.616
+
+
+
+ 46.708
+
+
+
+ 46.923
+
+
+
+ 46.972
+
+
+
+ 46.828
+
+
+
+ 46.696
+
+
+
+ 46.704
+
+
+
+ 46.834
+
+
+
+ 46.848
+
+
+
+ 46.600
+
+
+
+ 46.061
+
+
+
+ 45.772
+
+
+
+ 45.569
+
+
+
+ 45.614
+
+
+
+ 45.638
+
+
+
+ 45.678
+
+
+
+ 45.617
+
+
+
+ 45.521
+
+
+
+ 45.451
+
+
+
+ 45.506
+
+
+
+ 45.565
+
+
+
+ 45.546
+
+
+
+ 45.487
+
+
+
+ 45.509
+
+
+
+ 45.582
+
+
+
+ 45.559
+
+
+
+ 45.583
+
+
+
+ 45.831
+
+
+
+ 45.840
+
+
+
+ 45.928
+
+
+
+ 46.265
+
+
+
+ 46.540
+
+
+
+ 46.794
+
+
+
+ 47.035
+
+
+
+ 47.348
+
+
+
+ 47.248
+
+
+
+ 47.115
+
+
+
+ 46.923
+
+
+
+ 47.109
+
+
+
+ 47.281
+
+
+
+ 47.452
+
+
+
+ 47.614
+
+
+
+ 47.839
+
+
+
+ 47.937
+
+
+
+ 47.914
+
+
+
+ 48.199
+
+
+
+ 48.299
+
+
+
+ 48.352
+
+
+
+ 48.350
+
+
+
+ 48.141
+
+
+
+ 47.961
+
+
+
+ 47.650
+
+
+
+ 47.839
+
+
+
+ 47.986
+
+
+
+ 48.098
+
+
+
+ 48.659
+
+
+
+ 49.055
+
+
+
+ 49.979
+
+
+
+ 50.733
+
+
+
+ 51.367
+
+
+
+ 51.843
+
+
+
+ 52.252
+
+
+
+ 52.567
+
+
+
+ 53.182
+
+
+
+ 53.715
+
+
+
+ 53.734
+
+
+
+ 53.753
+
+
+
+ 53.521
+
+
+
+ 53.300
+
+
+
+ 53.001
+
+
+
+ 52.755
+
+
+
+ 52.799
+
+
+
+ 52.925
+
+
+
+ 52.804
+
+
+
+ 52.680
+
+
+
+ 52.397
+
+
+
+ 51.878
+
+
+
+ 51.405
+
+
+
+ 51.120
+
+
+
+ 50.998
+
+
+
+ 50.933
+
+
+
+ 50.914
+
+
+
+ 50.876
+
+
+
+ 50.798
+
+
+
+ 50.727
+
+
+
+ 50.623
+
+
+
+ 50.337
+
+
+
+ 50.201
+
+
+
+ 49.986
+
+
+
+ 49.801
+
+
+
+ 49.610
+
+
+
+ 49.464
+
+
+
+ 49.302
+
+
+
+ 49.118
+
+
+
+ 48.779
+
+
+
+ 48.451
+
+
+
+ 48.225
+
+
+
+ 47.963
+
+
+
+ 47.715
+
+
+
+ 47.583
+
+
+
+ 47.773
+
+
+
+ 47.724
+
+
+
+ 47.796
+
+
+
+ 47.798
+
+
+
+ 47.889
+
+
+
+ 48.025
+
+
+
+ 48.122
+
+
+
+ 48.137
+
+
+
+ 48.093
+
+
+
+ 47.997
+
+
+
+ 47.996
+
+
+
+ 47.878
+
+
+
+ 47.799
+
+
+
+ 47.790
+
+
+
+ 47.817
+
+
+
+ 47.902
+
+
+
+ 48.038
+
+
+
+ 48.167
+
+
+
+ 48.153
+
+
+
+ 48.156
+
+
+
+ 48.010
+
+
+
+ 47.634
+
+
+
+ 47.267
+
+
+
+ 46.826
+
+
+
+ 46.591
+
+
+
+ 46.083
+
+
+
+ 45.630
+
+
+
+ 45.151
+
+
+
+ 44.686
+
+
+
+ 44.406
+
+
+
+ 44.208
+
+
+
+ 44.112
+
+
+
+ 44.059
+
+
+
+ 43.945
+
+
+
+ 43.759
+
+
+
+ 43.492
+
+
+
+ 43.286
+
+
+
+ 43.113
+
+
+
+ 42.729
+
+
+
+ 42.252
+
+
+
+ 41.756
+
+
+
+ 41.507
+
+
+
+ 41.329
+
+
+
+ 41.210
+
+
+
+ 41.026
+
+
+
+ 40.800
+
+
+
+ 40.420
+
+
+
+ 40.066
+
+
+
+ 39.753
+
+
+
+ 39.580
+
+
+
+ 39.375
+
+
+
+ 39.426
+
+
+
+ 39.536
+
+
+
+ 39.481
+
+
+
+ 39.485
+
+
+
+ 39.510
+
+
+
+ 39.664
+
+
+
+ 39.748
+
+
+
+ 39.834
+
+
+
+ 39.741
+
+
+
+ 39.646
+
+
+
+ 39.501
+
+
+
+ 39.408
+
+
+
+ 39.233
+
+
+
+ 39.098
+
+
+
+ 38.977
+
+
+
+ 38.913
+
+
+
+ 38.764
+
+
+
+ 38.580
+
+
+
+ 38.273
+
+
+
+ 38.219
+
+
+
+ 38.189
+
+
+
+ 38.687
+
+
+
+ 39.031
+
+
+
+ 39.385
+
+
+
+ 39.770
+
+
+
+ 40.104
+
+
+
+ 40.340
+
+
+
+ 40.536
+
+
+
+ 40.772
+
+
+
+ 40.866
+
+
+
+ 40.900
+
+
+
+ 40.956
+
+
+
+ 40.894
+
+
+
+ 40.882
+
+
+
+ 40.951
+
+
+
+ 40.880
+
+
+
+ 40.961
+
+
+
+ 41.005
+
+
+
+ 41.008
+
+
+
+ 41.220
+
+
+
+ 41.278
+
+
+
+ 41.398
+
+
+
+ 41.418
+
+
+
+ 41.484
+
+
+
+ 41.523
+
+
+
+ 41.745
+
+
+
+ 42.505
+
+
+
+ 42.776
+
+
+
+ 42.953
+
+
+
+ 43.218
+
+
+
+ 43.214
+
+
+
+ 43.060
+
+
+
+ 42.884
+
+
+
+ 42.603
+
+
+
+ 42.629
+
+
+
+ 42.956
+
+
+
+ 43.269
+
+
+
+ 43.642
+
+
+
+ 43.882
+
+
+
+ 44.223
+
+
+
+ 44.649
+
+
+
+ 45.193
+
+
+
+ 45.906
+
+
+
+ 46.143
+
+
+
+ 46.359
+
+
+
+ 46.540
+
+
+
+ 46.651
+
+
+
+ 46.731
+
+
+
+ 46.786
+
+
+
+ 46.721
+
+
+
+ 46.687
+
+
+
+ 46.561
+
+
+
+ 46.255
+
+
+
+ 46.158
+
+
+
+ 45.891
+
+
+
+ 45.615
+
+
+
+ 45.250
+
+
+
+ 44.972
+
+
+
+ 44.731
+
+
+
+ 44.390
+
+
+
+ 44.244
+
+
+
+ 44.279
+
+
+
+ 44.496
+
+
+
+ 44.925
+
+
+
+ 45.250
+
+
+
+ 45.538
+
+
+
+ 45.777
+
+
+
+ 46.004
+
+
+
+ 46.200
+
+
+
+ 46.409
+
+
+
+ 46.541
+
+
+
+ 46.777
+
+
+
+ 46.972
+
+
+
+ 47.129
+
+
+
+ 47.111
+
+
+
+ 46.998
+
+
+
+ 46.835
+
+
+
+ 46.638
+
+
+
+ 46.649
+
+
+
+ 46.451
+
+
+
+ 46.227
+
+
+
+ 46.090
+
+
+
+ 45.891
+
+
+
+ 45.656
+
+
+
+ 45.425
+
+
+
+ 45.143
+
+
+
+ 45.043
+
+
+
+ 44.836
+
+
+
+ 44.999
+
+
+
+ 45.050
+
+
+
+ 44.657
+
+
+
+ 44.338
+
+
+
+ 44.396
+
+
+
+ 43.953
+
+
+
+ 42.954
+
+
+
+ 41.928
+
+
+
+ 41.104
+
+
+
+ 40.646
+
+
+
+ 40.444
+
+
+
+ 40.435
+
+
+
+ 40.702
+
+
+
+ 40.795
+
+
+
+ 40.906
+
+
+
+ 40.992
+
+
+
+ 41.088
+
+
+
+ 41.245
+
+
+
+ 41.384
+
+
+
+ 41.415
+
+
+
+ 41.429
+
+
+
+ 41.396
+
+
+
+ 41.438
+
+
+
+ 41.423
+
+
+
+ 41.611
+
+
+
+ 41.561
+
+
+
+ 41.540
+
+
+
+ 41.447
+
+
+
+ 41.416
+
+
+
+ 41.528
+
+
+
+ 41.720
+
+
+
+ 41.896
+
+
+
+ 42.176
+
+
+
+ 42.383
+
+
+
+ 42.612
+
+
+
+ 42.722
+
+
+
+ 42.836
+
+
+
+ 42.928
+
+
+
+ 43.070
+
+
+
+ 43.216
+
+
+
+ 43.559
+
+
+
+ 43.781
+
+
+
+ 43.752
+
+
+
+ 43.846
+
+
+
+ 44.097
+
+
+
+ 44.196
+
+
+
+ 44.396
+
+
+
+ 44.352
+
+
+
+ 44.205
+
+
+
+ 44.103
+
+
+
+ 44.068
+
+
+
+ 44.394
+
+
+
+ 44.678
+
+
+
+ 44.884
+
+
+
+ 45.103
+
+
+
+ 45.236
+
+
+
+ 45.247
+
+
+
+ 45.345
+
+
+
+ 45.382
+
+
+
+ 45.476
+
+
+
+ 45.539
+
+
+
+ 45.527
+
+
+
+ 45.522
+
+
+
+ 45.757
+
+
+
+ 45.979
+
+
+
+ 45.929
+
+
+
+ 46.152
+
+
+
+ 46.447
+
+
+
+ 46.762
+
+
+
+ 46.952
+
+
+
+ 46.870
+
+
+
+ 46.721
+
+
+
+ 46.964
+
+
+
+ 47.261
+
+
+
+ 47.241
+
+
+
+ 47.319
+
+
+
+ 47.448
+
+
+
+ 47.467
+
+
+
+ 47.494
+
+
+
+ 47.382
+
+
+
+ 47.275
+
+
+
+ 47.156
+
+
+
+ 47.028
+
+
+
+ 46.925
+
+
+
+ 46.669
+
+
+
+ 46.455
+
+
+
+ 46.466
+
+
+
+ 46.507
+
+
+
+ 46.472
+
+
+
+ 46.667
+
+
+
+ 46.974
+
+
+
+ 47.207
+
+
+
+ 47.416
+
+
+
+ 47.513
+
+
+
+ 47.658
+
+
+
+ 48.004
+
+
+
+ 48.202
+
+
+
+ 48.379
+
+
+
+ 48.706
+
+
+
+ 48.930
+
+
+
+ 49.078
+
+
+
+ 49.055
+
+
+
+ 48.818
+
+
+
+ 48.802
+
+
+
+ 48.904
+
+
+
+ 48.885
+
+
+
+ 48.742
+
+
+
+ 48.749
+
+
+
+ 48.660
+
+
+
+ 48.486
+
+
+
+ 48.287
+
+
+
+ 48.205
+
+
+
+ 48.179
+
+
+
+ 48.165
+
+
+
+ 48.157
+
+
+
+ 48.141
+
+
+
+ 48.080
+
+
+
+ 48.205
+
+
+
+ 48.385
+
+
+
+ 48.359
+
+
+
+ 48.352
+
+
+
+ 48.320
+
+
+
+ 48.157
+
+
+
+ 48.050
+
+
+
+ 47.917
+
+
+
+ 47.847
+
+
+
+ 47.710
+
+
+
+ 47.266
+
+
+
+ 46.381
+
+
+
+ 46.068
+
+
+
+ 45.794
+
+
+
+ 45.476
+
+
+
+ 45.183
+
+
+
+ 44.849
+
+
+
+ 44.385
+
+
+
+ 43.999
+
+
+
+ 43.599
+
+
+
+ 43.129
+
+
+
+ 42.602
+
+
+
+ 42.314
+
+
+
+ 42.176
+
+
+
+ 42.184
+
+
+
+ 42.285
+
+
+
+ 42.245
+
+
+
+ 42.061
+
+
+
+ 41.722
+
+
+
+ 41.410
+
+
+
+ 41.223
+
+
+
+ 41.281
+
+
+
+ 41.251
+
+
+
+ 41.076
+
+
+
+ 40.892
+
+
+
+ 40.789
+
+
+
+ 40.720
+
+
+
+ 41.042
+
+
+
+ 41.641
+
+
+
+ 41.876
+
+
+
+ 42.021
+
+
+
+ 42.171
+
+
+
+ 42.251
+
+
+
+ 42.544
+
+
+
+ 42.800
+
+
+
+ 43.038
+
+
+
+ 43.481
+
+
+
+ 43.870
+
+
+
+ 44.068
+
+
+
+ 44.149
+
+
+
+ 44.273
+
+
+
+ 44.492
+
+
+
+ 44.670
+
+
+
+ 44.856
+
+
+
+ 45.062
+
+
+
+ 45.170
+
+
+
+ 45.377
+
+
+
+ 45.631
+
+
+
+ 45.866
+
+
+
+ 46.062
+
+
+
+ 46.273
+
+
+
+ 46.333
+
+
+
+ 46.382
+
+
+
+ 46.369
+
+
+
+ 46.285
+
+
+
+ 46.222
+
+
+
+ 46.102
+
+
+
+ 46.228
+
+
+
+ 46.310
+
+
+
+ 46.403
+
+
+
+ 46.781
+
+
+
+ 46.969
+
+
+
+ 47.139
+
+
+
+ 47.007
+
+
+
+ 46.898
+
+
+
+ 46.736
+
+
+
+ 46.469
+
+
+
+ 46.244
+
+
+
+ 46.041
+
+
+
+ 45.806
+
+
+
+ 45.662
+
+
+
+ 45.486
+
+
+
+ 45.283
+
+
+
+ 45.006
+
+
+
+ 44.720
+
+
+
+ 44.581
+
+
+
+ 44.499
+
+
+
+ 44.436
+
+
+
+ 44.385
+
+
+
+ 44.369
+
+
+
+ 44.396
+
+
+
+ 44.511
+
+
+
+ 44.601
+
+
+
+ 44.506
+
+
+
+ 44.357
+
+
+
+ 44.180
+
+
+
+ 43.865
+
+
+
+ 43.480
+
+
+
+ 43.060
+
+
+
+ 42.477
+
+
+
+ 41.853
+
+
+
+ 41.170
+
+
+
+ 40.541
+
+
+
+ 39.945
+
+
+
+ 39.408
+
+
+
+ 38.792
+
+
+
+ 38.416
+
+
+
+ 38.152
+
+
+
+ 37.904
+
+
+
+ 37.859
+
+
+
+ 37.887
+
+
+
+ 37.970
+
+
+
+ 37.985
+
+
+
+ 37.845
+
+
+
+ 37.792
+
+
+
+ 37.766
+
+
+
+ 37.772
+
+
+
+ 37.897
+
+
+
+ 37.929
+
+
+
+ 37.973
+
+
+
+ 38.074
+
+
+
+ 38.098
+
+
+
+ 37.903
+
+
+
+ 37.676
+
+
+
+ 37.564
+
+
+
+ 37.504
+
+
+
+ 37.346
+
+
+
+ 37.390
+
+
+
+ 37.358
+
+
+
+ 37.452
+
+
+
+ 37.514
+
+
+
+ 37.640
+
+
+
+ 37.709
+
+
+
+ 37.763
+
+
+
+ 37.713
+
+
+
+ 37.614
+
+
+
+ 37.519
+
+
+
+ 37.431
+
+
+
+ 37.281
+
+
+
+ 37.222
+
+
+
+ 37.245
+
+
+
+ 37.285
+
+
+
+ 37.606
+
+
+
+ 38.125
+
+
+
+ 38.653
+
+
+
+ 39.235
+
+
+
+ 39.941
+
+
+
+ 40.455
+
+
+
+ 40.935
+
+
+
+ 41.337
+
+
+
+ 41.852
+
+
+
+ 42.353
+
+
+
+ 42.658
+
+
+
+ 42.839
+
+
+
+ 43.117
+
+
+
+ 43.409
+
+
+
+ 43.698
+
+
+
+ 43.812
+
+
+
+ 43.965
+
+
+
+ 44.263
+
+
+
+ 44.420
+
+
+
+ 44.399
+
+
+
+ 44.179
+
+
+
+ 43.868
+
+
+
+ 43.340
+
+
+
+ 43.039
+
+
+
+ 42.958
+
+
+
+ 42.895
+
+
+
+ 42.811
+
+
+
+ 42.574
+
+
+
+ 42.665
+
+
+
+ 42.412
+
+
+
+ 42.268
+
+
+
+ 42.151
+
+
+
+ 42.007
+
+
+
+ 41.721
+
+
+
+ 41.389
+
+
+
+ 41.151
+
+
+
+ 41.118
+
+
+
+ 41.081
+
+
+
+ 40.979
+
+
+
+ 40.911
+
+
+
+ 40.636
+
+
+
+ 40.299
+
+
+
+ 39.840
+
+
+
+ 39.392
+
+
+
+ 39.100
+
+
+
+ 38.982
+
+
+
+ 38.995
+
+
+
+ 39.355
+
+
+
+ 40.049
+
+
+
+ 40.375
+
+
+
+ 40.529
+
+
+
+ 40.501
+
+
+
+ 40.646
+
+
+
+ 40.607
+
+
+
+ 40.620
+
+
+
+ 40.190
+
+
+
+ 39.632
+
+
+
+ 39.168
+
+
+
+ 38.836
+
+
+
+ 38.879
+
+
+
+ 39.055
+
+
+
+ 39.289
+
+
+
+ 39.617
+
+
+
+ 39.820
+
+
+
+ 39.682
+
+
+
+ 39.541
+
+
+
+ 39.332
+
+
+
+ 39.175
+
+
+
+ 39.205
+
+
+
+ 39.304
+
+
+
+ 39.411
+
+
+
+ 39.527
+
+
+
+ 39.497
+
+
+
+ 39.432
+
+
+
+ 39.386
+
+
+
+ 39.265
+
+
+
+ 39.096
+
+
+
+ 39.025
+
+
+
+ 38.919
+
+
+
+ 38.878
+
+
+
+ 38.834
+
+
+
+ 38.704
+
+
+
+ 38.765
+
+
+
+ 39.124
+
+
+
+ 39.160
+
+
+
+ 39.240
+
+
+
+ 39.373
+
+
+
+ 39.397
+
+
+
+ 39.334
+
+
+
+ 39.280
+
+
+
+ 39.455
+
+
+
+ 39.397
+
+
+
+ 38.954
+
+
+
+ 38.375
+
+
+
+ 37.750
+
+
+
+ 37.243
+
+
+
+ 36.726
+
+
+
+ 36.261
+
+
+
+ 36.067
+
+
+
+ 35.847
+
+
+
+ 35.559
+
+
+
+ 35.226
+
+
+
+ 34.892
+
+
+
+ 34.558
+
+
+
+ 34.128
+
+
+
+ 33.710
+
+
+
+ 33.277
+
+
+
+ 32.855
+
+
+
+ 32.777
+
+
+
+ 33.038
+
+
+
+ 33.068
+
+
+
+ 33.330
+
+
+
+ 33.537
+
+
+
+ 33.767
+
+
+
+ 34.059
+
+
+
+ 34.409
+
+
+
+ 35.030
+
+
+
+ 35.367
+
+
+
+ 35.550
+
+
+
+ 35.569
+
+
+
+ 35.544
+
+
+
+ 35.691
+
+
+
+ 35.754
+
+
+
+ 35.863
+
+
+
+ 35.931
+
+
+
+ 35.987
+
+
+
+ 36.202
+
+
+
+ 36.336
+
+
+
+ 36.422
+
+
+
+ 36.473
+
+
+
+ 36.533
+
+
+
+ 36.596
+
+
+
+ 36.592
+
+
+
+ 36.553
+
+
+
+ 36.517
+
+
+
+ 36.615
+
+
+
+ 36.825
+
+
+
+ 37.056
+
+
+
+ 37.158
+
+
+
+ 37.310
+
+
+
+ 37.532
+
+
+
+ 37.683
+
+
+
+ 37.895
+
+
+
+ 38.063
+
+
+
+ 38.140
+
+
+
+ 38.239
+
+
+
+ 38.328
+
+
+
+ 38.374
+
+
+
+ 38.537
+
+
+
+ 38.729
+
+
+
+ 38.853
+
+
+
+ 38.903
+
+
+
+ 38.957
+
+
+
+ 39.109
+
+
+
+ 39.277
+
+
+
+ 39.384
+
+
+
+ 39.480
+
+
+
+ 39.727
+
+
+
+ 39.897
+
+
+
+ 40.257
+
+
+
+ 40.524
+
+
+
+ 40.774
+
+
+
+ 41.107
+
+
+
+ 41.518
+
+
+
+ 41.744
+
+
+
+ 42.107
+
+
+
+ 42.380
+
+
+
+ 42.670
+
+
+
+ 43.062
+
+
+
+ 43.384
+
+
+
+ 43.738
+
+
+
+ 44.182
+
+
+
+ 44.374
+
+
+
+ 44.656
+
+
+
+ 44.974
+
+
+
+ 45.396
+
+
+
+ 45.773
+
+
+
+ 46.146
+
+
+
+ 46.609
+
+
+
+ 46.920
+
+
+
+ 47.206
+
+
+
+ 47.525
+
+
+
+ 47.555
+
+
+
+ 47.619
+
+
+
+ 47.695
+
+
+
+ 47.819
+
+
+
+ 47.928
+
+
+
+ 47.957
+
+
+
+ 48.102
+
+
+
+ 48.201
+
+
+
+ 48.368
+
+
+
+ 48.317
+
+
+
+ 48.352
+
+
+
+ 48.240
+
+
+
+ 48.139
+
+
+
+ 48.078
+
+
+
+ 48.027
+
+
+
+ 47.833
+
+
+
+ 47.657
+
+
+
+ 47.563
+
+
+
+ 47.595
+
+
+
+ 47.609
+
+
+
+ 47.683
+
+
+
+ 48.067
+
+
+
+ 48.501
+
+
+
+ 48.937
+
+
+
+ 49.062
+
+
+
+ 49.129
+
+
+
+ 49.080
+
+
+
+ 49.240
+
+
+
+ 49.408
+
+
+
+ 49.634
+
+
+
+ 49.882
+
+
+
+ 50.074
+
+
+
+ 50.329
+
+
+
+ 50.381
+
+
+
+ 50.539
+
+
+
+ 50.388
+
+
+
+ 50.276
+
+
+
+ 49.848
+
+
+
+ 49.755
+
+
+
+ 49.745
+
+
+
+ 49.818
+
+
+
+ 49.652
+
+
+
+ 49.542
+
+
+
+ 49.565
+
+
+
+ 49.708
+
+
+
+ 49.841
+
+
+
+ 50.142
+
+
+
+ 50.428
+
+
+
+ 50.616
+
+
+
+ 50.728
+
+
+
+ 50.792
+
+
+
+ 50.908
+
+
+
+ 51.011
+
+
+
+ 51.116
+
+
+
+ 51.212
+
+
+
+ 51.320
+
+
+
+ 51.424
+
+
+
+ 51.494
+
+
+
+ 51.508
+
+
+
+ 51.408
+
+
+
+ 51.425
+
+
+
+ 51.314
+
+
+
+ 51.127
+
+
+
+ 50.885
+
+
+
+ 50.617
+
+
+
+ 50.337
+
+
+
+ 50.023
+
+
+
+ 49.626
+
+
+
+ 49.195
+
+
+
+ 48.733
+
+
+
+ 48.294
+
+
+
+ 47.902
+
+
+
+ 47.748
+
+
+
+ 47.875
+
+
+
+ 48.056
+
+
+
+ 48.170
+
+
+
+ 48.144
+
+
+
+ 48.063
+
+
+
+ 48.016
+
+
+
+ 47.866
+
+
+
+ 47.721
+
+
+
+ 47.664
+
+
+
+ 47.416
+
+
+
+ 47.046
+
+
+
+ 46.232
+
+
+
+ 45.867
+
+
+
+ 45.516
+
+
+
+ 45.201
+
+
+
+ 44.878
+
+
+
+ 44.566
+
+
+
+ 44.133
+
+
+
+ 43.924
+
+
+
+ 43.812
+
+
+
+ 43.717
+
+
+
+ 43.529
+
+
+
+ 43.618
+
+
+
+ 43.783
+
+
+
+ 43.918
+
+
+
+ 43.930
+
+
+
+ 43.982
+
+
+
+ 43.998
+
+
+
+ 44.082
+
+
+
+ 44.202
+
+
+
+ 44.167
+
+
+
+ 43.969
+
+
+
+ 44.037
+
+
+
+ 44.293
+
+
+
+ 44.061
+
+
+
+ 43.674
+
+
+
+ 43.374
+
+
+
+ 43.172
+
+
+
+ 42.927
+
+
+
+ 42.775
+
+
+
+ 42.556
+
+
+
+ 42.523
+
+
+
+ 42.507
+
+
+
+ 42.428
+
+
+
+ 42.373
+
+
+
+ 42.126
+
+
+
+ 41.980
+
+
+
+ 41.888
+
+
+
+ 42.060
+
+
+
+ 42.114
+
+
+
+ 42.127
+
+
+
+ 41.983
+
+
+
+ 42.017
+
+
+
+ 42.125
+
+
+
+ 42.226
+
+
+
+ 42.080
+
+
+
+ 41.725
+
+
+
+ 41.419
+
+
+
+ 41.887
+
+
+
+ 42.293
+
+
+
+ 42.643
+
+
+
+ 42.930
+
+
+
+ 43.220
+
+
+
+ 43.390
+
+
+
+ 43.581
+
+
+
+ 43.899
+
+
+
+ 44.232
+
+
+
+ 44.019
+
+
+
+ 43.741
+
+
+
+ 43.381
+
+
+
+ 43.016
+
+
+
+ 42.607
+
+
+
+ 42.108
+
+
+
+ 42.118
+
+
+
+ 42.148
+
+
+
+ 42.317
+
+
+
+ 42.482
+
+
+
+ 42.634
+
+
+
+ 42.815
+
+
+
+ 43.113
+
+
+
+ 43.329
+
+
+
+ 43.390
+
+
+
+ 43.514
+
+
+
+ 43.714
+
+
+
+ 43.883
+
+
+
+ 44.009
+
+
+
+ 44.139
+
+
+
+ 44.297
+
+
+
+ 44.408
+
+
+
+ 44.587
+
+
+
+ 44.797
+
+
+
+ 45.043
+
+
+
+ 45.325
+
+
+
+ 45.622
+
+
+
+ 45.839
+
+
+
+ 46.068
+
+
+
+ 46.164
+
+
+
+ 46.014
+
+
+
+ 45.648
+
+
+
+ 45.315
+
+
+
+ 44.852
+
+
+
+ 44.397
+
+
+
+ 44.007
+
+
+
+ 43.865
+
+
+
+ 43.675
+
+
+
+ 43.397
+
+
+
+ 43.071
+
+
+
+ 42.874
+
+
+
+ 42.452
+
+
+
+ 42.188
+
+
+
+ 41.880
+
+
+
+ 41.554
+
+
+
+ 41.182
+
+
+
+ 40.878
+
+
+
+ 40.613
+
+
+
+ 40.296
+
+
+
+ 39.813
+
+
+
+ 39.481
+
+
+
+ 39.358
+
+
+
+ 39.284
+
+
+
+ 38.950
+
+
+
+ 38.754
+
+
+
+ 38.409
+
+
+
+ 38.456
+
+
+
+ 38.410
+
+
+
+ 38.380
+
+
+
+ 38.369
+
+
+
+ 38.213
+
+
+
+ 38.056
+
+
+
+ 38.203
+
+
+
+ 38.349
+
+
+
+ 38.339
+
+
+
+ 38.392
+
+
+
+ 38.890
+
+
+
+ 39.742
+
+
+
+ 40.532
+
+
+
+ 41.158
+
+
+
+ 41.832
+
+
+
+ 42.166
+
+
+
+ 42.306
+
+
+
+ 42.038
+
+
+
+ 41.840
+
+
+
+ 41.688
+
+
+
+ 41.602
+
+
+
+ 41.484
+
+
+
+ 41.242
+
+
+
+ 40.958
+
+
+
+ 40.744
+
+
+
+ 40.548
+
+
+
+ 40.354
+
+
+
+ 40.184
+
+
+
+ 40.185
+
+
+
+ 40.228
+
+
+
+ 40.279
+
+
+
+ 40.276
+
+
+
+ 40.093
+
+
+
+ 40.042
+
+
+
+ 39.915
+
+
+
+ 39.779
+
+
+
+ 39.647
+
+
+
+ 39.521
+
+
+
+ 39.394
+
+
+
+ 39.270
+
+
+
+ 39.155
+
+
+
+ 39.041
+
+
+
+ 38.927
+
+
+
+ 38.801
+
+
+
+ 38.663
+
+
+
+ 38.517
+
+
+
+ 38.371
+
+
+
+ 38.225
+
+
+
+ 38.080
+
+
+
+ 37.938
+
+
+
+ 37.802
+
+
+
+ 37.683
+
+
+
+ 37.574
+
+
+
+ 37.456
+
+
+
+ 37.349
+
+
+
+ 37.250
+
+
+
+ 37.111
+
+
+
+ 37.027
+
+
+
+ 36.950
+
+
+
+ 36.879
+
+
+
+ 36.805
+
+
+
+ 36.761
+
+
+
+ 36.709
+
+
+
+ 36.643
+
+
+
+ 36.578
+
+
+
+ 36.503
+
+
+
+ 36.431
+
+
+
+ 36.346
+
+
+
+ 36.260
+
+
+
+ 36.160
+
+
+
+ 36.072
+
+
+
+ 35.964
+
+
+
+ 35.839
+
+
+
+ 35.752
+
+
+
+ 35.663
+
+
+
+ 35.580
+
+
+
+ 35.511
+
+
+
+ 35.428
+
+
+
+ 35.372
+
+
+
+ 35.334
+
+
+
+ 35.314
+
+
+
+ 35.307
+
+
+
+ 35.293
+
+
+
+ 35.288
+
+
+
+ 35.258
+
+
+
+ 35.191
+
+
+
+
+
diff --git a/src/test/data/20170518.gpx b/src/test/data/20170518.gpx
new file mode 100644
index 0000000..32ec1cb
--- /dev/null
+++ b/src/test/data/20170518.gpx
@@ -0,0 +1,6208 @@
+
+
+
+ ACTIVE LOG092126
+
+
+ 83.455
+
+
+
+ 82.968
+
+
+
+ 82.084
+
+
+
+ 81.598
+
+
+
+ 81.086
+
+
+
+ 80.517
+
+
+
+ 80.207
+
+
+
+ 79.826
+
+
+
+ 79.443
+
+
+
+ 77.951
+
+
+
+ 77.464
+
+
+
+ 76.627
+
+
+
+ 75.457
+
+
+
+ 75.154
+
+
+
+ 74.335
+
+
+
+ 74.189
+
+
+
+ 73.966
+
+
+
+ 73.134
+
+
+
+ 73.140
+
+
+
+ 73.475
+
+
+
+ 73.624
+
+
+
+ 73.642
+
+
+
+ 73.633
+
+
+
+ 73.489
+
+
+
+ 82.719
+
+
+
+ 75.938
+
+
+
+ 69.962
+
+
+
+ 67.924
+
+
+
+ 67.810
+
+
+
+ 67.810
+
+
+
+ 67.831
+
+
+
+ 67.910
+
+
+
+ 67.622
+
+
+
+ 67.432
+
+
+
+ 67.313
+
+
+
+ 67.146
+
+
+
+ 67.020
+
+
+
+ 66.824
+
+
+
+ 66.714
+
+
+
+ 66.567
+
+
+
+ 66.350
+
+
+
+ 66.143
+
+
+
+ 65.958
+
+
+
+ 65.998
+
+
+
+ 65.905
+
+
+
+ 65.688
+
+
+
+ 65.495
+
+
+
+ 65.335
+
+
+
+ 65.346
+
+
+
+ 65.320
+
+
+
+ 65.291
+
+
+
+ 65.267
+
+
+
+ 65.369
+
+
+
+ 65.465
+
+
+
+ 59.141
+
+
+
+ 57.383
+
+
+
+ 56.962
+
+
+
+ 56.812
+
+
+
+ 56.667
+
+
+
+ 57.037
+
+
+
+ 57.361
+
+
+
+ 57.511
+
+
+
+ 57.404
+
+
+
+ 57.573
+
+
+
+ 57.686
+
+
+
+ 57.625
+
+
+
+ 57.609
+
+
+
+ 57.453
+
+
+
+ 57.332
+
+
+
+ 57.301
+
+
+
+ 57.160
+
+
+
+ 56.944
+
+
+
+ 56.834
+
+
+
+ 56.674
+
+
+
+ 56.604
+
+
+
+ 56.640
+
+
+
+ 56.662
+
+
+
+ 56.688
+
+
+
+ 56.660
+
+
+
+ 56.660
+
+
+
+ 56.763
+
+
+
+ 56.858
+
+
+
+ 56.917
+
+
+
+ 57.003
+
+
+
+ 56.979
+
+
+
+ 56.998
+
+
+
+ 57.064
+
+
+
+ 57.164
+
+
+
+ 57.336
+
+
+
+ 57.422
+
+
+
+ 57.580
+
+
+
+ 57.809
+
+
+
+ 58.170
+
+
+
+ 58.161
+
+
+
+ 58.071
+
+
+
+ 58.005
+
+
+
+ 57.886
+
+
+
+ 57.714
+
+
+
+ 57.625
+
+
+
+ 57.595
+
+
+
+ 57.409
+
+
+
+ 57.144
+
+
+
+ 57.063
+
+
+
+ 57.149
+
+
+
+ 56.678
+
+
+
+ 56.180
+
+
+
+ 55.476
+
+
+
+ 54.350
+
+
+
+ 53.611
+
+
+
+ 53.155
+
+
+
+ 52.874
+
+
+
+ 52.491
+
+
+
+ 52.067
+
+
+
+ 51.935
+
+
+
+ 52.213
+
+
+
+ 52.099
+
+
+
+ 52.031
+
+
+
+ 52.248
+
+
+
+ 52.578
+
+
+
+ 52.794
+
+
+
+ 52.782
+
+
+
+ 53.019
+
+
+
+ 53.235
+
+
+
+ 53.422
+
+
+
+ 53.468
+
+
+
+ 53.576
+
+
+
+ 53.692
+
+
+
+ 53.843
+
+
+
+ 54.086
+
+
+
+ 54.355
+
+
+
+ 54.669
+
+
+
+ 54.823
+
+
+
+ 54.911
+
+
+
+ 54.973
+
+
+
+ 54.877
+
+
+
+ 54.735
+
+
+
+ 54.661
+
+
+
+ 54.530
+
+
+
+ 54.280
+
+
+
+ 54.064
+
+
+
+ 53.927
+
+
+
+ 53.636
+
+
+
+ 53.200
+
+
+
+ 52.835
+
+
+
+ 52.483
+
+
+
+ 52.521
+
+
+
+ 52.431
+
+
+
+ 52.067
+
+
+
+ 51.582
+
+
+
+ 51.135
+
+
+
+ 50.508
+
+
+
+ 49.916
+
+
+
+ 49.372
+
+
+
+ 48.778
+
+
+
+ 48.099
+
+
+
+ 47.403
+
+
+
+ 46.868
+
+
+
+ 46.262
+
+
+
+ 45.842
+
+
+
+ 45.284
+
+
+
+ 44.912
+
+
+
+ 44.768
+
+
+
+ 44.501
+
+
+
+ 44.307
+
+
+
+ 44.138
+
+
+
+ 44.023
+
+
+
+ 43.948
+
+
+
+ 44.115
+
+
+
+ 44.249
+
+
+
+ 44.492
+
+
+
+ 44.660
+
+
+
+ 44.780
+
+
+
+ 44.801
+
+
+
+ 44.762
+
+
+
+ 44.829
+
+
+
+ 44.905
+
+
+
+ 44.904
+
+
+
+ 44.972
+
+
+
+ 45.100
+
+
+
+ 45.241
+
+
+
+ 45.381
+
+
+
+ 45.386
+
+
+
+ 45.412
+
+
+
+ 45.559
+
+
+
+ 45.551
+
+
+
+ 45.572
+
+
+
+ 45.732
+
+
+
+ 45.934
+
+
+
+ 46.239
+
+
+
+ 46.662
+
+
+
+ 47.003
+
+
+
+ 47.459
+
+
+
+ 47.984
+
+
+
+ 48.572
+
+
+
+ 49.088
+
+
+
+ 49.574
+
+
+
+ 50.001
+
+
+
+ 50.469
+
+
+
+ 50.930
+
+
+
+ 51.343
+
+
+
+ 51.680
+
+
+
+ 51.951
+
+
+
+ 52.251
+
+
+
+ 52.625
+
+
+
+ 53.032
+
+
+
+ 53.314
+
+
+
+ 53.659
+
+
+
+ 53.981
+
+
+
+ 54.362
+
+
+
+ 54.746
+
+
+
+ 55.104
+
+
+
+ 55.431
+
+
+
+ 55.772
+
+
+
+ 56.249
+
+
+
+ 56.791
+
+
+
+ 57.414
+
+
+
+ 57.968
+
+
+
+ 58.428
+
+
+
+ 58.809
+
+
+
+ 59.406
+
+
+
+ 59.820
+
+
+
+ 60.215
+
+
+
+ 60.443
+
+
+
+ 60.715
+
+
+
+ 60.935
+
+
+
+ 61.044
+
+
+
+ 60.972
+
+
+
+ 61.007
+
+
+
+ 60.977
+
+
+
+ 60.930
+
+
+
+ 60.889
+
+
+
+ 60.864
+
+
+
+ 60.826
+
+
+
+ 60.690
+
+
+
+ 60.458
+
+
+
+ 60.249
+
+
+
+ 60.081
+
+
+
+ 59.910
+
+
+
+ 59.826
+
+
+
+ 59.723
+
+
+
+ 59.324
+
+
+
+ 59.032
+
+
+
+ 58.780
+
+
+
+ 58.463
+
+
+
+ 58.301
+
+
+
+ 58.137
+
+
+
+ 58.024
+
+
+
+ 58.066
+
+
+
+ 58.229
+
+
+
+ 58.404
+
+
+
+ 58.553
+
+
+
+ 58.729
+
+
+
+ 58.933
+
+
+
+ 59.146
+
+
+
+ 59.124
+
+
+
+ 59.310
+
+
+
+ 58.617
+
+
+
+ 58.016
+
+
+
+ 57.502
+
+
+
+ 57.232
+
+
+
+ 57.220
+
+
+
+ 57.088
+
+
+
+ 57.181
+
+
+
+ 57.977
+
+
+
+ 58.886
+
+
+
+ 59.584
+
+
+
+ 60.446
+
+
+
+ 61.246
+
+
+
+ 61.472
+
+
+
+ 61.755
+
+
+
+ 62.223
+
+
+
+ 62.388
+
+
+
+ 62.671
+
+
+
+ 62.953
+
+
+
+ 63.444
+
+
+
+ 63.539
+
+
+
+ 63.370
+
+
+
+ 63.201
+
+
+
+ 63.081
+
+
+
+ 62.605
+
+
+
+ 62.081
+
+
+
+ 61.793
+
+
+
+ 61.699
+
+
+
+ 61.651
+
+
+
+ 61.592
+
+
+
+ 61.521
+
+
+
+ 61.438
+
+
+
+ 61.380
+
+
+
+ 61.331
+
+
+
+ 61.407
+
+
+
+ 61.525
+
+
+
+ 61.732
+
+
+
+ 61.913
+
+
+
+ 62.015
+
+
+
+ 62.153
+
+
+
+ 62.381
+
+
+
+ 63.366
+
+
+
+ 64.048
+
+
+
+ 64.211
+
+
+
+ 64.045
+
+
+
+ 63.621
+
+
+
+ 63.372
+
+
+
+ 63.274
+
+
+
+ 62.916
+
+
+
+ 62.479
+
+
+
+ 62.169
+
+
+
+ 62.003
+
+
+
+ 62.033
+
+
+
+ 62.019
+
+
+
+ 61.962
+
+
+
+ 61.883
+
+
+
+ 61.845
+
+
+
+ 61.912
+
+
+
+ 61.933
+
+
+
+ 62.197
+
+
+
+ 62.458
+
+
+
+ 62.818
+
+
+
+ 63.184
+
+
+
+ 63.594
+
+
+
+ 63.821
+
+
+
+ 64.166
+
+
+
+ 64.443
+
+
+
+ 64.789
+
+
+
+ 65.159
+
+
+
+ 65.579
+
+
+
+ 65.972
+
+
+
+ 66.168
+
+
+
+ 66.408
+
+
+
+ 66.645
+
+
+
+ 66.903
+
+
+
+ 66.969
+
+
+
+ 66.914
+
+
+
+ 66.900
+
+
+
+ 66.988
+
+
+
+ 67.071
+
+
+
+ 66.981
+
+
+
+ 67.082
+
+
+
+ 66.979
+
+
+
+ 66.836
+
+
+
+ 66.684
+
+
+
+ 66.648
+
+
+
+ 66.638
+
+
+
+ 66.693
+
+
+
+ 66.901
+
+
+
+ 67.089
+
+
+
+ 67.369
+
+
+
+ 67.503
+
+
+
+ 67.572
+
+
+
+ 67.638
+
+
+
+ 67.847
+
+
+
+ 68.181
+
+
+
+ 68.561
+
+
+
+ 68.819
+
+
+
+ 69.152
+
+
+
+ 69.599
+
+
+
+ 69.935
+
+
+
+ 70.050
+
+
+
+ 70.077
+
+
+
+ 70.030
+
+
+
+ 69.912
+
+
+
+ 69.822
+
+
+
+ 69.880
+
+
+
+ 69.926
+
+
+
+ 70.101
+
+
+
+ 70.374
+
+
+
+ 70.344
+
+
+
+ 70.369
+
+
+
+ 70.287
+
+
+
+ 70.336
+
+
+
+ 70.398
+
+
+
+ 70.214
+
+
+
+ 70.136
+
+
+
+ 69.985
+
+
+
+ 69.883
+
+
+
+ 69.700
+
+
+
+ 69.553
+
+
+
+ 69.573
+
+
+
+ 69.521
+
+
+
+ 69.537
+
+
+
+ 69.484
+
+
+
+ 69.240
+
+
+
+ 68.931
+
+
+
+ 68.727
+
+
+
+ 68.441
+
+
+
+ 68.038
+
+
+
+ 67.729
+
+
+
+ 67.290
+
+
+
+ 67.129
+
+
+
+ 67.146
+
+
+
+ 67.181
+
+
+
+ 67.329
+
+
+
+ 67.561
+
+
+
+ 67.815
+
+
+
+ 68.286
+
+
+
+ 68.569
+
+
+
+ 68.562
+
+
+
+ 68.722
+
+
+
+ 68.704
+
+
+
+ 67.659
+
+
+
+ 66.435
+
+
+
+ 65.259
+
+
+
+ 64.157
+
+
+
+ 63.192
+
+
+
+ 62.457
+
+
+
+ 62.043
+
+
+
+ 61.622
+
+
+
+ 61.320
+
+
+
+ 61.012
+
+
+
+ 60.733
+
+
+
+ 60.626
+
+
+
+ 60.655
+
+
+
+ 60.722
+
+
+
+ 60.767
+
+
+
+ 60.686
+
+
+
+ 60.735
+
+
+
+ 60.773
+
+
+
+ 60.802
+
+
+
+ 60.985
+
+
+
+ 61.048
+
+
+
+ 61.177
+
+
+
+ 61.255
+
+
+
+ 61.520
+
+
+
+ 61.946
+
+
+
+ 62.367
+
+
+
+ 62.868
+
+
+
+ 63.597
+
+
+
+ 64.507
+
+
+
+ 65.226
+
+
+
+ 65.808
+
+
+
+ 65.880
+
+
+
+ 66.060
+
+
+
+ 66.282
+
+
+
+ 66.555
+
+
+
+ 66.966
+
+
+
+ 67.301
+
+
+
+ 67.510
+
+
+
+ 67.639
+
+
+
+ 67.682
+
+
+
+ 67.725
+
+
+
+ 67.649
+
+
+
+ 67.593
+
+
+
+ 67.699
+
+
+
+ 67.703
+
+
+
+ 67.807
+
+
+
+ 67.908
+
+
+
+ 68.084
+
+
+
+ 67.788
+
+
+
+ 67.277
+
+
+
+ 66.971
+
+
+
+ 66.877
+
+
+
+ 66.649
+
+
+
+ 66.357
+
+
+
+ 66.289
+
+
+
+ 66.103
+
+
+
+ 65.880
+
+
+
+ 65.694
+
+
+
+ 65.426
+
+
+
+ 65.395
+
+
+
+ 65.346
+
+
+
+ 65.305
+
+
+
+ 65.205
+
+
+
+ 65.164
+
+
+
+ 64.920
+
+
+
+ 64.620
+
+
+
+ 64.532
+
+
+
+ 64.532
+
+
+
+ 64.467
+
+
+
+ 64.362
+
+
+
+ 64.291
+
+
+
+ 64.220
+
+
+
+ 64.168
+
+
+
+ 64.262
+
+
+
+ 64.238
+
+
+
+ 64.146
+
+
+
+ 64.148
+
+
+
+ 64.037
+
+
+
+ 63.941
+
+
+
+ 63.911
+
+
+
+ 63.850
+
+
+
+ 64.105
+
+
+
+ 64.370
+
+
+
+ 64.398
+
+
+
+ 64.656
+
+
+
+ 64.850
+
+
+
+ 64.959
+
+
+
+ 64.716
+
+
+
+ 64.640
+
+
+
+ 64.596
+
+
+
+ 64.341
+
+
+
+ 64.172
+
+
+
+ 64.294
+
+
+
+ 64.246
+
+
+
+ 64.121
+
+
+
+ 63.992
+
+
+
+ 63.938
+
+
+
+ 63.876
+
+
+
+ 63.663
+
+
+
+ 63.292
+
+
+
+ 62.872
+
+
+
+ 62.497
+
+
+
+ 62.277
+
+
+
+ 62.181
+
+
+
+ 62.188
+
+
+
+ 62.181
+
+
+
+ 62.181
+
+
+
+ 62.132
+
+
+
+ 61.977
+
+
+
+ 61.811
+
+
+
+ 61.546
+
+
+
+ 61.255
+
+
+
+ 60.910
+
+
+
+ 60.723
+
+
+
+ 60.654
+
+
+
+ 60.519
+
+
+
+ 60.556
+
+
+
+ 60.640
+
+
+
+ 60.636
+
+
+
+ 60.585
+
+
+
+ 60.417
+
+
+
+ 60.189
+
+
+
+ 59.753
+
+
+
+ 59.042
+
+
+
+ 58.420
+
+
+
+ 57.845
+
+
+
+ 57.489
+
+
+
+ 57.535
+
+
+
+ 57.384
+
+
+
+ 57.299
+
+
+
+ 57.178
+
+
+
+ 56.977
+
+
+
+ 56.742
+
+
+
+ 56.607
+
+
+
+ 56.610
+
+
+
+ 56.717
+
+
+
+ 56.936
+
+
+
+ 57.129
+
+
+
+ 57.360
+
+
+
+ 57.666
+
+
+
+ 58.015
+
+
+
+ 58.251
+
+
+
+ 58.487
+
+
+
+ 58.983
+
+
+
+ 59.251
+
+
+
+ 59.573
+
+
+
+ 59.970
+
+
+
+ 60.182
+
+
+
+ 60.222
+
+
+
+ 60.390
+
+
+
+ 60.509
+
+
+
+ 60.649
+
+
+
+ 60.825
+
+
+
+ 60.914
+
+
+
+ 60.818
+
+
+
+ 60.890
+
+
+
+ 61.020
+
+
+
+ 61.123
+
+
+
+ 61.250
+
+
+
+ 61.384
+
+
+
+ 61.557
+
+
+
+ 61.746
+
+
+
+ 61.973
+
+
+
+ 62.220
+
+
+
+ 62.520
+
+
+
+ 62.697
+
+
+
+ 62.756
+
+
+
+ 62.883
+
+
+
+ 62.969
+
+
+
+ 63.083
+
+
+
+ 63.285
+
+
+
+ 63.502
+
+
+
+ 63.573
+
+
+
+ 63.777
+
+
+
+ 63.959
+
+
+
+ 64.055
+
+
+
+ 64.181
+
+
+
+ 64.277
+
+
+
+ 64.413
+
+
+
+ 64.380
+
+
+
+ 64.447
+
+
+
+ 64.629
+
+
+
+ 64.954
+
+
+
+ 65.293
+
+
+
+ 65.601
+
+
+
+ 65.861
+
+
+
+ 66.165
+
+
+
+ 66.384
+
+
+
+ 66.616
+
+
+
+ 66.809
+
+
+
+ 67.028
+
+
+
+ 67.168
+
+
+
+ 67.287
+
+
+
+ 67.366
+
+
+
+ 67.447
+
+
+
+ 67.579
+
+
+
+ 67.818
+
+
+
+ 67.863
+
+
+
+ 67.868
+
+
+
+ 67.948
+
+
+
+ 67.976
+
+
+
+ 67.876
+
+
+
+ 67.761
+
+
+
+ 67.775
+
+
+
+ 67.845
+
+
+
+ 67.885
+
+
+
+ 67.880
+
+
+
+ 67.873
+
+
+
+ 67.891
+
+
+
+ 67.792
+
+
+
+ 67.755
+
+
+
+ 67.706
+
+
+
+ 67.632
+
+
+
+ 67.525
+
+
+
+ 67.362
+
+
+
+ 67.402
+
+
+
+ 67.387
+
+
+
+ 67.241
+
+
+
+ 66.727
+
+
+
+ 66.269
+
+
+
+ 65.902
+
+
+
+ 65.430
+
+
+
+ 65.014
+
+
+
+ 64.536
+
+
+
+ 64.098
+
+
+
+ 63.715
+
+
+
+ 63.415
+
+
+
+ 63.124
+
+
+
+ 62.867
+
+
+
+ 62.711
+
+
+
+ 62.617
+
+
+
+ 62.555
+
+
+
+ 62.604
+
+
+
+ 62.745
+
+
+
+ 62.935
+
+
+
+ 63.072
+
+
+
+ 63.326
+
+
+
+ 63.591
+
+
+
+ 64.023
+
+
+
+ 64.462
+
+
+
+ 64.946
+
+
+
+ 65.111
+
+
+
+ 65.312
+
+
+
+ 65.464
+
+
+
+ 65.561
+
+
+
+ 65.461
+
+
+
+ 65.273
+
+
+
+ 65.153
+
+
+
+ 65.035
+
+
+
+ 65.035
+
+
+
+ 65.083
+
+
+
+ 64.979
+
+
+
+ 65.021
+
+
+
+ 65.105
+
+
+
+ 65.111
+
+
+
+ 65.173
+
+
+
+ 65.496
+
+
+
+ 65.671
+
+
+
+ 65.943
+
+
+
+ 66.140
+
+
+
+ 66.315
+
+
+
+ 66.473
+
+
+
+ 66.796
+
+
+
+ 67.118
+
+
+
+ 67.558
+
+
+
+ 68.071
+
+
+
+ 68.318
+
+
+
+ 68.590
+
+
+
+ 68.793
+
+
+
+ 69.020
+
+
+
+ 69.137
+
+
+
+ 69.147
+
+
+
+ 69.406
+
+
+
+ 69.593
+
+
+
+ 69.696
+
+
+
+ 69.709
+
+
+
+ 69.817
+
+
+
+ 69.962
+
+
+
+ 70.005
+
+
+
+ 70.027
+
+
+
+ 70.019
+
+
+
+ 70.103
+
+
+
+ 70.237
+
+
+
+ 70.427
+
+
+
+ 70.613
+
+
+
+ 70.809
+
+
+
+ 71.010
+
+
+
+ 71.051
+
+
+
+ 70.991
+
+
+
+ 70.802
+
+
+
+ 70.712
+
+
+
+ 70.559
+
+
+
+ 70.401
+
+
+
+ 70.307
+
+
+
+ 70.124
+
+
+
+ 69.814
+
+
+
+ 69.506
+
+
+
+ 69.248
+
+
+
+ 69.111
+
+
+
+ 68.829
+
+
+
+ 68.685
+
+
+
+ 68.478
+
+
+
+ 68.487
+
+
+
+ 68.638
+
+
+
+ 68.837
+
+
+
+ 68.816
+
+
+
+ 69.106
+
+
+
+ 69.182
+
+
+
+ 69.242
+
+
+
+ 69.431
+
+
+
+ 69.557
+
+
+
+ 69.866
+
+
+
+ 70.022
+
+
+
+ 69.908
+
+
+
+ 69.895
+
+
+
+ 69.151
+
+
+
+ 68.183
+
+
+
+ 67.086
+
+
+
+ 66.201
+
+
+
+ 65.764
+
+
+
+ 65.187
+
+
+
+ 64.691
+
+
+
+ 64.547
+
+
+
+ 64.220
+
+
+
+ 63.943
+
+
+
+ 63.808
+
+
+
+ 63.890
+
+
+
+ 64.268
+
+
+
+ 64.133
+
+
+
+ 63.953
+
+
+
+ 63.722
+
+
+
+ 63.610
+
+
+
+ 63.409
+
+
+
+ 63.477
+
+
+
+ 63.447
+
+
+
+ 63.487
+
+
+
+ 63.390
+
+
+
+ 63.298
+
+
+
+ 63.314
+
+
+
+ 63.301
+
+
+
+ 63.397
+
+
+
+ 63.416
+
+
+
+ 63.374
+
+
+
+ 63.423
+
+
+
+ 63.333
+
+
+
+ 63.255
+
+
+
+ 63.203
+
+
+
+ 63.279
+
+
+
+ 63.442
+
+
+
+ 63.445
+
+
+
+ 63.316
+
+
+
+ 63.250
+
+
+
+ 63.184
+
+
+
+ 63.125
+
+
+
+ 63.108
+
+
+
+ 62.899
+
+
+
+ 62.718
+
+
+
+ 62.390
+
+
+
+ 62.467
+
+
+
+ 62.399
+
+
+
+ 62.281
+
+
+
+ 62.125
+
+
+
+ 61.950
+
+
+
+ 61.725
+
+
+
+ 61.664
+
+
+
+ 61.915
+
+
+
+ 62.144
+
+
+
+ 62.401
+
+
+
+ 62.799
+
+
+
+ 63.087
+
+
+
+ 63.259
+
+
+
+ 63.277
+
+
+
+ 63.150
+
+
+
+ 62.760
+
+
+
+ 62.427
+
+
+
+ 62.313
+
+
+
+ 62.258
+
+
+
+ 62.259
+
+
+
+ 62.099
+
+
+
+ 62.104
+
+
+
+ 62.120
+
+
+
+ 62.324
+
+
+
+ 62.521
+
+
+
+ 62.655
+
+
+
+ 62.866
+
+
+
+ 63.060
+
+
+
+ 63.157
+
+
+
+ 63.288
+
+
+
+ 63.351
+
+
+
+ 63.338
+
+
+
+ 63.397
+
+
+
+ 63.599
+
+
+
+ 63.588
+
+
+
+ 63.612
+
+
+
+ 63.706
+
+
+
+ 63.844
+
+
+
+ 63.809
+
+
+
+ 63.813
+
+
+
+ 63.697
+
+
+
+ 63.304
+
+
+
+ 62.738
+
+
+
+ 62.117
+
+
+
+ 61.497
+
+
+
+ 60.780
+
+
+
+ 60.160
+
+
+
+ 59.427
+
+
+
+ 58.765
+
+
+
+ 58.333
+
+
+
+ 58.055
+
+
+
+ 57.727
+
+
+
+ 57.493
+
+
+
+ 57.228
+
+
+
+ 57.078
+
+
+
+ 56.984
+
+
+
+ 57.061
+
+
+
+ 56.699
+
+
+
+ 56.404
+
+
+
+ 56.245
+
+
+
+ 56.033
+
+
+
+ 56.091
+
+
+
+ 56.095
+
+
+
+ 56.173
+
+
+
+ 56.417
+
+
+
+ 57.117
+
+
+
+ 57.681
+
+
+
+ 58.093
+
+
+
+ 58.505
+
+
+
+ 58.732
+
+
+
+ 58.961
+
+
+
+ 59.122
+
+
+
+ 59.342
+
+
+
+ 59.382
+
+
+
+ 59.382
+
+
+
+ 59.458
+
+
+
+ 59.545
+
+
+
+ 59.608
+
+
+
+ 59.751
+
+
+
+ 59.862
+
+
+
+ 59.958
+
+
+
+ 60.034
+
+
+
+ 60.196
+
+
+
+ 60.341
+
+
+
+ 60.456
+
+
+
+ 60.698
+
+
+
+ 60.970
+
+
+
+ 61.142
+
+
+
+ 61.351
+
+
+
+ 61.507
+
+
+
+ 61.471
+
+
+
+ 61.465
+
+
+
+ 61.533
+
+
+
+ 61.727
+
+
+
+ 61.793
+
+
+
+ 61.887
+
+
+
+ 61.938
+
+
+
+ 61.967
+
+
+
+ 61.890
+
+
+
+ 62.006
+
+
+
+ 62.196
+
+
+
+ 62.339
+
+
+
+ 62.448
+
+
+
+ 62.599
+
+
+
+ 62.681
+
+
+
+ 62.756
+
+
+
+ 62.955
+
+
+
+ 63.205
+
+
+
+ 63.572
+
+
+
+ 63.816
+
+
+
+ 64.189
+
+
+
+ 64.543
+
+
+
+ 64.958
+
+
+
+ 65.266
+
+
+
+ 65.690
+
+
+
+ 66.168
+
+
+
+ 66.548
+
+
+
+ 66.902
+
+
+
+ 67.398
+
+
+
+ 67.747
+
+
+
+ 67.543
+
+
+
+ 67.506
+
+
+
+ 67.441
+
+
+
+ 67.328
+
+
+
+ 67.305
+
+
+
+ 67.291
+
+
+
+ 67.335
+
+
+
+ 67.310
+
+
+
+ 67.438
+
+
+
+ 67.582
+
+
+
+ 67.703
+
+
+
+ 67.771
+
+
+
+ 67.795
+
+
+
+ 67.942
+
+
+
+ 68.001
+
+
+
+ 67.982
+
+
+
+ 68.063
+
+
+
+ 68.156
+
+
+
+ 68.228
+
+
+
+ 68.318
+
+
+
+ 68.237
+
+
+
+ 68.067
+
+
+
+ 67.994
+
+
+
+ 67.822
+
+
+
+ 67.757
+
+
+
+ 67.730
+
+
+
+ 67.788
+
+
+
+ 67.788
+
+
+
+ 67.670
+
+
+
+ 67.672
+
+
+
+ 67.755
+
+
+
+ 67.816
+
+
+
+ 67.758
+
+
+
+ 67.866
+
+
+
+ 67.944
+
+
+
+ 67.917
+
+
+
+ 67.891
+
+
+
+ 67.928
+
+
+
+ 68.042
+
+
+
+ 68.214
+
+
+
+ 68.249
+
+
+
+ 68.260
+
+
+
+ 68.232
+
+
+
+ 68.158
+
+
+
+ 68.113
+
+
+
+ 68.066
+
+
+
+ 68.058
+
+
+
+ 68.058
+
+
+
+ 68.007
+
+
+
+ 67.985
+
+
+
+ 67.921
+
+
+
+ 67.851
+
+
+
+ 68.015
+
+
+
+ 68.314
+
+
+
+ 68.428
+
+
+
+ 68.484
+
+
+
+ 68.561
+
+
+
+ 68.570
+
+
+
+ 68.618
+
+
+
+ 68.610
+
+
+
+ 68.374
+
+
+
+ 68.101
+
+
+
+ 67.883
+
+
+
+ 67.664
+
+
+
+ 67.157
+
+
+
+ 66.623
+
+
+
+ 66.019
+
+
+
+ 65.567
+
+
+
+ 64.986
+
+
+
+ 64.587
+
+
+
+ 64.136
+
+
+
+ 63.797
+
+
+
+ 63.505
+
+
+
+ 63.352
+
+
+
+ 63.297
+
+
+
+ 63.556
+
+
+
+ 63.850
+
+
+
+ 64.330
+
+
+
+ 64.593
+
+
+
+ 65.017
+
+
+
+ 65.228
+
+
+
+ 65.417
+
+
+
+ 65.599
+
+
+
+ 65.701
+
+
+
+ 66.065
+
+
+
+ 66.243
+
+
+
+ 66.456
+
+
+
+ 66.714
+
+
+
+ 66.867
+
+
+
+ 67.086
+
+
+
+ 67.256
+
+
+
+ 67.344
+
+
+
+ 67.391
+
+
+
+ 67.381
+
+
+
+ 67.537
+
+
+
+ 67.788
+
+
+
+ 68.014
+
+
+
+ 68.333
+
+
+
+ 68.529
+
+
+
+ 68.750
+
+
+
+ 68.940
+
+
+
+ 69.051
+
+
+
+ 69.248
+
+
+
+ 69.538
+
+
+
+ 69.766
+
+
+
+ 69.973
+
+
+
+ 70.057
+
+
+
+ 70.279
+
+
+
+ 70.455
+
+
+
+ 70.624
+
+
+
+ 70.724
+
+
+
+ 70.738
+
+
+
+ 70.627
+
+
+
+ 70.334
+
+
+
+ 69.978
+
+
+
+ 69.652
+
+
+
+ 69.581
+
+
+
+ 69.679
+
+
+
+ 69.804
+
+
+
+ 69.565
+
+
+
+ 69.513
+
+
+
+ 69.438
+
+
+
+ 69.293
+
+
+
+ 69.205
+
+
+
+ 69.260
+
+
+
+ 69.229
+
+
+
+ 68.923
+
+
+
+ 68.890
+
+
+
+ 68.888
+
+
+
+ 68.860
+
+
+
+ 68.823
+
+
+
+ 68.799
+
+
+
+ 68.781
+
+
+
+ 68.916
+
+
+
+ 69.153
+
+
+
+ 69.466
+
+
+
+ 69.743
+
+
+
+ 69.963
+
+
+
+ 69.926
+
+
+
+ 70.026
+
+
+
+ 70.083
+
+
+
+ 70.029
+
+
+
+ 69.852
+
+
+
+ 69.709
+
+
+
+ 69.698
+
+
+
+ 69.703
+
+
+
+ 69.857
+
+
+
+ 70.136
+
+
+
+ 70.380
+
+
+
+ 70.551
+
+
+
+ 70.519
+
+
+
+ 69.999
+
+
+
+ 69.453
+
+
+
+ 69.078
+
+
+
+ 68.560
+
+
+
+ 68.015
+
+
+
+ 67.954
+
+
+
+ 68.010
+
+
+
+ 67.904
+
+
+
+ 67.902
+
+
+
+ 67.879
+
+
+
+ 67.820
+
+
+
+ 67.860
+
+
+
+ 67.839
+
+
+
+ 67.668
+
+
+
+ 67.617
+
+
+
+ 67.510
+
+
+
+ 67.468
+
+
+
+ 67.350
+
+
+
+ 67.254
+
+
+
+ 67.251
+
+
+
+ 67.114
+
+
+
+ 66.856
+
+
+
+ 66.754
+
+
+
+ 66.569
+
+
+
+ 66.509
+
+
+
+ 66.404
+
+
+
+ 66.396
+
+
+
+ 66.388
+
+
+
+ 66.327
+
+
+
+ 66.316
+
+
+
+ 66.289
+
+
+
+ 66.233
+
+
+
+ 66.317
+
+
+
+ 66.426
+
+
+
+ 66.579
+
+
+
+ 66.679
+
+
+
+ 66.868
+
+
+
+ 66.969
+
+
+
+ 67.184
+
+
+
+ 67.398
+
+
+
+ 67.564
+
+
+
+ 67.596
+
+
+
+ 67.688
+
+
+
+ 67.850
+
+
+
+ 67.994
+
+
+
+ 68.054
+
+
+
+ 68.230
+
+
+
+ 68.500
+
+
+
+ 68.732
+
+
+
+ 68.935
+
+
+
+ 69.149
+
+
+
+ 69.324
+
+
+
+ 69.480
+
+
+
+ 69.587
+
+
+
+ 69.669
+
+
+
+ 69.704
+
+
+
+ 69.733
+
+
+
+ 69.819
+
+
+
+ 70.048
+
+
+
+ 70.256
+
+
+
+ 70.535
+
+
+
+ 70.771
+
+
+
+ 71.090
+
+
+
+ 71.219
+
+
+
+ 71.562
+
+
+
+ 72.033
+
+
+
+ 72.528
+
+
+
+ 72.872
+
+
+
+ 73.197
+
+
+
+ 73.631
+
+
+
+ 74.003
+
+
+
+ 74.322
+
+
+
+ 74.713
+
+
+
+ 74.966
+
+
+
+ 75.181
+
+
+
+ 75.546
+
+
+
+ 75.941
+
+
+
+ 76.148
+
+
+
+ 76.438
+
+
+
+ 76.501
+
+
+
+ 76.372
+
+
+
+ 76.196
+
+
+
+ 76.186
+
+
+
+ 75.461
+
+
+
+ 74.594
+
+
+
+ 74.391
+
+
+
+ 74.128
+
+
+
+ 73.906
+
+
+
+ 73.749
+
+
+
+ 73.484
+
+
+
+ 73.187
+
+
+
+ 73.057
+
+
+
+ 72.795
+
+
+
+ 72.536
+
+
+
+ 72.325
+
+
+
+ 72.060
+
+
+
+ 71.712
+
+
+
+ 71.485
+
+
+
+ 71.178
+
+
+
+ 70.853
+
+
+
+ 70.652
+
+
+
+ 70.449
+
+
+
+ 69.818
+
+
+
+ 69.091
+
+
+
+ 68.233
+
+
+
+ 67.550
+
+
+
+ 67.048
+
+
+
+ 66.527
+
+
+
+ 66.183
+
+
+
+ 65.844
+
+
+
+ 65.511
+
+
+
+ 65.267
+
+
+
+ 65.153
+
+
+
+ 64.997
+
+
+
+ 64.942
+
+
+
+ 64.848
+
+
+
+ 64.748
+
+
+
+ 64.560
+
+
+
+ 64.236
+
+
+
+ 64.044
+
+
+
+ 63.800
+
+
+
+ 63.545
+
+
+
+ 63.252
+
+
+
+ 63.029
+
+
+
+ 62.806
+
+
+
+ 62.602
+
+
+
+ 62.420
+
+
+
+ 62.133
+
+
+
+ 61.984
+
+
+
+ 61.909
+
+
+
+ 61.924
+
+
+
+ 61.807
+
+
+
+ 61.673
+
+
+
+ 61.357
+
+
+
+ 60.973
+
+
+
+ 60.596
+
+
+
+ 60.368
+
+
+
+ 60.145
+
+
+
+ 59.958
+
+
+
+ 59.786
+
+
+
+ 59.801
+
+
+
+ 59.781
+
+
+
+ 59.833
+
+
+
+ 59.962
+
+
+
+ 60.259
+
+
+
+ 60.563
+
+
+
+ 60.764
+
+
+
+ 60.684
+
+
+
+ 60.730
+
+
+
+ 60.672
+
+
+
+ 60.570
+
+
+
+ 60.450
+
+
+
+ 60.636
+
+
+
+ 60.586
+
+
+
+ 60.937
+
+
+
+ 61.431
+
+
+
+ 61.776
+
+
+
+ 62.177
+
+
+
+ 62.332
+
+
+
+ 62.640
+
+
+
+ 62.785
+
+
+
+ 62.663
+
+
+
+ 62.536
+
+
+
+ 62.435
+
+
+
+ 62.472
+
+
+
+ 62.449
+
+
+
+ 62.384
+
+
+
+ 62.471
+
+
+
+ 62.444
+
+
+
+ 62.597
+
+
+
+ 62.698
+
+
+
+ 62.782
+
+
+
+ 62.870
+
+
+
+ 62.893
+
+
+
+ 62.891
+
+
+
+ 62.742
+
+
+
+ 62.745
+
+
+
+ 62.650
+
+
+
+ 62.420
+
+
+
+ 62.243
+
+
+
+ 62.411
+
+
+
+ 62.419
+
+
+
+ 62.543
+
+
+
+ 62.647
+
+
+
+ 62.743
+
+
+
+ 62.714
+
+
+
+ 62.684
+
+
+
+ 62.530
+
+
+
+ 62.459
+
+
+
+ 62.447
+
+
+
+ 62.525
+
+
+
+ 62.566
+
+
+
+ 62.532
+
+
+
+ 62.447
+
+
+
+ 62.277
+
+
+
+ 62.084
+
+
+
+ 61.865
+
+
+
+ 61.718
+
+
+
+ 61.666
+
+
+
+ 61.662
+
+
+
+ 61.742
+
+
+
+ 61.796
+
+
+
+ 61.958
+
+
+
+ 61.852
+
+
+
+ 61.796
+
+
+
+ 61.798
+
+
+
+ 61.700
+
+
+
+ 61.615
+
+
+
+ 61.400
+
+
+
+ 61.120
+
+
+
+ 60.970
+
+
+
+ 60.902
+
+
+
+ 60.738
+
+
+
+ 60.627
+
+
+
+ 60.564
+
+
+
+ 60.547
+
+
+
+ 60.496
+
+
+
+ 60.494
+
+
+
+ 60.497
+
+
+
+ 60.529
+
+
+
+ 60.435
+
+
+
+ 60.492
+
+
+
+ 60.567
+
+
+
+ 60.674
+
+
+
+ 60.755
+
+
+
+ 60.766
+
+
+
+ 60.663
+
+
+
+ 60.368
+
+
+
+ 60.034
+
+
+
+ 59.781
+
+
+
+ 59.481
+
+
+
+ 59.277
+
+
+
+ 59.186
+
+
+
+ 59.367
+
+
+
+ 59.549
+
+
+
+ 59.542
+
+
+
+ 59.608
+
+
+
+ 59.479
+
+
+
+ 59.451
+
+
+
+ 59.578
+
+
+
+ 59.641
+
+
+
+ 59.731
+
+
+
+ 59.904
+
+
+
+ 60.022
+
+
+
+ 60.149
+
+
+
+ 60.552
+
+
+
+ 60.881
+
+
+
+ 61.324
+
+
+
+ 61.838
+
+
+
+ 62.191
+
+
+
+ 62.624
+
+
+
+ 63.160
+
+
+
+ 63.582
+
+
+
+ 64.066
+
+
+
+ 64.454
+
+
+
+ 64.885
+
+
+
+ 65.264
+
+
+
+ 65.668
+
+
+
+ 66.074
+
+
+
+ 66.445
+
+
+
+ 66.691
+
+
+
+ 66.617
+
+
+
+ 66.428
+
+
+
+ 66.366
+
+
+
+ 66.335
+
+
+
+ 66.271
+
+
+
+ 66.374
+
+
+
+ 66.440
+
+
+
+ 66.419
+
+
+
+ 66.441
+
+
+
+ 66.439
+
+
+
+ 66.279
+
+
+
+ 66.384
+
+
+
+ 66.400
+
+
+
+ 66.420
+
+
+
+ 66.446
+
+
+
+ 66.488
+
+
+
+ 66.564
+
+
+
+ 66.704
+
+
+
+ 66.813
+
+
+
+ 67.037
+
+
+
+ 66.985
+
+
+
+ 66.986
+
+
+
+ 67.126
+
+
+
+ 67.227
+
+
+
+ 67.334
+
+
+
+ 67.628
+
+
+
+ 67.938
+
+
+
+ 68.267
+
+
+
+ 68.634
+
+
+
+ 68.914
+
+
+
+ 69.035
+
+
+
+ 69.006
+
+
+
+ 68.855
+
+
+
+ 68.683
+
+
+
+ 68.507
+
+
+
+ 68.477
+
+
+
+ 68.514
+
+
+
+ 68.571
+
+
+
+ 68.748
+
+
+
+ 68.966
+
+
+
+ 69.109
+
+
+
+ 69.347
+
+
+
+ 69.920
+
+
+
+ 70.504
+
+
+
+ 70.967
+
+
+
+ 71.281
+
+
+
+ 71.528
+
+
+
+ 71.814
+
+
+
+ 71.889
+
+
+
+ 71.993
+
+
+
+ 72.029
+
+
+
+ 72.039
+
+
+
+ 72.226
+
+
+
+ 72.327
+
+
+
+ 72.492
+
+
+
+ 72.536
+
+
+
+ 72.786
+
+
+
+ 72.864
+
+
+
+ 72.910
+
+
+
+ 72.972
+
+
+
+ 72.988
+
+
+
+ 73.037
+
+
+
+ 73.241
+
+
+
+ 73.501
+
+
+
+ 73.983
+
+
+
+ 74.372
+
+
+
+ 74.545
+
+
+
+ 74.704
+
+
+
+ 74.661
+
+
+
+ 74.478
+
+
+
+ 74.572
+
+
+
+ 74.446
+
+
+
+ 74.554
+
+
+
+ 74.647
+
+
+
+ 74.786
+
+
+
+ 74.989
+
+
+
+ 74.975
+
+
+
+ 74.898
+
+
+
+ 74.980
+
+
+
+ 75.505
+
+
+
+ 75.981
+
+
+
+ 76.566
+
+
+
+ 77.058
+
+
+
+ 77.319
+
+
+
+ 77.662
+
+
+
+ 77.936
+
+
+
+ 78.210
+
+
+
+ 78.333
+
+
+
+ 78.386
+
+
+
+ 78.471
+
+
+
+ 78.424
+
+
+
+ 78.086
+
+
+
+ 77.591
+
+
+
+ 77.283
+
+
+
+ 77.159
+
+
+
+ 77.169
+
+
+
+ 77.349
+
+
+
+ 77.447
+
+
+
+ 77.443
+
+
+
+ 77.476
+
+
+
+ 77.557
+
+
+
+ 77.419
+
+
+
+ 77.292
+
+
+
+ 76.995
+
+
+
+ 76.573
+
+
+
+ 76.312
+
+
+
+ 76.191
+
+
+
+ 76.159
+
+
+
+ 76.069
+
+
+
+ 76.043
+
+
+
+ 75.778
+
+
+
+ 75.595
+
+
+
+ 75.458
+
+
+
+ 75.330
+
+
+
+ 75.312
+
+
+
+ 75.164
+
+
+
+ 75.275
+
+
+
+ 75.431
+
+
+
+ 75.729
+
+
+
+ 76.021
+
+
+
+ 76.187
+
+
+
+ 76.060
+
+
+
+ 76.132
+
+
+
+ 76.232
+
+
+
+ 76.297
+
+
+
+ 76.469
+
+
+
+ 76.612
+
+
+
+ 76.590
+
+
+
+ 76.678
+
+
+
+ 76.606
+
+
+
+ 76.380
+
+
+
+ 76.158
+
+
+
+ 76.069
+
+
+
+ 76.014
+
+
+
+ 75.939
+
+
+
+ 75.932
+
+
+
+ 75.887
+
+
+
+ 75.921
+
+
+
+ 76.102
+
+
+
+ 76.083
+
+
+
+ 76.049
+
+
+
+ 75.961
+
+
+
+ 75.740
+
+
+
+ 75.629
+
+
+
+ 75.608
+
+
+
+ 75.550
+
+
+
+ 75.662
+
+
+
+ 75.512
+
+
+
+ 75.257
+
+
+
+ 75.297
+
+
+
+ 75.432
+
+
+
+ 75.543
+
+
+
+ 75.522
+
+
+
+ 75.331
+
+
+
+ 75.173
+
+
+
+ 75.138
+
+
+
+ 75.015
+
+
+
+ 74.946
+
+
+
+ 74.623
+
+
+
+ 74.250
+
+
+
+ 74.148
+
+
+
+ 74.156
+
+
+
+ 74.032
+
+
+
+ 74.003
+
+
+
+ 73.978
+
+
+
+ 73.901
+
+
+
+ 73.772
+
+
+
+ 73.715
+
+
+
+ 73.446
+
+
+
+ 73.126
+
+
+
+ 72.756
+
+
+
+ 72.706
+
+
+
+ 72.532
+
+
+
+ 72.428
+
+
+
+ 72.179
+
+
+
+ 71.913
+
+
+
+ 71.633
+
+
+
+ 71.585
+
+
+
+ 71.638
+
+
+
+ 71.579
+
+
+
+ 71.387
+
+
+
+ 71.068
+
+
+
+ 71.089
+
+
+
+ 71.221
+
+
+
+ 71.157
+
+
+
+ 70.966
+
+
+
+ 70.825
+
+
+
+ 70.989
+
+
+
+ 70.918
+
+
+
+ 70.835
+
+
+
+ 70.717
+
+
+
+ 70.464
+
+
+
+ 70.242
+
+
+
+ 69.954
+
+
+
+ 69.799
+
+
+
+ 69.791
+
+
+
+ 69.659
+
+
+
+ 69.624
+
+
+
+ 69.473
+
+
+
+ 69.333
+
+
+
+ 69.143
+
+
+
+ 68.932
+
+
+
+ 68.789
+
+
+
+ 68.637
+
+
+
+ 68.509
+
+
+
+ 68.379
+
+
+
+ 68.276
+
+
+
+ 68.177
+
+
+
+ 68.124
+
+
+
+ 68.071
+
+
+
+ 67.988
+
+
+
+ 67.918
+
+
+
+ 67.870
+
+
+
+ 67.810
+
+
+
+ 67.849
+
+
+
+ 67.823
+
+
+
+ 67.722
+
+
+
+ 67.633
+
+
+
+ 67.553
+
+
+
+ 67.412
+
+
+
+ 67.300
+
+
+
+ 67.104
+
+
+
+ 66.958
+
+
+
+ 66.839
+
+
+
+ 66.617
+
+
+
+ 66.399
+
+
+
+ 66.224
+
+
+
+ 66.141
+
+
+
+ 66.075
+
+
+
+ 66.017
+
+
+
+ 65.903
+
+
+
+ 65.840
+
+
+
+ 65.741
+
+
+
+ 65.654
+
+
+
+ 65.586
+
+
+
+ 65.560
+
+
+
+ 65.531
+
+
+
+ 65.516
+
+
+
+ 65.488
+
+
+
+ 65.504
+
+
+
+ 65.493
+
+
+
+ 65.487
+
+
+
+ 65.524
+
+
+
+ 65.578
+
+
+
+ 65.646
+
+
+
+ 65.648
+
+
+
+ 65.590
+
+
+
+ 65.510
+
+
+
+ 65.567
+
+
+
+ 65.537
+
+
+
+ 65.387
+
+
+
+ 65.185
+
+
+
+ 64.969
+
+
+
+ 64.807
+
+
+
+ 64.736
+
+
+
+ 64.690
+
+
+
+ 64.575
+
+
+
+ 64.467
+
+
+
+ 64.524
+
+
+
+ 64.372
+
+
+
+ 64.349
+
+
+
+ 64.330
+
+
+
+
+
diff --git a/src/test/data/2019-09-07 16.17.12 Day.gpx b/src/test/data/2019-09-07 16.17.12 Day.gpx
new file mode 100755
index 0000000..f9f7303
--- /dev/null
+++ b/src/test/data/2019-09-07 16.17.12 Day.gpx
@@ -0,0 +1 @@
+Garmin International2019-09-07 16:17:12 DayDarkMagenta910.03909.54909.06908.10908.10908.58908.58908.58908.58909.06908.58909.06909.06908.58908.58908.58908.58908.58908.58908.58908.58908.58908.58908.58908.10907.62907.62907.14907.14906.66906.18906.18906.18905.70905.70905.22905.22905.22905.22904.74904.74904.26903.78903.30903.30902.82902.82903.30903.30903.30903.78903.78903.78903.78903.30903.30903.30903.30902.82902.82902.82902.82902.82902.82902.33902.33902.33902.33901.85901.85901.85901.85901.85901.85901.85901.85901.85902.33902.33902.33902.82902.82902.82902.82902.82902.82902.82903.30903.30903.78904.26904.26904.26904.26904.26903.78903.30902.82902.82902.82902.33902.33902.33902.33902.33902.33901.85901.85901.37901.37901.85901.85901.85901.85901.85901.85901.37901.37901.37900.89900.89900.41900.41899.93899.45898.97898.97898.49898.49898.49898.49898.49898.49898.01898.01898.01898.01898.01898.49898.49898.49898.49898.49898.49898.01898.01898.01898.01898.01898.49898.49898.97898.97898.97899.45899.45899.45899.45899.45899.45899.45899.93899.93899.93899.93899.45899.45899.45899.45898.97898.49898.01897.53897.05896.57896.09896.09895.61895.61895.61895.12894.16893.68892.72892.24891.28890.80890.32889.84889.84889.36889.36889.36889.36889.36888.88888.88888.88888.40888.40887.91887.91887.43887.43887.43887.43887.43887.43887.91887.91888.40888.40888.88888.88889.36889.36889.84889.84890.32890.32890.80890.80890.80890.80890.80890.32890.32890.32889.84889.84889.36889.36889.36888.88888.40888.40888.40887.91888.40888.40888.40888.88888.88889.36889.36889.84889.84890.32890.80890.80891.28891.28891.28891.76891.76891.76891.76891.76892.24892.24892.24891.76891.76891.76891.28891.28891.28891.28891.28891.28891.76891.76891.76891.76891.76892.24892.24892.24892.24892.24892.24892.24892.24892.24891.76891.76891.76891.28891.28891.28891.28891.28891.76891.76891.28891.76891.28891.28891.28891.28891.28891.76891.76892.24892.24891.76891.28891.28890.80891.28890.80890.80890.32890.32890.32890.32890.32890.32890.32890.80890.80890.80891.28891.28891.76891.76892.24891.76891.76891.76891.76891.76891.76892.24892.24892.24892.24892.24892.24892.24892.24891.76891.76891.28891.28890.80890.80890.80890.80890.80890.80891.28891.28891.76891.76892.24892.72893.20893.20893.68893.68893.68893.68893.68893.68893.20893.20893.20892.72892.72892.24892.24892.24891.76891.76891.28891.28890.80890.32890.32890.32890.32890.32890.32890.32890.32890.32890.32890.80890.80890.80890.80890.80890.80890.80890.80890.80890.32890.32890.32890.32890.32890.32889.84889.84889.84889.84889.84889.84889.84889.84889.84889.84889.84889.84889.84889.84890.32890.32890.32890.80890.80890.80890.80890.80890.80890.80890.32890.32890.32890.80891.28891.28891.76892.24892.72892.72892.72893.20892.72892.72892.72892.72892.72892.72892.72892.24892.24892.24892.24892.72892.72893.20894.16895.12896.09897.05897.53898.01898.01898.49898.49898.97898.97898.97898.97899.45899.45899.45899.93899.93900.41900.89900.89901.37901.37901.37901.85901.85901.85901.85902.33902.33902.33901.85902.33902.33902.33902.33902.33902.82902.82903.30903.78904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.26904.74904.74904.74905.22904.74904.74904.74904.74904.74904.74905.22905.22905.22905.70905.70905.70906.18906.18906.18906.18906.18906.66906.66907.14907.14907.14907.14907.14906.66906.66906.66906.66907.14907.14907.62907.14907.62907.14907.14907.14907.14907.14907.14907.14907.14907.14907.14907.14907.14907.62907.62907.62907.62907.62907.62907.62908.10908.10908.10908.10907.62907.62907.62907.14906.66906.66906.66906.66906.66906.66906.66906.66906.66906.66906.66906.66906.66906.66906.18906.18906.18906.18906.18906.18906.18906.18906.18906.18905.70905.70905.70905.22905.22905.22905.22905.70905.70905.70906.18906.18906.66906.66907.14907.14907.62907.62908.10908.10908.58908.58909.06909.06909.54909.54910.03910.51910.99910.99911.47911.47911.95912.43912.91913.39913.87914.35914.83915.31915.79915.79916.27916.75917.24917.24917.72917.72917.24917.24917.24917.24917.24917.72917.72917.72918.20918.20918.68919.16919.16919.64919.64920.12920.12920.12920.60920.60921.08921.08921.08920.60920.60920.12920.12920.12920.12919.64919.64919.16919.16918.68918.68918.68919.16919.16919.16919.16919.64920.12920.12920.60921.08921.08921.56922.04922.04922.52923.00923.00923.48923.48923.48923.48923.48923.48923.48923.48923.96923.96923.96923.48923.48923.48923.48923.96923.96923.96923.96923.96923.96923.96923.96923.96924.45924.45924.93924.93925.41925.41925.89925.89925.89925.89925.89925.89926.37926.37926.85926.85927.33927.33927.33927.33927.33927.81927.81927.81928.29928.29928.29928.77928.77928.77928.77928.77928.77929.25929.73929.73929.73930.21930.21930.69930.69930.69931.17931.17931.17931.17931.17931.17931.17930.69930.69930.21930.21929.73929.25929.25928.29927.33926.85925.41924.93924.45923.96923.96924.45924.45924.93924.93924.93925.41926.37926.85927.81928.29929.25929.73931.17931.65931.65931.17930.69929.73928.29925.89925.41924.93925.89925.89926.37926.37927.33927.81928.29929.25929.25929.25924.45923.00921.08919.64918.20917.72917.72917.72917.72917.72917.72917.24917.24917.24917.24917.24917.24917.24917.24917.24916.75916.75917.24917.24917.24917.24917.24917.24917.24917.24917.24917.24917.24916.75916.75916.27916.27915.79915.31915.31915.31914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83914.83915.31915.31915.31915.31915.31914.83914.83913.87913.39912.91912.43911.95911.47910.99910.51910.03909.54909.06908.58908.58908.10908.10908.58908.10908.10908.10908.10908.10908.10908.10908.10908.10908.10907.62907.62907.14907.62907.62907.62907.62907.62907.62907.62907.14907.14907.14907.14907.14907.14907.62907.62907.62907.14907.14907.14906.18905.70905.22904.74904.74904.26903.78902.82902.33901.37900.41898.97898.01897.05896.57895.61895.12895.12895.12895.12895.12895.12895.12894.64894.64895.12895.12895.12895.12894.64894.64894.64894.64894.16894.64894.16893.68893.20893.20892.72892.72892.24892.24892.24892.24892.24892.24892.24891.76891.76891.28891.28890.80890.32889.84889.36889.36889.36888.88888.40888.40888.40887.91887.91887.91887.91887.91887.91887.43887.43887.43887.43886.95886.95886.95886.95886.95886.47886.47885.99885.51885.51885.03884.55884.07884.07884.07883.59883.59883.11883.11883.11883.11883.11883.59883.59883.59884.07884.07884.07884.07884.07883.59883.59883.59883.59883.59883.11883.11883.11883.11883.11883.11883.11883.11883.11883.11883.11883.59883.59883.59884.07884.07884.55884.55885.03885.51885.51885.99885.99886.47886.47886.95886.95886.95886.95886.95886.47886.47886.47885.99885.51885.03884.55884.55884.07883.59883.59883.59883.11882.63882.15882.15882.15882.15882.15882.15882.15882.15881.67881.67881.19881.19881.19880.71880.71880.71880.71880.22879.74878.78877.82877.34876.86876.38876.38876.38876.86876.86876.86877.34877.34877.34877.34877.34877.82877.82877.82877.82877.82878.30878.78879.26879.74880.22880.71881.19881.19881.19881.19881.19881.19880.71880.22880.22880.22879.74879.74879.26879.26879.26878.78878.78878.30878.30877.34877.34876.86876.38876.38876.38875.90875.90875.42875.42874.94874.94874.94874.46874.46873.98873.50873.50873.01872.53872.53872.05871.57871.09870.61870.61870.13869.65869.65869.17868.69868.69868.21867.73867.73867.25866.77866.77866.29866.29865.80865.80865.80865.32865.32865.32864.84864.36864.36864.36863.88863.88863.88863.88863.88863.88863.88863.88863.88863.88864.36864.36864.84864.84865.32865.32865.32865.32865.32865.80865.80866.29866.29866.29866.77866.77866.77866.77867.25867.73867.73867.73868.21868.21868.21868.21868.21868.21868.21868.21868.21868.21867.73867.73867.25867.25866.77866.77866.29866.29866.29865.80865.32865.32864.84864.36863.88863.88863.40863.40863.40862.92862.92862.44861.96861.96861.96861.96861.96861.96861.48861.48861.48861.00861.00861.48861.48861.48861.48861.48861.48861.48861.48861.00861.00861.00861.00861.48861.00861.48861.48861.48861.48861.48861.48861.00860.52860.04859.56859.08858.59858.11857.63857.15856.67856.19855.71855.71855.71855.23855.23855.23855.23855.23855.23855.23855.23855.23855.23855.23854.75854.75854.27853.79853.31852.83852.83851.87850.90850.42848.98848.50848.50848.02848.02847.54847.06846.58846.10845.62844.66843.69843.21842.25841.29839.85839.37838.89838.41837.93837.45837.45836.96836.48836.00835.52835.52835.04834.08833.60833.60833.12833.12832.64832.16832.16832.16832.16832.16832.64832.64832.64832.64832.64832.64832.64833.12833.12833.12833.60833.60833.60833.12833.12833.12832.64832.64832.64832.64832.64832.64832.64833.12832.64833.12833.12833.12833.12833.60833.60834.08834.08834.08834.56834.08834.56834.56834.08833.60833.60833.12832.64832.64832.16831.68831.20831.20830.72830.24829.27829.27828.79828.31827.83827.35827.35826.87826.87826.87826.39826.39826.39826.39826.39826.39826.39826.39826.39826.87826.87826.87826.87827.35827.35827.35827.35827.35827.35827.35826.87826.87826.87826.87826.87826.87826.87826.87826.87826.87826.87826.39826.39826.39826.39826.39826.39825.91825.91825.43825.43825.91825.91825.43825.91825.43825.43825.43825.43825.43825.43825.43823.99823.03823.03823.03823.03823.03823.03823.03823.03823.03823.51823.51823.51823.99823.99823.51823.51823.03823.03822.55822.55822.06821.58821.10820.62820.62820.14820.14820.62820.62820.62821.10821.10821.10821.10820.62820.62820.14820.14820.14820.14820.14820.14820.14820.14820.62820.62820.62821.10821.10821.58822.06822.55823.03823.03823.03823.03823.03823.51823.03823.03823.51823.51823.03823.03823.03822.55822.06822.06822.06822.06821.58821.58821.58821.58821.58821.58821.58821.58821.58821.58821.58821.10821.10821.10821.10821.10821.58821.10821.10821.10821.10820.62820.62820.62820.14820.14820.14820.14820.14820.14819.66819.18819.18818.70818.70818.70818.70818.22818.22818.22818.22818.22818.22818.22818.22818.70818.70819.18819.18819.18819.18818.70818.70818.70818.22818.22818.22817.74817.74817.26817.26816.78816.78816.78816.30815.82815.34815.82815.34815.34815.34814.85814.85814.85814.85814.37814.37814.37813.89813.41812.45811.97811.49811.01810.53810.05810.05809.57809.09808.61808.13808.13807.64807.16807.16806.68806.68806.68806.68806.20805.72805.72805.72805.24805.24805.24804.76804.28804.28804.28804.28804.28804.28804.28804.28804.28804.28804.76804.76804.76804.76804.76805.24805.24805.24806.20806.68806.68807.16807.64807.64808.13808.13808.61808.61809.09809.57810.05810.53811.01811.49811.97812.45812.45812.93812.93812.93812.93812.93812.93812.93812.93812.93812.93812.93813.41812.93812.93812.93812.93812.93813.41813.41813.41813.89813.89813.89814.37814.37814.85814.85814.85815.34815.34815.82816.30816.30816.30816.30816.78816.78817.26817.26817.26817.26817.26817.26817.26817.26817.74817.74817.74818.22818.22818.22818.70818.70819.18819.18819.18819.18819.18819.18819.18819.18819.18819.18819.66820.14820.14820.14820.14820.62820.62820.62821.10821.10821.58822.06822.06822.55823.03823.03823.51823.51823.99824.47824.47825.43825.91826.39826.87826.87827.35827.35827.83827.83828.31828.31828.79828.79828.79829.27829.27829.76830.24830.24830.72830.72831.20831.68831.68832.16832.16832.16832.16832.16832.64832.64833.12833.60833.60834.08834.08834.08834.56834.56834.56835.04835.04835.04835.04835.04834.56834.56834.56834.08834.56834.56834.56834.08833.60833.60833.12833.12832.64832.64832.64832.16832.16832.16832.16832.16832.16832.16832.16832.16832.16832.64832.64833.12833.12833.12833.12833.60833.60833.60834.08834.08834.08833.60833.60833.12832.64832.64832.16831.68831.68831.20831.20830.72830.24830.24829.76829.27828.79828.31828.31827.83827.35827.35826.87826.87826.87826.39825.91825.91825.43825.91825.91825.91825.91826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.39826.87826.87826.87826.39826.39826.39826.39826.87826.87826.87827.35827.35827.83828.31828.31828.79828.79829.27829.27829.27829.76829.76830.24830.24830.24830.24830.24830.24830.24830.72831.20831.20831.68832.16832.16832.64833.12833.12833.60834.08834.08834.56835.04835.04835.04835.52835.52836.00836.00836.00836.48836.48836.96836.96837.45837.45837.45837.93837.93838.41838.89838.89838.89839.37838.89838.89838.41838.41837.93837.93837.93837.93837.93837.93837.93837.93837.93837.93838.41838.41838.41838.41838.41838.41837.93838.41838.41838.41838.41838.41838.89839.37839.37839.85839.85840.33840.81841.29841.29841.77842.25842.73842.73842.73842.73842.73842.73842.73842.25842.25841.77842.25842.25842.73842.25842.25843.21843.21843.69844.18844.66844.66845.14845.62846.10846.10846.58847.54847.54848.02848.50848.50848.98848.98848.98848.50848.98849.46849.46849.94850.42850.42850.42849.94849.94849.94849.46849.46848.98848.50848.02848.02847.54847.54847.06847.06847.06847.06847.54847.54847.54848.02848.02848.02848.02848.02848.02848.02848.50848.50849.46849.46849.46849.46849.46849.46849.46849.46849.94849.94849.94850.42850.42850.42850.42850.42850.42850.42850.42850.90850.90850.90851.38851.38851.38851.87851.87852.35852.83852.83852.83853.31853.79853.79854.27854.27854.27854.75854.75854.75855.23854.75854.75854.75854.27853.31852.83852.35851.87851.38850.90849.94849.94849.94849.94849.94849.94849.46849.46849.46849.46849.46848.98848.98848.50847.54845.14843.21841.77840.81840.33839.85839.37837.93837.45837.45836.96836.96836.48836.48836.48836.00836.00835.52835.52835.04835.04835.04835.04835.04835.04835.04835.04835.04835.04835.04835.04835.04835.04835.52835.52836.00836.00836.48836.48836.96836.96836.96836.96836.96836.48836.00835.52835.04834.56834.56834.56834.08833.60833.12833.12833.12833.12832.64832.16832.16832.16832.16832.16832.16832.16832.16832.16832.64832.64833.12833.60834.08834.08834.56835.04835.04835.04835.04835.52836.00836.00836.00836.48836.48836.48836.48836.48836.48836.48836.48836.48836.96836.96837.45837.45837.45837.93837.93838.41838.41838.41838.41838.41838.89838.89838.89838.89838.89839.37839.85839.85839.37839.37839.37839.37838.89838.41838.89838.41838.41838.41837.45837.45837.93837.93837.93837.45836.96836.00836.00835.52835.52835.52835.04835.52835.04835.04834.56834.56834.08834.08833.60833.12832.64832.64832.64832.16832.16832.16832.16832.64832.64832.64833.12833.12833.60834.08834.08834.56834.56834.56834.56834.08833.60833.12832.64832.16831.68831.20830.72829.76829.76829.27827.83826.87826.39825.91825.91825.91825.91825.91825.43825.43825.43825.43825.43824.95824.95824.95824.95825.43825.43824.95824.47823.99823.51823.03822.55821.58820.62819.66817.74816.30815.34814.37813.41812.93812.93812.93812.93812.93812.45811.97811.97811.97811.97811.49811.01811.01810.53810.05810.05809.57809.57809.09808.61808.13807.16806.68806.68806.20805.72805.72805.24805.24805.24805.24804.76804.76804.28803.80803.32803.32802.84803.32803.32803.32803.32803.80803.32803.80803.80803.80803.80804.28804.76805.24805.24805.72806.20806.68807.16807.64808.13808.61809.09809.57810.05810.53811.01811.49811.97812.45812.93813.41813.89814.37814.85814.85815.34815.34815.34815.82815.82815.82815.82815.82815.82815.82815.82815.82815.82815.34815.34815.34815.34814.85814.85814.37814.37814.37814.37814.37814.37814.37814.37813.89813.89813.41811.97811.49811.49811.97811.97811.01810.53810.05809.57808.61808.13808.13807.64807.16807.16806.68806.68806.20805.72805.24804.76804.76804.76804.76804.76804.76804.76804.28803.80803.32802.84802.36802.36801.88800.92800.92800.44800.44799.95799.47798.99798.51797.55797.55797.07796.59796.59796.11796.11795.63795.15794.67794.19793.71792.74792.74792.26792.26791.78791.78791.30791.30791.30791.30790.82790.82790.82791.30791.30791.78791.78791.78792.26792.74793.22793.22793.71793.71794.19794.19794.67795.15795.15795.15795.63796.11796.11796.59797.07797.55797.55798.03798.51798.51798.99799.47799.47799.95800.44800.44800.92801.40801.88801.88801.88802.36802.36802.84802.84803.32803.80803.80804.28804.28804.76804.76805.24805.72805.72806.20806.20806.68806.68807.16807.16807.64808.13808.61808.61809.09809.09809.57809.57810.05810.53811.01811.49811.49811.97811.97812.45812.45812.45812.93812.93813.41813.41813.89813.89813.89814.37814.85814.85815.34815.34815.34815.82816.30816.30816.78817.26817.26817.74818.22818.22818.70819.18819.66819.66820.14820.14820.14820.62820.62821.10821.58822.06822.55823.03823.03823.51823.51823.99824.47824.95824.95825.43825.91825.91826.39826.87826.87827.35827.83828.31828.31828.79829.27829.27829.76830.24830.72830.72831.20831.68832.16832.64833.12833.60834.08834.56835.04835.52836.48836.96837.45838.41838.89839.37839.85840.33841.29841.77842.25843.21843.69844.18844.66845.62846.10846.58847.06847.54848.02848.02848.50848.50848.98849.46848.98848.98848.50848.02848.02848.02847.54847.54847.06847.06846.58846.10845.62845.14844.66843.69843.69842.73842.73842.25842.25841.77841.29840.81839.85838.89838.89838.41838.41837.93837.45836.96836.00835.52835.04834.56834.56834.56834.56834.56834.08833.60833.12832.16831.68831.20831.20830.72830.24830.24829.76829.27828.79828.31826.87825.91824.95823.99823.03822.06821.10819.66818.70816.78815.82814.85814.37814.37813.89813.89813.41812.93812.45812.45811.97811.49811.01811.01810.53809.57809.09808.61808.61808.13808.13807.64807.64807.64806.68806.20806.20805.72805.24804.76804.28802.84801.88801.40800.44798.99797.55795.63792.26789.86787.46785.53784.57783.61782.65781.21779.77778.32777.36776.40775.92775.92775.44774.96774.96774.96774.48774.00773.52773.52773.04773.04773.04772.56772.56771.60771.11770.63770.63770.15770.15769.67769.19769.19768.71768.23767.75767.27766.79766.31766.31766.31765.83766.31765.83765.35764.87764.87764.39763.42762.94762.94762.94762.46762.46762.46762.46762.46762.46762.46762.94762.94762.94763.42763.42763.42763.90763.90763.90763.90764.39763.90763.90763.90763.42763.42762.94762.46762.46762.46762.46762.46762.46762.46762.46762.46762.46762.46762.46762.46762.46761.98761.98761.50761.50761.02761.02760.54760.54760.06760.06760.06760.06760.06759.58759.10759.10759.10758.62758.14758.14758.14757.66757.66757.18757.18756.69757.18756.69756.69756.69756.69756.69756.69756.21756.21756.21755.73755.73755.25755.25755.25754.77754.77754.77754.29754.29754.29753.81753.81753.81753.33753.33752.85752.37751.89751.89751.89751.41750.93750.93750.93750.93750.45750.45750.45749.97749.97749.49749.00749.00749.00749.00749.49749.00749.00748.52748.04747.56747.56747.08746.60746.12745.64745.64745.16744.68744.68744.68744.68744.68744.68744.68744.68744.68744.68744.68745.16745.64745.64746.12746.12745.64745.64745.64745.16744.68743.72743.72743.24742.76742.28
\ No newline at end of file
diff --git a/src/test/data/2019-12-29 06.50.19 Day.gpx b/src/test/data/2019-12-29 06.50.19 Day.gpx
new file mode 100755
index 0000000..1124536
--- /dev/null
+++ b/src/test/data/2019-12-29 06.50.19 Day.gpx
@@ -0,0 +1 @@
+Garmin International2019-12-29 06:50:19 DayDarkMagenta73.6874.1674.6474.6474.1674.1674.6475.1275.1275.1275.1275.6075.6076.0877.0477.5277.5276.5675.6075.1274.1672.7272.2472.2472.2472.2472.2472.7273.2073.6874.1674.6474.6475.1275.6075.6077.0478.0078.9779.4579.9379.9381.3782.8183.7784.7386.1887.1488.5889.5490.5091.4692.4293.3993.8793.8793.8793.8793.3992.9092.4292.4291.9491.4690.9890.9890.9890.9891.4691.4690.9891.4691.4691.4691.9491.9492.4292.4292.9092.9092.9092.9093.3993.3993.8794.3594.3594.3594.3594.3594.8394.8394.8394.8395.3195.3195.3195.7995.7995.3194.8395.7996.2795.7996.7596.7597.2397.2397.7197.7197.7198.1998.1997.7197.7197.2396.7596.2795.7995.3194.8394.3594.3594.3593.8793.8793.8793.3993.3992.9092.9092.4291.4690.9891.4690.5090.5090.9891.4691.4691.9491.9491.9491.9492.4292.4292.9092.9092.9092.9092.4292.4292.9092.9092.9092.4292.4292.4292.4292.4292.4292.4292.4292.4291.9492.4292.4292.9093.3993.3993.8793.3993.3993.3993.3993.3993.3993.3993.8793.8794.3594.3594.3594.8394.8394.8394.8395.3195.3195.3195.3194.8395.3195.3195.3195.7995.7996.2796.2796.7596.7596.7596.7596.7596.7596.7596.7596.7596.7596.7597.2397.2397.7197.7197.7198.1998.1998.1998.6798.6798.6798.6798.6798.6798.6798.6798.6798.6798.6798.6798.6798.6797.7198.1998.1997.7197.7197.7197.7197.2397.2397.2397.2397.2397.2397.2397.2397.2397.2397.2397.2397.2397.2396.7595.7995.3194.8394.8394.3594.8394.8394.8394.8394.8394.8394.8394.8394.8394.8394.8394.8394.3593.8793.8794.3594.3595.3197.2398.6799.63100.60102.04103.00103.96104.92105.88106.84107.32107.81108.29108.77109.25109.73109.73110.21109.73109.73109.25108.77108.77108.77108.29108.29107.81107.32107.32106.84106.36105.88105.40105.40104.92104.92104.92104.92104.92104.92104.92105.40105.40105.40105.40104.92105.40105.40105.40105.40105.40105.40105.40104.92104.44103.96103.48103.00102.52102.52102.04102.04101.56101.56101.56101.56101.56101.56101.56102.04102.04102.04102.04101.56101.56101.56101.08101.08101.08101.08101.08101.08101.08101.08101.08101.08101.08101.08100.60100.60100.60100.60100.60100.60100.60100.60100.60100.60100.60100.11100.1199.6399.6399.6399.1599.6399.6399.6399.6399.6399.6399.63100.11100.11100.60100.60100.60101.08101.08101.08101.08101.08100.60100.1199.6399.1599.1598.6798.6798.1998.1998.6798.6798.6798.6798.6798.6798.1998.1998.1998.1998.1998.1998.1998.1998.1997.7197.7197.2396.7596.2795.7995.3194.8394.8394.3594.3594.3593.8793.8793.8793.3992.9092.9092.9092.4292.4292.4292.4292.4292.9092.9092.9093.3993.3993.3993.3993.3993.3993.3993.3993.8793.3993.3993.3993.3993.3993.3993.3993.3993.3993.8793.8794.3594.3594.3593.8793.8793.8793.3993.3992.9092.4292.4292.4291.9491.9491.4690.9890.9890.9890.9890.5090.9890.9890.9890.9891.4691.4691.4691.4691.9491.9491.9491.9491.9491.9491.9491.9491.9491.9491.4691.4691.4691.4691.4691.4691.4691.9491.9491.9492.4292.4292.9092.9093.3994.3594.8395.3196.2796.7597.2397.7198.6799.63101.08102.04102.52103.00103.48103.96104.44104.92104.92105.88106.36106.36106.84106.84106.84106.36106.36105.88106.36106.36105.88105.88106.36106.36106.36106.36106.36106.36106.36106.36106.84106.84106.84106.84107.32107.81108.29108.77109.25109.73109.73110.69111.17112.13113.09113.57114.05114.53115.50116.46116.94117.90118.38118.86119.34119.82120.30120.78121.26121.74122.22122.71122.71122.71122.71122.71122.22122.22122.22122.22121.74120.78120.30120.30120.30119.82119.34118.86118.86118.86117.90117.90117.90117.42117.42117.42115.98115.50115.50115.01115.01114.53114.53114.53115.01115.01115.50115.98116.46117.42117.90118.38118.38117.90116.94116.46115.98115.50115.01114.53114.53114.53114.05114.05114.05114.05114.05113.57113.57113.57113.57114.05114.53115.01115.01115.01115.01114.53114.53114.53115.01115.50115.50115.50115.50115.50115.50115.01115.01115.01115.50115.50115.50115.50115.50115.98115.98115.98115.98115.98115.50115.50115.01115.01115.01114.53114.53114.53114.53114.05114.05114.05114.05113.57113.57113.57113.09113.09113.57113.57113.57113.09112.61112.61112.13112.13112.13112.61113.57114.53115.50116.46116.94116.94117.90118.38119.34119.82120.78121.26121.26121.74121.74121.74121.26121.26121.26120.78120.30119.82119.34118.38117.90117.42116.94116.94116.94116.46116.46116.46115.98115.50115.01114.53114.05114.53114.53114.53114.53114.53114.53114.53114.53115.01115.01115.01115.01115.50115.98115.98116.46116.46116.94116.94116.94116.94116.94116.94116.94116.94117.90118.38118.86119.34119.82120.30121.26121.74122.22122.71123.67125.11125.59126.07127.03127.99128.47129.43129.92130.40131.36131.84132.32132.32132.80133.28133.28133.76133.28134.24135.20136.64137.61138.09139.05140.01140.49140.97141.93142.41143.37144.34144.82145.78146.26147.22147.70148.18148.18148.66149.14149.62149.62149.62149.14148.66148.18146.74146.26145.78144.34143.37142.89141.45140.49139.53138.57137.61137.13136.16135.68135.68134.72134.24133.76133.28132.80132.32131.84131.36130.88130.40130.40130.40129.92129.92129.92130.40130.40130.88130.88131.36131.84131.84131.36131.84131.84131.84131.36131.36130.88130.88131.36131.84132.32132.80132.80133.28133.28133.76134.72134.72135.20135.20135.68136.16136.64136.64136.64136.16136.16136.16135.68134.72134.24133.76132.80132.32131.84131.36130.88130.40130.40130.40129.92129.92129.92129.92129.92129.92129.92129.43129.43128.95129.43129.92130.40130.88130.88130.40129.92129.92129.92129.43129.43129.43129.43128.95128.47127.99127.99127.99127.51127.51126.55125.59125.11124.63124.15124.63124.63124.63124.63124.63124.15124.15124.15123.67123.67123.19123.19123.19123.19123.19122.71122.22121.26121.26120.78120.78120.78120.30120.30120.30120.30120.30120.78120.78120.78121.26121.26121.74122.22122.71122.71123.19123.19124.15124.63125.11125.59126.07126.55127.03127.99128.47128.95129.43130.40130.88131.36131.84132.32132.80133.28133.76134.24134.72134.72134.72135.20135.20135.20135.68135.68136.16136.16135.68135.68135.20134.72134.24133.76132.80132.32132.32132.32132.32132.32132.80133.28133.28133.28133.76133.76133.76133.76134.24134.24134.72134.72135.20135.20135.68135.68136.16136.16136.16136.16135.68135.68135.20134.72134.72134.24133.76133.28133.28133.28133.28133.28133.28133.28133.28133.28133.28133.28133.28133.28133.76133.76133.76133.76133.28133.28133.28133.28133.28133.28133.28133.76133.76133.76134.24134.24134.72135.20135.20135.68136.16136.64137.13137.13137.61138.09138.57139.05139.53140.01140.49141.45142.41143.37144.34145.30146.26147.22147.70148.66149.14150.10151.06151.54152.51152.99153.47153.95153.95154.43154.91155.39155.87156.35156.35156.35156.35156.35156.35156.35155.39154.91154.43153.95153.95153.47152.51152.03152.03151.54150.58150.10149.62149.14148.18147.22146.26145.30144.34143.37142.41141.45140.49139.53138.09136.64134.72133.28131.84130.40128.95128.47127.99127.99127.51127.99127.99127.99127.99127.51127.03126.55126.07125.59125.11124.63124.15124.15123.67122.71120.78119.34118.38116.94116.46115.98115.50115.01114.05113.09112.61112.13112.13111.65111.65111.17111.17110.21109.73109.73109.25108.77108.29108.77109.25109.25109.73109.73109.73110.21110.69111.65112.61113.57114.53115.50116.46116.94117.90118.86119.34119.82120.30121.26122.22122.71123.19123.19123.67123.67123.67123.67124.15124.15123.67124.15124.15124.63124.63125.11125.59125.59125.59126.07126.07126.07126.07126.07126.07126.07126.07126.07126.55127.03127.51127.51127.51127.51127.51127.99127.99127.51127.51127.99127.99127.51127.51126.55126.07125.59123.67122.22121.74121.74121.26120.78120.30119.82118.38117.90117.90117.42117.42116.46115.50114.05113.09112.13111.65110.69110.21109.73109.25109.25108.77108.29107.81107.32107.32106.84106.84106.36106.36106.36106.36105.88105.88105.40104.92104.44103.96103.48103.48103.00103.00102.52102.04101.56101.08100.60100.1199.1598.6797.7197.2397.2396.7597.2397.2397.2397.2397.7198.1998.6799.63100.11101.08102.04103.00103.48104.44104.92106.36106.84107.81108.29108.77109.73110.21111.17112.13112.61113.57114.53115.50116.46117.42118.38119.34118.86119.82120.30120.78121.26122.22122.71122.71123.19123.67124.63126.07127.03127.99128.47128.95129.43129.43129.92130.88132.32133.76135.20136.16137.61139.05140.01141.45142.41143.37144.34145.30146.26147.22147.70148.18148.18148.18148.66148.66148.66149.14149.14149.14148.66148.18147.70147.22147.22147.22146.74146.26146.26145.78145.30144.82143.85143.37142.41141.93141.93141.45140.97140.49140.01139.05138.57138.09137.61137.13137.13136.64136.16136.16135.68135.68135.20134.72134.72134.24133.76133.76133.76133.76133.76133.28133.28132.80132.80132.32131.84130.88128.47126.55125.59125.59125.59125.59124.15123.19121.74121.26120.30119.82119.34118.86118.38117.90117.90117.42116.94116.46115.98115.50115.01114.53114.05114.05113.57113.09112.61112.13111.65111.65111.65111.65111.17111.17110.69109.73108.77108.29106.84105.88103.96102.04100.1198.6797.2396.2795.3194.8394.3593.8793.8793.8793.8793.8793.3993.3993.8794.3594.3594.8395.7996.2796.7597.2397.7198.1999.1599.63100.11100.60100.60101.08101.08101.56101.56101.56102.04102.04102.52102.52102.52101.56101.56101.08101.08100.60101.08101.08101.56101.56101.56101.56101.08101.08100.60100.60100.60100.60100.60100.60100.60100.60100.60100.11100.11100.11100.11100.11100.1199.6399.6399.6399.1599.1598.6798.6798.6798.6798.1998.1998.1998.1998.1998.1998.1998.1998.1998.6798.6799.1599.1599.1599.6399.6399.6399.6399.6399.6399.6399.6399.6399.1599.1599.1599.1599.1599.1598.6798.6798.6799.1599.1598.6798.6798.6799.1599.1599.1598.6798.6798.1998.1997.7197.7197.2396.7596.7596.2796.2795.7996.2795.7995.7995.7995.3194.8394.8394.8394.8394.3594.3594.3593.8793.8793.8793.3993.3992.9092.9092.4292.4292.4292.4292.4291.9491.9491.4691.4691.4690.9890.5090.5090.5090.9890.9891.4691.9491.9492.4292.4292.4292.4292.4292.4292.4292.4292.4291.9491.9491.9491.9491.9491.4691.4691.4691.4691.9491.9491.9491.9491.9491.9491.4691.4690.9891.4690.9890.9890.9890.5090.5090.9890.9891.4691.9492.4293.3993.8794.8395.7996.2796.7597.2397.7198.1998.6799.1599.1599.63100.11100.60101.08101.56101.56102.04102.52103.00103.48103.96104.44105.40106.36106.84106.36106.36106.84107.81109.25110.21111.17111.65112.61113.09113.09111.65111.17111.65112.13112.61113.09114.05114.53115.01115.01115.01115.50116.46116.94117.42117.90118.86119.34119.82120.30120.30120.30120.30120.30120.30120.78120.30120.30119.82120.30120.30120.30120.78120.78120.78120.78120.78121.26121.26121.74121.74122.22122.22122.71123.19123.19123.67124.15124.63125.11125.59125.59126.07126.55127.03127.51127.51127.51127.51127.51127.03127.03126.55126.55126.55127.03127.51127.99128.47128.95129.43129.43129.92130.40130.88131.84132.32132.80132.80133.28133.28133.28133.28133.76133.76134.24134.24134.72134.72135.20135.20135.68135.68135.68135.20135.20135.68135.68136.16136.64136.64137.13137.13137.61137.61137.61137.61137.61137.61137.61138.09138.09138.09138.57139.05139.53139.53139.53139.53140.01140.49141.45142.41142.89143.37143.37143.85143.85144.34144.34144.82145.30145.30145.30145.78145.78146.26146.74147.22147.70148.66149.14149.14149.62150.10150.10150.58150.58151.06150.58149.62148.66148.18148.18147.70146.74145.78144.82144.34143.85142.89142.41141.93141.45140.49140.01139.05138.09137.61136.64136.16135.68135.20134.72134.24133.28133.76133.76134.24134.72134.72134.72135.20135.20135.68136.16137.13137.61138.09139.05139.53140.01140.97140.97141.45141.93142.41143.37143.37143.85143.85143.85143.85143.37143.37143.37143.37143.85143.85143.85143.85143.37143.37143.37143.37143.37143.37143.37143.37143.37143.37142.89141.45141.45140.97140.49139.53137.61136.16134.72133.28132.80132.32132.32131.84131.84131.36130.88130.40129.92129.43128.47127.51127.03126.07125.59125.59125.59126.07126.07126.07126.07126.07126.07126.07126.07126.07126.07126.55126.55127.03127.03126.07126.07125.59125.59125.59126.07125.59125.59125.11124.63124.15124.15124.15124.15124.15124.63124.63125.11125.11125.59126.07126.55127.03127.51127.99128.47128.95129.43129.92130.40130.40130.88130.88130.88131.36131.36131.36131.36131.36130.88130.40129.92128.95128.47127.99127.51127.51126.55126.07125.59125.11125.11124.63124.15123.67123.67123.19123.19123.19123.67124.15124.15124.63124.63124.63125.11125.11124.63124.63124.63124.63124.15124.15124.15124.15123.67123.67123.67124.15124.15124.15124.15124.15124.15124.15124.15124.15124.15124.15123.67123.67123.67124.15124.15124.63124.63124.63124.15124.15123.67123.19123.19122.71122.71123.19123.19123.19123.67123.67123.67123.67123.67123.19122.71121.74121.26120.78120.30119.82119.34118.86118.86118.86118.86118.86116.46115.98115.98115.98115.98115.98115.98116.46116.94116.94117.42118.38119.34120.78121.74123.19124.63126.55127.99129.92131.84133.76135.20137.13138.09139.05140.01140.49140.97141.45141.45141.93142.41142.89142.89143.37143.37143.37142.89142.89142.41142.41141.93141.45141.45141.45140.97140.97140.97141.45141.45141.93141.93141.93141.93141.93141.93141.45140.97140.49140.01140.01139.53139.05138.57137.13137.13137.13136.16134.72132.80130.88129.92128.95127.99126.55125.59125.59125.11125.11125.11125.59125.59125.59125.11125.11125.11125.11124.15123.67123.19123.19122.71122.71122.71121.74120.78120.78120.30120.30120.30120.30119.82119.82120.30120.30120.78121.26122.22122.71123.19123.19124.15124.63125.11125.59126.07126.55127.03127.51127.99128.47128.47128.95128.95129.43129.43129.43129.43129.43128.95128.47128.95128.95129.43129.43129.92129.92129.92129.92129.92129.92129.92129.92129.92129.92129.92129.92129.92129.92129.43129.43129.43129.43129.43129.43129.43129.92129.92130.40130.40130.88130.88130.88130.40130.40130.40130.40130.40130.40130.40130.40130.88130.88130.88131.36131.36131.36131.84131.84131.36131.84130.88130.88130.40130.40130.40130.40129.92130.40130.40130.40130.88130.88130.88131.36131.36130.88130.88130.88131.36131.36131.84131.84131.84131.84132.32131.84132.32132.32132.32132.32132.32132.80132.80132.80132.80133.28133.76133.76134.24134.24134.72135.20135.20135.68135.68136.16136.16136.64136.64137.13137.61137.61137.61138.09138.09138.57138.57138.57138.09136.64136.16136.16135.68135.68135.20134.72134.24134.24133.76134.24134.72134.72134.72135.20135.20135.20135.68135.68136.16136.16136.64137.13137.13137.61138.09138.09138.09139.05139.53140.49141.45142.41143.37143.85144.34144.82145.78146.26146.74147.22147.22147.22147.22147.70147.70147.70147.22146.74146.74146.26146.26145.78145.30145.30145.30144.82144.82144.34143.85143.85143.37143.37142.89142.41142.41142.41141.93141.93141.45141.45140.97140.49140.01140.01138.09137.13135.68134.72134.72134.72134.72134.24134.24134.24134.72134.72134.24133.76131.36128.95125.59123.19121.26119.82118.86117.90117.42116.46116.46115.98115.50114.53114.05113.57112.61111.65111.17110.69110.69110.69110.69110.69111.17111.17111.65111.65111.17110.69110.21109.73109.73109.73109.73109.73109.25109.25108.77108.29108.29107.81107.32107.32107.32107.32107.32106.84107.32107.32107.32106.84106.84106.84106.84106.84106.84106.84107.32107.32107.81108.29108.29108.77109.25109.25109.73109.73110.21110.69110.69111.17111.17111.17111.65111.65111.65111.65111.65111.65112.13112.13112.13112.13112.13112.13111.17110.69110.21109.25108.77108.77108.77108.77109.25109.25109.25109.25108.77108.29108.29108.29107.81108.29108.29108.29108.77108.77108.77109.25108.77108.77108.77108.77108.29108.29107.81107.81107.81107.81107.32107.32106.84106.84106.84106.84106.84106.36106.36105.88105.88105.40105.40104.92104.92104.92104.92104.44104.44103.96103.48103.96103.96104.44104.44104.44104.44104.44104.92104.92104.92105.40105.40105.40105.88105.88105.88105.88105.88105.40105.40105.40105.40105.40105.40105.40104.92104.92104.92104.92104.92105.40104.92104.92104.92104.44103.96103.96103.48103.48103.48103.48103.48103.96103.96103.96103.48103.48103.48103.48103.96103.96103.96104.44104.44103.96103.48103.00102.52102.52102.04102.04101.56101.56101.08101.08101.08101.08100.60100.60100.60100.11100.11100.11100.11100.60100.60100.60101.08101.08101.08101.08101.08100.60100.60100.60100.11100.11100.11100.11100.11100.1199.6399.6399.63100.11100.11100.11100.60100.60100.60100.60101.08101.08101.08101.56101.56101.56101.56101.56101.56102.04102.04102.04101.56101.56101.08101.08101.08101.08101.08101.08100.60100.60100.60100.60100.60100.60100.60100.11100.11100.11100.11100.11100.11100.11100.11100.11100.11100.11100.11100.60100.60100.60100.60100.60100.60100.60100.60100.60100.60100.11100.60100.60100.60100.60100.60100.60100.60100.60101.08101.08101.56101.56102.04102.04102.04102.04102.04102.04102.04102.04102.52102.52103.00103.00103.00103.00103.00103.00103.00102.52102.52103.00103.00103.48103.48103.48103.48103.96103.96103.96104.44104.44104.44104.44104.44104.92105.40105.88105.88106.36106.36106.36106.84106.84107.32107.32107.81108.29108.77109.25109.25109.73110.21110.69111.17111.17111.17111.65111.65112.13112.13112.61112.61112.61112.61112.61112.61112.61112.61113.09113.09113.09113.09113.09113.09113.09113.57113.57113.57113.57113.57113.57113.57113.57113.57113.57113.57114.05114.05114.05114.53114.53114.53114.05114.05113.57113.57113.09113.09112.61112.61112.61112.61113.09113.09113.09113.57113.57113.57113.09113.09113.57113.57113.57113.09113.09113.57113.57113.57113.57113.09113.09113.09113.09113.09113.09113.09112.61112.61112.61112.13112.13111.65111.65111.65111.65111.65111.65111.17111.17111.17111.17110.69110.69110.69110.69111.17111.17111.17111.17111.17111.17110.69110.69110.69110.69110.69110.69111.17111.17111.17111.17111.17111.17111.17111.17111.17110.69110.21110.21109.73109.25109.25108.77108.29108.29107.81107.32107.32106.84106.84106.84107.32107.32107.32107.32107.32107.32107.32107.81108.29108.29108.77109.25109.25109.25109.73109.73110.21109.73109.73109.73109.73109.25108.77108.77109.25109.73110.21111.17111.65112.13112.13112.13111.65111.65111.65111.17111.17111.17110.69110.69110.69110.69110.21110.21109.73109.25109.25108.77108.29107.32107.32106.84105.88105.40105.40104.92104.92104.92104.92104.92104.92104.92104.92104.44104.44104.44104.44104.44104.44104.44103.96
\ No newline at end of file
diff --git a/src/test/data/AdjustTime.20170517.ini b/src/test/data/AdjustTime.20170517.ini
new file mode 100644
index 0000000..d86002c
--- /dev/null
+++ b/src/test/data/AdjustTime.20170517.ini
@@ -0,0 +1,16 @@
+#by AdjustTime
+#Wed May 17 19:07:03 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-17T10\:02\:51
+GPX.OVERWRITE_MAGVAR=false
+GPX.REUSE=false
+IMG.BASE_FILE=DSC05105.JPG
+IMG.SOURCE_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/cameradata/10070517/10070517
+GPX.SOURCE_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/cameradata/10070517/10070517/20170517.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/cameradata/
diff --git a/src/test/data/AdjustTime.20170518.A1.ini b/src/test/data/AdjustTime.20170518.A1.ini
new file mode 100644
index 0000000..5db4a3e
--- /dev/null
+++ b/src/test/data/AdjustTime.20170518.A1.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sat Jun 24 20:33:37 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=false
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.BASE_FILE=DSC05183.JPG
+IMG.TIME=2017-05-18T00\:16\:48Z
+GPX.OVERWRITE_MAGVAR=false
+GPX.REUSE=false
+IMG.SOURCE_FOLDER=testdata/cameradata/10170518
+GPX.SOURCE_FOLDER=testdata/cameradata/20170518.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.20170518.A2.ini b/src/test/data/AdjustTime.20170518.A2.ini
new file mode 100644
index 0000000..6277705
--- /dev/null
+++ b/src/test/data/AdjustTime.20170518.A2.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sat Jun 24 20:33:37 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=false
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.BASE_FILE=DSC05183.JPG
+IMG.TIME=2017-05-18T00\:16\:48Z
+GPX.OVERWRITE_MAGVAR=false
+GPX.REUSE=false
+IMG.SOURCE_FOLDER=testdata/cameradata/10170518
+GPX.SOURCE_FOLDER=testdata/cameradata/20170518.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.20170518.B1.ini b/src/test/data/AdjustTime.20170518.B1.ini
new file mode 100644
index 0000000..0b37f82
--- /dev/null
+++ b/src/test/data/AdjustTime.20170518.B1.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sat Jun 24 20:33:37 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=false
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-18T00\:20\:30Z
+GPX.OVERWRITE_MAGVAR=false
+GPX.REUSE=false
+IMG.BASE_FILE=20170518_092031A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata
+GPX.SOURCE_FOLDER=testdata/cameradata/20170518.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.20170518.B2.ini b/src/test/data/AdjustTime.20170518.B2.ini
new file mode 100644
index 0000000..502984d
--- /dev/null
+++ b/src/test/data/AdjustTime.20170518.B2.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sat Jun 24 20:33:37 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=false
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-18T00\:20\:30Z
+GPX.OVERWRITE_MAGVAR=false
+GPX.REUSE=false
+IMG.BASE_FILE=20170518_092031A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata
+GPX.SOURCE_FOLDER=testdata/cameradata/20170518.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.20170518.ini b/src/test/data/AdjustTime.20170518.ini
new file mode 100644
index 0000000..0b37f82
--- /dev/null
+++ b/src/test/data/AdjustTime.20170518.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sat Jun 24 20:33:37 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=false
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-18T00\:20\:30Z
+GPX.OVERWRITE_MAGVAR=false
+GPX.REUSE=false
+IMG.BASE_FILE=20170518_092031A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata
+GPX.SOURCE_FOLDER=testdata/cameradata/20170518.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M1a.separate.ini b/src/test/data/AdjustTime.M1a.separate.ini
new file mode 100644
index 0000000..25e9f7c
--- /dev/null
+++ b/src/test/data/AdjustTime.M1a.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M1b.separate.ini b/src/test/data/AdjustTime.M1b.separate.ini
new file mode 100644
index 0000000..12b8aed
--- /dev/null
+++ b/src/test/data/AdjustTime.M1b.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M1c.separate.ini b/src/test/data/AdjustTime.M1c.separate.ini
new file mode 100644
index 0000000..f432ba7
--- /dev/null
+++ b/src/test/data/AdjustTime.M1c.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=EXIF_TIME
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M1d.separate.ini b/src/test/data/AdjustTime.M1d.separate.ini
new file mode 100644
index 0000000..d0ab153
--- /dev/null
+++ b/src/test/data/AdjustTime.M1d.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=EXIF_TIME
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M2a.separate.ini b/src/test/data/AdjustTime.M2a.separate.ini
new file mode 100644
index 0000000..25e9f7c
--- /dev/null
+++ b/src/test/data/AdjustTime.M2a.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M2b.separate.ini b/src/test/data/AdjustTime.M2b.separate.ini
new file mode 100644
index 0000000..12b8aed
--- /dev/null
+++ b/src/test/data/AdjustTime.M2b.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M2c.separate.ini b/src/test/data/AdjustTime.M2c.separate.ini
new file mode 100644
index 0000000..f432ba7
--- /dev/null
+++ b/src/test/data/AdjustTime.M2c.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=EXIF_TIME
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.M2d.separate.ini b/src/test/data/AdjustTime.M2d.separate.ini
new file mode 100644
index 0000000..d0ab153
--- /dev/null
+++ b/src/test/data/AdjustTime.M2d.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=EXIF_TIME
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=testdata/cameradata/separate
+GPX.SOURCE_FOLDER=testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/AdjustTime.null.ini b/src/test/data/AdjustTime.null.ini
new file mode 100644
index 0000000..7b60e49
--- /dev/null
+++ b/src/test/data/AdjustTime.null.ini
@@ -0,0 +1,16 @@
+#defuilt settings
+#Tue May 16 15:59:01 JST 2017
+GPX.BASETIME=
+IMG.OUTPUT_EXIF=
+GPX.OUTPUT_SPEED=
+GPX.OUTPUT_WPT=
+IMG.OUTPUT_ALL=
+GPX.noFirstNode=
+IMG.OUTPUT=
+GPX.gpxSplit=
+GPX.REUSE=
+GPX.OVERWRITE_MAGVAR=
+IMG.BASE_FILE=
+IMG.SOURCE_FOLDER=
+GPX.SOURCE_FOLDER=
+IMG.OUTPUT_FOLDER=
diff --git a/src/test/data/AdjustTime.off.ini b/src/test/data/AdjustTime.off.ini
new file mode 100644
index 0000000..3494d77
--- /dev/null
+++ b/src/test/data/AdjustTime.off.ini
@@ -0,0 +1,16 @@
+#defuilt settings
+#Tue May 16 15:59:01 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=false
+GPX.OUTPUT_SPEED=false
+GPX.OUTPUT_WPT=false
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=false
+IMG.OUTPUT=false
+GPX.gpxSplit=false
+GPX.REUSE=false
+GPX.OVERWRITE_MAGVAR=false
+IMG.BASE_FILE=
+IMG.SOURCE_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/.
+GPX.SOURCE_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/.
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/.
diff --git a/src/test/data/AdjustTime.on.ini b/src/test/data/AdjustTime.on.ini
new file mode 100644
index 0000000..8a9a96b
--- /dev/null
+++ b/src/test/data/AdjustTime.on.ini
@@ -0,0 +1,16 @@
+#defuilt settings
+#Tue May 16 15:59:01 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_SPEED=true
+GPX.OUTPUT_WPT=true
+IMG.OUTPUT_ALL=true
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+GPX.REUSE=true
+GPX.OVERWRITE_MAGVAR=true
+IMG.BASE_FILE=
+IMG.SOURCE_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/.
+GPX.SOURCE_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/.
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/.
diff --git a/src/test/data/AdjustTime.separate.ini b/src/test/data/AdjustTime.separate.ini
new file mode 100644
index 0000000..26f1d1d
--- /dev/null
+++ b/src/test/data/AdjustTime.separate.ini
@@ -0,0 +1,17 @@
+#by AdjustTime
+#Sun Jun 25 09:32:18 JST 2017
+GPX.BASETIME=FILE_UPDATE
+IMG.OUTPUT_EXIF=true
+GPX.OUTPUT_WPT=false
+GPX.OUTPUT_SPEED=true
+IMG.OUTPUT_ALL=false
+GPX.noFirstNode=true
+IMG.OUTPUT=true
+GPX.gpxSplit=true
+IMG.TIME=2017-05-29T01\:31\:46Z
+GPX.OVERWRITE_MAGVAR=true
+GPX.REUSE=false
+IMG.BASE_FILE=20170529_103146A.jpg
+IMG.SOURCE_FOLDER=./testdata/cameradata/separate
+GPX.SOURCE_FOLDER=./testdata/cameradata/separate.gpx
+IMG.OUTPUT_FOLDER=/home/yuu/workspace/AdjustTime/importPicture/testdata/output
diff --git a/src/test/data/images/00001.jpg b/src/test/data/images/00001.jpg
new file mode 100644
index 0000000..250b249
--- /dev/null
+++ b/src/test/data/images/00001.jpg
Binary files differ
diff --git a/src/test/data/images/00002.jpg b/src/test/data/images/00002.jpg
new file mode 100644
index 0000000..8938854
--- /dev/null
+++ b/src/test/data/images/00002.jpg
Binary files differ
diff --git a/src/test/data/images/00003.jpg b/src/test/data/images/00003.jpg
new file mode 100644
index 0000000..ee8642f
--- /dev/null
+++ b/src/test/data/images/00003.jpg
Binary files differ
diff --git a/src/test/data/images/00004.jpg b/src/test/data/images/00004.jpg
new file mode 100755
index 0000000..4e457b9
--- /dev/null
+++ b/src/test/data/images/00004.jpg
Binary files differ
diff --git a/src/test/data/images/00005.jpg b/src/test/data/images/00005.jpg
new file mode 100755
index 0000000..6cd9dfc
--- /dev/null
+++ b/src/test/data/images/00005.jpg
Binary files differ
diff --git a/src/test/data/images/IMG_0092.JPG b/src/test/data/images/IMG_0092.JPG
new file mode 100755
index 0000000..6ec147f
--- /dev/null
+++ b/src/test/data/images/IMG_0092.JPG
Binary files differ
diff --git a/src/test/data/images/IMG_0093.JPG b/src/test/data/images/IMG_0093.JPG
new file mode 100755
index 0000000..64699c6
--- /dev/null
+++ b/src/test/data/images/IMG_0093.JPG
Binary files differ
diff --git a/src/test/data/images/IMG_0097.JPG b/src/test/data/images/IMG_0097.JPG
new file mode 100755
index 0000000..50795b1
--- /dev/null
+++ b/src/test/data/images/IMG_0097.JPG
Binary files differ
diff --git a/src/test/data/images/IMG_0291.JPG b/src/test/data/images/IMG_0291.JPG
new file mode 100755
index 0000000..baf8ac2
--- /dev/null
+++ b/src/test/data/images/IMG_0291.JPG
Binary files differ
diff --git a/src/test/java/osm/jp/gpx/AppParametersTest.java b/src/test/java/osm/jp/gpx/AppParametersTest.java
new file mode 100644
index 0000000..da80851
--- /dev/null
+++ b/src/test/java/osm/jp/gpx/AppParametersTest.java
@@ -0,0 +1,202 @@
+package osm.jp.gpx;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.experimental.runners.*;
+
+@RunWith(Enclosed.class)
+public class AppParametersTest {
+
+ public static class 定義ファイルが存在しない場合 {
+ AppParameters params;
+
+ @Before
+ public void setUp() throws Exception {
+ File iniFile = new File("AdjustTime.ini");
+ File orgFile = new File("AdjustTime.ini.org");
+
+ if (orgFile.exists()) {
+ orgFile.delete();
+ }
+ if (iniFile.exists()) {
+ iniFile.renameTo(orgFile);
+ }
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ File iniFile = new File("AdjustTime.ini");
+ File orgFile = new File("AdjustTime.ini.org");
+ if (iniFile.exists()) {
+ iniFile.delete();
+ }
+ if (orgFile.exists()) {
+ orgFile.renameTo(iniFile);
+ }
+ }
+
+ @Test
+ public void IMG_OUTPUT_ALLが定義されていない時() {
+ try {
+ params = new AppParameters("src/test/data/AdjustTime.off.ini");
+ String valueStr = params.getProperty(AppParameters.IMG_OUTPUT_ALL);
+ assertThat(valueStr, is("false"));
+ }
+ catch (IOException e) {
+ fail("Exceptionが発生した。");
+ }
+ }
+ }
+
+ public static class 定義ファイルがtureに定義されているとき {
+
+ @Before
+ public void setUp() throws Exception {
+ File iniFile = new File("AdjustTime.ini");
+ File orgFile = new File("AdjustTime.ini.org");
+ File testFile = new File("src/test/data", "AdjustTime.on.ini");
+
+ if (orgFile.exists()) {
+ orgFile.delete();
+ }
+ if (iniFile.exists()) {
+ iniFile.renameTo(orgFile);
+ }
+
+ FileInputStream inStream = new FileInputStream(testFile);
+ FileOutputStream outStream = new FileOutputStream(new File("AdjustTime.ini"));
+ FileChannel inChannel = inStream.getChannel();
+ FileChannel outChannel = outStream.getChannel();
+ try {
+ inChannel.transferTo(0, inChannel.size(),outChannel);
+ }
+ finally {
+ if (inChannel != null) inChannel.close();
+ if (outChannel != null) outChannel.close();
+ inStream.close();
+ outStream.close();
+ }
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ File iniFile = new File("AdjustTime.ini");
+ File orgFile = new File("AdjustTime.ini.org");
+ if (iniFile.exists()) {
+ iniFile.delete();
+ }
+ if (orgFile.exists()) {
+ orgFile.renameTo(iniFile);
+ }
+ }
+
+ @Test
+ public void IMG_OUTPUT_ALLがtureに定義されているとき() {
+ try {
+ AppParameters params;
+ params = new AppParameters();
+ String valueStr = params.getProperty(AppParameters.IMG_OUTPUT_ALL);
+ assertThat(valueStr, is("true"));
+ }
+ catch (IOException e) {
+ fail("Exceptionが発生した。");
+ }
+ }
+
+ @Test
+ public void IMG_OUTPUT_ALLをfalseに書き換える() {
+ try {
+ AppParameters params = new AppParameters();
+ params.setProperty(AppParameters.IMG_OUTPUT_ALL, "false");
+ params.store();
+ AppParameters newParams = new AppParameters();
+ String valueStr = newParams.getProperty(AppParameters.IMG_OUTPUT_ALL);
+ assertThat(valueStr, is("false"));
+ }
+ catch (IOException e) {
+ fail("Exceptionが発生した。");
+ }
+ }
+ }
+
+ public static class 定義ファイルがfalseに定義されているとき {
+
+ @Before
+ public void setUp() throws Exception {
+ File iniFile = new File("AdjustTime.ini");
+ File orgFile = new File("AdjustTime.ini.org");
+ File testFile = new File("src/test/data", "AdjustTime.off.ini");
+
+ if (orgFile.exists()) {
+ orgFile.delete();
+ }
+ if (iniFile.exists()) {
+ iniFile.renameTo(orgFile);
+ }
+
+ FileInputStream inStream = new FileInputStream(testFile);
+ FileOutputStream outStream = new FileOutputStream(new File("AdjustTime.ini"));
+ FileChannel inChannel = inStream.getChannel();
+ FileChannel outChannel = outStream.getChannel();
+ try {
+ inChannel.transferTo(0, inChannel.size(),outChannel);
+ }
+ finally {
+ if (inChannel != null) inChannel.close();
+ if (outChannel != null) outChannel.close();
+ inStream.close();
+ outStream.close();
+ }
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ File iniFile = new File("AdjustTime.ini");
+ File orgFile = new File("AdjustTime.ini.org");
+ if (iniFile.exists()) {
+ iniFile.delete();
+ }
+ if (orgFile.exists()) {
+ orgFile.renameTo(iniFile);
+ }
+ }
+
+ @Test
+ public void IMG_OUTPUT_ALLがfalseに定義されているとき() {
+ try {
+ AppParameters params = new AppParameters();
+ String valueStr = params.getProperty(AppParameters.IMG_OUTPUT_ALL);
+ assertThat(valueStr, is("false"));
+ }
+ catch (IOException e) {
+ fail("Exceptionが発生した。");
+ }
+ }
+
+ @Test
+ public void IMG_OUTPUT_ALLをtrueに書き換える() {
+ try {
+ AppParameters params = new AppParameters();
+ params.setProperty(AppParameters.IMG_OUTPUT_ALL, "true");
+ params.store();
+ AppParameters newParams = new AppParameters();
+ String valueStr = newParams.getProperty(AppParameters.IMG_OUTPUT_ALL);
+ assertThat(valueStr, is("true"));
+ }
+ catch (IOException e) {
+ fail("Exceptionが発生した。");
+ }
+ }
+ }
+}
diff --git a/src/test/java/osm/jp/gpx/ElementMapTRKPTTest.java b/src/test/java/osm/jp/gpx/ElementMapTRKPTTest.java
new file mode 100644
index 0000000..26c3be9
--- /dev/null
+++ b/src/test/java/osm/jp/gpx/ElementMapTRKPTTest.java
@@ -0,0 +1,286 @@
+package osm.jp.gpx;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.*;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.runner.RunWith;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+@RunWith(Enclosed.class)
+public class ElementMapTRKPTTest {
+
+ public static class Keyのみ {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+ ElementMapTRKPT map = null;
+ long timeL;
+ static String[] values = {
+ "1970-01-01 08:59:59.999",
+ "1970-01-01 09:00:00.000",
+ "1970-01-01 09:00:00.001",
+ "2018-10-25 07:59:59.999",
+ "2018-10-25 08:00:00.000",
+ "2018-10-25 08:00:00.001"
+ };
+
+ @Before
+ public void setUp() throws Exception {
+ timeL = (sdf.parse("2018-10-25 08:00:00.000")).getTime();
+ map = new ElementMapTRKPT();
+ map.put(new Date(timeL), null); // 5-6: 2018-10-25 08:00:00.000
+ map.put(new Date(timeL + 1L), null); // 7: 2018-10-25 08:00:00.001
+ map.put(new Date(timeL - 1L), null); // 4: 2018-10-25 07:59:59.999
+ map.put(new Date(1L), null); // 3: 1970-01-01 09:00:00.001
+ map.put(new Date(0L), null); // 2: 1970-01-01 09:00:00.000
+ map.put(new Date(-1L), null); // 1: 1970-01-01 08:59:59.999
+ map.put(new Date(timeL), null); // 5-6: 2018-10-25 08:00:00.000
+ }
+
+ @Test
+ public void 同一キーをPUTした場合() {
+ assertThat(map.size(), is(6));
+ }
+
+ @Test
+ public void イテレータを使って読みだす() {
+ assertThat(map.size(), is(6));
+
+ int i = 0;
+ for (Date key : map.keySet()) {
+ assertThat(sdf.format(key), is(values[i++]));
+ }
+ }
+
+ @Test
+ public void 拡張FOR文を使って読みだす() {
+ assertThat(map.size(), is(6));
+
+ int i = 0;
+ for (Date key : map.keySet()) {
+ assertThat(sdf.format(key), is(values[i++]));
+ }
+ }
+ }
+
+ public static class Keyとvalueのセット {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
+ ElementMapTRKPT map = null;
+ long timeL;
+
+ /*
+ *
+ * 614.90
+ * 615.00
+ * 615.03
+ */
+ static String[][] values = {
+ {"2017-05-29T01:23:18Z", "35.8812697884", "137.9952202085", null},
+ {"2017-05-29T01:23:21Z", "35.8811769169", "137.9951928835", "614.90"},
+ {"2017-05-29T01:23:24Z", "35.881112963", "137.9951796401", "615.00"},
+ {"2017-05-29T01:23:27Z", "35.881072646", "137.9951728508", "615.03"}
+ };
+
+ Element createElement(Document document, String[] values) {
+ Element trkpt = document.createElement("trkpt");
+ trkpt.setAttribute("lat", values[1]);
+ trkpt.setAttribute("lon", values[2]);
+ Element timeE = document.createElement("time");
+ timeE.appendChild(document.createTextNode(values[0]));
+ trkpt.appendChild(timeE);
+ if (values[3] != null) {
+ Element eleE = document.createElement("ele");
+ eleE.appendChild(document.createTextNode(values[3]));
+ trkpt.appendChild(eleE);
+ }
+ return trkpt;
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ Complementation.param_GpxOverwriteMagvar = true;
+
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ DOMImplementation domImpl=builder.getDOMImplementation();
+ Document document = domImpl.createDocument("","trkpt",null);
+
+ map = new ElementMapTRKPT();
+ for (int cnt = 4; cnt > 0; cnt--) {
+ map.put(new TagTrkpt(createElement(document, values[cnt - 1])));
+ }
+ }
+
+ @Test
+ public void コンテンツの数をチェック() {
+ assertThat(map.size(), is(4));
+ }
+
+ @Test
+ public void KEYが時間順に取り出せるか() {
+ int i = 0;
+ for (Date key : map.keySet()) {
+ try {
+ String s = sdf.format(ImportPicture.toUTCDate(values[i++][0]));
+ assertThat(sdf.format(key), is(s));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @Test
+ public void get_17() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:17Z"));
+ assertThat(tag, is(nullValue()));
+ }
+
+ @Test
+ public void get_18() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:18Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:18Z"));
+ assertThat(tag.eleStr, is(nullValue()));
+ assertThat(tag.lat, is(new Double(values[0][1])));
+ assertThat(tag.lon, is(new Double(values[0][2])));
+ assertThat(tag.magvarStr, is(nullValue()));
+ }
+
+ @Test
+ public void get_19() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:19Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:18Z"));
+ assertThat(tag.eleStr, is(nullValue()));
+ assertThat(tag.lat, is(new Double(values[0][1])));
+ assertThat(tag.lon, is(new Double(values[0][2])));
+ assertThat(tag.magvarStr, is(nullValue()));
+ }
+
+ @Test
+ public void get_20() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:20Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:18Z"));
+ assertThat(tag.eleStr, is(nullValue()));
+ assertThat(tag.lat, is(new Double(values[0][1])));
+ assertThat(tag.lon, is(new Double(values[0][2])));
+ assertThat(tag.magvarStr, is(nullValue()));
+ }
+
+ @Test
+ public void get_21() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:21Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:21Z"));
+ assertThat(tag.eleStr, is("614.90"));
+ assertThat(tag.lat, is(new Double(values[1][1])));
+ assertThat(tag.lon, is(new Double(values[1][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_22() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:22Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:21Z"));
+ assertThat(tag.eleStr, is("614.90"));
+ assertThat(tag.lat, is(new Double(values[1][1])));
+ assertThat(tag.lon, is(new Double(values[1][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_23() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:23Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:21Z"));
+ assertThat(tag.eleStr, is("614.90"));
+ assertThat(tag.lat, is(new Double(values[1][1])));
+ assertThat(tag.lon, is(new Double(values[1][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_24() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:24Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:24Z"));
+ assertThat(tag.eleStr, is("615.00"));
+ assertThat(tag.lat, is(new Double(values[2][1])));
+ assertThat(tag.lon, is(new Double(values[2][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_25() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:25Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:24Z"));
+ assertThat(tag.eleStr, is("615.00"));
+ assertThat(tag.lat, is(new Double(values[2][1])));
+ assertThat(tag.lon, is(new Double(values[2][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_26() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:26Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:24Z"));
+ assertThat(tag.eleStr, is("615.00"));
+ assertThat(tag.lat, is(new Double(values[2][1])));
+ assertThat(tag.lon, is(new Double(values[2][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_27() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:27Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:27Z"));
+ assertThat(tag.eleStr, is("615.03"));
+ assertThat(tag.lat, is(new Double(values[3][1])));
+ assertThat(tag.lon, is(new Double(values[3][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_28() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:28Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:27Z"));
+ assertThat(tag.eleStr, is("615.03"));
+ assertThat(tag.lat, is(new Double(values[3][1])));
+ assertThat(tag.lon, is(new Double(values[3][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_30() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:30Z"));
+ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:27Z"));
+ assertThat(tag.eleStr, is("615.03"));
+ assertThat(tag.lat, is(new Double(values[3][1])));
+ assertThat(tag.lon, is(new Double(values[3][2])));
+ assertThat(tag.magvarStr, is(notNullValue()));
+ }
+
+ @Test
+ public void get_31() throws ParseException {
+ TagTrkpt tag = map.getValue(ImportPicture.toUTCDate("2017-05-29T01:23:31Z"));
+ assertThat(tag, is(nullValue()));
+ }
+ }
+
+ public static class タイムスタンプの書式 {
+ @Test
+ public void EXIF時刻書式テスト() throws Exception {
+ String dateTimeOriginal = "2017:06:30 09:59:59";
+ Date time = ImportPicture.toEXIFDate(dateTimeOriginal);
+ assertThat(ImportPicture.toEXIFString(time), is("2017:06:30 09:59:59"));
+ assertThat(ImportPicture.toUTCString(time), is("2017-06-30T00:59:59Z"));
+ DateFormat dfUTC = new SimpleDateFormat(ImportPicture.TIME_FORMAT_STRING);
+ assertThat(dfUTC.format(time), is("2017-06-30T09:59:59Z"));
+ }
+ }
+}
diff --git a/src/test/java/osm/jp/gpx/ElementMapTRKSEGTest.java b/src/test/java/osm/jp/gpx/ElementMapTRKSEGTest.java
new file mode 100644
index 0000000..0de7aea
--- /dev/null
+++ b/src/test/java/osm/jp/gpx/ElementMapTRKSEGTest.java
@@ -0,0 +1,69 @@
+package osm.jp.gpx;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Date;
+import javax.xml.parsers.ParserConfigurationException;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+import org.w3c.dom.DOMException;
+import org.xml.sax.SAXException;
+
+public class ElementMapTRKSEGTest {
+
+ @RunWith(Theories.class)
+ public static class 各種GPXファイルを食わせる {
+ static class Fixture {
+ String gpxSourcePath; // GPXファイル(オリジナル)
+ int segCount; // GPXファイルに含まれるTRKSEGノードの数
+
+ public Fixture(String gpxSourcePath, int segCount) {
+ this.gpxSourcePath = gpxSourcePath;
+ this.segCount = segCount;
+ }
+
+ @Override
+ public String toString() {
+ String msg = "テストパターン : \n";
+ msg += "\tgpxSourcePath = "+ gpxSourcePath +"\n";
+ msg += "\tsegCount = "+ segCount;
+ return msg;
+ }
+ }
+
+ @DataPoints
+ public static Fixture[] datas = {
+ new Fixture("src/test/data/20170517.gpx", 1),
+ new Fixture("src/test/data/20170518.gpx", 1),
+ new Fixture("src/test/data/muiltiTRK.GarminColorado.gpx.xml", 3),
+ new Fixture("src/test/data/muiltiTRKSEG.GarminColorado.gpx.xml", 3),
+ new Fixture("src/test/data/muiltiTRKSEG.noNameSpace.gpx.xml", 3),
+ new Fixture("src/test/data/multiTRKSEG.eTrex_20J.gpx.xml", 3),
+ new Fixture("src/test/data/multiTRKSEGreverse.eTrex_20J.gpx.xml", 3),
+ };
+
+ @Theory
+ public void TRKSEGを読み込む(Fixture dataset) {
+ try {
+ ElementMapTRKSEG mapTRKSEG = new ElementMapTRKSEG();
+ mapTRKSEG.parse(new File(dataset.gpxSourcePath));
+ mapTRKSEG.printinfo();
+ System.out.println("GPX file: "+ dataset.gpxSourcePath);
+ assertThat(mapTRKSEG.size(), is(dataset.segCount));
+ for (Date key : mapTRKSEG.keySet()) {
+ assertThat(key, is(notNullValue()));
+ }
+ }
+ catch (IOException | ParseException | ParserConfigurationException | DOMException | SAXException e) {
+ fail();
+ }
+ }
+ }
+}
diff --git a/src/test/java/osm/jp/gpx/ImportPictureTest.java b/src/test/java/osm/jp/gpx/ImportPictureTest.java
new file mode 100644
index 0000000..233c154
--- /dev/null
+++ b/src/test/java/osm/jp/gpx/ImportPictureTest.java
@@ -0,0 +1,739 @@
+package osm.jp.gpx;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.*;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
+import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
+import org.apache.commons.imaging.Imaging;
+import org.apache.commons.imaging.common.ImageMetadata;
+import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata;
+import org.apache.commons.imaging.formats.tiff.TiffImageMetadata;
+import org.apache.commons.imaging.formats.tiff.TiffImageMetadata.GPSInfo;
+import org.apache.commons.imaging.formats.tiff.constants.ExifTagConstants;
+import org.junit.runner.*;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+
+public class ImportPictureTest {
+ static class Expecter {
+ String value;
+ boolean expect;
+ String timeStr;
+ double latD;
+ double lonD;
+ boolean magvar;
+
+ public Expecter(String value, boolean expect, String timeStr, double latD, double lonD, boolean magvar) {
+ this.value = value;
+ this.expect = expect;
+ this.timeStr = timeStr;
+ this.latD = latD;
+ this.lonD = lonD;
+ this.magvar = magvar;
+ }
+ }
+
+ static class Fixture {
+ String comment; // テスト概要(コメント)
+ String tarFilePath; // TARデータ
+ String gpxSourcePath; // GPXファイル(オリジナル)
+ String gpxDestinationPath; // GPXファイル(配置先)
+ String iniFilePath; // iniファイル
+ Expecter[] expecters;
+
+ public Fixture(
+ String comment,
+ String tarFilePath,
+ String gpxSourcePath,
+ String gpxDestinationPath,
+ String iniFilePath,
+ Expecter[] expecters
+ ) {
+ this.comment = comment;
+ this.tarFilePath = tarFilePath;
+ this.gpxSourcePath = gpxSourcePath;
+ this.gpxDestinationPath = gpxDestinationPath;
+ this.iniFilePath = iniFilePath;
+ this.expecters = expecters;
+ }
+
+ @Override
+ public String toString() {
+ String msg = "テストパターン : "+ comment + "\n";
+ msg += "\ttarFilePath = "+ tarFilePath +"\n";
+ msg += "\tgpxSourcePath = "+ gpxSourcePath +"\n";
+ msg += "\tgpxDestinationPath = "+ gpxDestinationPath +"\n";
+ msg += "\tiniFilePath = "+ iniFilePath;
+ return msg;
+ }
+ }
+
+
+ @RunWith(Theories.class)
+ public static class 各種カメラGPXファイル {
+
+ @DataPoints
+ public static Fixture[] datas = {
+ // 1
+ new Fixture(
+ "[A1].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルはコピー対象外の時",
+ "src/test/data/Sony20170518.tar.gz",
+ "src/test/data/20170518.gpx",
+ "src/test/data/cameradata/20170518.gpx",
+ "src/test/data/AdjustTime.20170518.A1.ini",
+ new Expecter[] {
+ new Expecter("10170518/20170518_.gpx", true, null, 90.0D, 180.0D, false),
+ new Expecter("10170518/DSC05183.JPG", false, null, 90.0D, 180.0D, false),
+ new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 09:34:44", 35.4367520000D, 139.4082730000D, true),
+ new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 09:37:32", 35.4376820000D, 139.4085150000D, true),
+ new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 09:46:48", 35.4368560000D, 139.4082190000D, true),
+ new Expecter("10170518/DSC05205.JPG", false, null, 90.0D, 180.0D, false),
+ }
+ ),
+ // 2
+ new Fixture(
+ "[A2].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時",
+ "src/test/data/Sony20170518.tar.gz",
+ "src/test/data/20170518.gpx",
+ "src/test/data/cameradata/20170518.gpx",
+ "src/test/data/AdjustTime.20170518.A2.ini",
+ new Expecter[] {
+ new Expecter("10170518/20170518_.gpx", true, null, 90.0D, 180.0D, false),
+ new Expecter("10170518/DSC05183.JPG", true, "2017:05:18 09:16:48", 90.0D, 180.0D, true),
+ new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 09:34:44", 35.4367520000D, 139.4082730000D, true),
+ new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 09:37:32", 35.4376820000D, 139.4085150000D, true),
+ new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 09:46:48", 35.4368560000D, 139.4082190000D, true),
+ new Expecter("10170518/DSC05205.JPG", true, "2017:05:18 09:48:04", 90.0D, 180.0D, true),
+ }
+ ),
+ // 3.
+ new Fixture(
+ "[B1].WiMiUSカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルはコピー対象外の時",
+ "src/test/data/WiMiUS20170518.tar.gz",
+ "src/test/data/20170518.gpx",
+ "src/test/data/cameradata/20170518.gpx",
+ "src/test/data/AdjustTime.20170518.B1.ini",
+ new Expecter[] {
+ new Expecter("cameradata/20170518_.gpx", true, null, 90.0D, 180.0D, false),
+ new Expecter("cameradata/20170518_092031A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 09:42:26", 35.4366860000D, 139.4082650000D, true),
+ new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 09:47:36", 35.4368200000D, 139.4082810000D, true),
+ new Expecter("cameradata/20170518_094827A.jpg", false, null, 90.0D, 180.0D, false),
+ }
+ ),
+ // 4.
+ new Fixture(
+ "[B2].WiMiUSカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時",
+ "src/test/data/WiMiUS20170518.tar.gz",
+ "src/test/data/20170518.gpx",
+ "src/test/data/cameradata/20170518.gpx",
+ "src/test/data/AdjustTime.20170518.B2.ini",
+ new Expecter[] {
+ new Expecter("cameradata/20170518_.gpx", true, null, 90.0D, 180.0D, false),
+ new Expecter("cameradata/20170518_092031A.jpg", true, "2017:05:18 09:20:30", 90.0D, 180.0D, true),
+ new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 09:42:26", 35.4366860000D, 139.4082650000D, true),
+ new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 09:47:36", 35.4368200000D, 139.4082810000D, true),
+ new Expecter("cameradata/20170518_094827A.jpg", true, "2017:05:18 09:48:26", 90.0D, 180.0D, true),
+ }
+ ),
+ // 5.
+ new Fixture(
+ "[M1a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.GarminColorado",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/muiltiTRK.GarminColorado.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M1a.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M1b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.GarminColorado",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/muiltiTRK.GarminColorado.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M1b.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M1c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.GarminColorado",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/muiltiTRK.GarminColorado.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M1c.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M1d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.GarminColorado",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/muiltiTRK.GarminColorado.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M1d.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+
+ new Fixture(
+ "[M2a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20J",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEG.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2a.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M2b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20J",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEG.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2b.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M2c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20J",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEG.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2c.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M2d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20J",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEG.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2d.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M3a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20Jreverse",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEGreverse.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2a.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M3b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20Jreverse",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEGreverse.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2b.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M3c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20Jreverse",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEGreverse.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2c.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false),
+ new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true),
+ }
+ ),
+
+ new Fixture(
+ "[M3d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20Jreverse",
+ "src/test/data/separate.tar.gz",
+ "src/test/data/multiTRKSEGreverse.eTrex_20J.gpx.xml",
+ "src/test/data/cameradata/separate.gpx",
+ "src/test/data/AdjustTime.M2d.separate.ini",
+ new Expecter[] {
+ // GPX file
+ new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false),
+
+ // out of time ( - 2017-05-29T01:23:18)
+ new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true),
+
+ // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05)
+ new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true),
+ new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true),
+ new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true),
+
+ // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37)
+ new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true),
+
+ // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03)
+ new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true),
+ new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true),
+
+ // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53)
+ new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true),
+ new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true),
+
+ // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35)
+ new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true),
+ new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true),
+ }
+ ),
+ };
+
+ @Theory
+ public void パラメータテスト(Fixture dataset) throws Exception {
+ ImportPictureTest.setup(dataset);
+ ImportPictureTest.testdo(dataset.iniFilePath);
+ //SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", Locale.UK);
+
+ Expecter[] es = dataset.expecters;
+ AppParameters params = new AppParameters(dataset.iniFilePath);
+ File outDir = new File(params.getProperty(AppParameters.IMG_OUTPUT_FOLDER));
+ for (Expecter e : es) {
+ File file = new File(outDir, e.value);
+ System.out.println("[JUnit.debug] assert file='"+ file.getAbsolutePath() +"'");
+ assertThat(file.exists(), is(e.expect));
+ if (e.timeStr != null) {
+ // JPEG メタデータが存在すること
+ ImageMetadata meta = Imaging.getMetadata(file);
+ // メタデータは インスタンスJpegImageMetadata であること
+ assertThat((meta instanceof JpegImageMetadata), is(true));
+ JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta;
+ assertNotNull(jpegMetadata);
+ // EXIFデータが存在すること
+ TiffImageMetadata exif = jpegMetadata.getExif();
+ assertNotNull(exif);
+ // EXIF-TIME が正しく設定されていること
+ String exifTime = ImportPicture.toEXIFString(ImportPicture.toEXIFDate(exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0]));
+ System.out.println("[debug] exifTime = '"+ exifTime +"' <--> '" + e.timeStr + "'");
+ assertThat(exifTime, is(e.timeStr));
+ // LAT,LON
+ GPSInfo gpsInfo = exif.getGPS();
+ if (e.latD != 90.0D) {
+ assertThat(comparePosition(gpsInfo.getLatitudeAsDegreesNorth()), is(comparePosition(e.latD)));
+ }
+ if (e.lonD != 180.0D) {
+ assertThat(comparePosition(gpsInfo.getLongitudeAsDegreesEast()), is(comparePosition(e.lonD)));
+ }
+ }
+ }
+ }
+
+ static String comparePosition(double b) {
+ return String.format("%.4f", b);
+ }
+ }
+
+ static void setup(Fixture dataset) throws IOException {
+ System.out.println(dataset.toString());
+
+ // カメラディレクトリを削除する
+ File dir = new File("src/test/data/cameradata");
+ if (dir.exists()) {
+ ImportPictureTest.delete(dir);
+ }
+ File outDir = new File("src/test/data/output");
+ if (outDir.exists()) {
+ ImportPictureTest.delete(outDir);
+ }
+ outDir.mkdir();
+
+ // カメラディレクトリを作成する
+ ImportPictureTest.uncompress(new File(dataset.tarFilePath), new File("src/test/data/cameradata"));
+
+ // GPXファイルをセット
+ try (FileInputStream inStream = new FileInputStream(new File(dataset.gpxSourcePath));
+ FileOutputStream outStream = new FileOutputStream(new File(dataset.gpxDestinationPath));
+ FileChannel inChannel = inStream.getChannel();
+ FileChannel outChannel = outStream.getChannel())
+ {
+ inChannel.transferTo(0, inChannel.size(), outChannel);
+ }
+ }
+
+ /**
+ * 実行する
+ * @throws Exception
+ */
+ static void testdo(String iniFilePath) {
+ try {
+ String[] argv = {iniFilePath};
+ ImportPicture.main(argv);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ fail("Exceptionが発生した。");
+ }
+ }
+
+ /**
+ * *.tar.gz解凍
+ * ファイル更新日時をオリジナルと同じにします。
+ * @param tazFile 解凍する*.tar.gzファイル
+ * @param dest 解凍先フォルダ
+ * @throws IOException
+ */
+ public static void uncompress(File tazFile, File dest) throws IOException {
+ dest.mkdir();
+
+ try (TarArchiveInputStream tarIn = new TarArchiveInputStream(new GzipCompressorInputStream(new BufferedInputStream(new FileInputStream(tazFile))))) {
+ TarArchiveEntry tarEntry = tarIn.getNextTarEntry();
+ while (tarEntry != null) {
+ File destPath = new File(dest, tarEntry.getName());
+ //System.out.println("uncompress: " + destPath.getCanonicalPath());
+ if (tarEntry.isDirectory()) {
+ destPath.mkdirs();
+ }
+ else {
+ File dir = new File(destPath.getParent());
+ if (!dir.exists()) {
+ dir.mkdirs();
+ }
+ destPath.createNewFile();
+ byte[] btoRead = new byte[1024];
+ try (BufferedOutputStream bout = new BufferedOutputStream(new FileOutputStream(destPath))) {
+ int len;
+ while ((len = tarIn.read(btoRead)) != -1) {
+ bout.write(btoRead, 0, len);
+ }
+ }
+ destPath.setLastModified(tarEntry.getLastModifiedDate().getTime());
+ }
+ tarEntry = tarIn.getNextTarEntry();
+ }
+ }
+ }
+
+ public static void delete(File file) throws IOException {
+ if (!file.exists()) {
+ System.out.println("ERROR: ファイルまたはディレクトリが見つかりませんでした。");
+ throw new IOException("File not found.");
+ }
+
+ if (file.isDirectory()) {
+ File files[] = file.listFiles();
+ if (files != null) {
+ for (File file1 : files) {
+ delete(file1); // 再帰呼び出し
+ }
+ }
+ }
+ if (!file.delete()) {
+ System.out.println("ERROR: ファイルは削除できませんでした。 '" + file.getAbsolutePath() +"'");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/osm/jp/gpx/UnZip.java b/src/test/java/osm/jp/gpx/UnZip.java
new file mode 100644
index 0000000..2b6a72f
--- /dev/null
+++ b/src/test/java/osm/jp/gpx/UnZip.java
@@ -0,0 +1,75 @@
+package osm.jp.gpx;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+public class UnZip {
+
+ /**
+ * Zipファイルを展開します
+ * @param aZipFile zipファイル
+ * @param aOutDir 出力先ディレクトリ
+ * @throws java.io.IOException
+ */
+ public static void decode(File aZipFile, String aOutDir) throws IOException {
+ FileInputStream fileIn = null;
+ FileOutputStream fileOut = null;
+ ZipInputStream zipIn = null;
+
+ try {
+ File outDir = new File(aOutDir);
+ outDir.mkdirs();
+
+ fileIn = new FileInputStream(aZipFile);
+ zipIn = new ZipInputStream(fileIn);
+
+ ZipEntry entry = null;
+ while ((entry = zipIn.getNextEntry()) != null) {
+ if (entry.isDirectory()) {
+ String relativePath = entry.getName();
+ outDir = new File(outDir, relativePath);
+ outDir.mkdirs();
+ }
+ else {
+ String relativePath = entry.getName();
+ File outFile = new File( outDir, relativePath );
+
+ File parentFile = outFile.getParentFile();
+ parentFile.mkdirs();
+
+ fileOut = new FileOutputStream( outFile );
+
+ byte[] buf = new byte[ 256 ];
+ int size = 0;
+ while ((size = zipIn.read(buf)) > 0){
+ fileOut.write(buf, 0, size);
+ }
+ fileOut.close();
+ fileOut = null;
+ }
+ zipIn.closeEntry();
+ }
+ }
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+ finally {
+ if (fileIn != null) {
+ try {
+ fileIn.close();
+ }
+ catch (IOException e) {}
+ }
+ if (fileOut != null) {
+ try {
+ fileOut.close();
+ }
+ catch(IOException e) {}
+ }
+ zipIn.close();
+ }
+ }
+}