package com.l7tech.gateway.common.audit;

import com.l7tech.gateway.common.RequestId;
import com.l7tech.identity.IdentityProviderConfig;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.NamedEntity;
import com.l7tech.objectmodel.PersistentEntity;
import com.l7tech.security.rbac.RbacAttribute;
import com.l7tech.util.DeserializeSafe;
import com.l7tech.util.TextUtils;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import jakarta.persistence.Inheritance;
import jakarta.persistence.InheritanceType;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import jakarta.xml.bind.annotation.XmlTransient;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Proxy;
import org.hibernate.annotations.Type;

@Entity
@Proxy(lazy = false)
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "audit_main")
@DeserializeSafe
public abstract class AuditRecord implements NamedEntity, PersistentEntity, Serializable {
   private static Logger logger;
   private static AtomicLong globalSequenceNumber;
   private static final long serialVersionUID = 5179356781289444270L;
   public static final String SERSEP = ":";
   private Goid goid;
   private int version;
   private String signature;
   private String nodeId;
   private String message;
   private Level level;
   private long millis;
   private final long sequenceNumber;
   protected Goid identityProviderGoid = IdentityProviderConfig.DEFAULT_GOID;
   protected String userName;
   protected String userId;
   protected String requestId;
   protected String ipAddress;
   protected String name;
   private Set<AuditDetail> details = new HashSet<>();
   private AuditRecord.MessageSummaryAuditStatus messageSummaryAuditStatus;
   private static final Comparator<AuditDetail> COMPARE_BY_ORDINAL;
   private static final String[] a;

   @Deprecated
   protected AuditRecord() {
      this.sequenceNumber = globalSequenceNumber.incrementAndGet();
      this.level = Level.FINEST;
      this.millis = System.currentTimeMillis();
   }

   protected AuditRecord(Level var1, String var2, String var3, Goid var4, String var5, String var6, String var7, String var8) {
      this.sequenceNumber = globalSequenceNumber.incrementAndGet();
      this.level = var1;
      this.millis = System.currentTimeMillis();
      this.message = TextUtils.truncStringMiddle(var8, 254);
      this.nodeId = var2;
      this.name = TextUtils.truncStringMiddle(var7, 254);
      this.ipAddress = var3;
      this.identityProviderGoid = var4;
      this.userName = var5;
      this.userId = var6;
   }

   @RbacAttribute
   @Column(name = "audit_level")
   public String getStrLvl() {
      return this.getLevel().getName();
   }

   @Deprecated
   public void setStrLvl(String var1) {
      this.setLevel(Level.parse(var1));
   }

   @Column(name = "nodeid")
   public String getNodeId() {
      return this.nodeId;
   }

   @Deprecated
   public void setNodeId(String var1) {
      this.nodeId = var1;
   }

   @Column(name = "time")
   public long getMillis() {
      return this.millis;
   }

   @Deprecated
   public void setMillis(long var1) {
      this.millis = var1;
   }

   @Column(name = "message")
   public String getMessage() {
      return this.message;
   }

   public void setMessage(String var1) {
      this.message = TextUtils.truncStringMiddle(var1, 254);
   }

   @Transient
   public String getId() {
      return Goid.toString(this.goid);
   }

   @Id
   @Column(name = "goid", nullable = false, updatable = false)
   @GenericGenerator(name = "layer7-goid-generator", strategy = "com.l7tech.server.util.ConfiguredSessionFactoryBean$ConfiguredGOIDGenerator")
   @GeneratedValue(generator = "layer7-goid-generator")
   @Type(type = "com.l7tech.server.util.GoidType")
   public Goid getGoid() {
      return this.goid;
   }

   @Transient
   public int getVersion() {
      return this.version;
   }

   @RbacAttribute
   @Column(name = "ip_address")
   public String getIpAddress() {
      return this.ipAddress;
   }

   @Column(name = "name")
   public String getName() {
      return this.name;
   }

   @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "auditRecord")
   public Set<AuditDetail> getDetails() {
      return this.details;
   }

   @Transient
   public AuditDetail[] getDetailsInOrder() {
      ArrayList var1 = new ArrayList<>(this.getDetails());
      Collections.sort(var1, COMPARE_BY_ORDINAL);
      return var1.toArray(new AuditDetail[var1.size()]);
   }

   public void setDetails(Set<AuditDetail> var1) {
      this.details = var1;
   }

   @Deprecated
   public void setIpAddress(String var1) {
      this.ipAddress = var1;
   }

   @Deprecated
   public void setName(String var1) {
      this.name = var1;
   }

   @Transient
   public Level getLevel() {
      return this.level;
   }

   public void setLevel(Level var1) {
      this.level = var1;
   }

   @Column(name = "provider_goid")
   @Type(type = "com.l7tech.server.util.GoidType")
   public Goid getIdentityProviderGoid() {
      return this.identityProviderGoid;
   }

   @RbacAttribute
   @Column(name = "user_name")
   public String getUserName() {
      return this.userName;
   }

   @RbacAttribute
   @Column(name = "user_id")
   public String getUserId() {
      return this.userId;
   }

   @Transient
   @XmlTransient
   public boolean isUnsaved() {
      return DEFAULT_GOID.equals(this.goid);
   }

   @Deprecated
   public void setGoid(Goid var1) {
      this.goid = var1;
   }

   @Deprecated
   public void setVersion(int var1) {
      this.version = var1;
   }

   @Deprecated
   public void setIdentityProviderGoid(Goid var1) {
      this.identityProviderGoid = var1;
   }

   @Deprecated
   public void setUserName(String var1) {
      this.userName = var1;
   }

   @Deprecated
   public void setUserId(String var1) {
      this.userId = var1;
   }

   @Transient
   public RequestId getReqId() {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: getfield com/l7tech/gateway/common/audit/AuditRecord.requestId Ljava/lang/String;
      // 04: ifnull 18
      // 07: aload 0
      // 08: getfield com/l7tech/gateway/common/audit/AuditRecord.requestId Ljava/lang/String;
      // 0b: invokevirtual java/lang/String.length ()I
      // 0e: ifgt 1e
      // 11: goto 18
      // 14: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 17: athrow
      // 18: aconst_null
      // 19: areturn
      // 1a: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1d: athrow
      // 1e: new com/l7tech/gateway/common/RequestId
      // 21: dup
      // 22: aload 0
      // 23: getfield com/l7tech/gateway/common/audit/AuditRecord.requestId Ljava/lang/String;
      // 26: invokespecial com/l7tech/gateway/common/RequestId.<init> (Ljava/lang/String;)V
      // 29: areturn
      // try (0 -> 7): 8 java/lang/RuntimeException
      // try (3 -> 12): 12 java/lang/RuntimeException
   }

   @Transient
   public String getStrRequestId() {
      return this.requestId;
   }

   @Deprecated
   public void setStrRequestId(String var1) {
      this.requestId = var1;
   }

   @Transient
   public long getSequenceNumber() {
      return this.sequenceNumber;
   }

   private void writeObject(ObjectOutputStream var1) throws IOException {
      this.details = new LinkedHashSet<>(this.details);
      var1.defaultWriteObject();
   }

   public abstract void serializeOtherProperties(OutputStream var1, boolean var2, boolean var3) throws IOException;

   @Transient
   public Map<String, Object> getAuditMetadata() {
      HashMap var1 = new HashMap();

      try {
         var1.put(com.l7tech.gateway.common.audit.a.a, AuditRecordUtils.AuditRecordType(this));
         var1.put(com.l7tech.gateway.common.audit.a.b, this.getNodeId());
         if (this.getIdentityProviderGoid() != null) {
            var1.put(com.l7tech.gateway.common.audit.a.c, this.getIdentityProviderGoid().toString() + ":" + this.getUserId());
         }
      } catch (RuntimeException var2) {
         throw a(var2);
      }

      var1.put(com.l7tech.gateway.common.audit.a.d, this.getUserName());
      var1.put(com.l7tech.gateway.common.audit.a.f, this.getIpAddress());
      return var1;
   }

   public final void serializeSignableProperties(OutputStream var1, boolean var2) throws IOException {
      this.outputProperties(var1, true, var2);
   }

   private void outputProperties(OutputStream param1, boolean param2, boolean param3) throws IOException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 000: aload 0
      // 001: getfield com/l7tech/gateway/common/audit/AuditRecord.nodeId Ljava/lang/String;
      // 004: ifnull 019
      // 007: aload 1
      // 008: aload 0
      // 009: getfield com/l7tech/gateway/common/audit/AuditRecord.nodeId Ljava/lang/String;
      // 00c: invokevirtual java/lang/String.getBytes ()[B
      // 00f: invokevirtual java/io/OutputStream.write ([B)V
      // 012: goto 019
      // 015: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 018: athrow
      // 019: aload 1
      // 01a: ldc ":"
      // 01c: invokevirtual java/lang/String.getBytes ()[B
      // 01f: invokevirtual java/io/OutputStream.write ([B)V
      // 022: aload 1
      // 023: aload 0
      // 024: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getMillis ()J
      // 027: invokestatic java/lang/Long.toString (J)Ljava/lang/String;
      // 02a: invokevirtual java/lang/String.getBytes ()[B
      // 02d: invokevirtual java/io/OutputStream.write ([B)V
      // 030: aload 1
      // 031: ldc ":"
      // 033: invokevirtual java/lang/String.getBytes ()[B
      // 036: invokevirtual java/io/OutputStream.write ([B)V
      // 039: aload 0
      // 03a: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getLevel ()Ljava/util/logging/Level;
      // 03d: ifnull 055
      // 040: aload 1
      // 041: aload 0
      // 042: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getLevel ()Ljava/util/logging/Level;
      // 045: invokevirtual java/util/logging/Level.toString ()Ljava/lang/String;
      // 048: invokevirtual java/lang/String.getBytes ()[B
      // 04b: invokevirtual java/io/OutputStream.write ([B)V
      // 04e: goto 055
      // 051: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 054: athrow
      // 055: aload 1
      // 056: ldc ":"
      // 058: invokevirtual java/lang/String.getBytes ()[B
      // 05b: invokevirtual java/io/OutputStream.write ([B)V
      // 05e: aload 0
      // 05f: getfield com/l7tech/gateway/common/audit/AuditRecord.name Ljava/lang/String;
      // 062: ifnull 077
      // 065: aload 1
      // 066: aload 0
      // 067: getfield com/l7tech/gateway/common/audit/AuditRecord.name Ljava/lang/String;
      // 06a: invokevirtual java/lang/String.getBytes ()[B
      // 06d: invokevirtual java/io/OutputStream.write ([B)V
      // 070: goto 077
      // 073: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 076: athrow
      // 077: aload 1
      // 078: ldc ":"
      // 07a: invokevirtual java/lang/String.getBytes ()[B
      // 07d: invokevirtual java/io/OutputStream.write ([B)V
      // 080: aload 0
      // 081: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getMessage ()Ljava/lang/String;
      // 084: ifnull 099
      // 087: aload 1
      // 088: aload 0
      // 089: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getMessage ()Ljava/lang/String;
      // 08c: invokevirtual java/lang/String.getBytes ()[B
      // 08f: invokevirtual java/io/OutputStream.write ([B)V
      // 092: goto 099
      // 095: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 098: athrow
      // 099: aload 1
      // 09a: ldc ":"
      // 09c: invokevirtual java/lang/String.getBytes ()[B
      // 09f: invokevirtual java/io/OutputStream.write ([B)V
      // 0a2: aload 0
      // 0a3: getfield com/l7tech/gateway/common/audit/AuditRecord.ipAddress Ljava/lang/String;
      // 0a6: ifnull 0bb
      // 0a9: aload 1
      // 0aa: aload 0
      // 0ab: getfield com/l7tech/gateway/common/audit/AuditRecord.ipAddress Ljava/lang/String;
      // 0ae: invokevirtual java/lang/String.getBytes ()[B
      // 0b1: invokevirtual java/io/OutputStream.write ([B)V
      // 0b4: goto 0bb
      // 0b7: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0ba: athrow
      // 0bb: aload 1
      // 0bc: ldc ":"
      // 0be: invokevirtual java/lang/String.getBytes ()[B
      // 0c1: invokevirtual java/io/OutputStream.write ([B)V
      // 0c4: aload 0
      // 0c5: getfield com/l7tech/gateway/common/audit/AuditRecord.userName Ljava/lang/String;
      // 0c8: ifnull 0dd
      // 0cb: aload 1
      // 0cc: aload 0
      // 0cd: getfield com/l7tech/gateway/common/audit/AuditRecord.userName Ljava/lang/String;
      // 0d0: invokevirtual java/lang/String.getBytes ()[B
      // 0d3: invokevirtual java/io/OutputStream.write ([B)V
      // 0d6: goto 0dd
      // 0d9: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0dc: athrow
      // 0dd: aload 1
      // 0de: ldc ":"
      // 0e0: invokevirtual java/lang/String.getBytes ()[B
      // 0e3: invokevirtual java/io/OutputStream.write ([B)V
      // 0e6: aload 0
      // 0e7: getfield com/l7tech/gateway/common/audit/AuditRecord.userId Ljava/lang/String;
      // 0ea: ifnull 13e
      // 0ed: iload 3
      // 0ee: ifeq 133
      // 0f1: goto 0f8
      // 0f4: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0f7: athrow
      // 0f8: aload 0
      // 0f9: getfield com/l7tech/gateway/common/audit/AuditRecord.userId Ljava/lang/String;
      // 0fc: bipush 0
      // 0fd: invokestatic com/l7tech/util/ValidationUtils.isValidGoid (Ljava/lang/String;Z)Z
      // 100: ifeq 125
      // 103: goto 10a
      // 106: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 109: athrow
      // 10a: aload 1
      // 10b: aload 0
      // 10c: getfield com/l7tech/gateway/common/audit/AuditRecord.userId Ljava/lang/String;
      // 10f: invokestatic com/l7tech/objectmodel/Goid.parseGoid (Ljava/lang/String;)Lcom/l7tech/objectmodel/Goid;
      // 112: invokevirtual com/l7tech/objectmodel/Goid.getLow ()J
      // 115: invokestatic java/lang/Long.toString (J)Ljava/lang/String;
      // 118: invokevirtual java/lang/String.getBytes ()[B
      // 11b: invokevirtual java/io/OutputStream.write ([B)V
      // 11e: goto 13e
      // 121: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 124: athrow
      // 125: aload 1
      // 126: aload 0
      // 127: getfield com/l7tech/gateway/common/audit/AuditRecord.userId Ljava/lang/String;
      // 12a: invokevirtual java/lang/String.getBytes ()[B
      // 12d: invokevirtual java/io/OutputStream.write ([B)V
      // 130: goto 13e
      // 133: aload 1
      // 134: aload 0
      // 135: getfield com/l7tech/gateway/common/audit/AuditRecord.userId Ljava/lang/String;
      // 138: invokevirtual java/lang/String.getBytes ()[B
      // 13b: invokevirtual java/io/OutputStream.write ([B)V
      // 13e: aload 1
      // 13f: ldc ":"
      // 141: invokevirtual java/lang/String.getBytes ()[B
      // 144: invokevirtual java/io/OutputStream.write ([B)V
      // 147: aload 0
      // 148: getfield com/l7tech/gateway/common/audit/AuditRecord.identityProviderGoid Lcom/l7tech/objectmodel/Goid;
      // 14b: ifnull 17e
      // 14e: aload 1
      // 14f: iload 3
      // 150: ifeq 16e
      // 153: goto 15a
      // 156: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 159: athrow
      // 15a: aload 0
      // 15b: getfield com/l7tech/gateway/common/audit/AuditRecord.identityProviderGoid Lcom/l7tech/objectmodel/Goid;
      // 15e: invokevirtual com/l7tech/objectmodel/Goid.getLow ()J
      // 161: invokestatic java/lang/Long.toString (J)Ljava/lang/String;
      // 164: invokevirtual java/lang/String.getBytes ()[B
      // 167: goto 178
      // 16a: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 16d: athrow
      // 16e: aload 0
      // 16f: getfield com/l7tech/gateway/common/audit/AuditRecord.identityProviderGoid Lcom/l7tech/objectmodel/Goid;
      // 172: invokestatic com/l7tech/objectmodel/Goid.toString (Lcom/l7tech/objectmodel/Goid;)Ljava/lang/String;
      // 175: invokevirtual java/lang/String.getBytes ()[B
      // 178: invokevirtual java/io/OutputStream.write ([B)V
      // 17b: goto 196
      // 17e: iload 3
      // 17f: ifeq 196
      // 182: aload 1
      // 183: ldc2_w -1
      // 186: invokestatic java/lang/Long.toString (J)Ljava/lang/String;
      // 189: invokevirtual java/lang/String.getBytes ()[B
      // 18c: invokevirtual java/io/OutputStream.write ([B)V
      // 18f: goto 196
      // 192: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 195: athrow
      // 196: aload 1
      // 197: ldc ":"
      // 199: invokevirtual java/lang/String.getBytes ()[B
      // 19c: invokevirtual java/io/OutputStream.write ([B)V
      // 19f: aload 0
      // 1a0: aload 1
      // 1a1: iload 2
      // 1a2: iload 3
      // 1a3: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.serializeOtherProperties (Ljava/io/OutputStream;ZZ)V
      // 1a6: aload 0
      // 1a7: getfield com/l7tech/gateway/common/audit/AuditRecord.details Ljava/util/Set;
      // 1aa: ifnull 227
      // 1ad: aload 0
      // 1ae: getfield com/l7tech/gateway/common/audit/AuditRecord.details Ljava/util/Set;
      // 1b1: invokeinterface java/util/Set.size ()I 1
      // 1b6: ifle 227
      // 1b9: goto 1c0
      // 1bc: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1bf: athrow
      // 1c0: new java/util/ArrayList
      // 1c3: dup
      // 1c4: aload 0
      // 1c5: getfield com/l7tech/gateway/common/audit/AuditRecord.details Ljava/util/Set;
      // 1c8: invokespecial java/util/ArrayList.<init> (Ljava/util/Collection;)V
      // 1cb: astore 4
      // 1cd: aload 4
      // 1cf: invokestatic java/util/Collections.sort (Ljava/util/List;)V
      // 1d2: aload 1
      // 1d3: ldc "["
      // 1d5: invokevirtual java/lang/String.getBytes ()[B
      // 1d8: invokevirtual java/io/OutputStream.write ([B)V
      // 1db: aload 4
      // 1dd: invokeinterface java/util/List.iterator ()Ljava/util/Iterator; 1
      // 1e2: astore 5
      // 1e4: aload 5
      // 1e6: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 1eb: ifeq 21e
      // 1ee: aload 5
      // 1f0: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 1f5: checkcast com/l7tech/gateway/common/audit/AuditDetail
      // 1f8: astore 6
      // 1fa: aload 6
      // 1fc: aload 1
      // 1fd: iload 3
      // 1fe: invokevirtual com/l7tech/gateway/common/audit/AuditDetail.serializeSignableProperties (Ljava/io/OutputStream;Z)V
      // 201: aload 5
      // 203: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 208: ifeq 21b
      // 20b: aload 1
      // 20c: ldc ","
      // 20e: invokevirtual java/lang/String.getBytes ()[B
      // 211: invokevirtual java/io/OutputStream.write ([B)V
      // 214: goto 21b
      // 217: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 21a: athrow
      // 21b: goto 1e4
      // 21e: aload 1
      // 21f: ldc "]"
      // 221: invokevirtual java/lang/String.getBytes ()[B
      // 224: invokevirtual java/io/OutputStream.write ([B)V
      // 227: return
      // try (0 -> 8): 9 java/io/IOException
      // try (11 -> 34): 35 java/io/IOException
      // try (37 -> 49): 50 java/io/IOException
      // try (52 -> 64): 65 java/io/IOException
      // try (67 -> 79): 80 java/io/IOException
      // try (82 -> 94): 95 java/io/IOException
      // try (97 -> 106): 107 java/io/IOException
      // try (104 -> 114): 115 java/io/IOException
      // try (109 -> 126): 126 java/io/IOException
      // try (139 -> 149): 150 java/io/IOException
      // try (146 -> 158): 158 java/io/IOException
      // try (166 -> 173): 174 java/io/IOException
      // try (176 -> 192): 193 java/io/IOException
      // try (217 -> 228): 229 java/io/IOException
   }

   @Override
   public String toString() {
      ByteArrayOutputStream var1 = new ByteArrayOutputStream();

      try {
         this.outputProperties(var1, false, false);
      } catch (IOException var3) {
         return super.toString();
      }

      return var1.toString();
   }

   @Column(name = "signature")
   public String getSignature() {
      return this.signature;
   }

   public void setSignature(String var1) {
      this.signature = var1;
   }

   public byte[] computeOldIdSignatureDigest() {
      MessageDigest var1;
      try {
         String[] var11 = a;
         var1 = MessageDigest.getInstance(var11[2]);
      } catch (NoSuchAlgorithmException var10) {
         String[] var6 = a;
         throw new RuntimeException(var6[8], var10);
      }

      byte[] var2 = null;

      try (ByteArrayOutputStream var3 = new ByteArrayOutputStream()) {
         this.serializeSignableProperties(var3, true);
         var2 = var1.digest(var3.toByteArray());
      } catch (IOException var9) {
         logger.log(Level.WARNING, a[4], var9);
      }

      return var2;
   }

   // $VF: Could not verify finally blocks. A semaphore variable has been added to preserve control flow.
   // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
   public byte[] computeSignatureDigest() {
      ByteArrayOutputStream var1 = new ByteArrayOutputStream();

      MessageDigest var2;
      try {
         String[] var21 = a;
         var2 = MessageDigest.getInstance(var21[7]);
      } catch (NoSuchAlgorithmException var18) {
         String[] var7 = a;
         throw new RuntimeException(var7[3], var18);
      }

      byte[] var3 = null;
      boolean var14 = false /* VF: Semaphore variable */;

      label75: {
         try {
            var14 = true;
            this.serializeSignableProperties(var1, false);
            var3 = var2.digest(var1.toByteArray());
            var14 = false;
            break label75;
         } catch (IOException var19) {
            String[] var22 = a;
            logger.log(Level.WARNING, var22[1], var19);
            var14 = false;
         } finally {
            if (var14) {
               try {
                  var1.close();
               } catch (IOException var15) {
                  logger.log(Level.WARNING, a[6], var15);
               }
            }
         }

         try {
            var1.close();
         } catch (IOException var16) {
            String[] var23 = a;
            logger.log(Level.WARNING, var23[6], var16);
         }

         return var3;
      }

      try {
         var1.close();
      } catch (IOException var17) {
         String[] var24 = a;
         logger.log(Level.WARNING, var24[0], var17);
      }

      return var3;
   }

   @Override
   public boolean equals(Object param1) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: aload 0
      // 02: if_acmpne 0b
      // 05: bipush 1
      // 06: ireturn
      // 07: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0a: athrow
      // 0b: aload 1
      // 0c: instanceof com/l7tech/gateway/common/audit/AuditRecord
      // 0f: ifne 18
      // 12: bipush 0
      // 13: ireturn
      // 14: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 17: athrow
      // 18: aload 1
      // 19: checkcast com/l7tech/gateway/common/audit/AuditRecord
      // 1c: astore 2
      // 1d: aload 0
      // 1e: getfield com/l7tech/gateway/common/audit/AuditRecord.nodeId Ljava/lang/String;
      // 21: ifnull 3f
      // 24: aload 0
      // 25: getfield com/l7tech/gateway/common/audit/AuditRecord.nodeId Ljava/lang/String;
      // 28: aload 2
      // 29: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getNodeId ()Ljava/lang/String;
      // 2c: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 2f: ifne 3f
      // 32: goto 39
      // 35: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 38: athrow
      // 39: bipush 0
      // 3a: ireturn
      // 3b: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3e: athrow
      // 3f: aload 0
      // 40: getfield com/l7tech/gateway/common/audit/AuditRecord.requestId Ljava/lang/String;
      // 43: ifnull 61
      // 46: aload 0
      // 47: getfield com/l7tech/gateway/common/audit/AuditRecord.requestId Ljava/lang/String;
      // 4a: aload 2
      // 4b: invokevirtual com/l7tech/gateway/common/audit/AuditRecord.getStrRequestId ()Ljava/lang/String;
      // 4e: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 51: ifne 61
      // 54: goto 5b
      // 57: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5a: athrow
      // 5b: bipush 0
      // 5c: ireturn
      // 5d: invokestatic com/l7tech/gateway/common/audit/AuditRecord.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 60: athrow
      // 61: bipush 1
      // 62: ireturn
      // try (0 -> 5): 5 java/lang/RuntimeException
      // try (7 -> 12): 12 java/lang/RuntimeException
      // try (17 -> 26): 27 java/lang/RuntimeException
      // try (20 -> 31): 31 java/lang/RuntimeException
      // try (33 -> 42): 43 java/lang/RuntimeException
      // try (36 -> 47): 47 java/lang/RuntimeException
   }

   @Override
   public int hashCode() {
      int var10000;
      label30: {
         try {
            if (this.requestId != null) {
               var10000 = this.requestId.hashCode();
               break label30;
            }
         } catch (RuntimeException var3) {
            throw a(var3);
         }

         var10000 = 0;
      }

      int var1 = var10000;

      try {
         var10000 = 31 * var1;
         if (this.nodeId != null) {
            return var10000 + this.nodeId.hashCode();
         }
      } catch (RuntimeException var2) {
         throw a(var2);
      }

      return var10000 + 0;
   }

   @Transient
   public AuditRecord.MessageSummaryAuditStatus getMessageSummaryAuditStatus() {
      return this.messageSummaryAuditStatus;
   }

   public void setFooterAuditStatus(AuditRecord.MessageSummaryAuditStatus var1) {
      this.messageSummaryAuditStatus = var1;
   }

   @Transient
   public String getLoggerName() {
      return a[5];
   }

   static {
      String[] var5 = new String[9];
      int var3 = 0;
      String var2 = "thPL\u001a+\n}uQJ\u0006lIbnPF\tf ruWO\f+\u0007~n\u0002P\ry\u0000pvKY\r+\bd~KWHy\fruPG\u0007BRc\u000e]:[\u0011brMV\u0004oI\u007fuV\u0003\u0000j\u0019a\u007fL ruWO\f+\u0007~n\u0002P\ry\u0000pvKY\r+\bd~KWHy\fruPG\u0011ruO\r\u0004<\u001dtyJ\r\u001bn\u001bg\u007fP\u0014thPL\u001a+\n}uQJ\u0006lIbnPF\tf";
      int var4 = "thPL\u001a+\n}uQJ\u0006lIbnPF\tf ruWO\f+\u0007~n\u0002P\ry\u0000pvKY\r+\bd~KWHy\fruPG\u0007BRc\u000e]:[\u0011brMV\u0004oI\u007fuV\u0003\u0000j\u0019a\u007fL ruWO\f+\u0007~n\u0002P\ry\u0000pvKY\r+\bd~KWHy\fruPG\u0011ruO\r\u0004<\u001dtyJ\r\u001bn\u001bg\u007fP\u0014thPL\u001a+\n}uQJ\u0006lIbnPF\tf"
         .length();
      char var1 = 20;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 56;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = a(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     a = var5;
                     logger = Logger.getLogger(AuditRecord.class.getName());
                     globalSequenceNumber = new AtomicLong(0L);
                     COMPARE_BY_ORDINAL = new b();
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "\u001b\u000b:W\u0004c\u0002\u0011;+\u0014\u000f]6\u0010&,\u000fZY3@8&\u0015";
                  var4 = "\u001b\u000b:W\u0004c\u0002\u0011;+\u0014\u000f]6\u0010&,\u000fZY3@8&\u0015".length();
                  var1 = 7;
                  var7 = -1;
            }

            var10000 = 97;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static Exception a(Exception var0) {
      return var0;
   }

   private static char[] a(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 81);
      }

      return var10000;
   }

   private static String a(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 41;
            case 1 -> 34;
            case 2 -> 26;
            case 3 -> 27;
            case 4 -> 80;
            case 5 -> 51;
            default -> 81;
         });
      }

      return new String(var10001).intern();
   }

   public enum MessageSummaryAuditStatus {
      MESSAGE_PROCESSED_SUCCESSFULLY,
      MESSAGE_WAS_NOT_PROCESSED,
      MESSAGE_PROCESSED_WITH_HTTP_ERROR_CODE;

      // $VF: Failed to inline enum fields
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      static {
         String[] var0 = new String[3];
         int var4 = 0;
         String var3 = "\nL\f\u000b]{\u0005\u0018^\u001e\u000bCr\u000f\u0013V\u000f\nS\u007f\u0005\u0014Z\u001a\u001c&\nL\f\u000b]{\u0005\u0018Y\r\u0017_y\u0013\u0014L\u001b\u0007Ku\u0014\u000fV\u0017\fHl\u001f\u0002[\r\u0017Nc\u0003\bM\u001a\u001e\nL\f\u000b]{\u0005\u0018Y\r\u0017_y\u0013\u0014L\u001b\u0007Oi\u0003\u0004L\f\u000bZi\f\u000bP";
         int var5 = "\nL\f\u000b]{\u0005\u0018^\u001e\u000bCr\u000f\u0013V\u000f\nS\u007f\u0005\u0014Z\u001a\u001c&\nL\f\u000b]{\u0005\u0018Y\r\u0017_y\u0013\u0014L\u001b\u0007Ku\u0014\u000fV\u0017\fHl\u001f\u0002[\r\u0017Nc\u0003\bM\u001a\u001e\nL\f\u000b]{\u0005\u0018Y\r\u0017_y\u0013\u0014L\u001b\u0007Oi\u0003\u0004L\f\u000bZi\f\u000bP"
            .length();
         char var2 = 25;
         int var1 = -1;

         while (true) {
            String var10002 = a(110, a(var3.substring(++var1, var1 + var2)));
            byte var10001 = -1;
            var0[var4++] = var10002;
            if ((var1 += var2) >= var5) {
               MESSAGE_PROCESSED_SUCCESSFULLY = new AuditRecord.MessageSummaryAuditStatus();
               MESSAGE_WAS_NOT_PROCESSED = new AuditRecord.MessageSummaryAuditStatus();
               MESSAGE_PROCESSED_WITH_HTTP_ERROR_CODE = new AuditRecord.MessageSummaryAuditStatus();
               return;
            }

            var2 = var3.charAt(var1);
         }
      }

      private static char[] a(String var0) {
         char[] var10000 = var0.toCharArray();
         if (var10000.length < 2) {
            var10000[0] = (char)(var10000[0] ^ 46);
         }

         return var10000;
      }

      private static String a(int var0, char[] var1) {
         int var10003 = var1.length;
         int var10002 = var0;
         char[] var10001 = var1;
         int var10000 = var10003;

         for (int var2 = 0; var10000 > var2; var2++) {
            var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
               case 0 -> 41;
               case 1 -> 103;
               case 2 -> 49;
               case 3 -> 54;
               case 4 -> 114;
               case 5 -> 82;
               default -> 46;
            });
         }

         return new String(var10001).intern();
      }
   }
}
