001package org.hl7.fhir.convertors.conv10_50.resources10_50;
002
003import org.hl7.fhir.convertors.context.ConversionContext10_50;
004import org.hl7.fhir.convertors.conv10_50.datatypes10_50.Reference10_50;
005import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.CodeableConcept10_50;
006import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Duration10_50;
007import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Identifier10_50;
008import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Period10_50;
009import org.hl7.fhir.exceptions.FHIRException;
010import org.hl7.fhir.r5.model.CodeableReference;
011import org.hl7.fhir.r5.model.Encounter.ReasonComponent;
012
013public class Encounter10_50 {
014
015  public static org.hl7.fhir.dstu2.model.Encounter convertEncounter(org.hl7.fhir.r5.model.Encounter src) throws FHIRException {
016    if (src == null || src.isEmpty())
017      return null;
018    org.hl7.fhir.dstu2.model.Encounter tgt = new org.hl7.fhir.dstu2.model.Encounter();
019    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
020    for (org.hl7.fhir.r5.model.Identifier t : src.getIdentifier())
021      tgt.addIdentifier(Identifier10_50.convertIdentifier(t));
022    if (src.hasStatus())
023      tgt.setStatusElement(convertEncounterState(src.getStatusElement()));
024    if (src.hasClass_())
025      tgt.setClass_( convertEncounterClass(src.getClass_FirstRep().getCodingFirstRep()));
026    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getType())
027      tgt.addType(CodeableConcept10_50.convertCodeableConcept(t));
028    if (src.hasPriority())
029      tgt.setPriority(CodeableConcept10_50.convertCodeableConcept(src.getPriority()));
030    if (src.hasSubject())
031      tgt.setPatient(Reference10_50.convertReference(src.getSubject()));
032    for (org.hl7.fhir.r5.model.Reference t : src.getEpisodeOfCare())
033      tgt.addEpisodeOfCare(Reference10_50.convertReference(t));
034    for (org.hl7.fhir.r5.model.Reference t : src.getBasedOn())
035      tgt.addIncomingReferral(Reference10_50.convertReference(t));
036    for (org.hl7.fhir.r5.model.Encounter.EncounterParticipantComponent t : src.getParticipant())
037      tgt.addParticipant(convertEncounterParticipantComponent(t));
038    if (src.hasAppointment())
039      tgt.setAppointment(Reference10_50.convertReference(src.getAppointmentFirstRep()));
040    if (src.hasActualPeriod())
041      tgt.setPeriod(Period10_50.convertPeriod(src.getActualPeriod()));
042    if (src.hasLength())
043      tgt.setLength(Duration10_50.convertDuration(src.getLength()));
044    for (ReasonComponent t1 : src.getReason())
045      for (CodeableReference t : t1.getValue())
046        if (t.hasConcept())
047          tgt.addReason(CodeableConcept10_50.convertCodeableConcept(t.getConcept()));
048    if (src.hasAdmission() || src.hasDietPreference() || src.hasSpecialArrangement() || src.hasSpecialCourtesy())
049      tgt.setHospitalization(convertEncounterHospitalizationComponent(src.getAdmission(), src));
050    for (org.hl7.fhir.r5.model.Encounter.EncounterLocationComponent t : src.getLocation())
051      tgt.addLocation(convertEncounterLocationComponent(t));
052    if (src.hasServiceProvider())
053      tgt.setServiceProvider(Reference10_50.convertReference(src.getServiceProvider()));
054    if (src.hasPartOf())
055      tgt.setPartOf(Reference10_50.convertReference(src.getPartOf()));
056    return tgt;
057  }
058
059  public static org.hl7.fhir.r5.model.Encounter convertEncounter(org.hl7.fhir.dstu2.model.Encounter src) throws FHIRException {
060    if (src == null || src.isEmpty())
061      return null;
062    org.hl7.fhir.r5.model.Encounter tgt = new org.hl7.fhir.r5.model.Encounter();
063    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
064    for (org.hl7.fhir.dstu2.model.Identifier t : src.getIdentifier())
065      tgt.addIdentifier(Identifier10_50.convertIdentifier(t));
066    if (src.hasStatus())
067      tgt.setStatusElement(convertEncounterState(src.getStatusElement()));
068    if (src.hasClass_())
069      tgt.addClass_(new org.hl7.fhir.r5.model.CodeableConcept().addCoding(convertEncounterClass(src.getClass_())));
070    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getType())
071      tgt.addType(CodeableConcept10_50.convertCodeableConcept(t));
072    if (src.hasPriority())
073      tgt.setPriority(CodeableConcept10_50.convertCodeableConcept(src.getPriority()));
074    if (src.hasPatient())
075      tgt.setSubject(Reference10_50.convertReference(src.getPatient()));
076    for (org.hl7.fhir.dstu2.model.Reference t : src.getEpisodeOfCare())
077      tgt.addEpisodeOfCare(Reference10_50.convertReference(t));
078    for (org.hl7.fhir.dstu2.model.Reference t : src.getIncomingReferral())
079      tgt.addBasedOn(Reference10_50.convertReference(t));
080    for (org.hl7.fhir.dstu2.model.Encounter.EncounterParticipantComponent t : src.getParticipant())
081      tgt.addParticipant(convertEncounterParticipantComponent(t));
082    if (src.hasAppointment())
083      tgt.addAppointment(Reference10_50.convertReference(src.getAppointment()));
084    if (src.hasPeriod())
085      tgt.setActualPeriod(Period10_50.convertPeriod(src.getPeriod()));
086    if (src.hasLength())
087      tgt.setLength(Duration10_50.convertDuration(src.getLength()));
088    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getReason())
089      tgt.addReason().addValue(CodeableConcept10_50.convertCodeableConceptToCodableReference(t));
090    if (src.hasHospitalization())
091      tgt.setAdmission(convertEncounterHospitalizationComponent(src.getHospitalization(), tgt));
092    for (org.hl7.fhir.dstu2.model.Encounter.EncounterLocationComponent t : src.getLocation())
093      tgt.addLocation(convertEncounterLocationComponent(t));
094    if (src.hasServiceProvider())
095      tgt.setServiceProvider(Reference10_50.convertReference(src.getServiceProvider()));
096    if (src.hasPartOf())
097      tgt.setPartOf(Reference10_50.convertReference(src.getPartOf()));
098    return tgt;
099  }
100
101  public static org.hl7.fhir.dstu2.model.Encounter.EncounterClass convertEncounterClass(org.hl7.fhir.r5.model.Coding src) throws FHIRException {
102    if (src == null || src.isEmpty())
103      return null;
104    if (src.getSystem().equals("http://terminology.hl7.org/v3/ActCode")) {
105      if (src.getCode().equals("IMP"))
106        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.INPATIENT;
107      if (src.getCode().equals("AMB"))
108        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.AMBULATORY;
109      if (src.getCode().equals("EMER"))
110        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.EMERGENCY;
111      if (src.getCode().equals("HH"))
112        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.HOME;
113      if (src.getCode().equals("FLD"))
114        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.FIELD;
115      if (src.getCode().equals(""))
116        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.DAYTIME;
117      if (src.getCode().equals("VR"))
118        return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.VIRTUAL;
119    }
120    return org.hl7.fhir.dstu2.model.Encounter.EncounterClass.NULL;
121  }
122
123  public static org.hl7.fhir.r5.model.Coding convertEncounterClass(org.hl7.fhir.dstu2.model.Encounter.EncounterClass src) throws FHIRException {
124    if (src == null)
125      return null;
126    switch (src) {
127      case INPATIENT:
128        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("IMP");
129      case OUTPATIENT:
130        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("AMB");
131      case AMBULATORY:
132        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("AMB");
133      case EMERGENCY:
134        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("EMER");
135      case HOME:
136        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("HH");
137      case FIELD:
138        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("FLD");
139      case DAYTIME:
140        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("SS");
141      case VIRTUAL:
142        return new org.hl7.fhir.r5.model.Coding().setSystem("http://terminology.hl7.org/v3/ActCode").setCode("VR");
143      default:
144        return null;
145    }
146  }
147
148  public static org.hl7.fhir.r5.model.Encounter.EncounterAdmissionComponent convertEncounterHospitalizationComponent(org.hl7.fhir.dstu2.model.Encounter.EncounterHospitalizationComponent src, org.hl7.fhir.r5.model.Encounter tgte) throws FHIRException {
149    if (src == null || src.isEmpty())
150      return null;
151    org.hl7.fhir.r5.model.Encounter.EncounterAdmissionComponent tgt = new org.hl7.fhir.r5.model.Encounter.EncounterAdmissionComponent();
152    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
153    if (src.hasPreAdmissionIdentifier())
154      tgt.setPreAdmissionIdentifier(Identifier10_50.convertIdentifier(src.getPreAdmissionIdentifier()));
155    if (src.hasOrigin())
156      tgt.setOrigin(Reference10_50.convertReference(src.getOrigin()));
157    if (src.hasAdmitSource())
158      tgt.setAdmitSource(CodeableConcept10_50.convertCodeableConcept(src.getAdmitSource()));
159    if (src.hasReAdmission())
160      tgt.setReAdmission(CodeableConcept10_50.convertCodeableConcept(src.getReAdmission()));
161    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getDietPreference())
162      tgte.addDietPreference(CodeableConcept10_50.convertCodeableConcept(t));
163    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getSpecialCourtesy())
164      tgte.addSpecialCourtesy(CodeableConcept10_50.convertCodeableConcept(t));
165    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getSpecialArrangement())
166      tgte.addSpecialArrangement(CodeableConcept10_50.convertCodeableConcept(t));
167    if (src.hasDestination())
168      tgt.setDestination(Reference10_50.convertReference(src.getDestination()));
169    if (src.hasDischargeDisposition())
170      tgt.setDischargeDisposition(CodeableConcept10_50.convertCodeableConcept(src.getDischargeDisposition()));
171    return tgt;
172  }
173
174  public static org.hl7.fhir.dstu2.model.Encounter.EncounterHospitalizationComponent convertEncounterHospitalizationComponent(org.hl7.fhir.r5.model.Encounter.EncounterAdmissionComponent src, org.hl7.fhir.r5.model.Encounter srce) throws FHIRException {
175    if (src == null || src.isEmpty())
176      return null;
177    org.hl7.fhir.dstu2.model.Encounter.EncounterHospitalizationComponent tgt = new org.hl7.fhir.dstu2.model.Encounter.EncounterHospitalizationComponent();
178    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
179    if (src.hasPreAdmissionIdentifier())
180      tgt.setPreAdmissionIdentifier(Identifier10_50.convertIdentifier(src.getPreAdmissionIdentifier()));
181    if (src.hasOrigin())
182      tgt.setOrigin(Reference10_50.convertReference(src.getOrigin()));
183    if (src.hasAdmitSource())
184      tgt.setAdmitSource(CodeableConcept10_50.convertCodeableConcept(src.getAdmitSource()));
185    if (src.hasReAdmission())
186      tgt.setReAdmission(CodeableConcept10_50.convertCodeableConcept(src.getReAdmission()));
187    for (org.hl7.fhir.r5.model.CodeableConcept t : srce.getDietPreference())
188      tgt.addDietPreference(CodeableConcept10_50.convertCodeableConcept(t));
189    for (org.hl7.fhir.r5.model.CodeableConcept t : srce.getSpecialCourtesy())
190      tgt.addSpecialCourtesy(CodeableConcept10_50.convertCodeableConcept(t));
191    for (org.hl7.fhir.r5.model.CodeableConcept t : srce.getSpecialArrangement())
192      tgt.addSpecialArrangement(CodeableConcept10_50.convertCodeableConcept(t));
193    if (src.hasDestination())
194      tgt.setDestination(Reference10_50.convertReference(src.getDestination()));
195    if (src.hasDischargeDisposition())
196      tgt.setDischargeDisposition(CodeableConcept10_50.convertCodeableConcept(src.getDischargeDisposition()));
197    return tgt;
198  }
199
200  public static org.hl7.fhir.r5.model.Encounter.EncounterLocationComponent convertEncounterLocationComponent(org.hl7.fhir.dstu2.model.Encounter.EncounterLocationComponent src) throws FHIRException {
201    if (src == null || src.isEmpty())
202      return null;
203    org.hl7.fhir.r5.model.Encounter.EncounterLocationComponent tgt = new org.hl7.fhir.r5.model.Encounter.EncounterLocationComponent();
204    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
205    if (src.hasLocation())
206      tgt.setLocation(Reference10_50.convertReference(src.getLocation()));
207    if (src.hasStatus())
208      tgt.setStatusElement(convertEncounterLocationStatus(src.getStatusElement()));
209    if (src.hasPeriod())
210      tgt.setPeriod(Period10_50.convertPeriod(src.getPeriod()));
211    return tgt;
212  }
213
214  public static org.hl7.fhir.dstu2.model.Encounter.EncounterLocationComponent convertEncounterLocationComponent(org.hl7.fhir.r5.model.Encounter.EncounterLocationComponent src) throws FHIRException {
215    if (src == null || src.isEmpty())
216      return null;
217    org.hl7.fhir.dstu2.model.Encounter.EncounterLocationComponent tgt = new org.hl7.fhir.dstu2.model.Encounter.EncounterLocationComponent();
218    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
219    if (src.hasLocation())
220      tgt.setLocation(Reference10_50.convertReference(src.getLocation()));
221    if (src.hasStatus())
222      tgt.setStatusElement(convertEncounterLocationStatus(src.getStatusElement()));
223    if (src.hasPeriod())
224      tgt.setPeriod(Period10_50.convertPeriod(src.getPeriod()));
225    return tgt;
226  }
227
228  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus> convertEncounterLocationStatus(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus> src) throws FHIRException {
229    if (src == null || src.isEmpty())
230      return null;
231    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.Encounter.EncounterLocationStatusEnumFactory());
232    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
233    switch (src.getValue()) {
234      case PLANNED:
235        tgt.setValue(org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus.PLANNED);
236        break;
237      case ACTIVE:
238        tgt.setValue(org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus.ACTIVE);
239        break;
240      case RESERVED:
241        tgt.setValue(org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus.RESERVED);
242        break;
243      case COMPLETED:
244        tgt.setValue(org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus.COMPLETED);
245        break;
246      default:
247        tgt.setValue(org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus.NULL);
248        break;
249    }
250    return tgt;
251  }
252
253  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus> convertEncounterLocationStatus(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Encounter.EncounterLocationStatus> src) throws FHIRException {
254    if (src == null || src.isEmpty())
255      return null;
256    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatusEnumFactory());
257    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
258    switch (src.getValue()) {
259      case PLANNED:
260        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus.PLANNED);
261        break;
262      case ACTIVE:
263        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus.ACTIVE);
264        break;
265      case RESERVED:
266        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus.RESERVED);
267        break;
268      case COMPLETED:
269        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus.COMPLETED);
270        break;
271      default:
272        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterLocationStatus.NULL);
273        break;
274    }
275    return tgt;
276  }
277
278  public static org.hl7.fhir.r5.model.Encounter.EncounterParticipantComponent convertEncounterParticipantComponent(org.hl7.fhir.dstu2.model.Encounter.EncounterParticipantComponent src) throws FHIRException {
279    if (src == null || src.isEmpty())
280      return null;
281    org.hl7.fhir.r5.model.Encounter.EncounterParticipantComponent tgt = new org.hl7.fhir.r5.model.Encounter.EncounterParticipantComponent();
282    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
283    for (org.hl7.fhir.dstu2.model.CodeableConcept t : src.getType())
284      tgt.addType(CodeableConcept10_50.convertCodeableConcept(t));
285    if (src.hasPeriod())
286      tgt.setPeriod(Period10_50.convertPeriod(src.getPeriod()));
287    if (src.hasIndividual())
288      tgt.setActor(Reference10_50.convertReference(src.getIndividual()));
289    return tgt;
290  }
291
292  public static org.hl7.fhir.dstu2.model.Encounter.EncounterParticipantComponent convertEncounterParticipantComponent(org.hl7.fhir.r5.model.Encounter.EncounterParticipantComponent src) throws FHIRException {
293    if (src == null || src.isEmpty())
294      return null;
295    org.hl7.fhir.dstu2.model.Encounter.EncounterParticipantComponent tgt = new org.hl7.fhir.dstu2.model.Encounter.EncounterParticipantComponent();
296    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyBackboneElement(src,tgt);
297    for (org.hl7.fhir.r5.model.CodeableConcept t : src.getType())
298      tgt.addType(CodeableConcept10_50.convertCodeableConcept(t));
299    if (src.hasPeriod())
300      tgt.setPeriod(Period10_50.convertPeriod(src.getPeriod()));
301    if (src.hasActor())
302      tgt.setIndividual(Reference10_50.convertReference(src.getActor()));
303    return tgt;
304  }
305
306  static public org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Encounter.EncounterState> convertEncounterState(org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.EncounterStatus> src) throws FHIRException {
307    if (src == null || src.isEmpty())
308      return null;
309    org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Encounter.EncounterState> tgt = new org.hl7.fhir.dstu2.model.Enumeration<>(new org.hl7.fhir.dstu2.model.Encounter.EncounterStateEnumFactory());
310    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
311    switch (src.getValue()) {
312      case PLANNED:
313        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterState.PLANNED);
314        break;
315      case INPROGRESS:
316        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterState.INPROGRESS);
317        break;
318      case COMPLETED:
319        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterState.FINISHED);
320        break;
321      case CANCELLED:
322        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterState.CANCELLED);
323        break;
324      default:
325        tgt.setValue(org.hl7.fhir.dstu2.model.Encounter.EncounterState.NULL);
326        break;
327    }
328    return tgt;
329  }
330
331  static public org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.EncounterStatus> convertEncounterState(org.hl7.fhir.dstu2.model.Enumeration<org.hl7.fhir.dstu2.model.Encounter.EncounterState> src) throws FHIRException {
332    if (src == null || src.isEmpty())
333      return null;
334    org.hl7.fhir.r5.model.Enumeration<org.hl7.fhir.r5.model.Enumerations.EncounterStatus> tgt = new org.hl7.fhir.r5.model.Enumeration<>(new org.hl7.fhir.r5.model.Enumerations.EncounterStatusEnumFactory());
335    ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyElement(src, tgt);
336    switch (src.getValue()) {
337      case PLANNED:
338        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.PLANNED);
339        break;
340      case ARRIVED:
341        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.INPROGRESS);
342        break;
343      case INPROGRESS:
344        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.INPROGRESS);
345        break;
346      case ONLEAVE:
347        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.INPROGRESS);
348        break;
349      case FINISHED:
350        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.COMPLETED);
351        break;
352      case CANCELLED:
353        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.CANCELLED);
354        break;
355      default:
356        tgt.setValue(org.hl7.fhir.r5.model.Enumerations.EncounterStatus.NULL);
357        break;
358    }
359    return tgt;
360  }
361}