package com.l7tech.policy.assertion;

import com.l7tech.policy.AssertionPath;
import com.l7tech.policy.PolicyValidatorResult;
import com.l7tech.policy.assertion.annotation.RequiresXML;
import com.l7tech.policy.validator.AssertionValidator;
import com.l7tech.policy.validator.PolicyValidationContext;

@RequiresXML
public class OversizedTextAssertion extends MessageTargetableAssertion {
   public static final long DEFAULT_ATTR_LIMIT = 2048L;
   public static final long DEFAULT_TEXT_LIMIT = 16384L;
   public static final int DEFAULT_ATTR_NAME_LIMIT = 128;
   public static final int DEFAULT_NESTING_LIMIT = 32;
   public static final int DEFAULT_PAYLOAD_LIMIT = 0;
   public static final int DEFAULT_NAMESPACE_DECLARATON_COUNT = 0;
   public static final int DEFAULT_NAMESPACE_PREFIX_DECLARATION_COUNT = 0;
   public static final int MIN_NESTING_LIMIT = 2;
   public static final int MAX_NESTING_LIMIT = 10000;
   private static final String XPATH_TEXT_START;
   private static final String XPATH_TEXT_END;
   private static final String XPATH_NESTING_STEP;
   private static final String XPATH_PAYLOAD_START;
   private static final String XPATH_PAYLOAD_END = "]";
   private boolean limitTextChars = true;
   private long maxTextChars = 16384L;
   private boolean limitAttrChars = true;
   private long maxAttrChars = 2048L;
   private boolean limitNestingDepth = true;
   private int maxNestingDepth = 32;
   private int maxPayloadElements = 0;
   private boolean requireValidSoapEnvelope = false;
   private boolean limitAttrNameChars = true;
   private int maxAttrNameChars = 128;
   private boolean limitNamespaceCount = false;
   private int maxNamespaceCount = 0;
   private boolean limitNamespacePrefixCount = false;
   private int maxNamespacePrefixCount = 0;
   private static final String baseName;
   static final AssertionNodeNameFactory policyNameFactory;
   static final long serialVersionUID = -5400929229785966611L;
   private static final String[] b;

   public OversizedTextAssertion() {
      super(false);
   }

   public boolean isLimitTextChars() {
      return this.limitTextChars;
   }

   public void setLimitTextChars(boolean var1) {
      this.limitTextChars = var1;
   }

   public long getMaxTextChars() {
      return this.maxTextChars;
   }

   public void setMaxTextChars(long var1) {
      this.maxTextChars = var1;
   }

   public boolean isLimitAttrChars() {
      return this.limitAttrChars;
   }

   public void setLimitAttrChars(boolean var1) {
      this.limitAttrChars = var1;
   }

   public long getMaxAttrChars() {
      return this.maxAttrChars;
   }

   public void setMaxAttrChars(long var1) {
      if (var1 < 0L) {
         var1 = 0L;
      }

      this.maxAttrChars = var1;
   }

   public boolean isLimitNestingDepth() {
      return this.limitNestingDepth;
   }

   public void setLimitNestingDepth(boolean var1) {
      this.limitNestingDepth = var1;
   }

   public int getMaxNestingDepth() {
      return this.maxNestingDepth;
   }

   public void setMaxNestingDepth(int var1) {
      if (var1 < 0) {
         var1 = 0;
      }

      this.maxNestingDepth = var1;
   }

   public void setRequireValidSoapEnvelope(boolean var1) {
      this.requireValidSoapEnvelope = var1;
   }

   public boolean isRequireValidSoapEnvelope() {
      return this.requireValidSoapEnvelope;
   }

   public void setMaxPayloadElements(int var1) {
      if (var1 < 0) {
         var1 = 0;
      }

      this.maxPayloadElements = var1;
   }

   public int getMaxPayloadElements() {
      return this.maxPayloadElements;
   }

   public boolean isLimitAttrNameChars() {
      return this.limitAttrNameChars;
   }

   public void setLimitAttrNameChars(boolean var1) {
      this.limitAttrNameChars = var1;
   }

   public int getMaxAttrNameChars() {
      return this.maxAttrNameChars;
   }

   public void setMaxAttrNameChars(int var1) {
      this.maxAttrNameChars = var1;
   }

   public boolean isLimitNamespaceCount() {
      return this.limitNamespaceCount;
   }

   public void setLimitNamespaceCount(boolean var1) {
      this.limitNamespaceCount = var1;
   }

   public int getMaxNamespaceCount() {
      return this.maxNamespaceCount;
   }

   public void setMaxNamespaceCount(int var1) {
      if (var1 < 0) {
         var1 = 0;
      }

      this.maxNamespaceCount = var1;
   }

   public boolean isLimitNamespacePrefixCount() {
      return this.limitNamespacePrefixCount;
   }

   public void setLimitNamespacePrefixCount(boolean var1) {
      this.limitNamespacePrefixCount = var1;
   }

   public int getMaxNamespacePrefixCount() {
      return this.maxNamespacePrefixCount;
   }

   public void setMaxNamespacePrefixCount(int var1) {
      if (var1 < 0) {
         var1 = 0;
      }

      this.maxNamespacePrefixCount = var1;
   }

   public String makeTextXpath() {
      String var10000;
      if (this.isLimitTextChars()) {
         String[] var1 = b;
         var10000 = var1[23] + this.maxTextChars + var1[2];
      } else {
         var10000 = null;
      }

      return var10000;
   }

   public String makeNestingXpath() {
      if (!this.isLimitNestingDepth()) {
         return null;
      }

      int var1 = this.getMaxNestingDepth();
      if (var1 < 2) {
         var1 = 2;
      }

      if (var1 > 10000) {
         var1 = 10000;
      }

      var1++;
      StringBuilder var2 = new StringBuilder();

      for (int var3 = 0; var3 < var1; var3++) {
         var2.append(b[13]);
      }

      return var2.toString();
   }

   public String makePayloadLimitXpath() {
      int var1 = this.getMaxPayloadElements();
      return var1 < 1 ? null : b[18] + (var1 + 1) + "]";
   }

   @Override
   public AssertionMetadata meta() {
      DefaultAssertionMetadata var1 = this.defaultMeta();
      String[] var2 = b;
      var1.put(var2[15], var2[6]);
      var1.put(var2[9], var2[22]);
      var1.put(var2[14], var2[12]);
      var1.put(var2[21], new String[]{var2[4]});
      var1.put(var2[1], policyNameFactory);
      var1.put(var2[17], var2[7]);
      var1.put(var2[19], var2[0]);
      var1.put(var2[5], var2[3]);
      var1.put(var2[10], new bc(this));
      var1.put(var2[24], OversizedTextAssertion.Validator.class.getName());
      return var1;
   }

   static {
      String[] var5 = new String[26];
      int var3 = 0;
      String var2 = "<\u0007NQ!\tU\u0011'g\u001f\u0011Fe\u00108w\u0012\u0011\u0013D\u0001jV\u0019\u0017\u0003W\u0010jR\u0003\n\u0012S\u0007>k\u001e\u000bFf\u0016%r\u0014\u0017\u0012_\u00019\u0015\u0014%n\u0018\u0006\u001fx\u000b.g?\u0004\u000bS\"+a\u0005\n\u0014O\u00049\u00113,\u0004\u0005?v\u001e\u0010\u0010\"p\u0014\u0004\u0012f\u0016%v\u0014\u0006\u0012_\u000b$\u0015\u0014%n\u0018\u0006\u001fw\u0000<k\u0012\u0000%Z\u00059q\u001f\u0004\u000bS.48m\u0005\u0000\u0005BD\u000be\u0010\f\bE\u0010jZ<)Fr\u000b)w\u001c\u0000\bBD\u0019v\u0003\u0010\u0005B\u00118gQ1\u000eD\u0001+v\u0002-\u0007%o_\tQB\u0001)j_\u0006\tX\u0017%n\u0014K\u0016W\n/n\u0002K)@\u00018q\u0018\u001f\u0003R0/z\u0005!\u000fW\b%e\u001fLe-[J\u0012S\u001c>*XL=E\u00108k\u001f\u0002KZ\u0001$e\u0005\rN\u001fDt\"\u000b\u0000/q\u0012\u0017\u000fF\u0010#m\u001f\u001b\u0014%n\u0018\u0006\u001f`\u0005&k\u0015\u0004\u0012Y\u0016\fn\u0010\u0002\u0015p\u0005)v\u001e\u0017\u001f:De(*\t\tU\u0005&/\u001f\u0004\u000bSLc\"LEAs\n<g\u001d\n\u0016SC\u0017-[>\nY\u0007+n\\\u000b\u0007[\u0001b+QXF\u0014&%f\bG;\u0019N\u00113\u0007%o^\tQB\u0001)j^\u0006\tX\u0017%n\u0014J\u0014S\u0017%w\u0003\u0006\u0003EK\u0005t\u0014\u0017\u0015_\u001e/f4\t\u0003[\u0001$v@SHQ\r,\u0002K`\u000f\u0014+n\u0014\u0011\u0012S*%f\u0014,\u0005Y\n\t\u0017\"m\u0003\u0011(W\t/\u0002K`\u0019\u00148m\u0001\u0000\u0014B\r/q4\u0001\u000fB\u000b8A\u001d\u0004\u0015E\n+o\u0014:De(*\t\tU\u0005&/\u001f\u0004\u000bSLc\"LEAs\n<g\u001d\n\u0016SC\u0017-[>\nY\u0007+n\\\u000b\u0007[\u0001b+QXF\u0014&%f\bG;\u0019N\u0011\u0014\u00148m\u0001\u0000\u0014B\r/q0\u0006\u0012_\u000b$L\u0010\b\u0003.48m\u0005\u0000\u0005BD\u000be\u0010\f\bE\u0010jZ<)Fr\u000b)w\u001c\u0000\bBD\u0019v\u0003\u0010\u0005B\u00118gQ1\u000eD\u0001+v\u0002\u000e\u0014+n\u0014\u0011\u0012S\"%n\u0015\u0000\u0014EJ!$c\u0013\t\u0003\u0016\u00148m\u0005\u0000\u0005B\r%lQ\u0004\u0001W\r$q\u0005E\t@\u00018q\u0018\u001f\u0003RD$m\u0015\u0000\u0015\u001aD%t\u0014\u0017\u0002S\u0001:\"\u001f\u0000\u0015B\r$e]E\u0007X\u0000jv\u0003\u0004\u000fZ\u00018q_\u001fLe-[J\u0012S\u001c>*XL=E\u00108k\u001f\u0002KZ\u0001$e\u0005\rN\u001fDt\"";
      int var4 = "<\u0007NQ!\tU\u0011'g\u001f\u0011Fe\u00108w\u0012\u0011\u0013D\u0001jV\u0019\u0017\u0003W\u0010jR\u0003\n\u0012S\u0007>k\u001e\u000bFf\u0016%r\u0014\u0017\u0012_\u00019\u0015\u0014%n\u0018\u0006\u001fx\u000b.g?\u0004\u000bS\"+a\u0005\n\u0014O\u00049\u00113,\u0004\u0005?v\u001e\u0010\u0010\"p\u0014\u0004\u0012f\u0016%v\u0014\u0006\u0012_\u000b$\u0015\u0014%n\u0018\u0006\u001fw\u0000<k\u0012\u0000%Z\u00059q\u001f\u0004\u000bS.48m\u0005\u0000\u0005BD\u000be\u0010\f\bE\u0010jZ<)Fr\u000b)w\u001c\u0000\bBD\u0019v\u0003\u0010\u0005B\u00118gQ1\u000eD\u0001+v\u0002-\u0007%o_\tQB\u0001)j_\u0006\tX\u0017%n\u0014K\u0016W\n/n\u0002K)@\u00018q\u0018\u001f\u0003R0/z\u0005!\u000fW\b%e\u001fLe-[J\u0012S\u001c>*XL=E\u00108k\u001f\u0002KZ\u0001$e\u0005\rN\u001fDt\"\u000b\u0000/q\u0012\u0017\u000fF\u0010#m\u001f\u001b\u0014%n\u0018\u0006\u001f`\u0005&k\u0015\u0004\u0012Y\u0016\fn\u0010\u0002\u0015p\u0005)v\u001e\u0017\u001f:De(*\t\tU\u0005&/\u001f\u0004\u000bSLc\"LEAs\n<g\u001d\n\u0016SC\u0017-[>\nY\u0007+n\\\u000b\u0007[\u0001b+QXF\u0014&%f\bG;\u0019N\u00113\u0007%o^\tQB\u0001)j^\u0006\tX\u0017%n\u0014J\u0014S\u0017%w\u0003\u0006\u0003EK\u0005t\u0014\u0017\u0015_\u001e/f4\t\u0003[\u0001$v@SHQ\r,\u0002K`\u000f\u0014+n\u0014\u0011\u0012S*%f\u0014,\u0005Y\n\t\u0017\"m\u0003\u0011(W\t/\u0002K`\u0019\u00148m\u0001\u0000\u0014B\r/q4\u0001\u000fB\u000b8A\u001d\u0004\u0015E\n+o\u0014:De(*\t\tU\u0005&/\u001f\u0004\u000bSLc\"LEAs\n<g\u001d\n\u0016SC\u0017-[>\nY\u0007+n\\\u000b\u0007[\u0001b+QXF\u0014&%f\bG;\u0019N\u0011\u0014\u00148m\u0001\u0000\u0014B\r/q0\u0006\u0012_\u000b$L\u0010\b\u0003.48m\u0005\u0000\u0005BD\u000be\u0010\f\bE\u0010jZ<)Fr\u000b)w\u001c\u0000\bBD\u0019v\u0003\u0010\u0005B\u00118gQ1\u000eD\u0001+v\u0002\u000e\u0014+n\u0014\u0011\u0012S\"%n\u0015\u0000\u0014EJ!$c\u0013\t\u0003\u0016\u00148m\u0005\u0000\u0005B\r%lQ\u0004\u0001W\r$q\u0005E\t@\u00018q\u0018\u001f\u0003RD$m\u0015\u0000\u0015\u001aD%t\u0014\u0017\u0002S\u0001:\"\u001f\u0000\u0015B\r$e]E\u0007X\u0000jv\u0003\u0004\u000fZ\u00018q_\u001fLe-[J\u0012S\u001c>*XL=E\u00108k\u001f\u0002KZ\u0001$e\u0005\rN\u001fDt\""
         .length();
      char var1 = '3';
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     b = var5;
                     String[] var9 = b;
                     baseName = b[20];
                     XPATH_TEXT_END = var9[25];
                     XPATH_NESTING_STEP = var9[16];
                     XPATH_PAYLOAD_START = var9[11];
                     XPATH_TEXT_START = var9[8];
                     policyNameFactory = new bb();
                     return;
                  }

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

                  var2 = "Te.XF_ Ef+UDR\u0019VI.PVU\u0018Eg'\u0004yQsl";
                  var4 = "Te.XF_ Ef+UDR\u0019VI.PVU\u0018Eg'\u0004yQsl".length();
                  var1 = 24;
                  var7 = -1;
            }

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

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

      return var10000;
   }

   private static String b(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 -> 9;
            case 1 -> 39;
            case 2 -> 111;
            case 3 -> 28;
            case 4 -> 8;
            case 5 -> 11;
            default -> 91;
         });
      }

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

   public static class Validator implements AssertionValidator {
      private final OversizedTextAssertion a;
      private final String b;
      private static final String c;

      public Validator(OversizedTextAssertion var1) {
         this.a = var1;
         if (!var1.isLimitTextChars()
            && !var1.isLimitAttrChars()
            && !var1.isLimitAttrNameChars()
            && !var1.isLimitNestingDepth()
            && !var1.isRequireValidSoapEnvelope()
            && var1.getMaxPayloadElements() <= 0
            && !var1.isLimitNamespaceCount()
            && !var1.isLimitNamespacePrefixCount()) {
            this.b = c;
         } else {
            this.b = null;
         }
      }

      @Override
      public void validate(AssertionPath var1, PolicyValidationContext var2, PolicyValidatorResult var3) {
         if (this.b != null) {
            var3.addWarning(new PolicyValidatorResult.Warning(this.a, this.b, null));
         }
      }

      static {
         String var10002 = a(
            65,
            a(
               "uA`55c\"\u007fA#\u0018\u0015JlO\u000e\u0013\u0019\nZaO[2\bX{jIK!\u0019X\u007fpTZ%\u000e\fFmU]`\u0005\u0019Yg\u001bL%\b\u0016\u000fqKK#\u0004\u001eFg_"
            )
         );
         byte var10001 = -1;
         c = var10002;
      }

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

         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 -> 111;
               case 2 -> 1;
               case 3 -> 44;
               case 4 -> 57;
               case 5 -> 110;
               default -> 67;
            });
         }

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