adiwg-mdjson_schemas 1.0.0rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +7 -0
  4. data/CREDITS +3 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +24 -0
  7. data/README.md +36 -0
  8. data/Rakefile +12 -0
  9. data/adiwg-json_schemas.gemspec +25 -0
  10. data/examples/additionalDocumentation.json +61 -0
  11. data/examples/address.json +10 -0
  12. data/examples/associatedResource.json +119 -0
  13. data/examples/citation.json +128 -0
  14. data/examples/contact.json +205 -0
  15. data/examples/contactRef.json +12 -0
  16. data/examples/dataDictionary.json +547 -0
  17. data/examples/dataQuality.json +272 -0
  18. data/examples/date.json +19 -0
  19. data/examples/distributor.json +113 -0
  20. data/examples/extent_linestring.json +288 -0
  21. data/examples/extent_point.json +246 -0
  22. data/examples/extent_polygon.json +353 -0
  23. data/examples/format.json +14 -0
  24. data/examples/full_example.json +2844 -0
  25. data/examples/full_example2.json +2325 -0
  26. data/examples/geojson.json +446 -0
  27. data/examples/graphicOverview.json +28 -0
  28. data/examples/hierarchyLevel.json +90 -0
  29. data/examples/keywords.json +144 -0
  30. data/examples/lcc_project_example.json +326 -0
  31. data/examples/legalConstraints.json +17 -0
  32. data/examples/maintInfo.json +34 -0
  33. data/examples/metadataInfo.json +103 -0
  34. data/examples/minimum_example.json +35 -0
  35. data/examples/onlineResource.json +17 -0
  36. data/examples/resolution.json +9 -0
  37. data/examples/resourceInfo.json +1264 -0
  38. data/examples/resourceMaintenance.json +10 -0
  39. data/examples/securityConstraints.json +13 -0
  40. data/examples/spatialRef.json +14 -0
  41. data/examples/taxonomy.json +197 -0
  42. data/examples/temporalElement.json +29 -0
  43. data/examples/uri.json +16 -0
  44. data/examples/usage.json +35 -0
  45. data/examples/verticalExtent.json +18 -0
  46. data/lib/adiwg-mdjson_schemas.rb +1 -0
  47. data/lib/adiwg/mdjson_schemas.rb +7 -0
  48. data/lib/adiwg/mdjson_schemas/utils.rb +20 -0
  49. data/lib/adiwg/mdjson_schemas/validator.rb +42 -0
  50. data/lib/adiwg/mdjson_schemas/version.rb +6 -0
  51. data/schema/schema.json +64 -0
  52. data/schema/schema/citation.json +186 -0
  53. data/schema/schema/contact.json +255 -0
  54. data/schema/schema/dataDictionary.json +209 -0
  55. data/schema/schema/dataQuality.json +159 -0
  56. data/schema/schema/distributor.json +171 -0
  57. data/schema/schema/extent.json +214 -0
  58. data/schema/schema/geojson/bbox.json +14 -0
  59. data/schema/schema/geojson/crs.json +99 -0
  60. data/schema/schema/geojson/geojson.json +194 -0
  61. data/schema/schema/geojson/geometry.json +203 -0
  62. data/schema/schema/graphicOverview.json +42 -0
  63. data/schema/schema/keyword.json +39 -0
  64. data/schema/schema/maintInfo.json +43 -0
  65. data/schema/schema/metadata.json +173 -0
  66. data/schema/schema/onlineResource.json +42 -0
  67. data/schema/schema/resolution.json +51 -0
  68. data/schema/schema/resourceConstraint.json +108 -0
  69. data/schema/schema/resourceInfo.json +305 -0
  70. data/schema/schema/taxonomy.json +122 -0
  71. data/schema/schema/usage.json +39 -0
  72. data/templates/mdJson_template.json +1065 -0
  73. data/test/draft-04.json +189 -0
  74. data/test/tc_schemas.rb +210 -0
  75. data/test/tc_utils.rb +27 -0
  76. metadata +178 -0
@@ -0,0 +1,42 @@
1
+ {
2
+ "id": "graphicOverview.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/graphicOverview/0",
5
+ "description": "schema for browse graphic",
6
+ "type": "object",
7
+ "required": ["fileName"],
8
+ "additionalProperties": true,
9
+ "properties": {
10
+ "fileName": {
11
+ "type": "string",
12
+ "description": "Name of the file that contains a browse graphic for the resource.",
13
+ "translation": {
14
+ "ISO 19115-2": ["MD_BrowseGraphic > filename"],
15
+ "FGDC CSDGM": ["idinfo > browse > browsen"]
16
+ }
17
+ },
18
+ "fileDescription": {
19
+ "type": "string",
20
+ "description": "Description of the browse graphic.",
21
+ "translation": {
22
+ "ISO 19115-2": ["MD_BrowseGraphic > fileDescription"],
23
+ "FGDC CSDGM": ["idinfo > browse > browsed"]
24
+ }
25
+ },
26
+ "fileType": {
27
+ "type": "string",
28
+ "description": "Format of the browse graphic, such as: PDF, JPEG, TIFF, etc.",
29
+ "translation": {
30
+ "ISO 19115-2": ["MD_BrowseGraphic > fileType"],
31
+ "FGDC CSDGM": ["idinfo > browse > browset"]
32
+ }
33
+ },
34
+ "fileUri": {
35
+ "description": "URI of the browse graphic.",
36
+ "translation": {
37
+ "ISO 19115-2": ["MD_BrowseGraphic > filename @xlink:href"]
38
+ },
39
+ "$ref": "../schema.json#/definitions/uri"
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "id": "keyword.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "description": "schema for a keyword entry",
5
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/keyword",
6
+ "type": "object",
7
+ "required": ["keyword"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "keyword": {
11
+ "type": "array",
12
+ "description": "Commonly used word(s) or formalized word(s) or phrase(s) used to describe the subject.",
13
+ "translation": {
14
+ "ISO 19115-2": ["MD_Keywords > keyword"],
15
+ "FGDC CSDGM": ["idinfo>keywords>theme>themekey", "idinfo>keywords>place>placekey", "idinfo>keywords>temporal>tempkey", "idinfo>keywords>stratum>stratkey"]
16
+ },
17
+ "items": {
18
+ "type": "string"
19
+ },
20
+ "uniqueItems": true
21
+ },
22
+ "keywordType": {
23
+ "type": "string",
24
+ "description": "A code, or concept, that defines the subject matter used to group similar keywords.",
25
+ "translation": {
26
+ "ISO 19115-2": ["MD_Keywords > type"]
27
+ }
28
+ },
29
+ "thesaurus": {
30
+ "description": "Name of the formally registered thesaurus or a similar authoritative source of keywords.",
31
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/keyword/0/thesaurus",
32
+ "translation": {
33
+ "ISO 19115-2": ["MD_Keywords > thesaurusName > CI_Citation"],
34
+ "FGDC CSDGM": ["idinfo>keywords>theme>themekt", "idinfo>keywords>place>placekt", "idinfo>keywords>temporal>tempkt", "idinfo>keywords>stratum>stratkt"]
35
+ },
36
+ "$ref": "citation.json#/definitions/citationFull"
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "id": "maintInfo.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "type": "object",
5
+ "description": "Information about the maintenance of a resource.",
6
+ "example": "../../examples/full_example.json#/metadata/metadataInfo/metadataMaintenance",
7
+ "translation": {
8
+ "ISO 19115-2": ["MD_MaintenanceInformation"]
9
+ },
10
+ "additionalProperties": false,
11
+ "properties": {
12
+ "maintenanceFrequency": {
13
+ "type": "string",
14
+ "description": "Describes the frequency of additions and updates made to a resource.",
15
+ "translation": {
16
+ "ISO 19115-2": ["MD_MaintenanceInformation > maintenanceAndUpdateFrequency [MD_MaintenanceFrequencyCode]"]
17
+ }
18
+ },
19
+ "maintenanceNote": {
20
+ "type": "array",
21
+ "description": "Notes regarding the maintenance of the resource.",
22
+ "translation": {
23
+ "ISO 19115-2": ["MD_MaintenanceInformation > maintenanceNote"]
24
+ },
25
+ "items": {
26
+ "type": "string"
27
+ }
28
+ }
29
+ ,
30
+ "maintenanceContact": {
31
+ "type": "array",
32
+ "description": "Contact information for the maintainer of the resource.",
33
+ "translation": {
34
+ "ISO 19115-2": ["MD_MaintenanceInformation > contact > CI_Contact"],
35
+ "FGDC CSDGM": ["metainfo > metc"]
36
+ },
37
+ "uniqueItems": true,
38
+ "items": {
39
+ "$ref": "contact.json#/definitions/contactRef"
40
+ }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,173 @@
1
+ {
2
+ "id": "metadata.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "description": "The main body of the metadata record.",
5
+ "type": "object",
6
+ "example": "../../examples/full_example.json#/metadata",
7
+ "translation": {
8
+ "ISO 19115-2": ["MI_Metadata"],
9
+ "FGDC CSDGM": ["metadata"]
10
+ },
11
+ "required": ["resourceInfo"],
12
+ "additionalProperties": false,
13
+ "properties": {
14
+ "metadataInfo": {
15
+ "type": "object",
16
+ "description": "General information about the metadata record.",
17
+ "example": "../../examples/full_example.json#/metadata/metadataInfo",
18
+ "required": ["metadataContact", "metadataCreationDate"],
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "metadataIdentifier": {
22
+ "description": "Unique identifier for this metadata file.",
23
+ "translation": {
24
+ "ISO 19115-2": ["MI_Metadata > fileIdentifier"]
25
+ },
26
+ "$ref": "citation.json#/definitions/identifier"
27
+ },
28
+ "parentMetadata": {
29
+ "description": "Identifier of the metadata to which this metadata is a subset (child).",
30
+ "translation": {
31
+ "ISO 19115-2": ["MI_Metadata > parentIdentifier"]
32
+ },
33
+ "$ref": "citation.json#/definitions/citationFull"
34
+ },
35
+ "metadataContact": {
36
+ "type": "array",
37
+ "description": "Person or organization responsible for metadata information (metadata custodian).",
38
+ "translation": {
39
+ "ISO 19115-2": ["MI_Metadata > contact > CI_Contact > responsibleParty > CI_ResponsibleParty"],
40
+ "FGDC CSDGM": ["metainfo > metc > cntinfo"]
41
+ },
42
+ "minItems": 1,
43
+ "items": {
44
+ "$ref": "contact.json#/definitions/contactRef"
45
+ }
46
+ },
47
+ "metadataCharacterSet": {
48
+ "type": "string",
49
+ "description": "Full name of the character coding standard used for the metadata set.",
50
+ "translation": {
51
+ "ISO 19115-2": ["MI_Metadata > characterSet [MD_CharacterSetCode]"]
52
+ }
53
+ },
54
+ "metadataCreationDate": {
55
+ "$ref": "../schema.json#/definitions/date",
56
+ "description": "Date that the metadata was created.",
57
+ "translation": {
58
+ "ISO 19115-2": ["MI_Metadata > dateStamp"],
59
+ "FGDC CSDGM": ["metainfo > metd"]
60
+ }
61
+ },
62
+ "metadataLastUpdate": {
63
+ "$ref": "../schema.json#/definitions/date",
64
+ "description": "Date that the metadata was updated.",
65
+ "translation": {
66
+ "ISO 19115-2": ["MI_Metadata > dateStamp"],
67
+ "FGDC CSDGM": ["metainfo > metrd"]
68
+ }
69
+ },
70
+ "metadataUri": {
71
+ "$ref": "../schema.json#/definitions/uri",
72
+ "description": "Uniform Resource Identifier (URI) of the metadata record."
73
+ },
74
+ "metadataStatus": {
75
+ "type": "string",
76
+ "description": "Status of the metadata record."
77
+ },
78
+ "metadataMaintenance": {
79
+ "description": "Provides information about the frequency of metadata updates, and the scope of those updates.",
80
+ "translation": {
81
+ "ISO 19115-2": ["MI_Metadata > metadataMaintenance > MD_MaintenanceInformation"]
82
+ },
83
+ "$ref": "maintInfo.json#"
84
+ }
85
+ }
86
+ },
87
+ "resourceInfo": {
88
+ "translation": {
89
+ "ISO 19115-2": ["MD_Metadata > identificationInfo > MD_DataIdentification"],
90
+ "FGDC CSDGM": ["idinfo"]
91
+ },
92
+ "$ref": "resourceInfo.json#"
93
+ },
94
+ "distributionInfo": {
95
+ "type": "array",
96
+ "description": "Information about the distributor of and options for obtaining the resource.",
97
+ "example": "../../examples/full_example.json#/metadata/distributionInfo",
98
+ "translation": {
99
+ "ISO 19115-2": ["MD_Metadata > distribution > MD_Distribution"],
100
+ "FGDC CSDGM": ["distinfo"]
101
+ },
102
+ "items": {
103
+ "$ref": "distributor.json#"
104
+ }
105
+ },
106
+ "associatedResource": {
107
+ "type": "array",
108
+ "description": "Information about a resource related to the data resource, such as: study, dataset, project, etc. An associated resource may be a child reference, or reference a larger work, such as an initiative.",
109
+ "example": "../../examples/full_example.json#/metadata/associatedResource",
110
+ "translation": {
111
+ "ISO 19115-2": ["MD_DataIdentification > aggregationInfo > MD_AggregateInformation"],
112
+ "FGDC CSDGM": ["idinfo > crossref"]
113
+ },
114
+ "items": {
115
+ "type": "object",
116
+ "required": ["associationType", "resourceType"],
117
+ "additionalProperties": false,
118
+ "properties": {
119
+ "associationType": {
120
+ "type": "string",
121
+ "description": "Identifies the type of association, such as: source, cross reference, etc.",
122
+ "translation": {
123
+ "ISO 19115-2": ["MD_AggregateInformation > associationType [DS_AssociationTypeCode]"]
124
+ }
125
+ },
126
+ "initiativeType": {
127
+ "type": "string",
128
+ "description": "Identifies type of initiative under which the resource was produced - the activity that resulted in the resource.",
129
+ "translation": {
130
+ "ISO 19115-2": ["MD_AggregateInformation > initiativeType > [DS_InitiativeTypeCode]"]
131
+ }
132
+ },
133
+ "resourceType": {
134
+ "type": "string",
135
+ "description": "Identifies the type of resource, such as: a dataset, study, publication, etc."
136
+ },
137
+ "resourceCitation": {
138
+ "description": "Citation for the associated resource.",
139
+ "translation": {
140
+ "ISO 19115-2": ["MD_AggregateInformation > aggregateDataSetName > CI_Citation"],
141
+ "FGDC CSDGM": ["idinfo > crossref > citeinfo"]
142
+ },
143
+ "$ref": "citation.json#"
144
+ },
145
+ "metadataCitation": {
146
+ "description": "Citation for the associated resource metadata.",
147
+ "$ref": "citation.json#"
148
+ }
149
+ }
150
+ }
151
+ },
152
+ "additionalDocumentation": {
153
+ "type": "array",
154
+ "description": "Additional references associated with the resource, such as: web sites, documents for additional reading, etc.",
155
+ "translation": {
156
+ "ISO 19115-2": ["MD_DataIdentification > aggregationInfo > MD_AggregateInformation > aggregateDataSetName > CI_Citation"],
157
+ "FGDC CSDGM": ["idinfo > crossref "]
158
+ },
159
+ "items": {
160
+ "required": ["citation"],
161
+ "properties": {
162
+ "resourceType": {
163
+ "type": "string",
164
+ "description": "Identifies the type of resource, such as: userGuide, website, report, etc."
165
+ },
166
+ "citation": {
167
+ "$ref": "citation.json#"
168
+ }
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "id": "onlineResource.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "type": "object",
5
+ "description": "Information about accessing online resources and services.",
6
+ "example": "../../examples/full_example.json#/contact/1/onlineResource",
7
+ "required": ["uri"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "uri": {
11
+ "$ref": "../schema.json#/definitions/uri"
12
+ },
13
+ "name": {
14
+ "type": "string",
15
+ "description": "Name of the online resource.",
16
+ "translation": {
17
+ "ISO 19115-2": ["CI_OnlineResource > name"]
18
+ }
19
+ },
20
+ "protocol": {
21
+ "type": "string",
22
+ "description": "The connection protocol to be used such as: ftp, http, etc.",
23
+ "translation": {
24
+ "ISO 19115-2": ["CI_OnlineResource > protocol"]
25
+ }
26
+ },
27
+ "description": {
28
+ "type": "string",
29
+ "description": "Detailed text description of what the online resource is/does.",
30
+ "translation": {
31
+ "ISO 19115-2": ["CI_OnlineResource > description"]
32
+ }
33
+ },
34
+ "function": {
35
+ "type": "string",
36
+ "description": "Function performed by the online resource.",
37
+ "translation": {
38
+ "ISO 19115-2": ["CI_OnlineResource > function > CI_OnlineFunctionCode [codelist]"]
39
+ }
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "id": "resolution.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "description": "Information about the scale of the geographic extent.",
5
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/spatialResolution",
6
+ "translation": {
7
+ "ISO 19115-2": ["MD_Resolution"]
8
+ },
9
+ "anyOf": [
10
+ {
11
+ "type": "object",
12
+ "title": "scaleFactor",
13
+ "description": "Scale of geographic extent",
14
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/spatialResolution",
15
+ "required": ["equivalentScale"],
16
+ "additionalProperties": true,
17
+ "properties": {
18
+ "equivalentScale": {
19
+ "type": "number",
20
+ "description": "Scale of geographic extent expressed in a hardcopy map scale fraction (denominator).",
21
+ "translation": {
22
+ "ISO 19115-2": ["MD_Resolution > equivalentScale > MD_RepresentativeFraction > denominator > Integer"]
23
+ }
24
+ }
25
+ }
26
+ }, {
27
+ "type": "object",
28
+ "title": "distance",
29
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/spatialResolution",
30
+ "description": "Scale of geographic extent expressed in ground distance parameters.",
31
+ "required": ["distance"],
32
+ "additionalProperties": true,
33
+ "properties": {
34
+ "distance": {
35
+ "type": "number",
36
+ "description": "Ground distance measurement representing geographic extent.",
37
+ "translation": {
38
+ "ISO 19115-2": ["MD_Resolution > distance > Distance "]
39
+ }
40
+ },
41
+ "uom": {
42
+ "type": "string",
43
+ "description": "Ground distance units of measure.",
44
+ "translation": {
45
+ "ISO 19115-2": ["MD_Resolution > distance > Distance @uom"]
46
+ }
47
+ }
48
+ }
49
+ }
50
+ ]
51
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "id": "resourceConstraint.json#",
3
+ "$schema": "http://json-schema.org/draft-04/schema#",
4
+ "description": "schema for resource constraint",
5
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/constraint",
6
+ "anyOf": [
7
+ {
8
+ "$ref": "#/definitions/useLimitation"
9
+ }, {
10
+ "$ref": "#/definitions/legalConstraint"
11
+ }, {
12
+ "$ref": "#/definitions/securityConstraint"
13
+ }
14
+ ],
15
+ "definitions": {
16
+ "useLimitation": {
17
+ "type": "string",
18
+ "description": "Limitation affecting the fitness for use of the resource or metadata. For example, \"not to be used for navigation\".",
19
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/constraint/useLimitation",
20
+ "translation": {
21
+ "ISO 19115-2": ["MD_Constraints > useLimitation"]
22
+ }
23
+ },
24
+ "legalConstraint": {
25
+ "type": "object",
26
+ "description": "Restrictions and legal prerequisites for accessing and using the resource or metadata.",
27
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/constraint/legalConstraint",
28
+ "translation": {
29
+ "ISO 19115-2": ["MD_LegalConstraints"]
30
+ },
31
+ "additionalProperties": false,
32
+ "properties": {
33
+ "accessConstraint": {
34
+ "type": "array",
35
+ "description": "Access constraints applied to assure the protection of privacy or intellectual property, and any special restrictions or limitations on obtaining the resource or metadata.",
36
+ "translation": {
37
+ "ISO 19115-2": ["MD_LegalConstraints > accessConstraints [MD_RestrictionCode]"],
38
+ "FGDC CSDGM": ["idinfo > accconst"]
39
+ },
40
+ "items": {
41
+ "type": "string"
42
+ }
43
+ },
44
+ "useConstraint": {
45
+ "type": "array",
46
+ "description": "Constraints applied to assure the protection of privacy or intellectual property, and any special restrictions or limitations or warnings on using the resource or metadata.",
47
+ "translation": {
48
+ "ISO 19115-2": ["MD_LegalConstraints > useConstraints [MD_RestrictionCode]"],
49
+ "FGDC CSDGM": ["idinfo > useconst"]
50
+ },
51
+ "items": {
52
+ "type": "string"
53
+ }
54
+ },
55
+ "otherConstraint": {
56
+ "type": "array",
57
+ "description": "Other restrictions and legal prerequisites for accessing and using the resource or metadata.",
58
+ "translation": {
59
+ "ISO 19115-2": ["MD_LegalConstraints > otherConstraints"]
60
+ },
61
+ "items": {
62
+ "type": "string"
63
+ }
64
+ }
65
+ }
66
+ },
67
+ "securityConstraint": {
68
+ "type": "object",
69
+ "description": "Handling restrictions imposed on the resource or metadata for national security or similar security concerns.",
70
+ "example": "../../examples/full_example.json#/metadata/resourceInfo/constraint/securityConstraint",
71
+ "translation": {
72
+ "ISO 19115-2": ["MD_SecurityConstraints"]
73
+ },
74
+ "required": ["classification"],
75
+ "additionalProperties": false,
76
+ "properties": {
77
+ "classification": {
78
+ "type": "string",
79
+ "description": "Name of the handling restrictions on the resource or metadata.",
80
+ "translation": {
81
+ "ISO 19115-2": ["MD_SecurityConstraints > classification [MD_ClassificationCode]"]
82
+ }
83
+ },
84
+ "userNote": {
85
+ "type": "string",
86
+ "description": "Explanation of the application of the legal constraints or other restrictions and legal prerequisites for obtaining and using the resource or metadata.",
87
+ "translation": {
88
+ "ISO 19115-2": ["MD_SecurityConstraints > userNote"]
89
+ }
90
+ },
91
+ "classificationSystem": {
92
+ "type": "string",
93
+ "description": "Name of the classification system associated with a security constraint.",
94
+ "translation": {
95
+ "ISO 19115-2": ["MD_SecurityConstraints > classificationSystem"]
96
+ }
97
+ },
98
+ "handlingDescription": {
99
+ "type": "string",
100
+ "description": "Additional description regarding the security handling of the resource or metadata.",
101
+ "translation": {
102
+ "ISO 19115-2": ["MD_SecurityConstraints > handlingDescription"]
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }