package com.l7tech.gateway.common;

import com.l7tech.common.io.CertUtils;
import com.l7tech.common.io.XmlUtil;
import com.l7tech.gateway.common.licensing.FeatureSetExpander;
import com.l7tech.security.xml.DsigUtil;
import com.l7tech.security.xml.DsigValidity;
import com.l7tech.security.xml.SimpleSecurityTokenResolver;
import com.l7tech.security.xml.SignatureValidityContext.Builder;
import com.l7tech.util.DateUtils;
import com.l7tech.util.DomUtils;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.ISO8601Date;
import com.l7tech.util.TooManyChildElementsException;
import java.io.Serializable;
import java.security.SignatureException;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

public final class License implements Serializable {
   public static final String LIC_NS;
   private final String licenseXml;
   private final long id;
   private final boolean validSignature;
   private final X509Certificate trustedIssuer;
   private final Date startDate;
   private final long startDateUt;
   private final Date expiryDate;
   private final long expiryDateUt;
   private final String description;
   private final String licenseeName;
   private final String licenseeContactEmail;
   private final String eulaText;
   private final Set<String> allEnabledFeatures;
   private final Set<String> attributes;
   private final License.LicenseGrants g;
   static final long serialVersionUID = -3619753555239575331L;
   private static final String[] a;

   public License(String var1, X509Certificate[] var2, FeatureSetExpander var3) throws SAXException, ParseException, TooManyChildElementsException, SignatureException, InvalidLicenseException {
      if (var1 == null) {
         String[] var41 = a;
         throw new NullPointerException(var41[13]);
      }

      Document var4 = XmlUtil.stringToDocument(var1);
      DomUtils.stripWhitespace(var4.getDocumentElement());
      Element var5 = var4.getDocumentElement();

      try {
         if (var5 == null) {
            throw new NullPointerException();
         }
      } catch (NumberFormatException var33) {
         throw a(var33);
      }

      try {
         if (!a[24].equals(var5.getNamespaceURI())) {
            throw new InvalidLicenseException(a[3]);
         }
      } catch (NumberFormatException var23) {
         throw a(var23);
      }

      try {
         if (!a[33].equals(var5.getLocalName())) {
            throw new InvalidLicenseException(a[6]);
         }
      } catch (NumberFormatException var32) {
         throw a(var32);
      }

      this.licenseXml = var1;

      try {
         String[] var35 = a;
         this.id = Long.parseLong(var5.getAttribute(var35[42]));
         if (this.id < 1L) {
            throw new InvalidLicenseException(var35[32]);
         }
      } catch (NumberFormatException var22) {
         String[] var20 = a;
         throw new InvalidLicenseException(var20[37]);
      }

      License var10000;
      long var10001;
      label156: {
         try {
            this.startDate = this.parseDateElement(var4, a[14]);
            var10000 = this;
            if (this.startDate != null) {
               var10001 = this.startDate.getTime();
               break label156;
            }
         } catch (NumberFormatException var31) {
            throw a(var31);
         }

         var10001 = Long.MIN_VALUE;
      }

      label149: {
         try {
            var10000.startDateUt = var10001;
            this.expiryDate = this.parseDateElement(var4, a[31]);
            var10000 = this;
            if (this.expiryDate != null) {
               var10001 = this.expiryDate.getTime();
               break label149;
            }
         } catch (NumberFormatException var30) {
            throw a(var30);
         }

         var10001 = Long.MAX_VALUE;
      }

      var10000.expiryDateUt = var10001;
      String[] var36 = a;
      String var6 = this.parseWildcardStringElement(var4, var36[10]);

      label141: {
         try {
            var10000 = this;
            if ("*".equals(var6)) {
               var47 = null;
               break label141;
            }
         } catch (NumberFormatException var29) {
            throw a(var29);
         }

         var47 = var6;
      }

      var10000.description = var47;
      var36 = a;
      this.attributes = Collections.unmodifiableSet(this.parseWildcardStringLicenseAttributes(var4, var36[4], var36[15]));
      String var7 = this.parseWildcardStringAttribute(var4, var36[41], var36[5]);
      String var8 = this.parseWildcardStringAttribute(var4, var36[38], var36[39]);
      String var9 = this.parseWildcardStringAttribute(var4, var36[9], var36[44]);
      String var10 = this.parseWildcardStringAttribute(var4, var36[18], var36[22], var36[29]);
      String var11 = this.parseWildcardStringAttribute(var4, var36[18], var36[21], var36[0]);
      String var12 = this.parseSimpleText(var4, var36[19]);
      this.eulaText = this.parseEulaText(var4);
      HashSet var13 = new HashSet();

      label133: {
         try {
            this.collectFeatureSets(var4, var36[18], var36[20], var13);
            var10000 = this;
            if (var3 == null) {
               var48 = var13;
               break label133;
            }
         } catch (NumberFormatException var28) {
            throw a(var28);
         }

         var48 = var3.getAllEnabledFeatures(var13);
      }

      var10000.allEnabledFeatures = Collections.unmodifiableSet(var48);
      this.g = new License.LicenseGrants(var7, var8, var9, var10, var11, var13.toArray(new String[var13.size()]), var12);
      var36 = a;
      this.licenseeName = this.parseWildcardStringAttribute(var4, var36[45], var36[44]);
      this.requireValue(var36[46], this.licenseeName);
      String var14 = this.parseWildcardStringAttribute(var4, var36[27], var36[25]);

      label125: {
         try {
            var10000 = this;
            if ("*".equals(var14)) {
               var49 = null;
               break label125;
            }
         } catch (NumberFormatException var27) {
            throw a(var27);
         }

         var49 = var14;
      }

      var10000.licenseeContactEmail = var49;
      var36 = a;
      Element var15 = DomUtils.findOnlyOneChildElementByName(var5, DsigUtil.DIGSIG_URI, var36[1]);

      label176: {
         try {
            if (var15 == null || var2 == null) {
               break label176;
            }
         } catch (NumberFormatException var26) {
            throw a(var26);
         }

         X509Certificate var16;
         try {
            var16 = DsigUtil.getSigningCertFromKeyInfo(DsigUtil.searchForKeyInfo(var15), new SimpleSecurityTokenResolver(var2));
         } catch (CertificateEncodingException var21) {
            String var10002 = ExceptionUtils.getMessage(var21);
            var36 = a;
            throw new SignatureException(var36[23] + var10002, var21);
         }

         X509Certificate var17 = null;

         for (int var18 = 0; var18 < var2.length; var18++) {
            X509Certificate var19 = var2[var18];
            if (CertUtils.certsAreEqual(var19, var16)) {
               var17 = var19;
               break;
            }
         }

         try {
            if (var17 == null) {
               throw new SignatureException(a[30]);
            }
         } catch (NumberFormatException var25) {
            throw a(var25);
         }

         DsigValidity var34 = new Builder(var15, var17.getPublicKey()).build().verify();

         try {
            if (!var34.getCoreValidity()) {
               throw new SignatureException(a[35]);
            }

            this.validSignature = true;
            this.trustedIssuer = var17;
            return;
         } catch (NumberFormatException var24) {
            throw a(var24);
         }
      }

      this.validSignature = false;
      this.trustedIssuer = null;
   }

   private Set<String> parseWildcardStringLicenseAttributes(Document var1, String var2, String var3) throws TooManyChildElementsException {
      HashSet var4 = new HashSet();
      Element var5 = var1.getDocumentElement();
      Element var6 = DomUtils.findOnlyOneChildElementByName(var5, var5.getNamespaceURI(), var2);

      try {
         if (var6 == null) {
            return var4;
         }
      } catch (TooManyChildElementsException var11) {
         throw a(var11);
      }

      for (Element var9 : DomUtils.findChildElementsByName(var6, var6.getNamespaceURI(), var3)) {
         try {
            if (var9 != null) {
               var4.add(DomUtils.getTextValue(var9));
            }
         } catch (TooManyChildElementsException var10) {
            throw a(var10);
         }
      }

      return var4;
   }

   public Set<String> getAttributes() {
      return this.attributes;
   }

   private String parseEulaText(Document param1) throws TooManyChildElementsException, InvalidLicenseException {
      // $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: aload 1
      // 02: getstatic com/l7tech/gateway/common/License.a [Ljava/lang/String;
      // 05: astore 4
      // 07: aload 4
      // 09: bipush 8
      // 0b: aaload
      // 0c: invokevirtual com/l7tech/gateway/common/License.parseWildcardStringElement (Lorg/w3c/dom/Document;Ljava/lang/String;)Ljava/lang/String;
      // 0f: astore 2
      // 10: ldc "*"
      // 12: aload 2
      // 13: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 16: ifeq 1b
      // 19: aconst_null
      // 1a: astore 2
      // 1b: aload 2
      // 1c: ifnull 59
      // 1f: aload 2
      // 20: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 23: invokevirtual java/lang/String.length ()I
      // 26: ifle 59
      // 29: goto 30
      // 2c: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2f: athrow
      // 30: new java/lang/String
      // 33: dup
      // 34: aload 2
      // 35: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 38: bipush 1
      // 39: invokestatic com/l7tech/util/HexUtils.decodeBase64 (Ljava/lang/String;Z)[B
      // 3c: invokestatic com/l7tech/util/IOUtils.uncompressGzip ([B)[B
      // 3f: getstatic com/l7tech/util/Charsets.UTF8 Ljava/nio/charset/Charset;
      // 42: invokespecial java/lang/String.<init> ([BLjava/nio/charset/Charset;)V
      // 45: astore 2
      // 46: goto 59
      // 49: astore 3
      // 4a: new com/l7tech/gateway/common/InvalidLicenseException
      // 4d: dup
      // 4e: getstatic com/l7tech/gateway/common/License.a [Ljava/lang/String;
      // 51: bipush 26
      // 53: aaload
      // 54: aload 3
      // 55: invokespecial com/l7tech/gateway/common/InvalidLicenseException.<init> (Ljava/lang/String;Ljava/lang/Throwable;)V
      // 58: athrow
      // 59: aload 2
      // 5a: ifnull 73
      // 5d: aload 2
      // 5e: invokevirtual java/lang/String.length ()I
      // 61: ifle 73
      // 64: goto 6b
      // 67: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 6a: athrow
      // 6b: aload 2
      // 6c: goto 74
      // 6f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 72: athrow
      // 73: aconst_null
      // 74: astore 2
      // 75: aload 2
      // 76: areturn
      // try (15 -> 21): 22 java/io/IOException
      // try (24 -> 34): 35 java/io/IOException
      // try (44 -> 49): 50 java/io/IOException
      // try (46 -> 54): 54 java/io/IOException
   }

   private String parseSimpleText(Document param1, String param2) throws TooManyChildElementsException {
      // $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: invokeinterface org/w3c/dom/Document.getDocumentElement ()Lorg/w3c/dom/Element; 1
      // 06: astore 3
      // 07: aload 3
      // 08: aload 3
      // 09: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 0e: aload 2
      // 0f: invokestatic com/l7tech/util/DomUtils.findOnlyOneChildElementByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;
      // 12: astore 4
      // 14: aload 4
      // 16: ifnonnull 1f
      // 19: aconst_null
      // 1a: areturn
      // 1b: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1e: athrow
      // 1f: aload 4
      // 21: invokestatic com/l7tech/util/DomUtils.getTextValue (Lorg/w3c/dom/Element;)Ljava/lang/String;
      // 24: astore 5
      // 26: aload 5
      // 28: ifnull 3b
      // 2b: aload 5
      // 2d: invokevirtual java/lang/String.length ()I
      // 30: bipush 1
      // 31: if_icmpge 41
      // 34: goto 3b
      // 37: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3a: athrow
      // 3b: aconst_null
      // 3c: areturn
      // 3d: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 40: athrow
      // 41: aload 5
      // 43: areturn
      // try (9 -> 13): 13 com/l7tech/util/TooManyChildElementsException
      // try (18 -> 24): 25 com/l7tech/util/TooManyChildElementsException
      // try (20 -> 29): 29 com/l7tech/util/TooManyChildElementsException
   }

   private int collectFeatureSets(Document param1, String param2, String param3, Set param4) throws InvalidLicenseException, TooManyChildElementsException {
      // $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: invokeinterface org/w3c/dom/Document.getDocumentElement ()Lorg/w3c/dom/Element; 1
      // 06: astore 5
      // 08: aload 5
      // 0a: aload 5
      // 0c: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 11: aload 2
      // 12: invokestatic com/l7tech/util/DomUtils.findOnlyOneChildElementByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;
      // 15: astore 6
      // 17: aload 6
      // 19: ifnonnull 2e
      // 1c: new com/l7tech/gateway/common/InvalidLicenseException
      // 1f: dup
      // 20: getstatic com/l7tech/gateway/common/License.a [Ljava/lang/String;
      // 23: bipush 11
      // 25: aaload
      // 26: invokespecial com/l7tech/gateway/common/InvalidLicenseException.<init> (Ljava/lang/String;)V
      // 29: athrow
      // 2a: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2d: athrow
      // 2e: aload 6
      // 30: aload 5
      // 32: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 37: aload 3
      // 38: invokestatic com/l7tech/util/DomUtils.findChildElementsByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
      // 3b: astore 7
      // 3d: aload 7
      // 3f: ifnull 53
      // 42: aload 7
      // 44: invokeinterface java/util/List.isEmpty ()Z 1
      // 49: ifeq 59
      // 4c: goto 53
      // 4f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 52: athrow
      // 53: bipush 0
      // 54: ireturn
      // 55: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 58: athrow
      // 59: bipush 0
      // 5a: istore 8
      // 5c: aload 7
      // 5e: invokeinterface java/util/List.iterator ()Ljava/util/Iterator; 1
      // 63: astore 9
      // 65: aload 9
      // 67: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 6c: ifeq c8
      // 6f: aload 9
      // 71: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 76: checkcast org/w3c/dom/Element
      // 79: astore 10
      // 7b: aload 10
      // 7d: getstatic com/l7tech/gateway/common/License.a [Ljava/lang/String;
      // 80: astore 12
      // 82: aload 12
      // 84: bipush 44
      // 86: aaload
      // 87: invokeinterface org/w3c/dom/Element.getAttribute (Ljava/lang/String;)Ljava/lang/String; 2
      // 8c: astore 11
      // 8e: aload 11
      // 90: ifnull a6
      // 93: aload 11
      // 95: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 98: invokevirtual java/lang/String.length ()I
      // 9b: bipush 1
      // 9c: if_icmpge b8
      // 9f: goto a6
      // a2: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // a5: athrow
      // a6: new com/l7tech/gateway/common/InvalidLicenseException
      // a9: dup
      // aa: getstatic com/l7tech/gateway/common/License.a [Ljava/lang/String;
      // ad: bipush 17
      // af: aaload
      // b0: invokespecial com/l7tech/gateway/common/InvalidLicenseException.<init> (Ljava/lang/String;)V
      // b3: athrow
      // b4: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // b7: athrow
      // b8: aload 4
      // ba: aload 11
      // bc: invokeinterface java/util/Set.add (Ljava/lang/Object;)Z 2
      // c1: pop
      // c2: iinc 8 1
      // c5: goto 65
      // c8: iload 8
      // ca: ireturn
      // try (9 -> 18): 18 com/l7tech/gateway/common/InvalidLicenseException
      // try (26 -> 31): 32 com/l7tech/gateway/common/InvalidLicenseException
      // try (28 -> 36): 36 com/l7tech/gateway/common/InvalidLicenseException
      // try (58 -> 65): 66 com/l7tech/gateway/common/InvalidLicenseException
      // try (60 -> 75): 75 com/l7tech/gateway/common/InvalidLicenseException
   }

   private void requireValue(String param1, String param2) throws InvalidLicenseException {
      // $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 2
      // 01: ifnull 23
      // 04: aload 2
      // 05: invokevirtual java/lang/String.length ()I
      // 08: bipush 1
      // 09: if_icmplt 23
      // 0c: goto 13
      // 0f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 12: athrow
      // 13: ldc "*"
      // 15: aload 2
      // 16: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 19: ifeq 3e
      // 1c: goto 23
      // 1f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 22: athrow
      // 23: new com/l7tech/gateway/common/InvalidLicenseException
      // 26: dup
      // 27: aload 1
      // 28: getstatic com/l7tech/gateway/common/License.a [Ljava/lang/String;
      // 2b: bipush 40
      // 2d: aaload
      // 2e: swap
      // 2f: ldc "'"
      // 31: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 36: invokespecial com/l7tech/gateway/common/InvalidLicenseException.<init> (Ljava/lang/String;)V
      // 39: athrow
      // 3a: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3d: athrow
      // 3e: return
      // try (0 -> 6): 7 com/l7tech/gateway/common/InvalidLicenseException
      // try (2 -> 13): 14 com/l7tech/gateway/common/InvalidLicenseException
      // try (9 -> 27): 27 com/l7tech/gateway/common/InvalidLicenseException
   }

   private String parseWildcardStringElement(Document param1, String param2) throws TooManyChildElementsException {
      // $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: invokeinterface org/w3c/dom/Document.getDocumentElement ()Lorg/w3c/dom/Element; 1
      // 06: astore 3
      // 07: aload 3
      // 08: aload 3
      // 09: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 0e: aload 2
      // 0f: invokestatic com/l7tech/util/DomUtils.findOnlyOneChildElementByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;
      // 12: astore 4
      // 14: aload 4
      // 16: ifnonnull 20
      // 19: ldc "*"
      // 1b: areturn
      // 1c: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1f: athrow
      // 20: aload 4
      // 22: invokestatic com/l7tech/util/DomUtils.getTextValue (Lorg/w3c/dom/Element;)Ljava/lang/String;
      // 25: astore 5
      // 27: aload 5
      // 29: ifnull 3c
      // 2c: aload 5
      // 2e: invokevirtual java/lang/String.length ()I
      // 31: bipush 1
      // 32: if_icmpge 43
      // 35: goto 3c
      // 38: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3b: athrow
      // 3c: ldc "*"
      // 3e: areturn
      // 3f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 42: athrow
      // 43: aload 5
      // 45: areturn
      // try (9 -> 13): 13 com/l7tech/util/TooManyChildElementsException
      // try (18 -> 24): 25 com/l7tech/util/TooManyChildElementsException
      // try (20 -> 29): 29 com/l7tech/util/TooManyChildElementsException
   }

   private String parseWildcardStringAttribute(Document param1, String param2, String param3) throws TooManyChildElementsException {
      // $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: invokeinterface org/w3c/dom/Document.getDocumentElement ()Lorg/w3c/dom/Element; 1
      // 06: astore 4
      // 08: aload 4
      // 0a: aload 4
      // 0c: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 11: aload 2
      // 12: invokestatic com/l7tech/util/DomUtils.findOnlyOneChildElementByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;
      // 15: astore 5
      // 17: aload 5
      // 19: ifnonnull 23
      // 1c: ldc "*"
      // 1e: areturn
      // 1f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 22: athrow
      // 23: aload 5
      // 25: aload 3
      // 26: invokeinterface org/w3c/dom/Element.getAttribute (Ljava/lang/String;)Ljava/lang/String; 2
      // 2b: astore 6
      // 2d: aload 6
      // 2f: ifnull 42
      // 32: aload 6
      // 34: invokevirtual java/lang/String.length ()I
      // 37: bipush 1
      // 38: if_icmpge 49
      // 3b: goto 42
      // 3e: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 41: athrow
      // 42: ldc "*"
      // 44: areturn
      // 45: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 48: athrow
      // 49: aload 6
      // 4b: areturn
      // try (9 -> 13): 13 com/l7tech/util/TooManyChildElementsException
      // try (19 -> 25): 26 com/l7tech/util/TooManyChildElementsException
      // try (21 -> 30): 30 com/l7tech/util/TooManyChildElementsException
   }

   private String parseWildcardStringAttribute(Document param1, String param2, String param3, String param4) throws TooManyChildElementsException {
      // $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: invokeinterface org/w3c/dom/Document.getDocumentElement ()Lorg/w3c/dom/Element; 1
      // 06: astore 5
      // 08: aload 5
      // 0a: aload 5
      // 0c: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 11: aload 2
      // 12: invokestatic com/l7tech/util/DomUtils.findOnlyOneChildElementByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;
      // 15: astore 6
      // 17: aload 6
      // 19: ifnonnull 23
      // 1c: ldc "*"
      // 1e: areturn
      // 1f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 22: athrow
      // 23: aload 6
      // 25: aload 5
      // 27: invokeinterface org/w3c/dom/Element.getNamespaceURI ()Ljava/lang/String; 1
      // 2c: aload 3
      // 2d: invokestatic com/l7tech/util/DomUtils.findOnlyOneChildElementByName (Lorg/w3c/dom/Element;Ljava/lang/String;Ljava/lang/String;)Lorg/w3c/dom/Element;
      // 30: astore 7
      // 32: aload 7
      // 34: ifnonnull 3e
      // 37: ldc "*"
      // 39: areturn
      // 3a: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 3d: athrow
      // 3e: aload 7
      // 40: aload 4
      // 42: invokeinterface org/w3c/dom/Element.getAttribute (Ljava/lang/String;)Ljava/lang/String; 2
      // 47: astore 8
      // 49: aload 8
      // 4b: ifnull 5e
      // 4e: aload 8
      // 50: invokevirtual java/lang/String.length ()I
      // 53: bipush 1
      // 54: if_icmpge 65
      // 57: goto 5e
      // 5a: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5d: athrow
      // 5e: ldc "*"
      // 60: areturn
      // 61: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 64: athrow
      // 65: aload 8
      // 67: areturn
      // try (9 -> 13): 13 com/l7tech/util/TooManyChildElementsException
      // try (21 -> 25): 25 com/l7tech/util/TooManyChildElementsException
      // try (31 -> 37): 38 com/l7tech/util/TooManyChildElementsException
      // try (33 -> 42): 42 com/l7tech/util/TooManyChildElementsException
   }

   private Date parseDateElement(Document var1, String var2) throws ParseException, TooManyChildElementsException {
      Element var3 = var1.getDocumentElement();
      Element var4 = DomUtils.findOnlyOneChildElementByName(var3, var3.getNamespaceURI(), var2);

      try {
         if (var4 == null) {
            return null;
         }
      } catch (ParseException var5) {
         throw a(var5);
      }

      return ISO8601Date.parse(DomUtils.getTextValue(var4));
   }

   public long getId() {
      return this.id;
   }

   public Date getExpiryDate() {
      return this.expiryDate;
   }

   public X509Certificate getTrustedIssuer() {
      return this.trustedIssuer;
   }

   public boolean isValidSignature() {
      return this.validSignature;
   }

   public String getLicenseeContactEmail() {
      return this.licenseeContactEmail;
   }

   public String getLicenseeName() {
      return this.licenseeName;
   }

   public String getDescription() {
      return this.description;
   }

   public Date getStartDate() {
      return this.startDate;
   }

   public String getEulaText() {
      return this.eulaText;
   }

   public String asXml() {
      return this.licenseXml;
   }

   public String getGrants() {
      return this.g.asEnglish();
   }

   public void checkValidity() throws InvalidLicenseException {
      try {
         if (!this.isValidSignature()) {
            throw new InvalidLicenseException(a[36] + this.id + a[43]);
         }
      } catch (InvalidLicenseException var12) {
         throw a(var12);
      }

      long var1 = System.currentTimeMillis();
      if (var1 < this.startDateUt) {
         long var14 = this.id;
         String var15 = String.valueOf(this.startDate);
         String var3 = DateUtils.makeRelativeDateMessage(this.startDate, false);
         String var4 = var15;
         long var5 = var14;
         String[] var13 = a;
         throw new InvalidLicenseException(var13[2] + var5 + var13[16] + var4 + var13[28] + var3 + ")");
      }

      if (var1 > this.expiryDateUt) {
         long var10002 = this.id;
         String var10003 = String.valueOf(this.expiryDate);
         String var7 = DateUtils.makeRelativeDateMessage(this.expiryDate, false);
         String var8 = var10003;
         long var9 = var10002;
         String[] var11 = a;
         throw new InvalidLicenseException(var11[2] + var9 + var11[7] + var8 + var11[28] + var7 + ")");
      }
   }

   public boolean isFeatureEnabled(String var1) {
      return this.allEnabledFeatures.contains(var1);
   }

   public boolean isProductEnabled(String param1, String param2, String param3) {
      // $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: ldc "*"
      // 02: aload 0
      // 03: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 06: getfield com/l7tech/gateway/common/License$LicenseGrants.product Ljava/lang/String;
      // 09: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0c: ifeq 15
      // 0f: bipush 1
      // 10: ireturn
      // 11: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 14: athrow
      // 15: aload 1
      // 16: aload 0
      // 17: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 1a: getfield com/l7tech/gateway/common/License$LicenseGrants.product Ljava/lang/String;
      // 1d: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 20: ifne 29
      // 23: bipush 0
      // 24: ireturn
      // 25: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 28: athrow
      // 29: ldc "*"
      // 2b: aload 0
      // 2c: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 2f: getfield com/l7tech/gateway/common/License$LicenseGrants.versionMajor Ljava/lang/String;
      // 32: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 35: ifne 53
      // 38: aload 2
      // 39: aload 0
      // 3a: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 3d: getfield com/l7tech/gateway/common/License$LicenseGrants.versionMajor Ljava/lang/String;
      // 40: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 43: ifne 53
      // 46: goto 4d
      // 49: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4c: athrow
      // 4d: bipush 0
      // 4e: ireturn
      // 4f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 52: athrow
      // 53: ldc "*"
      // 55: aload 0
      // 56: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 59: getfield com/l7tech/gateway/common/License$LicenseGrants.versionMinor Ljava/lang/String;
      // 5c: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 5f: ifne 7d
      // 62: aload 3
      // 63: aload 0
      // 64: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 67: getfield com/l7tech/gateway/common/License$LicenseGrants.versionMinor Ljava/lang/String;
      // 6a: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 6d: ifne 7d
      // 70: goto 77
      // 73: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 76: athrow
      // 77: bipush 0
      // 78: ireturn
      // 79: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 7c: athrow
      // 7d: bipush 1
      // 7e: ireturn
      // try (0 -> 8): 8 java/lang/NullPointerException
      // try (10 -> 18): 18 java/lang/NullPointerException
      // try (20 -> 32): 33 java/lang/NullPointerException
      // try (26 -> 37): 37 java/lang/NullPointerException
      // try (39 -> 51): 52 java/lang/NullPointerException
      // try (45 -> 56): 56 java/lang/NullPointerException
   }

   public boolean isIpEnabled(String 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: ldc "*"
      // 02: aload 0
      // 03: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 06: getfield com/l7tech/gateway/common/License$LicenseGrants.ip Ljava/lang/String;
      // 09: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0c: ifne 24
      // 0f: aload 1
      // 10: aload 0
      // 11: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 14: getfield com/l7tech/gateway/common/License$LicenseGrants.ip Ljava/lang/String;
      // 17: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 1a: ifeq 2c
      // 1d: goto 24
      // 20: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 23: athrow
      // 24: bipush 1
      // 25: goto 2d
      // 28: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2b: athrow
      // 2c: bipush 0
      // 2d: ireturn
      // try (0 -> 12): 13 java/lang/NullPointerException
      // try (6 -> 17): 17 java/lang/NullPointerException
   }

   public boolean isHostnameEnabled(String 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: ldc "*"
      // 02: aload 0
      // 03: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 06: getfield com/l7tech/gateway/common/License$LicenseGrants.hostname Ljava/lang/String;
      // 09: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0c: ifne 24
      // 0f: aload 1
      // 10: aload 0
      // 11: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 14: getfield com/l7tech/gateway/common/License$LicenseGrants.hostname Ljava/lang/String;
      // 17: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 1a: ifeq 2c
      // 1d: goto 24
      // 20: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 23: athrow
      // 24: bipush 1
      // 25: goto 2d
      // 28: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2b: athrow
      // 2c: bipush 0
      // 2d: ireturn
      // try (0 -> 12): 13 java/lang/NullPointerException
      // try (6 -> 17): 17 java/lang/NullPointerException
   }

   @Override
   public String toString() {
      return this.id + a[34] + this.getLicenseeName() + ")";
   }

   public Object getSpec() {
      return this.g;
   }

   @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:
      // 000: aload 0
      // 001: aload 1
      // 002: if_acmpne 00b
      // 005: bipush 1
      // 006: ireturn
      // 007: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 00a: athrow
      // 00b: aload 1
      // 00c: ifnull 021
      // 00f: aload 0
      // 010: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
      // 013: aload 1
      // 014: invokevirtual java/lang/Object.getClass ()Ljava/lang/Class;
      // 017: if_acmpeq 027
      // 01a: goto 021
      // 01d: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 020: athrow
      // 021: bipush 0
      // 022: ireturn
      // 023: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 026: athrow
      // 027: aload 1
      // 028: checkcast com/l7tech/gateway/common/License
      // 02b: astore 2
      // 02c: aload 0
      // 02d: getfield com/l7tech/gateway/common/License.expiryDateUt J
      // 030: aload 2
      // 031: getfield com/l7tech/gateway/common/License.expiryDateUt J
      // 034: lcmp
      // 035: ifeq 03e
      // 038: bipush 0
      // 039: ireturn
      // 03a: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 03d: athrow
      // 03e: aload 0
      // 03f: getfield com/l7tech/gateway/common/License.id J
      // 042: aload 2
      // 043: getfield com/l7tech/gateway/common/License.id J
      // 046: lcmp
      // 047: ifeq 050
      // 04a: bipush 0
      // 04b: ireturn
      // 04c: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 04f: athrow
      // 050: aload 0
      // 051: getfield com/l7tech/gateway/common/License.startDateUt J
      // 054: aload 2
      // 055: getfield com/l7tech/gateway/common/License.startDateUt J
      // 058: lcmp
      // 059: ifeq 062
      // 05c: bipush 0
      // 05d: ireturn
      // 05e: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 061: athrow
      // 062: aload 0
      // 063: getfield com/l7tech/gateway/common/License.validSignature Z
      // 066: aload 2
      // 067: getfield com/l7tech/gateway/common/License.validSignature Z
      // 06a: if_icmpeq 073
      // 06d: bipush 0
      // 06e: ireturn
      // 06f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 072: athrow
      // 073: aload 0
      // 074: getfield com/l7tech/gateway/common/License.description Ljava/lang/String;
      // 077: ifnull 096
      // 07a: aload 0
      // 07b: getfield com/l7tech/gateway/common/License.description Ljava/lang/String;
      // 07e: aload 2
      // 07f: getfield com/l7tech/gateway/common/License.description Ljava/lang/String;
      // 082: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 085: ifne 0a3
      // 088: goto 08f
      // 08b: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 08e: athrow
      // 08f: goto 09d
      // 092: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 095: athrow
      // 096: aload 2
      // 097: getfield com/l7tech/gateway/common/License.description Ljava/lang/String;
      // 09a: ifnull 0a3
      // 09d: bipush 0
      // 09e: ireturn
      // 09f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0a2: athrow
      // 0a3: aload 0
      // 0a4: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 0a7: ifnull 0c6
      // 0aa: aload 0
      // 0ab: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 0ae: aload 2
      // 0af: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 0b2: invokevirtual com/l7tech/gateway/common/License$LicenseGrants.equals (Ljava/lang/Object;)Z
      // 0b5: ifne 0d3
      // 0b8: goto 0bf
      // 0bb: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0be: athrow
      // 0bf: goto 0cd
      // 0c2: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0c5: athrow
      // 0c6: aload 2
      // 0c7: getfield com/l7tech/gateway/common/License.g Lcom/l7tech/gateway/common/License$LicenseGrants;
      // 0ca: ifnull 0d3
      // 0cd: bipush 0
      // 0ce: ireturn
      // 0cf: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0d2: athrow
      // 0d3: aload 0
      // 0d4: getfield com/l7tech/gateway/common/License.licenseeContactEmail Ljava/lang/String;
      // 0d7: ifnull 0f6
      // 0da: aload 0
      // 0db: getfield com/l7tech/gateway/common/License.licenseeContactEmail Ljava/lang/String;
      // 0de: aload 2
      // 0df: getfield com/l7tech/gateway/common/License.licenseeContactEmail Ljava/lang/String;
      // 0e2: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0e5: ifne 103
      // 0e8: goto 0ef
      // 0eb: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0ee: athrow
      // 0ef: goto 0fd
      // 0f2: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0f5: athrow
      // 0f6: aload 2
      // 0f7: getfield com/l7tech/gateway/common/License.licenseeContactEmail Ljava/lang/String;
      // 0fa: ifnull 103
      // 0fd: bipush 0
      // 0fe: ireturn
      // 0ff: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 102: athrow
      // 103: aload 0
      // 104: getfield com/l7tech/gateway/common/License.licenseeName Ljava/lang/String;
      // 107: ifnull 126
      // 10a: aload 0
      // 10b: getfield com/l7tech/gateway/common/License.licenseeName Ljava/lang/String;
      // 10e: aload 2
      // 10f: getfield com/l7tech/gateway/common/License.licenseeName Ljava/lang/String;
      // 112: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 115: ifne 133
      // 118: goto 11f
      // 11b: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 11e: athrow
      // 11f: goto 12d
      // 122: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 125: athrow
      // 126: aload 2
      // 127: getfield com/l7tech/gateway/common/License.licenseeName Ljava/lang/String;
      // 12a: ifnull 133
      // 12d: bipush 0
      // 12e: ireturn
      // 12f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 132: athrow
      // 133: aload 0
      // 134: getfield com/l7tech/gateway/common/License.trustedIssuer Ljava/security/cert/X509Certificate;
      // 137: ifnull 156
      // 13a: aload 0
      // 13b: getfield com/l7tech/gateway/common/License.trustedIssuer Ljava/security/cert/X509Certificate;
      // 13e: aload 2
      // 13f: getfield com/l7tech/gateway/common/License.trustedIssuer Ljava/security/cert/X509Certificate;
      // 142: invokestatic com/l7tech/common/io/CertUtils.certsAreEqual (Ljava/security/cert/X509Certificate;Ljava/security/cert/X509Certificate;)Z
      // 145: ifne 163
      // 148: goto 14f
      // 14b: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 14e: athrow
      // 14f: goto 15d
      // 152: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 155: athrow
      // 156: aload 2
      // 157: getfield com/l7tech/gateway/common/License.trustedIssuer Ljava/security/cert/X509Certificate;
      // 15a: ifnull 163
      // 15d: bipush 0
      // 15e: ireturn
      // 15f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 162: athrow
      // 163: aload 0
      // 164: getfield com/l7tech/gateway/common/License.eulaText Ljava/lang/String;
      // 167: ifnull 186
      // 16a: aload 0
      // 16b: getfield com/l7tech/gateway/common/License.eulaText Ljava/lang/String;
      // 16e: aload 2
      // 16f: getfield com/l7tech/gateway/common/License.eulaText Ljava/lang/String;
      // 172: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 175: ifne 193
      // 178: goto 17f
      // 17b: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 17e: athrow
      // 17f: goto 18d
      // 182: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 185: athrow
      // 186: aload 2
      // 187: getfield com/l7tech/gateway/common/License.eulaText Ljava/lang/String;
      // 18a: ifnull 193
      // 18d: bipush 0
      // 18e: ireturn
      // 18f: invokestatic com/l7tech/gateway/common/License.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 192: athrow
      // 193: bipush 1
      // 194: ireturn
      // try (0 -> 5): 5 java/lang/NullPointerException
      // try (7 -> 14): 15 java/lang/NullPointerException
      // try (9 -> 19): 19 java/lang/NullPointerException
      // try (24 -> 32): 32 java/lang/NullPointerException
      // try (34 -> 42): 42 java/lang/NullPointerException
      // try (44 -> 52): 52 java/lang/NullPointerException
      // try (54 -> 61): 61 java/lang/NullPointerException
      // try (63 -> 72): 73 java/lang/NullPointerException
      // try (66 -> 76): 76 java/lang/NullPointerException
      // try (78 -> 83): 83 java/lang/NullPointerException
      // try (85 -> 94): 95 java/lang/NullPointerException
      // try (88 -> 98): 98 java/lang/NullPointerException
      // try (100 -> 105): 105 java/lang/NullPointerException
      // try (107 -> 116): 117 java/lang/NullPointerException
      // try (110 -> 120): 120 java/lang/NullPointerException
      // try (122 -> 127): 127 java/lang/NullPointerException
      // try (129 -> 138): 139 java/lang/NullPointerException
      // try (132 -> 142): 142 java/lang/NullPointerException
      // try (144 -> 149): 149 java/lang/NullPointerException
      // try (151 -> 160): 161 java/lang/NullPointerException
      // try (154 -> 164): 164 java/lang/NullPointerException
      // try (166 -> 171): 171 java/lang/NullPointerException
      // try (173 -> 182): 183 java/lang/NullPointerException
      // try (176 -> 186): 186 java/lang/NullPointerException
      // try (188 -> 193): 193 java/lang/NullPointerException
   }

   @Override
   public int hashCode() {
      int var1 = (int)(this.id ^ this.id >>> 32);

      int var10000;
      byte var10001;
      label107: {
         try {
            var10000 = 29 * var1;
            if (this.validSignature) {
               var10001 = 1;
               break label107;
            }
         } catch (CertificateEncodingException var10) {
            throw a(var10);
         }

         var10001 = 0;
      }

      var1 = var10000 + var10001;

      try {
         label97: {
            try {
               var10000 = 29 * var1;
               if (this.trustedIssuer != null) {
                  var10001 = Arrays.hashCode(this.trustedIssuer.getEncoded());
                  break label97;
               }
            } catch (CertificateEncodingException var8) {
               throw a(var8);
            }

            var10001 = 0;
         }

         var1 = var10000 + var10001;
      } catch (CertificateEncodingException var9) {
      }

      var1 = 29 * var1 + (int)(this.startDateUt ^ this.startDateUt >>> 32);
      var1 = 29 * var1 + (int)(this.expiryDateUt ^ this.expiryDateUt >>> 32);

      label89: {
         try {
            var10000 = 29 * var1;
            if (this.description != null) {
               var10001 = this.description.hashCode();
               break label89;
            }
         } catch (CertificateEncodingException var7) {
            throw a(var7);
         }

         var10001 = 0;
      }

      var1 = var10000 + var10001;

      label81: {
         try {
            var10000 = 29 * var1;
            if (this.licenseeName != null) {
               var10001 = this.licenseeName.hashCode();
               break label81;
            }
         } catch (CertificateEncodingException var6) {
            throw a(var6);
         }

         var10001 = 0;
      }

      var1 = var10000 + var10001;

      label73: {
         try {
            var10000 = 29 * var1;
            if (this.licenseeContactEmail != null) {
               var10001 = this.licenseeContactEmail.hashCode();
               break label73;
            }
         } catch (CertificateEncodingException var5) {
            throw a(var5);
         }

         var10001 = 0;
      }

      var1 = var10000 + var10001;

      label65: {
         try {
            var10000 = 29 * var1;
            if (this.g != null) {
               var10001 = this.g.hashCode();
               break label65;
            }
         } catch (CertificateEncodingException var4) {
            throw a(var4);
         }

         var10001 = 0;
      }

      var1 = var10000 + var10001;

      try {
         var10000 = 29 * var1;
         if (this.eulaText != null) {
            return var10000 + this.eulaText.hashCode();
         }
      } catch (CertificateEncodingException var3) {
         throw a(var3);
      }

      return var10000 + 0;
   }

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

   static {
      String[] var5 = new String[47];
      int var3 = 0;
      String var2 = "B+K\u0000^\t|+B\u0001M\u000fs]'\bc+F\nB\bc\u000fCc+F\nB\bc\u000f&J\fY\u0016cA6\u0005\n@\u001ekJ,QOB\u0014r\u000f+KOB\u001akJ1U\u000eO\u001e&G6Q\u001f\u0016T)CuQ\nO\u0013(L-H@@\u0012eJ,V\n\u0011C+F\nB\bcn6Q\u001dE\u0019s['V\u0004A#H\n#c+F\nB\bc\u000f.J\fM\u0017&A#H\n\f\u0012u\u000f,J\u001b\fYjF!@\u0001_\u001e$\u0019\u000f*D\u001c\f\u001e~_+W\nHA&J:U\u0006^\u001eb\u000f-KO\bJ7I\u000eX\u001e~[\u0007_0J\u000bY\u0018r\u000bK'V\f^\u0012v[+J\u0001#c+F\nB\bc\u000f!J\u0001X\u001aoA1\u0005\u0001C[v]-A\u001aO\u000f&J.@\u0002I\u0015r\u0019G6Q\u001f\u0016T)CuQ\nO\u0013(L-H@@\u0012eJ,V\n\u001bC+F\nB\bcw/IOA\u000eu[bK\u0000X[dJbK\u001a@\u0017\u0005Y#I\u0006H\tN6Q\u001dE\u0019s['$\u000f+VOB\u0014r\u000f;@\u001b\f\rgC+AU\f\u0019cL-H\n_[pN.L\u000b\f\u0014h\u000f)c+F\nB\bc\u000f!J\u0001X\u001aoA1\u0005\tI\u001arZ0@O_\u001er\u000f5L\u001bD[h@bK\u000eA\u001e\u0007_0J\u000bY\u0018r\fI'D\u001bY\tcc#G\n@\nI'D\u001bY\tc\\'Q\u0007Y'W\u001cE\u0014h\u0007Y'W\u001cE\u0014h-z,D\r@\u001e&[-\u0005\nB\u0018iK'\u0005\u001b^\u000eu['AOE\buZ'WOO\u001et[+C\u0006O\u001arJx\u0005\u0019G6Q\u001f\u0016T)CuQ\nO\u0013(L-H@@\u0012eJ,V\n\fL-K\u001bM\u0018rj/D\u0006@\"Z,D\r@\u001e&[-\u0005\u000bI\u0018iK'\u0005\nY\u0017g[']\u001b\f\u0018iA6@\u0001X\b\bC+F\nB\bcJ\u0002\u000fj\u0005B#O\u0000^U{*@O@\u0012eJ,V\n\f\fg\\bV\u0006K\u0015cKn\u0005\rY\u000f&X'\u0005\u000bC[h@6\u0005\u001dI\u0018iH,L\u0015I[rG'\u0005\u001cE\u001chJ0\u0005\u000e_[g\u000f4D\u0003E\u001f&C+F\nB\bc\u000f+V\u001cY\u001et\u0001\u0007J:U\u0006^\u001eu\u001ac+F\nB\bc\u000f\u000bAOE\b&A-KB\\\u0014uF6L\u0019I\u0007C+F\nB\bc\u0002\u000fj${*@O@\u0012eJ,V\n\f\u0013gKbD\u0001\f\u0012hY#I\u0006H[uF%K\u000eX\u000etJ\bc+F\nB\bc\u000f$c+F\nB\bc\u000f\u000bAOE\b&B+V\u001cE\u0015a\u000f-WOB\u0014h\u0002,P\u0002I\toL\u0002F2\u0007N&A\u001dI\bu-c+F\nB\bc\u000f&J\n_[h@6\u0005\u001c\\\u001eeF$\\OX\u0013c\u000f0@\u001eY\u0012tJ&\u0005\u0019M\u0017sJb\u0002\u0004G-V\u001b\u0002f&+\u000f5D\u001c\f\u0015i[bV\u0006K\u0015cKbG\u0016\f\u001a&[0P\u001cX\u001eb\u000f.L\fI\u0015uJbL\u001c_\u000ec]\u0004A#H\n";
      int var4 = "B+K\u0000^\t|+B\u0001M\u000fs]'\bc+F\nB\bc\u000fCc+F\nB\bc\u000f&J\fY\u0016cA6\u0005\n@\u001ekJ,QOB\u0014r\u000f+KOB\u001akJ1U\u000eO\u001e&G6Q\u001f\u0016T)CuQ\nO\u0013(L-H@@\u0012eJ,V\n\u0011C+F\nB\bcn6Q\u001dE\u0019s['V\u0004A#H\n#c+F\nB\bc\u000f.J\fM\u0017&A#H\n\f\u0012u\u000f,J\u001b\fYjF!@\u0001_\u001e$\u0019\u000f*D\u001c\f\u001e~_+W\nHA&J:U\u0006^\u001eb\u000f-KO\bJ7I\u000eX\u001e~[\u0007_0J\u000bY\u0018r\u000bK'V\f^\u0012v[+J\u0001#c+F\nB\bc\u000f!J\u0001X\u001aoA1\u0005\u0001C[v]-A\u001aO\u000f&J.@\u0002I\u0015r\u0019G6Q\u001f\u0016T)CuQ\nO\u0013(L-H@@\u0012eJ,V\n\u001bC+F\nB\bcw/IOA\u000eu[bK\u0000X[dJbK\u001a@\u0017\u0005Y#I\u0006H\tN6Q\u001dE\u0019s['$\u000f+VOB\u0014r\u000f;@\u001b\f\rgC+AU\f\u0019cL-H\n_[pN.L\u000b\f\u0014h\u000f)c+F\nB\bc\u000f!J\u0001X\u001aoA1\u0005\tI\u001arZ0@O_\u001er\u000f5L\u001bD[h@bK\u000eA\u001e\u0007_0J\u000bY\u0018r\fI'D\u001bY\tcc#G\n@\nI'D\u001bY\tc\\'Q\u0007Y'W\u001cE\u0014h\u0007Y'W\u001cE\u0014h-z,D\r@\u001e&[-\u0005\nB\u0018iK'\u0005\u001b^\u000eu['AOE\buZ'WOO\u001et[+C\u0006O\u001arJx\u0005\u0019G6Q\u001f\u0016T)CuQ\nO\u0013(L-H@@\u0012eJ,V\n\fL-K\u001bM\u0018rj/D\u0006@\"Z,D\r@\u001e&[-\u0005\u000bI\u0018iK'\u0005\nY\u0017g[']\u001b\f\u0018iA6@\u0001X\b\bC+F\nB\bcJ\u0002\u000fj\u0005B#O\u0000^U{*@O@\u0012eJ,V\n\f\fg\\bV\u0006K\u0015cKn\u0005\rY\u000f&X'\u0005\u000bC[h@6\u0005\u001dI\u0018iH,L\u0015I[rG'\u0005\u001cE\u001chJ0\u0005\u000e_[g\u000f4D\u0003E\u001f&C+F\nB\bc\u000f+V\u001cY\u001et\u0001\u0007J:U\u0006^\u001eu\u001ac+F\nB\bc\u000f\u000bAOE\b&A-KB\\\u0014uF6L\u0019I\u0007C+F\nB\bc\u0002\u000fj${*@O@\u0012eJ,V\n\f\u0013gKbD\u0001\f\u0012hY#I\u0006H[uF%K\u000eX\u000etJ\bc+F\nB\bc\u000f$c+F\nB\bc\u000f\u000bAOE\b&B+V\u001cE\u0015a\u000f-WOB\u0014h\u0002,P\u0002I\toL\u0002F2\u0007N&A\u001dI\bu-c+F\nB\bc\u000f&J\n_[h@6\u0005\u001c\\\u001eeF$\\OX\u0013c\u000f0@\u001eY\u0012tJ&\u0005\u0019M\u0017sJb\u0002\u0004G-V\u001b\u0002f&+\u000f5D\u001c\f\u0015i[bV\u0006K\u0015cKbG\u0016\f\u001a&[0P\u001cX\u001eb\u000f.L\fI\u0015uJbL\u001c_\u000ec]\u0004A#H\n"
         .length();
      char var1 = 5;
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 85;
         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;
                     LIC_NS = a[12];
                     return;
                  }

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

                  var2 = "s\u001bv:r8Sz\rs\u001bv:r8SzR{>q.";
                  var4 = "s\u001bv:r8Sz\rs\u001bv:r8SzR{>q.".length();
                  var1 = '\b';
                  var7 = -1;
            }

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

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

      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 -> 122;
            case 1 -> 23;
            case 2 -> 112;
            case 3 -> 58;
            case 4 -> 121;
            case 5 -> 46;
            default -> 83;
         });
      }

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

   public static final class LicenseGrants implements Serializable {
      final String hostname;
      final String ip;
      final String product;
      final String versionMajor;
      final String versionMinor;
      final String[] rootFeatureSetNames;
      final String featureLabel;
      static final long serialVersionUID = -2025916909351167031L;
      private static final String[] a;

      public LicenseGrants(String var1, String var2, String var3, String var4, String var5, String[] var6, String var7) {
         this.hostname = var1;
         this.ip = var2;
         this.product = var3;
         this.versionMajor = var4;
         this.versionMinor = var5;
         this.rootFeatureSetNames = var6;
         this.featureLabel = var7;
      }

      public String getHostname() {
         return this.hostname;
      }

      public String getIp() {
         return this.ip;
      }

      public String getProduct() {
         return this.product;
      }

      public String getVersionMajor() {
         return this.versionMajor;
      }

      public String getVersionMinor() {
         return this.versionMinor;
      }

      public String[] getRootFeatureSetNames() {
         return this.rootFeatureSetNames;
      }

      public String getFeatureLabel() {
         return this.featureLabel;
      }

      public String asEnglish() {
         StringBuffer var1 = new StringBuffer();
         boolean var2 = "*".equals(this.ip);
         boolean var3 = "*".equals(this.hostname);
         boolean var4 = "*".equals(this.versionMajor);
         boolean var5 = "*".equals(this.versionMinor);
         String[] var6 = a;
         var1.append(var6[11]);
         var1.append(var4 && var5 ? var6[8] : "");
         if ("*".equals(this.product)) {
            var6 = a;
            var1.append(var6[15]);
         } else {
            var1.append(this.product);
            if (var4 == var5) {
               if (!var4) {
                  var6 = a;
                  var1.append(var6[13]).append(this.versionMajor).append(".").append(this.versionMinor);
               }
            } else if (!var5) {
               var6 = a;
               var1.append(var6[12]).append(this.versionMinor);
            } else {
               var6 = a;
               var1.append(var6[10]).append(this.versionMajor);
            }
         }

         if (!var2) {
            var6 = a;
            var1.append(var6[7]).append(this.ip);
         }

         if (!var3) {
            String var10001;
            if (var2) {
               var6 = a;
               var10001 = var6[14];
            } else {
               var6 = a;
               var10001 = var6[17];
            }

            StringBuffer var10000 = var1.append(var10001);
            var6 = a;
            var10000.append(var6[9]).append(this.hostname);
         }

         if (this.rootFeatureSetNames.length > 0) {
            var1.append(a[1]);
            if (this.featureLabel != null) {
               var1.append(this.featureLabel);
            } else {
               this.describeFeatures(var1);
            }
         }

         return var1.toString();
      }

      private void describeFeatures(StringBuffer var1) {
         String[] var6 = a;
         String var2 = var6[18];
         int var3 = var2.length();

         for (int var4 = 0; var4 < this.rootFeatureSetNames.length; var4++) {
            String var5 = this.rootFeatureSetNames[var4];
            if (var4 > 0) {
               if (var4 == this.rootFeatureSetNames.length - 1) {
                  var6 = a;
                  var1.append(var6[19]);
               } else {
                  var6 = a;
                  var1.append(var6[16]);
               }
            }

            if (var5.startsWith(var2) && var5.length() > var3) {
               var6 = a;
               var1.append(var6[0]);
               var5 = var5.substring(var3);
               if (var5.equals(var6[3])) {
                  var5 = var6[5];
               } else {
                  var6 = a;
                  if (var5.equals(var6[4])) {
                     var5 = var6[6];
                  } else {
                     var6 = a;
                     if (var5.equals(var6[2])) {
                        var5 = var6[20];
                     }
                  }
               }

               var1.append(var5);
            } else {
               var1.append(var5);
            }
         }
      }

      @Override
      public boolean equals(Object var1) {
         if (this == var1) {
            return true;
         }

         if (var1 != null && this.getClass() == var1.getClass()) {
            License.LicenseGrants var2 = (License.LicenseGrants)var1;
            if (this.hostname != null ? this.hostname.equals(var2.hostname) : var2.hostname == null) {
               if (this.ip != null ? this.ip.equals(var2.ip) : var2.ip == null) {
                  if (this.product != null ? this.product.equals(var2.product) : var2.product == null) {
                     if (this.versionMajor != null ? this.versionMajor.equals(var2.versionMajor) : var2.versionMajor == null) {
                        return (this.versionMinor != null ? this.versionMinor.equals(var2.versionMinor) : var2.versionMinor == null)
                           ? Arrays.equals(this.rootFeatureSetNames, var2.rootFeatureSetNames)
                           : false;
                     } else {
                        return false;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         } else {
            return false;
         }
      }

      @Override
      public int hashCode() {
         int var1 = this.hostname != null ? this.hostname.hashCode() : 0;
         var1 = 29 * var1 + (this.ip != null ? this.ip.hashCode() : 0);
         var1 = 29 * var1 + (this.product != null ? this.product.hashCode() : 0);
         var1 = 29 * var1 + (this.versionMajor != null ? this.versionMajor.hashCode() : 0);
         var1 = 29 * var1 + (this.versionMinor != null ? this.versionMinor.hashCode() : 0);
         return 29 * var1 + Arrays.hashCode(this.rootFeatureSetNames);
      }

      static {
         String[] var5 = new String[21];
         int var3 = 0;
         String var2 = "$TA\\L^r\u0007PL\t\u000bWWGHJNS\u001e_E\t\u0016'^N@]Bh\u0019EGNLZU\u001e^LyQRO\u0003\u00056RALR\u0003>aq\f6RALR^S\u0016EKFP\u0007/|n\twkr\u0016[\u0011U@JS\u0001\u0003YG\twk\u0001\u0016UF[[HRW\u000f\u0016_[\tH^S\u0004XMG\u001eTGW\u000fWEJL\u001eSN\u0004E\u0002G_VDW\u000fW\\CCQI\u0001\u0001TPZWTOW\u0007\"BG\tQ]\u0001\u000fW\\KGQI\u0001\u0001TPZWTOW\tWGG[MRN\u0019\u0011\u0006[\u0011U@JS%\u0016_[\tNIN\u0013DA]\u001eOI\u0016E\u0002H]XD\u0007EQ\tJSH\u0004\u0011N@]^O\u0004T\u0002[\u0011\u0004WPLM\f\u0004TV\u0013nIN\u0011XNL\u0004";
         int var4 = "$TA\\L^r\u0007PL\t\u000bWWGHJNS\u001e_E\t\u0016'^N@]Bh\u0019EGNLZU\u001e^LyQRO\u0003\u00056RALR\u0003>aq\f6RALR^S\u0016EKFP\u0007/|n\twkr\u0016[\u0011U@JS\u0001\u0003YG\twk\u0001\u0016UF[[HRW\u000f\u0016_[\tH^S\u0004XMG\u001eTGW\u000fWEJL\u001eSN\u0004E\u0002G_VDW\u000fW\\CCQI\u0001\u0001TPZWTOW\u0007\"BG\tQ]\u0001\u000fW\\KGQI\u0001\u0001TPZWTOW\tWGG[MRN\u0019\u0011\u0006[\u0011U@JS%\u0016_[\tNIN\u0013DA]\u001eOI\u0016E\u0002H]XD\u0007EQ\tJSH\u0004\u0011N@]^O\u0004T\u0002[\u0011\u0004WPLM\f\u0004TV\u0013nIN\u0011XNL\u0004"
            .length();
         char var1 = 11;
         int var7 = -1;

         label24:
         while (true) {
            byte var10000 = 1;
            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;
                        return;
                     }

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

                     var2 = "hosr!\u0018\u0018aq\u007fb}>\u0001`isfv\u007f<grx!Tq!`i";
                     var4 = "hosr!\u0018\u0018aq\u007fb}>\u0001`isfv\u007f<grx!Tq!`i".length();
                     var1 = 5;
                     var7 = -1;
               }

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

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

         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 -> 118;
               case 1 -> 48;
               case 2 -> 35;
               case 3 -> 40;
               case 4 -> 63;
               case 5 -> 58;
               default -> 32;
            });
         }

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