001package org.hl7.fhir.dstu3.model;
002
003/*
004  Copyright (c) 2011+, HL7, Inc.
005  All rights reserved.
006  
007  Redistribution and use in source and binary forms, with or without modification, 
008  are permitted provided that the following conditions are met:
009  
010   * Redistributions of source code must retain the above copyright notice, this 
011     list of conditions and the following disclaimer.
012   * Redistributions in binary form must reproduce the above copyright notice, 
013     this list of conditions and the following disclaimer in the documentation 
014     and/or other materials provided with the distribution.
015   * Neither the name of HL7 nor the names of its contributors may be used to 
016     endorse or promote products derived from this software without specific 
017     prior written permission.
018  
019  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
020  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
021  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
022  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
023  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
024  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
025  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
026  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
027  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
028  POSSIBILITY OF SUCH DAMAGE.
029  
030*/
031
032// Generated on Mon, Apr 17, 2017 17:38-0400 for FHIR v3.0.1
033
034import java.util.*;
035
036import ca.uhn.fhir.model.api.annotation.ResourceDef;
037import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
038import ca.uhn.fhir.model.api.annotation.Child;
039import ca.uhn.fhir.model.api.annotation.ChildOrder;
040import ca.uhn.fhir.model.api.annotation.Description;
041import ca.uhn.fhir.model.api.annotation.Block;
042import org.hl7.fhir.instance.model.api.*;
043import org.hl7.fhir.exceptions.FHIRException;
044/**
045 * Basic is used for handling concepts not yet defined in FHIR, narrative-only resources that don't map to an existing resource, and custom resources not appropriate for inclusion in the FHIR specification.
046 */
047@ResourceDef(name="Basic", profile="http://hl7.org/fhir/Profile/Basic")
048public class Basic extends DomainResource {
049
050    /**
051     * Identifier assigned to the resource for business purposes, outside the context of FHIR.
052     */
053    @Child(name = "identifier", type = {Identifier.class}, order=0, min=0, max=Child.MAX_UNLIMITED, modifier=false, summary=true)
054    @Description(shortDefinition="Business identifier", formalDefinition="Identifier assigned to the resource for business purposes, outside the context of FHIR." )
055    protected List<Identifier> identifier;
056
057    /**
058     * Identifies the 'type' of resource - equivalent to the resource name for other resources.
059     */
060    @Child(name = "code", type = {CodeableConcept.class}, order=1, min=1, max=1, modifier=true, summary=true)
061    @Description(shortDefinition="Kind of Resource", formalDefinition="Identifies the 'type' of resource - equivalent to the resource name for other resources." )
062    @ca.uhn.fhir.model.api.annotation.Binding(valueSet="http://hl7.org/fhir/ValueSet/basic-resource-type")
063    protected CodeableConcept code;
064
065    /**
066     * Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.
067     */
068    @Child(name = "subject", type = {Reference.class}, order=2, min=0, max=1, modifier=false, summary=true)
069    @Description(shortDefinition="Identifies the focus of this resource", formalDefinition="Identifies the patient, practitioner, device or any other resource that is the \"focus\" of this resource." )
070    protected Reference subject;
071
072    /**
073     * The actual object that is the target of the reference (Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.)
074     */
075    protected Resource subjectTarget;
076
077    /**
078     * Identifies when the resource was first created.
079     */
080    @Child(name = "created", type = {DateType.class}, order=3, min=0, max=1, modifier=false, summary=true)
081    @Description(shortDefinition="When created", formalDefinition="Identifies when the resource was first created." )
082    protected DateType created;
083
084    /**
085     * Indicates who was responsible for creating the resource instance.
086     */
087    @Child(name = "author", type = {Practitioner.class, Patient.class, RelatedPerson.class}, order=4, min=0, max=1, modifier=false, summary=true)
088    @Description(shortDefinition="Who created", formalDefinition="Indicates who was responsible for creating the resource instance." )
089    protected Reference author;
090
091    /**
092     * The actual object that is the target of the reference (Indicates who was responsible for creating the resource instance.)
093     */
094    protected Resource authorTarget;
095
096    private static final long serialVersionUID = 650756402L;
097
098  /**
099   * Constructor
100   */
101    public Basic() {
102      super();
103    }
104
105  /**
106   * Constructor
107   */
108    public Basic(CodeableConcept code) {
109      super();
110      this.code = code;
111    }
112
113    /**
114     * @return {@link #identifier} (Identifier assigned to the resource for business purposes, outside the context of FHIR.)
115     */
116    public List<Identifier> getIdentifier() { 
117      if (this.identifier == null)
118        this.identifier = new ArrayList<Identifier>();
119      return this.identifier;
120    }
121
122    /**
123     * @return Returns a reference to <code>this</code> for easy method chaining
124     */
125    public Basic setIdentifier(List<Identifier> theIdentifier) { 
126      this.identifier = theIdentifier;
127      return this;
128    }
129
130    public boolean hasIdentifier() { 
131      if (this.identifier == null)
132        return false;
133      for (Identifier item : this.identifier)
134        if (!item.isEmpty())
135          return true;
136      return false;
137    }
138
139    public Identifier addIdentifier() { //3
140      Identifier t = new Identifier();
141      if (this.identifier == null)
142        this.identifier = new ArrayList<Identifier>();
143      this.identifier.add(t);
144      return t;
145    }
146
147    public Basic addIdentifier(Identifier t) { //3
148      if (t == null)
149        return this;
150      if (this.identifier == null)
151        this.identifier = new ArrayList<Identifier>();
152      this.identifier.add(t);
153      return this;
154    }
155
156    /**
157     * @return The first repetition of repeating field {@link #identifier}, creating it if it does not already exist
158     */
159    public Identifier getIdentifierFirstRep() { 
160      if (getIdentifier().isEmpty()) {
161        addIdentifier();
162      }
163      return getIdentifier().get(0);
164    }
165
166    /**
167     * @return {@link #code} (Identifies the 'type' of resource - equivalent to the resource name for other resources.)
168     */
169    public CodeableConcept getCode() { 
170      if (this.code == null)
171        if (Configuration.errorOnAutoCreate())
172          throw new Error("Attempt to auto-create Basic.code");
173        else if (Configuration.doAutoCreate())
174          this.code = new CodeableConcept(); // cc
175      return this.code;
176    }
177
178    public boolean hasCode() { 
179      return this.code != null && !this.code.isEmpty();
180    }
181
182    /**
183     * @param value {@link #code} (Identifies the 'type' of resource - equivalent to the resource name for other resources.)
184     */
185    public Basic setCode(CodeableConcept value) { 
186      this.code = value;
187      return this;
188    }
189
190    /**
191     * @return {@link #subject} (Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.)
192     */
193    public Reference getSubject() { 
194      if (this.subject == null)
195        if (Configuration.errorOnAutoCreate())
196          throw new Error("Attempt to auto-create Basic.subject");
197        else if (Configuration.doAutoCreate())
198          this.subject = new Reference(); // cc
199      return this.subject;
200    }
201
202    public boolean hasSubject() { 
203      return this.subject != null && !this.subject.isEmpty();
204    }
205
206    /**
207     * @param value {@link #subject} (Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.)
208     */
209    public Basic setSubject(Reference value) { 
210      this.subject = value;
211      return this;
212    }
213
214    /**
215     * @return {@link #subject} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.)
216     */
217    public Resource getSubjectTarget() { 
218      return this.subjectTarget;
219    }
220
221    /**
222     * @param value {@link #subject} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Identifies the patient, practitioner, device or any other resource that is the "focus" of this resource.)
223     */
224    public Basic setSubjectTarget(Resource value) { 
225      this.subjectTarget = value;
226      return this;
227    }
228
229    /**
230     * @return {@link #created} (Identifies when the resource was first created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
231     */
232    public DateType getCreatedElement() { 
233      if (this.created == null)
234        if (Configuration.errorOnAutoCreate())
235          throw new Error("Attempt to auto-create Basic.created");
236        else if (Configuration.doAutoCreate())
237          this.created = new DateType(); // bb
238      return this.created;
239    }
240
241    public boolean hasCreatedElement() { 
242      return this.created != null && !this.created.isEmpty();
243    }
244
245    public boolean hasCreated() { 
246      return this.created != null && !this.created.isEmpty();
247    }
248
249    /**
250     * @param value {@link #created} (Identifies when the resource was first created.). This is the underlying object with id, value and extensions. The accessor "getCreated" gives direct access to the value
251     */
252    public Basic setCreatedElement(DateType value) { 
253      this.created = value;
254      return this;
255    }
256
257    /**
258     * @return Identifies when the resource was first created.
259     */
260    public Date getCreated() { 
261      return this.created == null ? null : this.created.getValue();
262    }
263
264    /**
265     * @param value Identifies when the resource was first created.
266     */
267    public Basic setCreated(Date value) { 
268      if (value == null)
269        this.created = null;
270      else {
271        if (this.created == null)
272          this.created = new DateType();
273        this.created.setValue(value);
274      }
275      return this;
276    }
277
278    /**
279     * @return {@link #author} (Indicates who was responsible for creating the resource instance.)
280     */
281    public Reference getAuthor() { 
282      if (this.author == null)
283        if (Configuration.errorOnAutoCreate())
284          throw new Error("Attempt to auto-create Basic.author");
285        else if (Configuration.doAutoCreate())
286          this.author = new Reference(); // cc
287      return this.author;
288    }
289
290    public boolean hasAuthor() { 
291      return this.author != null && !this.author.isEmpty();
292    }
293
294    /**
295     * @param value {@link #author} (Indicates who was responsible for creating the resource instance.)
296     */
297    public Basic setAuthor(Reference value) { 
298      this.author = value;
299      return this;
300    }
301
302    /**
303     * @return {@link #author} The actual object that is the target of the reference. The reference library doesn't populate this, but you can use it to hold the resource if you resolve it. (Indicates who was responsible for creating the resource instance.)
304     */
305    public Resource getAuthorTarget() { 
306      return this.authorTarget;
307    }
308
309    /**
310     * @param value {@link #author} The actual object that is the target of the reference. The reference library doesn't use these, but you can use it to hold the resource if you resolve it. (Indicates who was responsible for creating the resource instance.)
311     */
312    public Basic setAuthorTarget(Resource value) { 
313      this.authorTarget = value;
314      return this;
315    }
316
317      protected void listChildren(List<Property> childrenList) {
318        super.listChildren(childrenList);
319        childrenList.add(new Property("identifier", "Identifier", "Identifier assigned to the resource for business purposes, outside the context of FHIR.", 0, java.lang.Integer.MAX_VALUE, identifier));
320        childrenList.add(new Property("code", "CodeableConcept", "Identifies the 'type' of resource - equivalent to the resource name for other resources.", 0, java.lang.Integer.MAX_VALUE, code));
321        childrenList.add(new Property("subject", "Reference(Any)", "Identifies the patient, practitioner, device or any other resource that is the \"focus\" of this resource.", 0, java.lang.Integer.MAX_VALUE, subject));
322        childrenList.add(new Property("created", "date", "Identifies when the resource was first created.", 0, java.lang.Integer.MAX_VALUE, created));
323        childrenList.add(new Property("author", "Reference(Practitioner|Patient|RelatedPerson)", "Indicates who was responsible for creating the resource instance.", 0, java.lang.Integer.MAX_VALUE, author));
324      }
325
326      @Override
327      public Base[] getProperty(int hash, String name, boolean checkValid) throws FHIRException {
328        switch (hash) {
329        case -1618432855: /*identifier*/ return this.identifier == null ? new Base[0] : this.identifier.toArray(new Base[this.identifier.size()]); // Identifier
330        case 3059181: /*code*/ return this.code == null ? new Base[0] : new Base[] {this.code}; // CodeableConcept
331        case -1867885268: /*subject*/ return this.subject == null ? new Base[0] : new Base[] {this.subject}; // Reference
332        case 1028554472: /*created*/ return this.created == null ? new Base[0] : new Base[] {this.created}; // DateType
333        case -1406328437: /*author*/ return this.author == null ? new Base[0] : new Base[] {this.author}; // Reference
334        default: return super.getProperty(hash, name, checkValid);
335        }
336
337      }
338
339      @Override
340      public Base setProperty(int hash, String name, Base value) throws FHIRException {
341        switch (hash) {
342        case -1618432855: // identifier
343          this.getIdentifier().add(castToIdentifier(value)); // Identifier
344          return value;
345        case 3059181: // code
346          this.code = castToCodeableConcept(value); // CodeableConcept
347          return value;
348        case -1867885268: // subject
349          this.subject = castToReference(value); // Reference
350          return value;
351        case 1028554472: // created
352          this.created = castToDate(value); // DateType
353          return value;
354        case -1406328437: // author
355          this.author = castToReference(value); // Reference
356          return value;
357        default: return super.setProperty(hash, name, value);
358        }
359
360      }
361
362      @Override
363      public Base setProperty(String name, Base value) throws FHIRException {
364        if (name.equals("identifier")) {
365          this.getIdentifier().add(castToIdentifier(value));
366        } else if (name.equals("code")) {
367          this.code = castToCodeableConcept(value); // CodeableConcept
368        } else if (name.equals("subject")) {
369          this.subject = castToReference(value); // Reference
370        } else if (name.equals("created")) {
371          this.created = castToDate(value); // DateType
372        } else if (name.equals("author")) {
373          this.author = castToReference(value); // Reference
374        } else
375          return super.setProperty(name, value);
376        return value;
377      }
378
379      @Override
380      public Base makeProperty(int hash, String name) throws FHIRException {
381        switch (hash) {
382        case -1618432855:  return addIdentifier(); 
383        case 3059181:  return getCode(); 
384        case -1867885268:  return getSubject(); 
385        case 1028554472:  return getCreatedElement();
386        case -1406328437:  return getAuthor(); 
387        default: return super.makeProperty(hash, name);
388        }
389
390      }
391
392      @Override
393      public String[] getTypesForProperty(int hash, String name) throws FHIRException {
394        switch (hash) {
395        case -1618432855: /*identifier*/ return new String[] {"Identifier"};
396        case 3059181: /*code*/ return new String[] {"CodeableConcept"};
397        case -1867885268: /*subject*/ return new String[] {"Reference"};
398        case 1028554472: /*created*/ return new String[] {"date"};
399        case -1406328437: /*author*/ return new String[] {"Reference"};
400        default: return super.getTypesForProperty(hash, name);
401        }
402
403      }
404
405      @Override
406      public Base addChild(String name) throws FHIRException {
407        if (name.equals("identifier")) {
408          return addIdentifier();
409        }
410        else if (name.equals("code")) {
411          this.code = new CodeableConcept();
412          return this.code;
413        }
414        else if (name.equals("subject")) {
415          this.subject = new Reference();
416          return this.subject;
417        }
418        else if (name.equals("created")) {
419          throw new FHIRException("Cannot call addChild on a primitive type Basic.created");
420        }
421        else if (name.equals("author")) {
422          this.author = new Reference();
423          return this.author;
424        }
425        else
426          return super.addChild(name);
427      }
428
429  public String fhirType() {
430    return "Basic";
431
432  }
433
434      public Basic copy() {
435        Basic dst = new Basic();
436        copyValues(dst);
437        if (identifier != null) {
438          dst.identifier = new ArrayList<Identifier>();
439          for (Identifier i : identifier)
440            dst.identifier.add(i.copy());
441        };
442        dst.code = code == null ? null : code.copy();
443        dst.subject = subject == null ? null : subject.copy();
444        dst.created = created == null ? null : created.copy();
445        dst.author = author == null ? null : author.copy();
446        return dst;
447      }
448
449      protected Basic typedCopy() {
450        return copy();
451      }
452
453      @Override
454      public boolean equalsDeep(Base other) {
455        if (!super.equalsDeep(other))
456          return false;
457        if (!(other instanceof Basic))
458          return false;
459        Basic o = (Basic) other;
460        return compareDeep(identifier, o.identifier, true) && compareDeep(code, o.code, true) && compareDeep(subject, o.subject, true)
461           && compareDeep(created, o.created, true) && compareDeep(author, o.author, true);
462      }
463
464      @Override
465      public boolean equalsShallow(Base other) {
466        if (!super.equalsShallow(other))
467          return false;
468        if (!(other instanceof Basic))
469          return false;
470        Basic o = (Basic) other;
471        return compareValues(created, o.created, true);
472      }
473
474      public boolean isEmpty() {
475        return super.isEmpty() && ca.uhn.fhir.util.ElementUtil.isEmpty(identifier, code, subject
476          , created, author);
477      }
478
479  @Override
480  public ResourceType getResourceType() {
481    return ResourceType.Basic;
482   }
483
484 /**
485   * Search parameter: <b>identifier</b>
486   * <p>
487   * Description: <b>Business identifier</b><br>
488   * Type: <b>token</b><br>
489   * Path: <b>Basic.identifier</b><br>
490   * </p>
491   */
492  @SearchParamDefinition(name="identifier", path="Basic.identifier", description="Business identifier", type="token" )
493  public static final String SP_IDENTIFIER = "identifier";
494 /**
495   * <b>Fluent Client</b> search parameter constant for <b>identifier</b>
496   * <p>
497   * Description: <b>Business identifier</b><br>
498   * Type: <b>token</b><br>
499   * Path: <b>Basic.identifier</b><br>
500   * </p>
501   */
502  public static final ca.uhn.fhir.rest.gclient.TokenClientParam IDENTIFIER = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_IDENTIFIER);
503
504 /**
505   * Search parameter: <b>code</b>
506   * <p>
507   * Description: <b>Kind of Resource</b><br>
508   * Type: <b>token</b><br>
509   * Path: <b>Basic.code</b><br>
510   * </p>
511   */
512  @SearchParamDefinition(name="code", path="Basic.code", description="Kind of Resource", type="token" )
513  public static final String SP_CODE = "code";
514 /**
515   * <b>Fluent Client</b> search parameter constant for <b>code</b>
516   * <p>
517   * Description: <b>Kind of Resource</b><br>
518   * Type: <b>token</b><br>
519   * Path: <b>Basic.code</b><br>
520   * </p>
521   */
522  public static final ca.uhn.fhir.rest.gclient.TokenClientParam CODE = new ca.uhn.fhir.rest.gclient.TokenClientParam(SP_CODE);
523
524 /**
525   * Search parameter: <b>subject</b>
526   * <p>
527   * Description: <b>Identifies the focus of this resource</b><br>
528   * Type: <b>reference</b><br>
529   * Path: <b>Basic.subject</b><br>
530   * </p>
531   */
532  @SearchParamDefinition(name="subject", path="Basic.subject", description="Identifies the focus of this resource", type="reference" )
533  public static final String SP_SUBJECT = "subject";
534 /**
535   * <b>Fluent Client</b> search parameter constant for <b>subject</b>
536   * <p>
537   * Description: <b>Identifies the focus of this resource</b><br>
538   * Type: <b>reference</b><br>
539   * Path: <b>Basic.subject</b><br>
540   * </p>
541   */
542  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam SUBJECT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_SUBJECT);
543
544/**
545   * Constant for fluent queries to be used to add include statements. Specifies
546   * the path value of "<b>Basic:subject</b>".
547   */
548  public static final ca.uhn.fhir.model.api.Include INCLUDE_SUBJECT = new ca.uhn.fhir.model.api.Include("Basic:subject").toLocked();
549
550 /**
551   * Search parameter: <b>created</b>
552   * <p>
553   * Description: <b>When created</b><br>
554   * Type: <b>date</b><br>
555   * Path: <b>Basic.created</b><br>
556   * </p>
557   */
558  @SearchParamDefinition(name="created", path="Basic.created", description="When created", type="date" )
559  public static final String SP_CREATED = "created";
560 /**
561   * <b>Fluent Client</b> search parameter constant for <b>created</b>
562   * <p>
563   * Description: <b>When created</b><br>
564   * Type: <b>date</b><br>
565   * Path: <b>Basic.created</b><br>
566   * </p>
567   */
568  public static final ca.uhn.fhir.rest.gclient.DateClientParam CREATED = new ca.uhn.fhir.rest.gclient.DateClientParam(SP_CREATED);
569
570 /**
571   * Search parameter: <b>patient</b>
572   * <p>
573   * Description: <b>Identifies the focus of this resource</b><br>
574   * Type: <b>reference</b><br>
575   * Path: <b>Basic.subject</b><br>
576   * </p>
577   */
578  @SearchParamDefinition(name="patient", path="Basic.subject", description="Identifies the focus of this resource", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient") }, target={Patient.class } )
579  public static final String SP_PATIENT = "patient";
580 /**
581   * <b>Fluent Client</b> search parameter constant for <b>patient</b>
582   * <p>
583   * Description: <b>Identifies the focus of this resource</b><br>
584   * Type: <b>reference</b><br>
585   * Path: <b>Basic.subject</b><br>
586   * </p>
587   */
588  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam PATIENT = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_PATIENT);
589
590/**
591   * Constant for fluent queries to be used to add include statements. Specifies
592   * the path value of "<b>Basic:patient</b>".
593   */
594  public static final ca.uhn.fhir.model.api.Include INCLUDE_PATIENT = new ca.uhn.fhir.model.api.Include("Basic:patient").toLocked();
595
596 /**
597   * Search parameter: <b>author</b>
598   * <p>
599   * Description: <b>Who created</b><br>
600   * Type: <b>reference</b><br>
601   * Path: <b>Basic.author</b><br>
602   * </p>
603   */
604  @SearchParamDefinition(name="author", path="Basic.author", description="Who created", type="reference", providesMembershipIn={ @ca.uhn.fhir.model.api.annotation.Compartment(name="Patient"), @ca.uhn.fhir.model.api.annotation.Compartment(name="Practitioner"), @ca.uhn.fhir.model.api.annotation.Compartment(name="RelatedPerson") }, target={Patient.class, Practitioner.class, RelatedPerson.class } )
605  public static final String SP_AUTHOR = "author";
606 /**
607   * <b>Fluent Client</b> search parameter constant for <b>author</b>
608   * <p>
609   * Description: <b>Who created</b><br>
610   * Type: <b>reference</b><br>
611   * Path: <b>Basic.author</b><br>
612   * </p>
613   */
614  public static final ca.uhn.fhir.rest.gclient.ReferenceClientParam AUTHOR = new ca.uhn.fhir.rest.gclient.ReferenceClientParam(SP_AUTHOR);
615
616/**
617   * Constant for fluent queries to be used to add include statements. Specifies
618   * the path value of "<b>Basic:author</b>".
619   */
620  public static final ca.uhn.fhir.model.api.Include INCLUDE_AUTHOR = new ca.uhn.fhir.model.api.Include("Basic:author").toLocked();
621
622
623}
624