Repository: alibaba/fastjson2
Pull request #3528 (2025-04-30 06:01:11)

base64转byte[]，兼容前缀【data:image/jpeg;base64,】
### What this PR does / why we need it?

经常遇到前端传base64编码的图片带有前缀，兼容这样前缀，用起来会方便点。

https://github.com/alibaba/fastjson2/issues/3497

### Summary of your change

不管有没有前缀，通过英文逗号分隔base64的字符串，如果长度是1的，就是下标是0的，如果是长度是2的，就取下标是1的。

#### Please indicate you've done the following:

- [x] Made sure tests are passing and test coverage is added if needed.
- [ ] Made sure commit message follow the rule of [Conventional Commits specification](https://www.conventionalcommits.org/).
- [ ] Considered the docs impact and opened a new docs issue or PR with docs changes if needed.



Patch:
diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONPathSegmentName.java b/core/src/main/java/com/alibaba/fastjson2/JSONPathSegmentName.java
index a0ad4eb78..37dfe666c 100644
--- a/core/src/main/java/com/alibaba/fastjson2/JSONPathSegmentName.java
+++ b/core/src/main/java/com/alibaba/fastjson2/JSONPathSegmentName.java
@@ -333,6 +333,10 @@ class JSONPathSegmentName
                 ? context.root
                 : context.parent.value;
 
+        if (object instanceof JSONPath.Sequence) {
+            object = ((JSONPath.Sequence) object).values;
+        }
+
         if (object instanceof Map) {
             Map map = (Map) object;
             Object origin = map.put(name, value);
diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONPathSingleName.java b/core/src/main/java/com/alibaba/fastjson2/JSONPathSingleName.java
index c160bbc67..f871d93ed 100644
--- a/core/src/main/java/com/alibaba/fastjson2/JSONPathSingleName.java
+++ b/core/src/main/java/com/alibaba/fastjson2/JSONPathSingleName.java
@@ -115,6 +115,11 @@ final class JSONPathSingleName
             return ((Map) root).containsKey(name);
         }
 
+        if (root instanceof List) {
+            List list = (List) root;
+            return !list.isEmpty() && contains(list.get(0));
+        }
+
         ObjectWriterProvider provider = getWriterContext().provider;
 
         ObjectWriter objectWriter = provider.getObjectWriter(root.getClass());
diff --git a/core/src/main/java/com/alibaba/fastjson2/JSONWriter.java b/core/src/main/java/com/alibaba/fastjson2/JSONWriter.java
index 92d0ea94d..36af401c3 100644
--- a/core/src/main/java/com/alibaba/fastjson2/JSONWriter.java
+++ b/core/src/main/java/com/alibaba/fastjson2/JSONWriter.java
@@ -1171,8 +1171,12 @@ public abstract class JSONWriter
     }
 
     public void writeArrayNull() {
+        writeArrayNull(this.context.features);
+    }
+
+    public void writeArrayNull(long features) {
         String raw;
-        if ((this.context.features & (MASK_NULL_AS_DEFAULT_VALUE | MASK_WRITE_NULL_LIST_AS_EMPTY)) != 0) {
+        if ((features & (MASK_NULL_AS_DEFAULT_VALUE | MASK_WRITE_NULL_LIST_AS_EMPTY)) != 0) {
             raw = "[]";
         } else {
             raw = "null";
diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderAdapter.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderAdapter.java
index 046b59ca9..0caa3b5c0 100644
--- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderAdapter.java
+++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderAdapter.java
@@ -7,6 +7,7 @@ import com.alibaba.fastjson2.util.Fnv;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
 import java.util.*;
 import java.util.function.Consumer;
@@ -697,6 +698,17 @@ public class ObjectReaderAdapter<T>
                     continue;
                 }
 
+                if (fieldReader.field != null && Modifier.isFinal(fieldReader.field.getModifiers())) {
+                    try {
+                        Object value = fieldReader.method.invoke(object);
+                        if (value instanceof Collection && !((Collection) value).isEmpty()) {
+                            continue;
+                        }
+                    } catch (Exception e) {
+                        // just ignore
+                    }
+                }
+
                 try {
                     if (fieldValue.getClass() == fieldReader.fieldType) {
                         fieldReader.accept(object, fieldValue);
diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplInt8ValueArray.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplInt8ValueArray.java
index b45750254..3c91c298a 100644
--- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplInt8ValueArray.java
+++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderImplInt8ValueArray.java
@@ -77,6 +77,14 @@ class ObjectReaderImplInt8ValueArray
             byte[] bytes;
             if ((jsonReader.features(this.features | features) & Base64StringAsByteArray.mask) != 0) {
                 String str = jsonReader.readString();
+                if (str != null) {
+                    String[] strArray = str.split(",");
+                    if (strArray.length == 1) {
+                        str = strArray[0];
+                    } else if (strArray.length == 2) {
+                        str = strArray[1];
+                    }
+                }
                 bytes = Base64.getDecoder().decode(str);
             } else {
                 bytes = jsonReader.readBinary();
@@ -105,6 +113,14 @@ class ObjectReaderImplInt8ValueArray
             bytes = jsonReader.readBinary();
         } else if (jsonReader.isString()) {
             String str = jsonReader.readString();
+            if (str != null) {
+                String[] strArray = str.split(",");
+                if (strArray.length == 1) {
+                    str = strArray[0];
+                } else if (strArray.length == 2) {
+                    str = strArray[1];
+                }
+            }
             bytes = Base64.getDecoder().decode(str);
         } else {
             int entryCnt = jsonReader.startArray();
diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java
index 19ff68369..eecdb649f 100644
--- a/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java
+++ b/core/src/main/java/com/alibaba/fastjson2/reader/ObjectReaderNoneDefaultConstructor.java
@@ -6,6 +6,7 @@ import com.alibaba.fastjson2.util.TypeUtils;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Modifier;
 import java.lang.reflect.Type;
 import java.util.*;
 import java.util.function.BiFunction;
@@ -563,6 +564,17 @@ public class ObjectReaderNoneDefaultConstructor<T>
                     continue;
                 }
 
+                if (fieldReader.field != null && Modifier.isFinal(fieldReader.field.getModifiers())) {
+                    try {
+                        Object value = fieldReader.method.invoke(object);
+                        if (value instanceof Collection && !((Collection) value).isEmpty()) {
+                            continue;
+                        }
+                    } catch (Exception e) {
+                        // just ignore
+                    }
+                }
+
                 Class<?> valueClass = fieldValue.getClass();
                 Class fieldClass = fieldReader.fieldClass;
                 Type fieldType = fieldReader.fieldType;
diff --git a/core/src/main/java/com/alibaba/fastjson2/schema/AllOf.java b/core/src/main/java/com/alibaba/fastjson2/schema/AllOf.java
index 8ec4bc455..d8121b165 100644
--- a/core/src/main/java/com/alibaba/fastjson2/schema/AllOf.java
+++ b/core/src/main/java/com/alibaba/fastjson2/schema/AllOf.java
@@ -30,7 +30,7 @@ final class AllOf
                 itemSchema = (Boolean) item ? Any.INSTANCE : Any.NOT_ANY;
             } else {
                 JSONObject itemObject = (JSONObject) item;
-                if (!itemObject.containsKey("type") && type != null) {
+                if (!itemObject.containsKey("$ref") && !itemObject.containsKey("type") && type != null) {
                     switch (type) {
                         case String:
                             itemSchema = new StringSchema(itemObject);
diff --git a/core/src/main/java/com/alibaba/fastjson2/schema/NumberSchema.java b/core/src/main/java/com/alibaba/fastjson2/schema/NumberSchema.java
index 721cb13c4..213fe50ac 100644
--- a/core/src/main/java/com/alibaba/fastjson2/schema/NumberSchema.java
+++ b/core/src/main/java/com/alibaba/fastjson2/schema/NumberSchema.java
@@ -280,7 +280,7 @@ public final class NumberSchema
         }
 
         if (maximumLongValue != Long.MIN_VALUE) {
-            object.put(exclusiveMaximum ? "exclusiveMaximum" : "maximum", minimumLongValue);
+            object.put(exclusiveMaximum ? "exclusiveMaximum" : "maximum", maximumLongValue);
         } else if (maximum != null) {
             object.put(exclusiveMaximum ? "exclusiveMaximum" : "maximum", maximum);
         }
diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/FieldWriterListStrFunc.java b/core/src/main/java/com/alibaba/fastjson2/writer/FieldWriterListStrFunc.java
index acabbdc3e..b65962691 100644
--- a/core/src/main/java/com/alibaba/fastjson2/writer/FieldWriterListStrFunc.java
+++ b/core/src/main/java/com/alibaba/fastjson2/writer/FieldWriterListStrFunc.java
@@ -51,7 +51,7 @@ final class FieldWriterListStrFunc<T>
         if (list == null) {
             if ((features & (WriteNulls.mask | NullAsDefaultValue.mask | WriteNullListAsEmpty.mask)) != 0) {
                 writeFieldName(jsonWriter);
-                jsonWriter.writeArrayNull();
+                jsonWriter.writeArrayNull(features);
                 return true;
             } else {
                 return false;
diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java
index a69e2511f..5c0dd1074 100644
--- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java
+++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterCreatorASM.java
@@ -2452,7 +2452,6 @@ public class ObjectWriterCreatorASM
             int i
     ) {
         Class<?> fieldClass = fieldWriter.fieldClass;
-        boolean writeAsString = (fieldWriter.features & WriteNonStringValueAsString.mask) != 0;
 
         if (fieldClass == boolean.class) {
             gwFieldValueBooleanV(mwc, fieldWriter, OBJECT, i, false);
@@ -3024,14 +3023,17 @@ public class ObjectWriterCreatorASM
         mw.goto_(notNull_);
 
         mw.visitLabel(null_);
-        mwc.genIsEnabled(WriteNulls.mask | NullAsDefaultValue.mask | WriteNullListAsEmpty.mask, notNull_);
+        mwc.genIsEnabled(fieldWriter.features, WriteNulls.mask | NullAsDefaultValue.mask | WriteNullListAsEmpty.mask, notNull_);
 
         // writeFieldName(w);
         gwFieldName(mwc, fieldWriter, i);
 
         // jw.writeNull
         mw.aload(JSON_WRITER);
-        mw.invokevirtual(TYPE_JSON_WRITER, "writeArrayNull", "()V");
+        mw.lload(mwc.var2(CONTEXT_FEATURES));
+        mw.visitLdcInsn(fieldWriter.features);
+        mw.lor();
+        mw.invokevirtual(TYPE_JSON_WRITER, "writeArrayNull", "(J)V");
 
         mw.visitLabel(notNull_);
     }
@@ -5018,6 +5020,19 @@ public class ObjectWriterCreatorASM
             }
         }
 
+        void genIsEnabled(long fieldFeatures, long features, Label elseLabel) {
+            mw.lload(var2(CONTEXT_FEATURES));
+            mw.visitLdcInsn(fieldFeatures);
+            mw.lor();
+            mw.visitLdcInsn(features);
+            mw.land();
+            mw.lconst_0();
+            mw.lcmp();
+            if (elseLabel != null) {
+                mw.ifeq(elseLabel);
+            }
+        }
+
         void genIsDisabled(long features, Label elseLabel) {
             mw.lload(var2(CONTEXT_FEATURES));
             mw.visitLdcInsn(features);
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSON.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSON.java
index a02a507e8..3b728413c 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSON.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSON.java
@@ -37,7 +37,8 @@ import java.util.function.Supplier;
 
 public abstract class JSON
         implements JSONAware {
-    private static TimeZone DEFAULT_TIME_ZONE = TimeZone.getDefault();
+    private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getDefault();
+    private static final int MAX_LEVEL = 2048;
     public static final String VERSION = com.alibaba.fastjson2.JSON.VERSION;
     static final Cache CACHE = new Cache();
     static final AtomicReferenceFieldUpdater<Cache, char[]> CHARS_UPDATER
@@ -45,7 +46,9 @@ public abstract class JSON
     public static TimeZone defaultTimeZone = DEFAULT_TIME_ZONE;
     public static Locale defaultLocale = Locale.getDefault();
     public static String DEFAULT_TYPE_KEY = "@type";
+    @Deprecated
     public static String DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+    public static String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
     public static int DEFAULT_PARSER_FEATURE;
     public static int DEFAULT_GENERATE_FEATURE;
 
@@ -158,7 +161,7 @@ public abstract class JSON
             context.config(JSONReader.Feature.SupportAutoType);
         }
 
-        String defaultDateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        String defaultDateFormat = JSON.DEFAULT_DATE_FORMAT;
         if (!"yyyy-MM-dd HH:mm:ss".equals(defaultDateFormat)) {
             context.setDateFormat(defaultDateFormat);
         }
@@ -213,7 +216,7 @@ public abstract class JSON
         );
         JSONReader reader = JSONReader.of(text, context);
 
-        String defaultDateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        String defaultDateFormat = JSON.DEFAULT_DATE_FORMAT;
         if (!"yyyy-MM-dd HH:mm:ss".equals(defaultDateFormat)) {
             context.setDateFormat(defaultDateFormat);
         }
@@ -1304,7 +1307,7 @@ public abstract class JSON
         }
 
         if ((featuresValue & SerializerFeature.WriteDateUseDateFormat.mask) != 0) {
-            context.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
+            context.setDateFormat(JSON.DEFAULT_DATE_FORMAT);
         }
 
         if ((featuresValue & SerializerFeature.BeanToArray.mask) != 0) {
@@ -2304,22 +2307,37 @@ public abstract class JSON
             return javaObject;
         }
 
-        Object json;
         try {
-            json = com.alibaba.fastjson2.JSON.toJSON(javaObject);
+            return adaptResult(com.alibaba.fastjson2.JSON.toJSON(javaObject));
         } catch (com.alibaba.fastjson2.JSONException e) {
             throw new JSONException(e.getMessage(), e);
         }
+    }
 
-        if (json instanceof com.alibaba.fastjson2.JSONObject) {
-            return new JSONObject((com.alibaba.fastjson2.JSONObject) json);
-        }
+    public static Object adaptResult(Object result) {
+        return adaptResult(result, 0);
+    }
 
-        if (json instanceof com.alibaba.fastjson2.JSONArray) {
-            return new JSONArray((com.alibaba.fastjson2.JSONArray) json);
+    private static Object adaptResult(Object result, int level) {
+        if (level > MAX_LEVEL) {
+            throw new JSONException("level too large : " + level);
         }
-
-        return json;
+        if (result instanceof com.alibaba.fastjson2.JSONObject) {
+            JSONObject jsonObject = new JSONObject();
+            com.alibaba.fastjson2.JSONObject object = (com.alibaba.fastjson2.JSONObject) result;
+            for (Map.Entry<String, Object> entry : object.entrySet()) {
+                jsonObject.put(entry.getKey(), adaptResult(entry.getValue(), level + 1));
+            }
+            return jsonObject;
+        } else if (result instanceof com.alibaba.fastjson2.JSONArray) {
+            JSONArray jsonArray = new JSONArray();
+            com.alibaba.fastjson2.JSONArray array = (com.alibaba.fastjson2.JSONArray) result;
+            for (int i = 0; i < array.size(); ++i) {
+                jsonArray.set(i, adaptResult(array.get(i), level + 1));
+            }
+            return jsonArray;
+        }
+        return result;
     }
 
     public static Object toJSON(Object javaObject, SerializeConfig config) {
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java
index a9eed4ead..a2981e868 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONArray.java
@@ -592,17 +592,7 @@ public class JSONArray
 
     @Override
     public Object get(int index) {
-        Object value = list.get(index);
-
-        if (value instanceof com.alibaba.fastjson2.JSONObject) {
-            return new JSONObject((com.alibaba.fastjson2.JSONObject) value);
-        }
-
-        if (value instanceof com.alibaba.fastjson2.JSONArray) {
-            return new JSONArray((com.alibaba.fastjson2.JSONArray) value);
-        }
-
-        return value;
+        return adaptResult(list.get(index));
     }
 
     /**
@@ -845,7 +835,7 @@ public class JSONArray
         ObjectReader objectReader = provider.getObjectReader(clazz);
         JSONReader jsonReader = JSONReader.of(json);
 
-        String defaultDateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        String defaultDateFormat = JSON.DEFAULT_DATE_FORMAT;
         if (!"yyyy-MM-dd HH:mm:ss".equals(defaultDateFormat)) {
             jsonReader
                     .getContext()
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONObject.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONObject.java
index bd0b7ceb9..a6260eea4 100755
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONObject.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONObject.java
@@ -127,15 +127,7 @@ public class JSONObject
             val = map.get(key.toString());
         }
 
-        if (val instanceof com.alibaba.fastjson2.JSONObject) {
-            val = new com.alibaba.fastjson.JSONObject((com.alibaba.fastjson2.JSONObject) val);
-        }
-
-        if (val instanceof com.alibaba.fastjson2.JSONArray) {
-            val = new com.alibaba.fastjson.JSONArray((com.alibaba.fastjson2.JSONArray) val);
-        }
-
-        return val;
+        return adaptResult(val);
     }
 
     public JSONObject getJSONObject(String key) {
@@ -249,7 +241,7 @@ public class JSONObject
         boolean fieldBased = jsonReader.getContext().isEnabled(JSONReader.Feature.FieldBased);
         ObjectReader objectReader = provider.getObjectReader(clazz, fieldBased);
 
-        String defaultDateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        String defaultDateFormat = JSON.DEFAULT_DATE_FORMAT;
         if (!"yyyy-MM-dd HH:mm:ss".equals(defaultDateFormat)) {
             jsonReader
                     .getContext()
@@ -290,7 +282,7 @@ public class JSONObject
         ObjectReader objectReader = provider.getObjectReader(type);
         JSONReader jsonReader = JSONReader.of(json);
 
-        String defaultDateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        String defaultDateFormat = JSON.DEFAULT_DATE_FORMAT;
         if (!"yyyy-MM-dd HH:mm:ss".equals(defaultDateFormat)) {
             jsonReader
                     .getContext()
@@ -408,7 +400,7 @@ public class JSONObject
         boolean fieldBased = jsonReader.getContext().isEnabled(JSONReader.Feature.FieldBased);
         ObjectReader objectReader = provider.getObjectReader(type, fieldBased);
 
-        String defaultDateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        String defaultDateFormat = JSON.DEFAULT_DATE_FORMAT;
         if (!"yyyy-MM-dd HH:mm:ss".equals(defaultDateFormat)) {
             jsonReader
                     .getContext()
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONPath.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONPath.java
index 2908bb4bf..defecdd9e 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONPath.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONPath.java
@@ -50,23 +50,11 @@ public class JSONPath {
     }
 
     public static Object eval(String rootObject, String path) {
-        Object result = com.alibaba.fastjson2.JSONPath.eval(rootObject, path);
-        return adaptResult(result);
+        return JSON.adaptResult(com.alibaba.fastjson2.JSONPath.eval(rootObject, path));
     }
 
     public static Object eval(Object rootObject, String path) {
-        com.alibaba.fastjson2.JSONPath jsonPath = com.alibaba.fastjson2.JSONPath.of(path);
-        Object result = jsonPath.eval(rootObject);
-        return adaptResult(result);
-    }
-
-    private static Object adaptResult(Object result) {
-        if (result instanceof com.alibaba.fastjson2.JSONArray) {
-            result = new JSONArray((com.alibaba.fastjson2.JSONArray) result);
-        } else if (result instanceof com.alibaba.fastjson2.JSONObject) {
-            result = new JSONObject((com.alibaba.fastjson2.JSONObject) result);
-        }
-        return result;
+        return JSON.adaptResult(com.alibaba.fastjson2.JSONPath.of(path).eval(rootObject));
     }
 
     public static boolean set(Object rootObject, String path, Object value) {
@@ -90,7 +78,7 @@ public class JSONPath {
         JSONReader.Context context = JSON.createReadContext(JSON.DEFAULT_PARSER_FEATURE);
         JSONReader jsonReader = JSONReader.of(json, context);
         Object result = jsonPath.extract(jsonReader);
-        return adaptResult(result);
+        return JSON.adaptResult(result);
     }
 
     public static boolean remove(Object root, String path) {
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONWriter.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONWriter.java
index fb5d0728d..bd8aa96f3 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONWriter.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/JSONWriter.java
@@ -57,7 +57,7 @@ public class JSONWriter {
                 break;
             case WriteDateUseDateFormat:
                 if (state) {
-                    ctx.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
+                    ctx.setDateFormat(JSON.DEFAULT_DATE_FORMAT);
                 }
                 break;
             case BeanToArray:
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
index 6781ea520..452573a68 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java
@@ -196,7 +196,7 @@ public class ParserConfig {
     /**
      * fieldName,field ，先生成fieldName的快照，减少之后的findField的轮询
      *
-     * @param clazz
+     * @param clazz the specified goal class
      * @param fieldCacheMap :map&lt;fieldName ,Field&gt;
      */
     public static void parserAllFieldToCache(Class<?> clazz, Map<String, Field> fieldCacheMap) {
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java
index 6afd15f4a..c299a842a 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/serializer/JSONSerializer.java
@@ -96,7 +96,7 @@ public class JSONSerializer {
                 ctx.config(JSONWriter.Feature.IgnoreErrorGetter);
                 break;
             case WriteDateUseDateFormat:
-                ctx.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
+                ctx.setDateFormat(JSON.DEFAULT_DATE_FORMAT);
                 break;
             case BeanToArray:
                 ctx.config(JSONWriter.Feature.BeanToArray);
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/config/FastJsonConfig.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/config/FastJsonConfig.java
index 8e3efc9bb..667a64b3a 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/config/FastJsonConfig.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/config/FastJsonConfig.java
@@ -186,7 +186,7 @@ public class FastJsonConfig {
      * @return the dateFormat
      */
     public String getDateFormat() {
-        dateFormat = JSON.DEFFAULT_DATE_FORMAT;
+        dateFormat = JSON.DEFAULT_DATE_FORMAT;
         return dateFormat;
     }
 
@@ -194,7 +194,7 @@ public class FastJsonConfig {
      * @param dateFormat the dateFormat to set
      */
     public void setDateFormat(String dateFormat) {
-        JSON.DEFFAULT_DATE_FORMAT = dateFormat;
+        JSON.DEFAULT_DATE_FORMAT = dateFormat;
         this.dateFormat = dateFormat;
     }
 
diff --git a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/spring/FastJsonJsonView.java b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/spring/FastJsonJsonView.java
index 089afca69..c7c852313 100644
--- a/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/spring/FastJsonJsonView.java
+++ b/fastjson1-compatible/src/main/java/com/alibaba/fastjson/support/spring/FastJsonJsonView.java
@@ -243,7 +243,7 @@ public class FastJsonJsonView
     /**
      * Set extractValueFromSingleKeyModel.
      *
-     * @param extractValueFromSingleKeyModel
+     * @param extractValueFromSingleKeyModel extractValueFromSingleKeyModel
      */
     public void setExtractValueFromSingleKeyModel(boolean extractValueFromSingleKeyModel) {
         this.extractValueFromSingleKeyModel = extractValueFromSingleKeyModel;


Test patch:
diff --git a/core/src/test/java/com/alibaba/fastjson2/JSONObjectTestBase64.java b/core/src/test/java/com/alibaba/fastjson2/JSONObjectTestBase64.java
new file mode 100644
index 000000000..16d5a22ef
--- /dev/null
+++ b/core/src/test/java/com/alibaba/fastjson2/JSONObjectTestBase64.java
@@ -0,0 +1,41 @@
+package com.alibaba.fastjson2;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
+
+public class JSONObjectTestBase64 {
+    @Test
+    public void testBase64HavePrefix() {
+        String strBase64 = "data:image/jpeg;base64,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";
+        Map<String, String> map = new HashMap<>();
+        map.put("data", strBase64);
+        map.put("name", "LLL");
+        JSONObject jsonObj = JSONObject.from(map);
+        A a = jsonObj.toJavaObject(A.class, JSONReader.Feature.Base64StringAsByteArray);
+        assertNotEquals(null, a.getData());
+    }
+
+    @Test
+    public void testBase64NotHavePrefix() {
+        String strBase64 = "/9j/4AAQSkZJRgABAQAASABIAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+EAWEV4aWYAAE1NACoAAAAIAAIBEgADAAAAAQABAACHaQAEAAAAAQAAACYAAAAAAAOgAQADAAAAAQABAACgAgAEAAAAAQAAAbagAwAEAAAAAQAAAbYAAAAA/9sAQwAHBQUGBQQHBgYGCAcHCAsSCwsKCgsWDxANEhoWGxoZFhkYHCAoIhweJh4YGSMwJCYqKy0uLRsiMjUxLDUoLC0s/9sAQwEHCAgLCQsVCwsVLB0ZHSwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCws/8AAEQgBtgG2AwEiAAIRAQMRAf/EABwAAQACAgMBAAAAAAAAAAAAAAABBwUGAwQIAv/EAFIQAAAFAwEEBgUHCQQIBQUBAAABAgMEBQYRBxIhMVETIjJBYXEIFIGRsRUjM0JScqEWJDRTYoLB0fAXQ1SDJURjc5PC4fE1RXSSshgmNjhVZP/EABsBAQACAwEBAAAAAAAAAAAAAAAFBgIDBAEH/8QAMREBAAICAQMDAgQFBAMAAAAAAAIDAQQFERIyBiExEyIVM0FRFCNCUmEWcYGRJDRD/9oADAMBAAIRAxEAPwD0ejsiRCOyJAAAAAAAAAAA9gAAAAAAAAAAAAD2AEZIRtp2drKccyIAMyLcIIyMtw0q69VbXtMjblTUSJBbugYUS1Z5YIxVtZ1muyvZRQ4CaRG/XStx/ju+I2QqzZ7Yw1zthXHrJf8ALqESA1typTDKebiyT8RodZ1rsykp2Wqmma53Ijdf8S3fiKKlRPliT0tyXU7Pe/Vm+RJ/AZam0mktdeEwwfflHWP37yISNXGyn/VhEbHMQp8I5z/w22Z6QFTl7PyHa7qy71yCVj8C/iMFJ1C1PqatpDsGmp5EnIgsNp3bOxyIsD72lfWTjzEtVwtWPLKDt9Q3Z8I9GJkIu6pfp92yS/3e74Donaa3l7Uiu1F//NMhsADrjxmt+yOlzO3P+prxWXTv7yVOP/NUPr8jKb/iJn/FUNgwfANkyPaNO4bM6Wvj5w145PaznpizLXF2TTi7Euaj/OUJataXG3xLgqDPm8ZjIya/SIJ/OzkJUXclRGOh+W9B4dM5jnuHNKnS/Xo769rks/HX/pkI0y+6bug3a6v/AHhZGXiaoak0tX5xCgVRrwyR/gMRHuKkzTw1UGjXyWZEfxGQI1Y2kby5lwGv8N1bvDLZ+L7tHtbFs1P9IhLJ7NetuZC/bbI1F8BvND1Xs64EJTHrDDbx8W3/AJtRew8GKgcS26jDjSXC8UDFzLXo04uvCaQv7bajSY4reFzjxy76PUUJfmx6f7PUrL7L6Ntl1DqD70KIy/Acg8p09i5rZWbtu3C+hCeDEhWS/EbjRtdqrS3UMXbRXdj/ABEVO0Xu/wCoirdO6ryinaN6jY8ZL9Aa5bd7UC7Iu3Sqgh79hayJfuzkbCkyxxHI7f8AL6ARkSAAAAAAAAAAAAAAAAAAAAAAAAAAACEdkSIR2SISAAAAAAAAAAAAAAAAAAAjJBtFzACxwIQYx9Tq0GkQly6hKajR0FvW4sk59pmQoy69X63dUo6ZZ7aokL68xwse4xnVVm3PbHDXZZGrHdPKzr01Rt+ymuilSEyZityY7SiUrPiRcBTVavm+L8220r+QKWZdhGSWsvPj8BjqVbUSE961IWubNc3rfkKzg/AjHxL+UbgrsW1qH15D/wA464XBpJc8cBMY4+OtDvv90F+KT2rfoauPf92KplNOTWEU61Ka5WKkZ4cmOZNKD5nncXtFn0XQF+chuTdFbkLcLixHVso94s6zbKpll0REGAynbP6Z7Z6ziuZmNkMiJPAxF2bEpe0PaKXr14x95e8lZNej7YqGdg4Ulfib55GFqvo8UokbdDqkqE+gtyFr2iM/HvF0ZIyyMDdN40Wz6YubWJyI6EFub2i2lnySXEz8hrhOUfHLozCMvtlh54rFPuuwXkN3FATPp+cJmNJMyL7x8C9o7kOTGmxkPRnekYPiZHkbBIk3hrWtUaHHXQbXNRZeeR13y8CPH4bvExr956fzdK3manSlPzaGosPoURqNvxPHAvETWjyc4fbar/I8PXdDvp9suTuzz3APmO+3IYbfYUlxtzrEZKyRGPsjJsjUrcRcTPuFpxLGY92FFzDOJdmce7gqE2PTIi5Mxeww337WDX5cxj4Vr3nqFRn6jSmFQoLafmdsjI5Hlz+AyFi2u7qddnr0pK0UCA5uQrOHz44LmXMek48duHGbZjtpbZbTsobQjBEKnyHIysl2VfC98ZxMaoRnbH7lF6QUSxKu36lOpKWbkjFl9qVnbPu2iSr+QuT8lLfItk6NB/4BDR9RdMnKq8i47Vc+TbijHklt7ieLkZf1yHa011NaulK6PV2/k+vxOo7He6pr8Uke8QvVYejsV/Rqz68lalU1MN4+Dkc9jHsLcKouLTa7LBScylOKrlJQWVoNJm635FxMeltxHgcS0k4g0qRlJ7jIyyRkNtV065d0MtNlMLo9tkerzFSqxFrEfp46sG39I2at6PMu4dw93sGb1V03eoUhV4Wu0pHRdaVFSk8KLmRF+I1ymVNiswGZzGzsOHg0ErOD5C3aG/G+PZnyUTlOMzqS74eLsGeQNJOdVfRmjktOQASeId3mg4zzDxYSXaUJx/1qmvrpc0uC2FGSfwG0W/q7dNoPIiXPFVUack9n1ppBmtBezj7R0+yGEqQRGhJ7XEl7yEXs8bVf7xx2pzU5q+jPSWe6K9rYvGh3hTyl0ea0+ku0j66PMuJDP55YHk92336dMKoW5NdpVQTwJheG1+ZGLIsjWzpZKKNeDHqM4zw3K4NuF4meCL4CsX6VuvLpL3XLV36dqPWMl1AOFh5p5sltOocQfBSVEZH7hy5LmOR359kgAAAAAAAAAAAAAAAAAAAAAAIR2RIhHZEgAAAAAAAAAAAAAAACMkA+T6pbxql83/SLHpfrE90lvqI+ijoUW24fkMfqPqZAseAbTZpmVV1OWYqVZV5mRb8Ci49Om1mpHXLldVKnPHlLSzyhsuWD4eQ69bVnsS6RcW3vV6ke6fy5qnPr+os9NQuFxTFNQv5qC2rZ/wDcX8T9gyLLDcVjoWWkMo+wgchmo179kkciDereLhq6cKIdI+SgbnIW7UusvFxSpKYUORKX2Gm8l5jc9AbZNNGk3VNb2plQWomzUW8kFy8zIVpeby2racbaV13XEp88j0fZVNRSbOpcJkjSlllJH543iC5m378VrL6epxirNrZMke4jHytxDaDWtaSSRZMzPBYGv3Xe9DsymnLq81De/BNEojWs/BPExVJu31rO5sModtm1jPe5vJ6QjwECs7O3ZrK0mf8AIdlxVVqtOZwbadptGPEuI4bW0elVGolX9QJiqvUlb0x9r5pn2FuP4efEb3aFi0Sy6eUalRSJZ9t9e9xXmZ7xlq1U0UihS6k52IrSnDz4EA+JFTo9FS1FelRImdyG1uJRw5EZkPqp06HXKO9CloQ/Fkp2DLiWB4huO46hdlek1OZIX88vLZGs8NlyIhfvo73tKq9MlUGoP9M/E66FGrJmk+7iDPtV+hgrDu6pWxUn+iitr6SK4s+KT8THDctwxzpK40GUh598ySRIUWd/IiFg6/0KIidb9fkNGthuSTMkuG0k9+DP2GMRdllW3TdVbNplDgNRUSvzpzCjPKS3lxEnXyU4U/TQ0uIpt2Pr5yuTT62o9qWXBgNN7K+jJTplxUs+Iz06pw6cx00yUywj7S1kkveY5y2EI3bkp7h4+1hvabdN8y4xSHE06As2m2yVgjMuJ7uP8hGJh6/iTI81knozqHmz4LQojL3kK61J0y/KLYrtvq+T7hiddlxHV6XwUKi0EvSZTLxK35Mpx6DOLLZOKzsK8Mj1QDFWWmmpx3A6q3q836lcMXqutr3dJjvTnj7M8xZwrnUjTFq62kVOku/Jlei725TXVNfgZlxHS051Odqko7aupv5MuCNkjQ71SfIi4lnG/wAgFmSGG5Mdxl5CXG1lsqQfAx5huCi/kBqW/Sk9WlVEuljfsGPUR8N4p70hKIT1oR62yn5+nOlkyLfsHxz+A361/wBCyNmHNtURvplXJpn1sd4D4jvpkxY76f7xvJn4j7wZcRf457sez5ZOHbLpkAAGTUDrT6ZEqrBtS0ZLmW4y8jHZE7QxsrjOPbJurtlVLurcVrX7XdM5hRZynapb2cbZpNTjJf13D0NQrgp1yUlqo02Qh+M6WSUk+HnyHn0223462nkJWhXcYxNIqNY02q3ytQlOyqQ4r85hmrPDkW/HngVXe4uUPvq8V44zl43/AMu7yercl9oSNetK76VedDZqNLlE6hSeujdtIPkZdxjYE7k7xBrGkAAAAAAAAAAAAAAAAAAAEI7IkQjsiQAAAAAAAAAAAAAB8kY0XUnUaHYtISovzioyeqzHTxPxxxwMted3wbMt16pS1JMyLDTe0RG4ruIuY86wSnXLWnLor6lOS3nMx2/qtp5bPcOrV1pbEukXHt7UdSvvkmmU+ZLqT1drzvrdRePJ7f8Adl+yQy/HjuAjzw3iMls5Vu8xdNfXhrw6RfOdnZt2re+fy+0pzxEKNKSMzUlCCLJmrcRF5jCzbkQT/qlJYcqMxzcTbKTV/wDHPwG0ULRq57mcblXZNVT4pbyisdvHI+Q5dnk66fbHukdPhLtj7pe2FfXZXIExpiJGkE64l5JmpvBkREfHluFw1XV9x2NFoNkQlVeqG2RG4gtppo/Ey7/aQ5770uotI0mqcaiQElIZb6TpT6y928zye/gXMZnReDQy07p9QpkJpp55HzzhJ3qWW48mKptbGdiz6mV21NWGpX9PGWLtXR116opr99TV1uqnhSWlfQsmXIuB/Dw7xa7LSY7JNNIShCdyUILBEQ5gHM6wajqeh13TOupY3mcVe4htw6s6G1PgPRHiy28k0GXge4B4CZI/V0C4PRuacVqFUHUpUTaWcLPuyNYvHSu47buJ+NEpb82C6vMdaEme72C9tENOZNlUFyVVGtiozN6y70F3EYxbZZc+v0RMrSac59eO4h1HsGn1B439VtNZjvB6BjJ8M7I3LX6UmLpJUEcTfWhtBDSL+jPUGjad3A4lRfJq0Mu4TwI+fIZMF+ySNUN5KeJoVvHhKuJU3c1XQ92/WV8R7uZdTIYQ8jsOIyPMmsmldYg3S/XKPDdmwpp5cQhOTQo/AiGL2LRNNm3nNTqGhna2yXkzIe3h530J0wqcCtHc1biuxVNINEdlacK395kZZ5j0QMnknyK/1J00YvCIifT1fJ9fi9aNLb3HnkeOJCwgBiqbTrUuQ9Ul2nd6fUq9EyROOdVMgi7yM8bxs2qkNE3TStMuJ3ermv2kOtqJpxEvampfbzErMXrxpTe4yVyM+XwFazNS50Kw6/aV7NKi12PGU205jCZST4GRn3+QMlf0S4X6dRovyrTX2YuMNyCQeysvM93uG0Qp0KoN9LEeQ4X2SURn+AtrS6jx5GklHiVGKl9K2MmhxGdx7y48zGuXNoFT5Ty51tSn6TNPfsbRm0Z+Xd7PcJvV5Wyv7Z4V3c4Om+WZ156NPwf2QIjPh3DEVFVy2XJTGuqnKJhPZmMJM0n5nwGRiTotRZJ2G8mQR7jIjL+AsOvu03R6xl0VLa4+/Vl90euHKAnB/ZEHu4jsRYJ4ZLZSvPbI+BiABnifRiYU6p6d135eoRrXTzWXrcQuCyz3F3GPSFq3PTruoDFWpju2w6nJoz1kHyMu4xQxFt5JSUqzxSfAxjbfrsvS650T2ErXQ5h4kMIVtE3447v4iq8lx/Z/Nr8V34jlfq/ybfJ6oyQkdGnVGJVqezNiOpejvFtJWSuY7uSECs6QAAAAAAAAAAAAAAABCOyJEI7IkAAAAAAAAAAAHWkyWojDkh91LbLZZUa1YJJczM+A7GS5ikNcr0eecZsmkLUUuXvkLLfsJ5buY9jjMs9MMZZxHHXLSLirz+pd5qnrSsqHTjxHZUrqunz5Hn4DIElGMbOwj6qSHXhQW4EMosdOCbLfjv8AEY+pV975SRSaGx8o1Rw9nCE7RF7CFxphXoVdZfKhbNl3K39IfDuVWtQqU0tcqQkl/VbTjaPyIclu2JdOoy0PyErodHPdtGkyccxyI8DerA0TbgOt1m7XPlGqbjJg97bf8/aLdbaS2lKUFsILglKcEQgtvkrLvaPtFZdLiKdX3n90muWhp7QLNhk1TYTZu/XfWnK1+0xtWwQkBFJp15kRqbCdivJy28g0LLwPiKa0lmKs+9axp7OUpCUOKkwOk3baD7i5+zxF2irdXbIm1Rhi5bd+br9NPbbUhOVOJL6uO/8ArmAtIBpOnOoMK+6IT6DSxPZwUmMZ4UhWPs8cchuuSLioBIAOJx1DSDW4tKUFxM1YIgEGW0ZGad/dw3CHn2Y6Np91Daea1ERfiKQvvXc48pdJtFspUgu3LV2E+XEjFT1CZXq8/wBNWK5Kdc+yhZkkaJ3Rh8pbS4nZ3Mda4rc1iqsW5rotu0YktpaHZBOyVpWRpQku5WD3bsje9QrYaurTiVTIikLU2glxzI8ltp4cB5YKiM5NZvvm4XBZqPJe0Zej3BdlsPIkUatOr6PizI6yT9h8RjHbrk7rvTu7VDu7er0Bo1df5S2Q00+ezOpyvVX2z7RGngai4l7e8WGpKXC2VpI89xlkh5FoGpa7c1JbryYSoTM7qT45Z2T/AG0kff3+/mPVtLqsSt0tidCdS/HkI221kZHn3Dpxnr8K/bCUM9JYd9KSJOCSRFyIfQADWAAAAo30iYlLnQKRTkw0vVqZKS224jtkjB5yRbzLJkLnnTo1OgvS5TqW2mE7bilHgiIt/ExS1lsPao6pyL1koX8i0z5qClSTLbUX1i58c+4BcdDpyaTQoUFHCO2lv3FgZEQkSA6M2BGnsdBLitPt/ZcRtEKbu7Qt6K+dVsqUqI+W84i+ws/DkLw94jPgMoylCXWLCcMWR6Sw8oxbgeiT10yvwlUuot/rvmyP34GaRhwtrj4kLrvHT+h3pCNqoxcPl2JCCw4jyP8AmKDrlCuLTKb6rV0KqNGd+iltpMzR97kLHp8pjxuVXkODxn76PZkDIyLJgPhl9mTHbkR19I0e4jI8l7yH2RGfBORYcSxLHXCnShmGeksJIcb8duSwuO8hK21cx9id4Sh3/bIjKUJd0WR0hu960q+dn1h9Rw5CswnXFbknu6uT5/1xHoLbIyyY8r3DSl1OnkbCuimRlbTLhdohdWk18flhaJHI/wDEIeG5BHuMz548RSOQ1v4e328X0ni97+Kq658lhAIyQkcCVAAAAAAAAAAAAAEI7IkQjsiQAAAAAAAAAQoBg7lrsa2rel1aUeGorajxwyZ8CIeaaB6zXJ026ameZVQVtJzxbR4eA3rXiuOVar0yzYTuOlPpZJp4EXcSuQ0UmanddURbNsJShsiw9I+qhPLJbiEroYhXj60/6URyWLb8R1avbMvnP+H0h+q3XVit+2EKcW5udlGk9lGN59Ys4F8af6bUyxqZ82hMqoub3ZThZUflxwOayrXtyw6OiFDlRukPe7IWtO04fieRtKKhBXuRMYX5Okf8Ry7W1O+XXLr1NOvVj2xw7QCCMjLJHkjEjkdgAAAD5URGnZUWR9AAqK9tLp7NbVdlivqp9YQe07H/ALqR7OH8/DiIt3XCG28qm3nDdoNRbPZM3k4QrxzwL4eIt4YOu2jQrla2KtS2JXiacH7y3gO3Dq9NqTPSRJzEhPDqOkfwMUzrlqA+g27SojyenkpJUp1B9hPcRH4/AZOdoBb8NLkml1ap0pDZbWwy+eN3mYoWAhT9SmyFyHZWHFNk85vMyI8FvMabbOyHcleK0sbmzGrLtR4rUKP0TReJnzPzG7W7plW7hgeusoTFYUWUEvOTLwGndw9EWRfNDct1tp2Yww60REpClkk/YRmIymOLZfe+i8xdfx1EcacVC1SkSaJUVwprJodT9Y9xK8sjpZG2aj12JcV0G9C2ehbRsbZcDPfvIalwMapxxGfbhNaNttuvGd2O3LqVGnN1CIe3udTwMhsWl953VaDUhyGwupUdlWZMQkmpbRH9ZJFvLx/rGI2jxgZnTyqnQdV4Wxs+r1L5l5Cz6p58PMdepb79io+p+Ohiv+Kr/Ty/y9FWtqFbd4wieplRYN0i67DitlxHmkzyQ2kjI+G8VpcuiFuVqQc6m9LRJ5cHIh7Be1JbvdgYNNgarUXqUy90zGPsStoz9+BJvnK6clwGGuC6aJbNPVNq1RYisl9tRZPyLiYrD8kNZKknoZV2w4SPttpUZ/Ad2kaDU85yKhdVWmXFKL6j6z6P3EA12dU7i1zqZU2jtP0u0Gl/PS1JNKpXgWe7+vAXXQqHBt2ks0ynsJaYZIiLHf4n4jtQ4UaBGJiKw0w2n6jaNkh2QAAAAABGSASOlUqXCq8JyHUI6JDDhb0LTkhzyJUeIyb0h9phsuK3Fkki9pitq1rradLeXHhOP1eSXBERO3tH4GW4wFcXpp5U9NZjlVoKHJtAdPLzG9SmS5kRd3iOvTp0WrQ0SorvSMHx628vMbk7qvddb+aptgS3GFGe0T+SynlvRgVs5Z99w68/VIFquxYznaipWZkXkQltDkM057Z+KE5PiI7WO+v2kzviJ2sJztDAO3S9TXNiuUWoQF81oNKfeZEMnDrlMnfo01oz+woyz7siz17tFvxJSruP2KfeUerub1KHQpFZXYWo0WqpWpulVJXRyeREfeZdxlxL2jv4Pu7x0q3Tk1SkvR1p65FttnyUXAad/XxsVN/G7WdPYjmXw9PMPNyI6HW1JUhW8jLeR+Q5hWWiN2HcVkIiyXMzadhlwjPrbuBmXHeLMyQpGfb2fScZ6+6QAAAAAAAAAAAAEI7IkQjsiQAAAAEZISMLcNy0q1aQuoVaaiMw0nO9RZWfIs8TAZk928xoF36v21aa1xjf9eqCP9XY6xl54zj4jR1Va99Y5PQ0RDtuW1wOYrJOyC5lkWDZ+lduWc2S40X1qbxOU/1lmZ+J8PYAo9qw7/1AueoXAuH8kMy19UpCj2m08i7xttF9HWRBj4fumWw45vd9V6mfbk/gL2QgsY7uWMD6wQy7pdvadI93cqFr0eaEX09Zqq/88xC/R4oiOtFrtcYV/wCoMxcIDEUoejl3UdfS2/fEtCk8EP5UX4j5Vcur1lmZ1mjRa/E/WxFYUXsF2jjMtout39xlkgFeWprTbNySkQnnHKXOVu6CV1Tz4Z7xYqVpcTtIUky5lvGn3fppbt4xzTPhpalY3PslsqI/Mv4jKWhbh2tbrNJ9cdm9D/evcTAZ4AAAAAAYyvpUu3pyEds2VYHjWiF+aLI+KXV58d5j2u80l5tbaiylRbJjx3VqWu2r4qtFeQoiN43WdssZSZ5LA5tqPWvphZPTd0a92OZOEfW1wxtftYVjIjwECHfXO3qAAA9B9U5KlXvbyGt7nrKDLHERjuGwaWUY7i1ViupIzYpqOlUZFks928dOtDrZ1wrPqa6NelnEnq8BCRImHyQAAAAAAAAEZMBI+FEY+xGSLiApmdprdl+3RJdvOqLjUSO5iNEhrwbhftYFh0CxLbtlkkU2ksNn9s07av8A3HkxseSPeQkBxbGEbJZL7pEQ+iSf1lZ/dH2ADpy6ZDmo2JEVp5PikV9cmhdqV3bdjMLpcky3Liq2fw4fgLM+qH1Q6vOn6PNVZ02vuzS6WnLRcFORwQf0nu4jDU26YM131eQlyDMbPC23tx55YPePVWztpxjdyMadeGmNv3lDNEuMliVgyRJYTsqQfMSevyVlP+UVtcTRs469OklQafVM7S1gJg+pBrScYLhtdw9JGZGkeSr2sm7LCmRZrvSVGnxHUuMy20mZoxzxnHvHpe1Lop91W/HqEGY3IJSCNZIURmlXeRkXA/AcN842WZnF369cqqoxnnrlsIAA1N4AAAAAAAAACEdkSIR2RIAIyQkYK6Lnp1o29JqtRe6NhhOSxvNZ8i5mA6t7XvTLHopzagsluGeGmCMtpw+REK0tmx63qTWEXVfe2VPyZxKUvOEFzUWC/r3BYlq1LUWv/lzd7avVc5gQVp3EkuBmk/w/7C7SR0aCJKE4LcRFuIiAfMSMzEYSxHZQy23uShCcERDnAAAfI+gAVDU9ZKtRarKjTbLqZstrwh5GTIy5l1cfiPpj0hrWSnE+JUIJl+uYMv5i2TbIywaUmOk/RKbJ+lp8ZeeO00n+QDUIOsthzvo64wz/AL5RJ+JjZIN32/Ut0OtwXfuvoP4GMZUNL7OqX09BiH9xOz8BrkvQGzHz2mmJUXwZfUXxMwFmNPsvI2mnULSfehRGX4DkyWM53CmnPR+KKvbpF31qGZcELf2iHF/ZxqlSDzSb5TJLk+j+YC6iMj4BkuApfp9c6V2otMqfksiEFqdqVSy2atp84v8AaYUZl+BALqAU1G9ICJHPYqltViJ+16uZkfvwMvD17sSQnLtRdif75oy+JALMPmQqHW3TuRcENqv0dGanBLsIQZqeTy3cTFmUOv0u46cU6lS25cYzx0jfDJDv7JGnGMkfEjBlXOVUu6LxfDmIl5Qfzb+cG2e5ReziOcyxvLgL1v3RKl3Q4up0lR02qHvM07kuH4l3ewUfU6BdFBug7fkwEzpxtdIhDJGo1FzIi3mI23VljxfRuO9U1yh2bOOknAJ78EI9TuM1bJW1NI+XQDYKPpZflwPJ6Sn/ACTH/WSNx+7j+A546tsvlKX+pNKuHdjLWHnXn5DcGAhUmdIPYbQ3vMjM+JkWTHpXSiwEWPa+xILbqMs+kkL5Hjs+RBYWktGshHrJF67UVFhch3f7s8BYBJ6uBKU04qj0fO+U5WzkLOufF9AIyQZIbkOZIMkXEY+fW6bS2VLmz2IyU8dtZFgaPU9dLHp/UaqSpqy3bMVHSfDd+ICyRGS+0KWXrdXauvo7WsmoSy+3ISpBe8yEdNrhcG9EWn0FvxURq/EBdW0nGcluGPl1ylQd8moxGT/beSn4mKl/scvCs9a4L8lqI+KYyTSMjE9Hi1UdafMqdR/38gz+ADYqhq9Y1NVsvV6Io/8AZqJXwMa9K9Ie0Wt0VqZLP/ZsH/HA2KnaRWVTC/N7fjGfNwzX8RskS36TC/RqZGY+42RfwAVYrXmVLVs0qyaxJzzSZfwFiWZXqhcVvInVGlu0t8zMjYe4458C+AzyGUJThKEl+6J2SJOCSnHLgA+wAAAAAAEbBCQAdeVFYlsKYkNIdbV9RaNohS9x6e1rT6qrufT5bnQbWZVL3mlwv2S/l7OQvAcRNJJJp2dx8c7wGp2FqBTb7pJPRl9DNa+mimrrIPxLiNwyR8BTWoen0+iVT8tbII49UZ60qKjOy+nyLv8Aj5jdtP78gX3QvXI+y3KaPYfYPtIVjlxIgG4AAAAAAAAAAhHZEiEdkSA4luIbQa1rJKCLJmZ4IiFFO9LrVqYtk/8A8ToSsKMs7EhzwMtxl/DzG0az3XJpdEj2/SC2qtWV9A1s8SQfEyxv/rI2mw7Rj2baUWlsIT0rZbTzmzvcWfE/4eQDYmo7TLKWmm0obQWylBbiIhzgAAAAAAAAAAAAAAAAIyQkAHwpJK3H+Kcj6IyPgI2080gOByDFe+ljtOeaCP8AgMRMse2agX51QYL33mi/kNgEZIBjqLQqZb0AoNKhtQ4qTySG04LJjJAAAKVlp6b0rIpHvSincDF1CmD+c9LBH+zp3/IAuPokcdhOeeyQkiIkbOzjyH2AAAAAwF4Tq3TreekW/B9enJ7LJ94rBNtawXbvqteYoEc/7lhO0fvF25IMkAqOF6PdEccKRX6rUa2/9c3njJJ+whu1L09takmpUOhxGzP6xoyfvPeNnABwtsNs7mmktl+wkiHMAAAAAAAAAAAAAAAAAAAAAAAAADiUglpNKk5Se4yPvIUjfVBm6ZXW3fltMLXTV7qlCb4bJ/WIi/r8ReY6syFHqERyNLZS8y8nZcbVvIyAdWg1yJcNGj1OnupdjPt7STSojwfLcMoKLs2VI0r1LcsyctSqNU19JTlnk9g+WT/r3i88ljPcAkAAAAAAQjsj5WtKEGpSiIi4mfAhKBpGrlyHbWm86U0vZfdImm8cz5ANHsVtWoWsdVu+SlTkGk/msLPZ2vtF/MXiNG0ltorZ08gR1JV076SeeM+JqPf+HAbyAAAAAAAAAAADUKvqbaNCqC4VRrLDElvi2ajyQ28azUdPrWq9Scn1CiRpMlztrcRnIDAPa6aftcK80v7qVH/AdNXpBWEXYqLzn3WTMbSzp1aTPYtuno/cyO43Z1uo7NGhf8EgGhL9Ia0S+jTOc+4yZ/AhxK9Iag/3NGq7n3WD/kLJRbdHb7FJhl/lF/IdlFMgo7MFgv8AKSAqZXpCMK+htSsuf5Ci/gPlzXapq/R7DrDn7hl/AW+UOOnsx2i/cIfZMILghJeSSAU2nWS8HvodO5xff2v5Dngak6iT57DR2G4wyo8OLWpW4vakiFvEhJcE49wkiLu3fuACDM0ZMt4+wAAFMN7/AErXMb/9Hf8AILnFLw9/pWScf/zv+QBdAAAAAAAwF2XK1advuVR6K/KbbMi6NlBqVjyIavRtcrLqqUJdqSYL5/3chJo/Eyx+IsJ1lDyDQ6hDiFfVWnJDXKtp7atb2TnUWM4svrkjZP3lgwGXg1mmVNnpIU9h9J8DQ6R/AxkCMj4HxFQzfR6ojRqft6q1KiyD4G28ZpL2GOkdq6wWz/4VcrFajp4Ny07/AHgyXXkhIpMtXL0t9exctlSVoIvpoqVGR/gZfiM9SNeLMnq2JEp2nOH3Sk7Jf+4934gxWcAxdNuCkVRrpINTivlyQ8lXwMZLaT9ot4D6ARkuAZIBIAAAAAAAAAAAAAAAAAAAK91ftD8qrOceiJMqnTj9ZiLQXWyRcCPx7vHA7Wlt4pvOx40tak+us/MyUZ3pWXMs5LPEboaSWlSVpyR7seApK3XVae67TqE4fRUuuo6WOnglKyye7Pt/ABeICMkJAAAAHyKX1kdOt3palqpUrYdklIeQSckaC45LlgzF0Cl43+nPSlecPrs0qESCI/tGniAuRlpLKCbbTsIQWykhzAAAAAAAAAAAAAAAAAAAAAIMyLiAkAHw44hpBqWpKElxMzwQD7AabXdULPtxSinVyKbn6tpROK9xHkaS/rdU6y50dn2lOqCP17iFbOPYR/EBdAgjI95KyKPO1NXL161ZrbVvxVf3EfeoW1bdHdoVvxac7KVKWwjZN1eTNfmZ7wGXFL0rr+lRUDPimF/yi6BStD63pR1dR8UQgF1AAAAAACNotrGfEMl9oYa5blptp0lVTqrqmYpHsmZJzxHNR69TK/ARLpk9iWwvgptZHg+R4PiAygCMkGSAfKkJUW9OfYMBVrGtuuJ/P6PGcP7WwRH7y3jYgAVHUvR7ttT3TUSVUaO99ph88e4xjvyH1Ztfq0K6mqpHTwZlJ3+8xdoAKTLU/UK2lJRctmuvtFuN6LlWfYkjL8RmaXr7Z0tfRz3JNMeLiUpBpwLO2CcTsrTtFyPBjD1SzrerSNmoUiM/5o37vEt4Dkptz0Sst7cGpRpJckKyMwRkZZJWSFUVH0fbUfc6eluzqQ9zjOqIvcNpsC0anaMCTFqNbdq3SOZbW5nKC5bzMBt4AAAAAAAAAAAAAAAACoNeqe9HpVLuuChSJVGkpcM0p6xoM95e/At8a7fFIbrtl1enrTtdNGVsl37WD2T94DI0WqNVmiRag0pJokNk4WDyW8ZEVnoRVl1LTOM0+pPSxHFRzT3kRbyyXkZCzAAAAB8inNMG/W9a77nr3m26llHgRC40CoNI8lqLf6z/AMaAuEAAAAAAAAAAAAAAAARkgyX2hVVe10pFPmOU+k02ZVpra+jNDLSjLPmRH3jD/LOsl4q2YNNYtuJ+teSe37lYMBckubGgMm9JkNMoLibiySXvMV/WtcrNoyjaaqB1B3G5EXDpe9O78RgYegrtTd9avG5ahV3j4tNrNtA3+h6eWvb2+n0lpK/trLaP3nkBXP8AaVqHdZ9Fa1oriMqxh+XkiL4F+Jj7TpJfF0L6W77zdQ2fGPB6pe8XShtCE7KU4Ih9gK+oWi9m0I+lOmFNfL68hRufge4bvGjxYieijNNM7P1G0kX4EO0KUvuo1bT7VCDc6pjr1CqBlHksnnZZPnxwXPu4GAusBwsvoeYJ1KkqSfAy3kY5gAUpb3X9KOtnyhIyLrFK2xv9J+5DLfiKjIC6gAAABoOrV4yrNsz1ynKT6666ltlJ/XM95457iMbVb78163oLtR2SmLYQt0i4ZMt4DsVGmQ6tEXFnxW5DC+KFpyQqWr6Lz6DOcq2nlZfpEouucRxRqZdP4ELmABS1M1kqltyypeoNHfgvF1Uy2U5Zc7s+HvMWxSazT65T0zKdLamR17tttRH78CKpRKdWohxqlCalMnxStBGQqmq6MVK25nyrp3V36c+W9cR5ZqbcP4GAufJBkjPGRTVJ1mn0KYil6hUZ+kPF1SmkhRsrPnwPd5ZFr0ysU+sw0SqfNalMOcFtqI/gA74CMkQngAAAAAAAAAAAAAAAAAAAAAAAAA4nGycSaFF1VFsmOUAFL6In8nXNd9DNXVYmm4lG7cRnjhywQugUxYqfUfSFuyKXB5pDgucAAAAfKRT+katnUu/2VcfXc48DFwJFMWMo6X6RF3QD3FOZRIR8QF0gAAAAAAAAAAAAAAADGxaFS4TjjsanxmXHDypaWiIzPxHfIiJGzs48h9gAAAAAAAANR1Ltxq57BqUFaNtwmjda3GZkst5cBtw4nG0uNm2otyi2TAaDotcK6/ptCN9e3JiGcd3KsnkuZd27AsIjI+CsiltEz+SbxvKgkn6KUTyC7izkvgRC2Z9Yp9Na2ps9pgua1kn4gMiKUs8j/wDqXuk+4oqBuUvWGx4Lmw7X4yj/AGFZFUWnf9rQ9bbirsmpJRClNJbjvmkyIwZPSHHgA1am6i2nWF7EOuQ3F/Z2yz8RsjbiHkbba0rQfeSskDFTOrOa7qrZtuJ67fSnJcQXIt5GZct2BczSEoSSCLBJLZFMGR1T0q0GfYgQdwuwAAAAAAAGNqtCpldinGqUJiU2fFK05FT1LRqs2zLVVNO64/T1/wCBfUam1/yF1AApqka0yaNNRSr8pDtHlf4okH0Ky3FneW78Ra9NqcGrQm5UCU1JYdLKVtrJZGXmWRw1mgUyvwTi1OE1KZPuWnh5Cp6jo7XbUlHUtOay7CPOVQJC9ptZciM+AC68lwEimqLra7S5XyXftJfo0r9fsmbRl97h7SMxbFNqMOpxCkwpLclpXBaFkoj9pbgHdAAAAAAAAAAAAAAAAAAAAAAAU3bX/wCzFw/+ib/+IuQUzYijm+kJd8gv7lpDZGLmAAAAHyKXuXNv+ktRKofUYqsU4q+W0ScF/IXQKi1/pzrVv0y44m16zR5SXNyTPqnxzjuzgBb4DH0apN1iiQ6gypK0SGkuEaFZLeWe4ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmybS7lqWvFxU61qimnOSWkOSHz4l5ENygej7S3l9PcdaqVaf/ANo6ZJ9xDq2Sr1j0kbrdTwbjIbz3C6wZNJh6SWVE6yaDFeXzeRtfEd1zTe0HUbK7egn5MJL+A2kAYq4qehlkVJsk/JqouP1Ctn8OA1h7R667VWqTZV2yTUnhFlq2k+8xdwAPPml0quS9eKu7csNuNVSi4cJHDHgPQYpRDh030qzQfVKdB94usAAAAAAAAAAAAAAYqs27SbihnFqcBqUyfc4nh5CqZmkFwWjPKo6e1x9kjVlcGUrLXsyLrAB06aUz5NZKfs+tbGHNjhnwHcAAAAAAAB8mpJZM1EWOID6HTnVKFTWOlnymI6PtOLJBfiYq68NWJj9YO2rHifKlWyfSPI6zbRd+8sl7x0aZonPrzpTr9uKZUX3Ov6qwo0NEXIzAbvL1asiG5sOXFDM+SF5+A5YOp9m1Fwm41ehqWfca9n44HWgaQ2LAZ2EW9GX4uJMzHBP0XsWpNKSqgsMZ4KZUpJkA3hiQxJQS2H0PIPeSkKIyP3DmyKPmaU3ZZCzqFh1+S42g8qp0pRqIy5EfeNn0+1WZueWuiViKqmV5rtR3OrtkXeklbwFlDjU5sEZnuIuJj7yXEYC9Kyig2XVKgtSUmxHUZGf2sbi9pgK30QJVSue862afp5htIPuwXIxdArLQakLpml8R51KifnOKkOGZcc8DFmgAAACEdkYe5qE3cNtzqW5vRKaUgs9xmXEZhHZEgKm0GrrrtsSrbmbJTaG70J+KT4buO7gLZFHXehWmWs1Pupsujo9a/N5xluShf2j7iF2NuIdbSttaVoPeRkrJGXmA5QAAAAAAAAAAAAAAAAAAAAAAAfKzIk5M9xD6Gv3vWU0CzKnUVLSjoWVKLJ4343F7TAVtosXyped41zZ3OSehQfkZ7s+WBdIq/QSjrgaZR5ryFE/UXVSnMpwZ54C0AAAAAAAAUnqmR2/rDZtxp3IccKK6ruwfAjPxF0oUSkkrmK41ut9ys6eSH4pK9cgKKQ0aEmZ7j34xyIZ/Tu5W7psOl1NK0LcU2SXdkyPCy3KzjhvAbWAAAAAAAAAAAAAAAAAAAAAAAjJfaFR6u3jUjmQ7JtrrVipq2XHCVjoWzzv3cOHuyLUlyG4cN2Q4ZEhots87sCnNG4TlzXVcF9zW9pciQpiNnrFsljs54Y4buQDfLC0/p1i0RESKhL0tfWkSVllTivMxuAAAAAAPkVxqfpq3dMD5VpKUxLhideO8jqmsy4JMyyLJHwojAaFpTfqrzoDjc5PRVann0Upsy2TI+Zke8hr2vlQckUalWvFV89WZSUHjjs+XfvyOjVmisD0hadPjfM0242+ikNluSThfWPuCgH/aDr1OrX01Jt9HQxnC3pW5zT3H7AZLfotNbo1EiU5kupGaS2XsGQAAYgAACEdkSIR2RIDW73tWNeFoy6S8lJm6W00s/qKLgZfDyGl6M3dJfjyLRra8VijH0RkecrQW4j37z8/5i1hUOq9oT4s+PfdtNOJqkD9Jabz8+35FvM/67iAW/khI1ixr0gXvbjdThOJ2z3OtkrJoUXEsDZwAAAAAAAAAAAAAAAAAAAAAUzrzUnamdFsuEv8AOarJT0hI3mSS8Px9gtmo1GNTKa/OlLSiOw3trWZ44CntMIb98ahVXUCe24UUssU5C+BJL6xbvh3mYC4KRTmqRR4tPYTssxm0tpLyHeAAAAAAAAAcEmM1LjOR3k7TbiTSouZGKW0ymKsPUisWFOWoor7qpNO2+Gwf1S9nwMXgKq1otOZUKbDuehJUmtUdXSoNBHtLRy3ALVAatYN5Rb4tRmqMqSTpZbeQR9hZcSPkNpAAAAAAAAAAAAAAAAAAAAAatqNIXE03rz7f0iIq8GMJojDTD0lpBJ7bpKcWfiazGx3vBVUrFrMJGTW/GWRYGpaCVL13SuEwfbiKW0fWI+CjMs+wyAWcAAAAAAAAIyQClPSSjr/JilSWFKRLblEhpaeJZIz/AIDd9LrSbtKyIkVRJVMeLpZDneaz478d3Aadro58o1S07eQrL0ucTmC4mRbtxe38BcDCOjjIRjspAcwAAAAAAhHZEiEdkSADicbS6hSFI20mWDI+BkOUAFF3VbdW0ruVd5WnHW/SH/06nISZ7GfrJSRcPh5cLUtW7aRedEaqVKkoebcLe3tFtNnyUXEj8xmnWkuoNC0pWhW5SFpyRimbo0+rdj1s7osBSibUeZVOPsufdIv65ALryX2hI0GxNVKNeSSiOLTBqySPpIjvVVu44I9434AAAAAAAAAAAARkh06jUYdMhrlzZDbLDfFa1ERF7TAdzJD5NSSLJqTuGiFrPYy3FNfLbRGXeadw0er31cOqcpyg2M05EpeSRIqS0njH7J8fdvA6Jvu4Zmp11N2LbL6/k5s/9JSmd6SIj7O0W7+vAxcNAosW36JGpcJokMRkEgvHHf7RiLHsWl2JRShQk7Tit7r6+0tXMzG1ZL7QCQEZEgACMl9oMkAkAAAHCpsloUSk7eS2TI+BjlyQZL7QCha1GmaK36Vep6HXLUqZkUpksmTKz+tu3F/RchdlNnxKpT2ZkN9L0d8tpK0KI+PiQ+axR4NepjlOqLKX4zvFJikqXUatobcXyPVzel2jNcP1aXvUcXwM/wCvADqv0zIiyYkdWHMjT4aJcV1DzDpZStCiNJlzIy3Ds7SeaQEgAAAAAAAAAAAAAAADicbJaDSstpBlsmXMUjZchenWs1XtiX81TK04T0Ez3JSo85IjMizy9gvLJDRNTbAZvii/MKUxV4fzkOQlWyaVF3Z/rmA3wBUenGqvrUk7XuxSYNfin0a1uGSUvGXLON4tknEnvJRHkDo+wHzthtdwD6HC84htClrWlCEFkzNWCLzBx9DTSnHFpQ2W81mrBF7RSl63zUdQKqVl2KrKXP0yolvQhPIlFkv58CALVdPUrW6XcpdejURHq8VXElL+0k+B+wXiNfs604VmW8zSoZZJBddzG9Z8zGwAAAAAAAAhHZEiEdkSAAAAA+D6yezkj4kY+wAV5eukdJupRzobi6RVS3lKi9UzPxxgagzd+oWmxlHuimuVylo6pTYyDUZF44L4+4XkOJ1lt9BoeQlxCvqrTkgGn21qnaN0tN+o1eM28r+5fw2v3GZDc0rStOUKSZeG8aDcejlpV9zpjgepSc7XTRcpPPs3H7SGqlpLe1vH/wDa18SUs/qZSTV+JgLp3BgUs3I1wpR4di02qeSsCfyy1fb6n5FRjPntmD3oufKT4KE5LmKYOva1Tuo1Q6fCPmtX8xxFY+rFfa2KxejVPZVxbjoyfvIHnTC0azdtv0BgnKnVosVPclbpZP2cR5u1S1ARqFcUanUqQ4VHYTk+qaTcXk8+ZbtwsuJozaNAZ+VLoqDtTNs8m5LfMk+Gd+/2mKovibAvS5WXLNpXqUWEnYN0mtlLnlgeZqnZntg3UX0a9kZ3+LXzpVPNvoyio+9snkdilyazbjpuUCpORFcTbLsq8y4DquyqhTl9HPpzmPtkk8e8cjFQivnhtaSXyNRZEZKN9HljL6ZTZxHJw6QlH/j2WPRvSAuOmfN12jJlJ/WN5SfwwN/o+vVnVNCCkSHKe4Zb0PpwRe0UFx7KcFz4kOF6JHfPLkdBnz4DOG3nHm4Nj0nXP8mT1vAuug1U8RKtDfP9lwv5jLoeQvsLQfkY8UHRYyF7UZa433HTGQiVG4ad+h3JPZ83Nr+Y3x2oZQlnpncj8Yw9lbJgPJEbUDUOIWWrh6T76f8AoO+3q5qO1xmR3fNvA2fWh+6Olwe9H/55eqNsv2hG0X7Q8xI1p1CLtNQ1ArWnUI+y3DT7B79eH7teOI3M/FeXp7jwDBjysvVzUh3/AF6M35JIdR/UTUST268Tf3U/9B59ev8Adsjwe7P4ry9Zmsi4qSXmMHcUWhVelOQKyuIth0sbLi0kZeJZMeVn67dcw/zm6pivJZEMc5AflK/OqrNf83TGvO3W7a/Te7P5jhY8a6nNF7iKDHrDVetqSfUQl3pFxiz4GL0oN20O5oaJFLqLEpK9+wlZbafMs5IeQyo8M+CVL/3i8iCYkUVRT6PNfhPMcDSrdv8AwGMNqOfZtv8ATO1VV3vbeSEimrD14pFVhsQrgV8nz0pIjceVsocPnk+HtFuR5jElhLzD6Hmz4LQojL3luHZn2+VX6ZdkBGSEg8AEZMMgJAAAAAAHyWO4Y6t1aPQ6JKqMlaUMxm1OKNSsFu38RkNpJFkjIUTrpeCqhIYsqkv7Tj5kqWttWcJPgk8cOYyjjMs9MMZSxDHfJWcGjpuz5Qr1TU63MnSNtlaFYNBc/IbPR70v2zTRHbdRW4KOCXMmv38fiPuOy3DYbjspw20WyQ+yM1K3i244uqVUY58lFzzd8bZSxn7WxRvSHeSjZn2pNZd/2ZmZfAfE30hai+jZpNpSnF83VGn+AwGO8ktmfikT1i7OwjySOb8Dh/c6v9Ry/swxteq97Xmys61Uvk2ClCl9DHVjJF3GRbz9osT0cKa2zYcqT0GHHZKiJw07zIiLv9o0GryDj0OW6v6rKi9/AW5obAOn6V07PGRtO+8xH8jrQ184jFL8Tt2beJTkscAARKbAAAAAABCOyJEI7IkAAAAAAAAAAAAAAB84T9kfQjJAIPsjX7su+k2ZRHKjU5CW0J7KCxtLPkkuJjivO8aXZVBcqdRdTybbJRbSz5JLv9o87OvVK/KsdduTbJrP5vENXVb8TLduHRra075dsXLs7NerDvm563WK5qhP9cqy1Q6G0v5iGhWya/vDvMRGYaOijtJZQXAkfxHKfzewRIShKO4uAgzNYuWrpw14dMeT59vchbty6/0hklaNlSUL++nIw06z6NOVk2lML5tqGYNZZSnq5PcRcxODNWO/kN86a7c9JxctO1fRLurl2tNfs2fEVtQKjtlycGPdYr8H9IgdIXNGTFh7JlxHWl1KJTm8yprTf7CjLP4iG2OH1JeX2rbxvrDlKPtjLMlffLLTf08d2N5pMdhqqwHlY9YwY2Iq69W3ugoltyKo9zNjd+BDto0bvGvF0sqFDo7ZFk9vOS88EYq+zx2vDwk+kaHrLkZfm14ao5LjtpJZOpUR8Eke8x34dLuCpN9NBoUp1g+CnDMh9WPT6dRq5KlVSlSqu3FdNtlTKSUhZlx8DFuN6sRWW9grfqTJkWSQhG7HuFT377NeXbRDu/5Smx6k2bfHHapV9x2BIKPUobsN1W4umSZZ8hy8N5rSXtFn3Detu3VTHYVSt+pLQvd05o67Z8ywQ07TbTSmXsVRiSKjMhToplsNnkj2D7zI/aOvj852YdJx7Jf593RT6pnCP87Hd/t7MAbiC4rSX7xDjOVHTxfbL94hZU30ZJSd8C41n/vEjWZegV50hfSMoiVUvsnkSMdGP7s5er5Z8YtVXVoSVY6dKhw/LcU/o2nV+ScjOOUmbQFYrNhukn7aEKMvfgd2FX7adXho2o6+TqSSf4iWo4imzyswre96536vy6WsNzKg7vi0t399Bjst25Xas6TctCYUb62FbzG/MrQ4zttG0tHNsiMvwEEozznuE/r+n9aP3Zz1Ujf9ccpfGVcvta5HsSktZJ83H+R7W8vLA7tKcuuzHzftqrKfil/qkk8l+Iyo+s53lxEnZxtE49vRVKuZ2q5d2ZdW00D0g4qdhi6aXJprv6xCDNHvFm0e8reuBkl02qRZOeKCWWS8yFCvMRpCNl9pt7zSMK/Z1MWZOQ1uwni+u2s8e4Qt3Dzj+XnqsNHqCqX5uOj1l7h8meO9I8sw3r4oW+l3S46n7L6s/EZePqfqXBPZeiwZpfdMR0tK+HzFK18hrWfE3pLeI2h5/Trrebf01ntr+4ozEq14u5X0VmILzUY0fw9v9uXR/FU/3Y/7X/tkINZEWT3EQ87SdXtQ5x7MWixoBeJ5GAqL953ORJrdwuMMq4tR1Y/Ehvho3y+ItVnI61XzJaOomsMGiNLpVvqTOq6t20310snzVgVXR6XIjvOVKpu+tVKV13XFbzLw8xy0yhwaQgzjMfOHxcVvMxkRYNDjcUy+pNUeT5jN+Pp1eIAAJtWgAADowN5OrOhlFR9JMeQygem7VpRUe1adANOx6uylOORjzvRaWd0au0qmo68Wm/nD5ccKLnyHp/gkyIUrk7e+59K4ej6OtH/LkAAEYlwAAAAAAQjsiRCOyJAAAAAAAAAAAAAcTzzbTKnHFpQ2ksqWasEReJgOtUanDo9NcmTn0xo7RZUtaiIseZipZWs9VuCYuFYdvP1RRLx609ubxzI+HvMhikNzNc7zfU4t2PaFMXsFsKMvWVc895C7aTRoFEgIhU+GiMy2WCJBEA8+3Jp3qpedTZqlX9T24xfNRSWWw2rnjgYxFTava1Em5X6Gp2K31Dej7yIvYPVGyQ4HmUvNqQ430iD4oWRGRjoo2bKPDLm2NWrZ/Mw8y02qxKtGQ9BdSvuWhSt5eY7eDLeW8ZnVTTFdCd/Ky02VNraPMmIhPUNPeoiL8RqLlbjuW05VGl9QywRErgrl5i06m/G6HWal8hxEqJx7PGTGuPPVu8URozqkRYXbNHefs7xsUmXGhMrlS3UtscMmrHxGsUV+PbVtFUZ20uXOPaJH1l+RcTG9WPpVU7ydZrl4JUxB7TMAsp2vvFxL4jmlvx16+7PnJ2Y4zO1Z2x9q4+3X9WuUdNy39KONbEBTUP606QkyI/ume4WbbGgtGp6il3A67WJ3Hrq6hez+Zi04NNiU2KUeJHbYbT9VtOB2hX7dq27yys1GnTr/AJcXVg0yHTY6GIcVDDae5CSIfFWbcdo01pr6RxpZI55NJ4HfHypO0Od1vNuntiMVugPPFWJsV9qU6h5DS1blcyyQw+o7T9gzIceLWajIXI3uLWszIi5FuFiXLQ6zp9dki5rfhO1Ckz8evQm0mpTZ/aSRZ3/9ee7SdS71ty400Bxh1pDrUlJuodThbaSPfkj7hUZ07Ve/1njrXJ2QziUfdtNL09lVGmxZzNzz0E+3tmheSPPuE6S0t2DqtcSSlrmttNpQp5fHPLdnxHNUdQ1VNtui2TAcqU50tgnW04bYL72MfwG+ad2WmzLe6B5Sn50lfSSXeJrV58hs4SralOVuxjtx+mGF2Y/o3FIkAFqczicaQ6XziUrLkpJGNXremdp3FvqFGYUv7aE7B+9OBtoAKKqvo9qhrVJtStPxHD/u31GaRos+XXbOqCIF203oyP6OY0kzQfmfAerMGOhV6JT65AXEqMVuSyr6q05HXVt3VfEnHfo03+UXnhlaJTZSWVpWye4jQrJH7SH2otjHiPq8tNatp3KXV7eS7UKN23YppMzZLw47h06ZPjVeAmVEPbQZ4PfnYPkfIWzS3o3x6KNyPFWasu7HvF2AABIoME5V9oQACdow2jEAHR71ynKvtCAAHnUAAAAEmRlxTgQW/hvAD37xwzpzVNhrluqSSGk9+4lnyLmY5yLOSPqEW/fuGNo1Gf1HvJmlx0KOiwl7cl9HBRdxEfDJjh3duOvV7/KX43Slt24j+ixNBbYfi0aRc1RR+eVY8oNScGSP+v8AIXGQ60OI1BgtRI7SW2GUpS2gu4iHZ7hRZSzOXdl9IjHs+2L6AABkAAAAAACEdkSIR2RIAAAAAAAAAAAK71qrr1C00mrjKw9JMmSPawe/+ZCxBUfpEtH/AGcNyPqMTWjX5ANw03t9m2bCpcJsk7ZspW4vZwa1GWTMxteS+0OjSHEPUSCtHYNlBl5bJD5qtZp9Fjes1Ga1EZPdlxREWfaAyGSEiqqhr9aTDnR01Eyqud3qzRmR/DIxx68TXEmbdkVtSf2mTL4EYC35DLcthbDyEracLBkfeRjxVd7S7WrVXtslfm7UjpG0Hyxki9xi/InpC0dLhJrFEqtLTjtvMbviKnmSqNf/AKQ8VxpaX6dIWnOdxHgt+RlGco+LzNcZeTddI9Nna243dVyMK6PccKItJkSCLvwYvwkklCSSjhwItxEIjx2Y0dtplCW2204SguBEOfJBKUpS6yIxjGPbFIAAxegAADjWgloUlSEnniR8DGFl2Xbs9fSSaNEW59roiIZ4AGOp1Fp1Ja2afAYip/YQRDIgAAAAAAAAAAADruMIfaNDiEqQssKQe8jIedtS7Ie09rKriorCnKHI/So6M4b8d3AvEejyPJbx0KtS41Ypr8CY0l2M+nYUkxsrslVLui121Rtj2Ted2X25URuTHNJtue4SMRCp0u0bunWrLUrCV9JFWe8lJGYwfu3C9aexHYqxPD5nv6stS7NaAAB1I4AAAAAAAMGB9XtbsjgkzoMQjORLZbIu81kXxGvNkY/OW+NU5+8Y5y7PWUeOIZJtClq6iCLJme4sDAuXbGeeKNSYr9UknwQwgz+BGNmoOkt13ipt651/JFMzk4zRmTjhcld5iM2eTpr8cprU4W6/PWzHbFrkcqrfdTTRLZQ50Z9Z+eaTNKU8sluHoqyrMp1k0JuBBRlZFl14y6zh8zHbtu1KVatLRBpUVLKE8T71+Z94zRFuFXv2J3y7pLtraterX214fQAA5nUAAAAAAAAAAhHZEiEdkSAAAAAAAAAAACvNbZkKLpbUymElZO4bbSe/rnw93EWFwFC61y3b4uSnWLb59PMSo3pKy3pZLBYM8eB/AHsWFs7V6uLsmDa1CpD8+4UEbO3smaG09yjMuW7jgbdRtFZNdkoq+oFWlVWWoto4m2ZNNH4Y4jdrC07pNiUkmIbRLlrwbsg95rPw8BuIPWGpdqUKjs9FApcZhJfZaIj94yqWW0p2SQnA5ABi6b9Lgy0bMiGw999oj+Iru5dDrdrB+tUrbotQLe2/HyWD8iMhaAAKLhXvd2l9Rbp97x3ajSHNzdSbQZ7H3sZ/E/eLZh3XQ5rDTzNZhrQ4WSy+kslz4juVWjwa1T3INRiokxnO0hfePM12aa07Ty8WHaqmVItKYrZJxlSsxVcjMu4GT04iq05zsT4q/J1J/wARylMjq7Mho/JZCo2NALUkxkPw6rUzbeLKFolGZYPvIyMQr0eacn6C564z/nmYC4SdbPgtJ/vATqD4LSf7wps9BJTf6NelYb83ciP7GLqZ/RtQKkjzWo/4AxXQApf+yrUVH0Woz/7yVfyD8gtXmfor+aX99Kv5ALoAUudta2tdi6Kc995rAFD1yj/+Y0qT+5gBc+S+0JFLeva5sf6hSJPnuE/lJrYx2rVp7/k6AufJASiPgoUt+X+rDP0tkNr+47kD1Xv+G2b87T+STaSyeF7iIu8wF05LGe4SNQ06vQr7tZusHE9TWbhoNvazwG2KWhKDUpSSSW/JnuAfWSPgPnwGiXNrBaVsPqjvVJMuUR46COonDI+R44e0akesN313datjS3G/tysp+JAOr6QlH9VKlXRHRhyK50byi3ZSfAa80opCUOJV1HC6TAy9xUrV69qG/SqlSqfHju9YtlZZIxg29PtUKdEaZTAhyENp2PpN4l+M3sa3WM0DzHGz2+3NePufeAPdxGJmyrrorma3a0lCPtMZUXvIfdOuWkVAybbk9C6fBLyiI/cYsVe9Rb4y6KnfxWzR5R6smAERnwSGDPh3juxnrjrhE9M9egAAPXjHVqkHWeiI5K2Oj47PeMEVt0+nXnQW5K1yIkqRsOk4e7fzG3dlQwN2mTT1Fld7c1HxETyVMfpSsWLh9qcdiurr9r05SLUoVDZQim0uNGIu9CCz7TGYSRF1UpwONhzpI7a/tbxzCmr+AAAAAAAAAAAAAAAACEdkSIR2RIAAAAAAAAAIyQDT9Srzbsiz36hlJy3PmoyO9bh8CIu/AwmkFkuUCinWavtPV6qH00hxxPWRn6pfx/7DXbmSrUHXmmW+n56l0BBSZRcUms+BH4i6koLZThOCLgRdwDkAAAAAAAAAAGHuO3YNzUN+lVFrpGHixnvLxLxGYABTOj9Ym27Xp+nlbdUt+CZuQ3F5I3G/DPHn/wBhcuSFK61QXaBW6FfkFKkPQXUtyTSntoPuV8N/MW9TJzVUpkecyojbktpcLG8t+8B3QAAAAAAAAAAAAEEWe1v9gwl2ykwrPqsg8dWM5v3fZMZwVfrtcTdG06kw0LScqofMtN7XWXnjslxPdyAa7pfdVMsPRiNVK0+lv1l1xbTO0W04e0ZFgvIv4jhba1B1hcNx19y17aVuIkZJ58vI95D40q0hedjQq1eClvrbT+aQXM7DPmk+/wAP6K9mmiaRsISlKC4JJOCIGTTLX0ota1UJONAS+8W83n+soz9vD2DdUtkjgkfYAxAAAHEptLifnEbaeS0kY0q6NJbWupo1PwExZPc+x1VEN6AB5iuSyLr06cN9nbrlET9bZM3GvPHEcdLqUOtREvxV9Mfeja3o8y7h6aW024hSFo20HxSackYovUrSl+kPOXNZyFtrIvziEhJmTnkkhLanJTpz0n4oPf4inZx1hjtkweBA6VJq8Wrw+mjq2HEnhxs1by8y7h3lcxba7MW4745UG2mdM+yeEfWGu3qR+oQT/wD9SP8A5DYvrDAXf84xTWv1k1A5+Qz/AOPJ38T/AO3B6spp5prB/wCzT+A7Y60JHRwmUck5HYyQoj6WkAAAAAAAAAAAAAAAAQjsiRCOyJAAAAAAAAHBKkIiRXH19hstoxzjA3nIOJZNXfLi3HWYCt9CmVVOXc10vJ+eqUrYSvmgt5EXv/AXMKy0GhlF0ogvErJyTW6fntGLNAAAAAAAAAAAAAAGrah0hFe0/q8BScqWyez1c9Yt5fiMDofWVVfTCnocV87Eywou/ce4j9g36W0TsN5tXBSFCotAFkzDuGnkpOxFnqL3H/0AXMAAAAAAAAAAAjJcB88CyfAB0apU4tGpT8+a6luLHb21qUePiKbsSjytU70evm4GlfJsZexTI6+Gz3Kx/Hn5D61WuH8t7kgad0KV0nTuEqe6yrJISWckZl3lxMj5C4qPSY1EpLFOhspbYYQlBEXgA7qE4IiNCSIuBF3DkAAAAAAAAAAAAAcSm9pODSk89oj4GOUAHnTVSznLGuD8q6Mz/o6WezLYJO5Bn3+BEOgw+iQwmQxsm28WU8sD0NXKVGrlGfp0xrpGZCTQrw8R5ho8WTb9cqVrTlK6SE4o2lr3baD4Yzx9gnuJ2+2f0p/Cs85o/Ur+vH5Zohhqoz67d1tU/j0ktKseQzODM8DhtaOVU1xpDJ70Q2jdMuR+PISvKy7NfOEFwVfdt4z+z02kiSWC4CFHjf1RrN8XlDse2nKnI2VrIyQ23nesz7h5pqt4XhdTzkmbV3YSD7LLSzSRFy7hSZ2Rh8vqOloXbku2nHV69zkskILPfuHlS2tTrnsqe05MmLqtLUfziHFbSyLmXePTtKqcar0pioxFpXHfRtoMlZHsJxn8Ne3qXak/p2Y92SAAGTlAAAAAAAAAAQjsiRCOyJAAAAAAAAGtahIU5p7WiTx9WWNlGOrsI6lQZsQv75pSPeA0vQ1wl6Q0ci6pkhRGXjkWKKk9HydtWJIpqlfOU+UpoyPjvPPD2i2wAAAAAAAAAAAAABwvmXQLPkkx530kvuj23edxU2qv+p+vTVrZfXub3c1HuF816Ymn29UJKlYJphajM+HAU3pRYtKvHS59daipX69KW4h0tzje/G4/ZkGS9W3m3W0LbWlaVcDI8kfkY+8l9oUd+RupOmy1qtOpJrtI/wAHLPro8j4jvQdekwT6O6reqFIWRdvolKT78EDFcgCvY+t9iSS3VcmVcnEbJ/iOy5rFYrSMncEZfggzP+AHRvHDiGS+0KqnekFZjBmiEqZUHe4mGDPPwGHVqPqLdjvQWvaq6e3kvziaky+JEXxA6Lcq1ZptAp65dSmNQmEcVuLJOfLJinq1qFcOo85yi2IwuJBbMvWKq8kyTj9k+H8fId2maLTq9MbqWoNefq0guEVteyyj+Y3O7fUbL0zqh0yO1EZjxlE2htOCzs4LhvyAqv0ebVa+XKxXVLVKJl1Udl9zivG8zI/HJD0OK30NpRU3Sqnn1uklZkLPZxkz/wCgsgAAAAAAAAAAAAAAAAAHyfIef9dqWqjXdR7nZLCH1erPYSfsMzF/kZmYrPXmlFUNL5rhJ+ciuJeQfLHEbK5dku9hZDFkJQkrgj6+SGHsCbc7N41etW3b6avtfMm4vgjPI84zuEOVYo9nevqUknDj7JZV9bgLj0Pt5dD02iuvJ2ZM/wDOHMlv38BO8tf3xjBWeA1vpzssz/sqXVqqXvVqZT13RREU6GTuUm2ed+D7W88DViVtNkaVZLxHqy7rVhXjbr9JmkZE5vQvHYUXAx5wqumN9W2/6umnKqkUtzbzJZP2kR5FT2apT8X1f07ytOl3Qtx07muziSmmv9Jw2eI9H6KNyP7KKUck+s5tKRn7OTwKhtnRq5rmqTSq7F+S6Wj6RBK66/YPS0CCzTYbMOK0luOynZQku4hlrVSrj9zk9QcjXvXYzXjxd0AAdKuAAAAAAAAAAIR2RIhHZEgAAAAAAACD37hIAKRsxz8jddq/br/zcWtfnMbO4s+GeIu4VDrdQZjDVPvSkp/PqKrbURJya2+8v67siw7XuSJdFtw6xDURtym84JWdk+R+IDNgIEgAAAAAAAAA4+kIkmZq4cQFZa618qTpvIiIV+c1A+gbSXaMj44IuO4aVYusUO0KBEodYocmI3FbJBONoMyWfM9wxN8V4r71NImVbdKpHVJW0RoWrvwfAz7hyuJ6bqraaeL9tImNLjPrw7s5QW9y+NW36fRcVJ1XsysoI49ejIWf1HFbB+5WBnTkUOqFvXT5nmpC/wCY81ybVosk9pyG1tc0KNI6R2XGR+iTp8XydMey4i6PxljXz2tLyejZFgWbOXtOUSnH9xpJfAcTGl1lsdi34f7zSTHn5FHrjP6PdlTR+/kcpxbsLjd9RL94aPwrZ/Z0fjGp/c9Jw7coVOLESkw2fuNJI/gO+ciKyWOlabLltJIeWV0y43vprsqK/JeBwLteTI/SriqLnksyGX4XsfsS5rU/uenZd0UOCXz9Zht/efT/ADFVaxalWtULCnUum1lqVKeNKOjZUZ9+eJbj4cxXDdlUkvpUuv8A33THWuWgU6Ja8hUaE0hxDievgzMZZ4m6EO6WWqvm6LLMVxw9O2EwiNYdGZQW5MVA2Ma3YL5SLBo60/4ZHwGyCJTgAAAAAAAAAAAAAAAAA1XUVhErTqtNrLd0CxtQ1XUWQmNp3WVubk9Aree4B5gobLt2Lt22GE7ZyHiOQaN+EZ35xwwWR69gQ24EBiGyWG2EJQXsFEejfZbrUV65qg0rbX83G204wRcTLz3D0ENttn1ZdWquqNOOkEj5PfwRnzH0A1Nr4IiL6uPIfYAAAAAAAAAAAAAAAIR2RIhHZEgAAAAAAAAAAOCXGZmxHI0lpLjLpbC0HwMjFGUuZI0Uvp+jz1OnadTc24z696WFHjJGfAi5+G/mL6GEua2abdlHcptTY6RlW8j70nzIwGVZdbcaJxC0rSrgZKyR+Rjl2k/aLeKGp1fuLRWadIuJqTVrbUr83nJI1Gwk+BKPGN3/AG5C5KHcFLuOmon0qa1LYc3kaFEeD5HjgYDLAIyQkAABwuvNsMm66tLbaCya1qwRF4mYD7UZcCFQ6w6kfJcY7ZobqXqtMLDhoVk2UH3ng8kYi7dWnqlM/J6wY6qtUXcoOU1vaZ8drBkfvwMBA9HKdJeXPrNxuuTXvpFNp3l5GefgPce3k8l7x9mrUqDEoVPJlchrpDPLizWRGZjldrFKR9JPYLyFjRPR3thpP5zKnSvNZkM1D0TsaMfWoLTn31KMTkeWzVHtrircuAxbLNlk/dSq7qoTfGpNK/dHyV3UE+FQSf7g9AsaXWbH7Fuwy80mY7SdP7UTwoMP/hB+NW/sy/09rfvl52bu2hr/APMGi/dHZYrNJfVhuewZ+Ivp7TW0Hu3b8M/3MDEzdFLFmIx8gsMK5tqUQR5q39mMvTtGfGWVUNvsPfRLSv7iiP4CfrY5jc53o70N1RLplSnQVF9UlZL8d/4jW5+kN/0JrNKq7FVaTwacLCveOqrmY588OC305LH5UuroHglY2h1axG9bos1rm3tl4jHy6pXqA70VxW5Mio/XNpM0+/gO5AuCk1ItlE5ozUWyaHDJBl7zEjjcovh293RF54/Z1LIzzHqt7Q6qfKelsJJqTtxzNrG1kyIuGfYLHMx5/wBBKuVKuSr2q4tJoX8/H63EvrYLvF/9wpVmO2XTD6JCXfHrh9AADBsAAAAAAAAAAAAAAVlrxUvUdMJbKF4cmuJZQXeed549ws0UpqW4q79WrdtBnrswz9dkkSuXAjx7vaAsqyKWmjWTSISUbHRRkbREX1tneNhHG2lLaSSgsJLdgcgAAAAAAAAAAAAAAAAAAAACEdkSAAAAAAAAAAAAAAADqy6fGqMVTEtluQyr6rhZFRVnRtVElPVuxq9JoL6es6yo9ttfkXcAANSd15uu06guHW2IVS2T4spNB+8/5DKtelFDcb2lW6+Xk6QADJjZ/pMVGV81TKQ1GV9p5W38MDK0ez7t1SYROua6CbpZnlcKCk28lyyAALctmzKFaMNMWkwks83D6y1eaj3jYAAGIAAAAAAAAAAAAA6zrTEpvZebS8jk4kjGj3Ho3aFxurU5A9Vkcekjn0f4Fu/AAAU/dlkP6P16nXPBqjk0kPE0bT3E0n3ZLA9MQpPrUGPIxjpW0qx5lkAGWXnw7IAAxegAAAAAAAAAAAADqVGZ6lTpMok7XQIUrHPBZFPaGxvyjqNbvqarbmy3lNJI9/RpwR4IABkuwAAGIAAAAAAAAAAAAAAAAAAAD//Z";
+        Map<String, String> map = new HashMap<>();
+        map.put("data", strBase64);
+        map.put("name", "LLL");
+        JSONObject jsonObj = JSONObject.from(map);
+        A a = jsonObj.toJavaObject(A.class, JSONReader.Feature.Base64StringAsByteArray);
+        assertNotEquals(null, a.getData());
+    }
+
+    @Setter
+    @Getter
+    static class A {
+        private String name;
+        private byte[] data;
+    }
+}
diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_2900/Issue2944.java b/core/src/test/java/com/alibaba/fastjson2/issues_2900/Issue2944.java
new file mode 100644
index 000000000..6735e7bfc
--- /dev/null
+++ b/core/src/test/java/com/alibaba/fastjson2/issues_2900/Issue2944.java
@@ -0,0 +1,65 @@
+package com.alibaba.fastjson2.issues_2900;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import lombok.Getter;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Issue2944 {
+    @Test
+    public void test() {
+        List<Employee> employees = new ArrayList<>();
+        employees.add(new Employee(0, "John"));
+        employees.add(new Employee(1, "Jane"));
+        employees.add(new Employee(2, "Bob"));
+        Department department = new Department("dev", employees);
+
+        String payload = JSON.toJSONString(department);
+        JSONObject jsonObject = JSON.parseObject(payload);
+        Department parsed = jsonObject.toJavaObject(Department.class);
+        assertEquals(payload, JSON.toJSONString(parsed));
+    }
+
+    @Getter
+    static class Department {
+        private final String name;
+        private final List<Employee> employees;
+
+        public Department(String name, List<Employee> employees) {
+            this.name = name;
+            this.employees = employees;
+        }
+
+        @Override
+        public String toString() {
+            return "Department{" +
+                    "name='" + name + '\'' +
+                    ", employees=" + employees +
+                    '}';
+        }
+    }
+
+    @Getter
+    static class Employee {
+        private final Integer id;
+        private final String name;
+
+        public Employee(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        @Override
+        public String toString() {
+            return "Employee{" +
+                    "id=" + id +
+                    ", name='" + name + '\'' +
+                    '}';
+        }
+    }
+}
diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3100/Issue3103.java b/core/src/test/java/com/alibaba/fastjson2/issues_3100/Issue3103.java
new file mode 100644
index 000000000..11e1c34ce
--- /dev/null
+++ b/core/src/test/java/com/alibaba/fastjson2/issues_3100/Issue3103.java
@@ -0,0 +1,47 @@
+package com.alibaba.fastjson2.issues_3100;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.schema.JSONSchema;
+import com.alibaba.fastjson2.schema.ValidateResult;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+public class Issue3103 {
+    @Test
+    public void test() {
+        String objectStr = "{\n" +
+                "\t\"name\": \"John Doe\",\n" +
+                "\t\"age\": 41.5\n" +
+                "}";
+        String schemaStr = "{\n" +
+                "\t\"$defs\": {\n" +
+                "\t\t\"ageLimit\": {\n" +
+                "\t\t\t\"minimum\": 18,\n" +
+                "\t\t\t\"maximum\": 60\n" +
+                "\t\t},\n" +
+                "\t\t\"ageType\": {\n" +
+                "\t\t\t\"type\": \"integer\"\n" +
+                "\t\t}\n" +
+                "\t},\n" +
+                "\t\"type\": \"object\",\n" +
+                "\t\"properties\": {\n" +
+                "\t\t\"name\": {\n" +
+                "\t\t\t\"type\": \"string\"\n" +
+                "\t\t},\n" +
+                "\t\t\"age\": {\n" +
+                "\t\t\t\"allOf\": [{\n" +
+                "\t\t\t\t\"$ref\": \"#/$defs/ageLimit\"\n" +
+                "\t\t\t}, {\n" +
+                "\t\t\t\t\"$ref\": \"#/$defs/ageType\"\n" +
+                "\t\t\t}]\n" +
+                "\t\t}\n" +
+                "\t},\n" +
+                "\t\"required\": [\"name\"]\n" +
+                "}";
+        JSONSchema schema = JSONSchema.of(JSON.parseObject(schemaStr));
+        ValidateResult result = schema.validate(JSONObject.parseObject(objectStr));
+        assertFalse(result.isSuccess());
+    }
+}
diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3200.java b/core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3200.java
new file mode 100644
index 000000000..653ccb612
--- /dev/null
+++ b/core/src/test/java/com/alibaba/fastjson2/issues_3200/Issue3200.java
@@ -0,0 +1,33 @@
+package com.alibaba.fastjson2.issues_3200;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONWriter;
+import com.alibaba.fastjson2.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Issue3200 {
+    @Test
+    public void testArray() {
+        SecondMenuGroupUI secondMenuGroupUI = new SecondMenuGroupUI();
+        secondMenuGroupUI.setGroupId("group1");
+        secondMenuGroupUI.setGroupName("分组");
+        assertEquals("{\"groupId\":\"group1\",\"groupName\":\"分组\",\"secondList\":[]}", JSON.toJSONString(secondMenuGroupUI));
+    }
+
+    @Getter
+    @Setter
+    public static class SecondMenuGroupUI {
+        @JSONField(ordinal = 2)
+        private String groupName;
+        @JSONField(ordinal = 1)
+        private String groupId;
+        @JSONField(ordinal = 3, serializeFeatures = JSONWriter.Feature.WriteNullListAsEmpty)
+        private List<String> secondList;
+    }
+}
diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3300/Issue3331.java b/core/src/test/java/com/alibaba/fastjson2/issues_3300/Issue3331.java
new file mode 100644
index 000000000..95320281f
--- /dev/null
+++ b/core/src/test/java/com/alibaba/fastjson2/issues_3300/Issue3331.java
@@ -0,0 +1,18 @@
+package com.alibaba.fastjson2.issues_3300;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Issue3331 {
+    @Test
+    public void test() {
+        String json = "[{\"priority_flag\":9,\"service_type\":\"bbb\",\"destination_addr\":\"bbb\"}]";
+        Object object1 = com.alibaba.fastjson.JSON.parse(json);
+        Object object2 = com.alibaba.fastjson2.JSON.parse(json);
+        String path = "$.service_type";
+        assertEquals(com.alibaba.fastjson.JSONPath.contains(object1, path), com.alibaba.fastjson2.JSONPath.contains(object2, path));
+        path = "$[0].service_type";
+        assertEquals(com.alibaba.fastjson.JSONPath.contains(object1, path), com.alibaba.fastjson2.JSONPath.contains(object2, path));
+    }
+}
diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3300/Issue3375.java b/core/src/test/java/com/alibaba/fastjson2/issues_3300/Issue3375.java
new file mode 100644
index 000000000..15df2746c
--- /dev/null
+++ b/core/src/test/java/com/alibaba/fastjson2/issues_3300/Issue3375.java
@@ -0,0 +1,31 @@
+package com.alibaba.fastjson2.issues_3300;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONPath;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Issue3375 {
+    @Test
+    public void test() {
+        String json = "{\n" +
+                "\t\"name\": \"\",\n" +
+                "\t\"value\": [{\n" +
+                "\t\t\"id\": \"101\",\n" +
+                "\t\t\"additionalProperty\": [{\n" +
+                "\t\t\t\t\"token\": \"token1\"\n" +
+                "\t\t\t},\n" +
+                "\t\t\t{\n" +
+                "\t\t\t\t\"token\": \"token2\"\n" +
+                "\t\t\t}\n" +
+                "\t\t]\n" +
+                "\t}]\n" +
+                "}";
+        Object object = JSON.parse(json);
+        String path = "$.value.additionalProperty[*].token";
+        JSONPath.set(object, path, "******");
+        Object extract = JSONPath.extract(JSON.toJSONString(object), path);
+        assertEquals("[\"******\",\"******\"]", JSON.toJSONString(extract));
+    }
+}
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONTest.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONTest.java
index 8f3a72d79..3530a46d0 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONTest.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONTest.java
@@ -335,7 +335,7 @@ public class JSONTest {
                                 Collections.emptyList(),
                                 SerializeConfig.global,
                                 new SerializeFilter[0],
-                                JSON.DEFFAULT_DATE_FORMAT,
+                                JSON.DEFAULT_DATE_FORMAT,
                                 JSON.DEFAULT_GENERATE_FEATURE,
                                 SerializerFeature.BrowserSecure)
                 )
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONWriterTest.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONWriterTest.java
index ad6359439..275879577 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONWriterTest.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/JSONWriterTest.java
@@ -55,6 +55,6 @@ public class JSONWriterTest {
         assertTrue(context.isEnabled(com.alibaba.fastjson2.JSONWriter.Feature.BeanToArray));
 
         writer.config(SerializerFeature.WriteDateUseDateFormat, true);
-        assertEquals(JSON.DEFFAULT_DATE_FORMAT, context.getDateFormat());
+        assertEquals(JSON.DEFAULT_DATE_FORMAT, context.getDateFormat());
     }
 }
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/TimestampTest.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/TimestampTest.java
index 50877645b..24ccd35d0 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/TimestampTest.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/TimestampTest.java
@@ -22,7 +22,7 @@ public class TimestampTest {
     public void test_0() throws Exception {
         long millis = 1668216743000L;
 
-        SimpleDateFormat format = new SimpleDateFormat(JSON.DEFFAULT_DATE_FORMAT, JSON.defaultLocale);
+        SimpleDateFormat format = new SimpleDateFormat(JSON.DEFAULT_DATE_FORMAT, JSON.defaultLocale);
         format.setTimeZone(JSON.defaultTimeZone);
         String text = "\"" + format.format(new Date(millis)) + "\"";
         System.out.println(text);
@@ -34,14 +34,14 @@ public class TimestampTest {
                 "\"2022-11-12 00:00:00\"",
                 JSON.toJSONStringWithDateFormat(
                         JSON.parseObject(text, java.sql.Date.class),
-                        JSON.DEFFAULT_DATE_FORMAT
+                        JSON.DEFAULT_DATE_FORMAT
                 )
         );
         assertEquals(
                 "\"2022-11-12 09:32:23\"",
                 JSON.toJSONStringWithDateFormat(
                         JSON.parseObject(text, java.util.Date.class),
-                        JSON.DEFFAULT_DATE_FORMAT
+                        JSON.DEFAULT_DATE_FORMAT
                 )
         );
     }
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_1300/Issue_for_zuojian.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_1300/Issue_for_zuojian.java
index b7cdbdaec..ef8b35eb5 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_1300/Issue_for_zuojian.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_1300/Issue_for_zuojian.java
@@ -9,21 +9,21 @@ import java.util.Date;
 public class Issue_for_zuojian {
     @Test
     public void test_for_issue() throws Exception {
-        JSON.DEFFAULT_DATE_FORMAT = "yyyyMMddHHmmssSSSZ";
+        JSON.DEFAULT_DATE_FORMAT = "yyyyMMddHHmmssSSSZ";
         String json = "{\"value\":\"20180131022733000-0800\"}";
         JSON.parseObject(json, Model.class);
-        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+        JSON.DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
     }
 
     @Test
     public void test_for_issue_1() throws Exception {
-        JSON.DEFFAULT_DATE_FORMAT = "yyyyMMddHHmmssSSSZ";
+        JSON.DEFAULT_DATE_FORMAT = "yyyyMMddHHmmssSSSZ";
 
         String json = "{\"value\":\"20180131022733000-0800\"}";
         JSONObject object = JSON.parseObject(json);
         object.getObject("value", Date.class);
 
-        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+        JSON.DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
     }
 
     public static class Model {
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_2100/Issue2156.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_2100/Issue2156.java
index 9efdd757d..a7dc5a860 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_2100/Issue2156.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_2100/Issue2156.java
@@ -43,7 +43,7 @@ public class Issue2156 {
     @Test
     public void test_for_issue_time() throws Exception {
         java.sql.Time date = java.sql.Time.valueOf("12:13:14");
-        String str = JSON.toJSONStringWithDateFormat(date, JSON.DEFFAULT_DATE_FORMAT);
+        String str = JSON.toJSONStringWithDateFormat(date, JSON.DEFAULT_DATE_FORMAT);
         assertEquals("\"12:13:14\"", str);
     }
 }
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3100/Issue3185.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3100/Issue3185.java
new file mode 100644
index 000000000..9d2f1f970
--- /dev/null
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3100/Issue3185.java
@@ -0,0 +1,32 @@
+package com.alibaba.fastjson.issue_3100;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class Issue3185 {
+    @Test
+    public void test_jsonpath_array() {
+        List list1 = new LinkedList();
+        Map map1 = new HashMap();
+        Map map2 = new HashMap();
+        map2.put("id", "123");
+        map2.put("name", "张三");
+        list1.add(map2);
+        map1.put("list1", list1);
+
+        JSONObject jsonObject = (JSONObject) JSON.toJSON(map1);
+        JSONArray jsonArray = (JSONArray) jsonObject.get("list1");
+        for (Object subJsonObject : jsonArray) {
+            assertTrue(subJsonObject instanceof JSONObject);
+        }
+    }
+}
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3300/Issue3361.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3300/Issue3361.java
index 3219408fd..65e1f07d5 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3300/Issue3361.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/issue_3300/Issue3361.java
@@ -22,7 +22,7 @@ public class Issue3361 {
 
     @BeforeEach
     public void setUp() throws Exception {
-        ORIGIN_JSON_DEFAULT_DATE_FORMAT = JSON.DEFFAULT_DATE_FORMAT;
+        ORIGIN_JSON_DEFAULT_DATE_FORMAT = JSON.DEFAULT_DATE_FORMAT;
     }
 
     @Test
@@ -34,8 +34,8 @@ public class Issue3361 {
         FastJsonConfig config = new FastJsonConfig();
         config.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
         config.setWriteContentLength(false);
-        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS";
-        config.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
+        JSON.DEFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS";
+        config.setDateFormat(JSON.DEFAULT_DATE_FORMAT);
         String string = JSON.toJSONString(model,
                 config.getSerializeConfig(),
                 config.getSerializeFilters(),
@@ -54,7 +54,7 @@ public class Issue3361 {
 
     @AfterEach
     public void tearDown() throws Exception {
-        JSON.DEFFAULT_DATE_FORMAT = ORIGIN_JSON_DEFAULT_DATE_FORMAT;
+        JSON.DEFAULT_DATE_FORMAT = ORIGIN_JSON_DEFAULT_DATE_FORMAT;
     }
 
     @Getter
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/serializer/JSONSerializerTest.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/serializer/JSONSerializerTest.java
index 220c3b76c..3e0165a7a 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/serializer/JSONSerializerTest.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/serializer/JSONSerializerTest.java
@@ -51,7 +51,7 @@ public class JSONSerializerTest {
         assertTrue(context.isEnabled(com.alibaba.fastjson2.JSONWriter.Feature.BeanToArray));
 
         writer.config(SerializerFeature.WriteDateUseDateFormat, true);
-        assertEquals(JSON.DEFFAULT_DATE_FORMAT, context.getDateFormat());
+        assertEquals(JSON.DEFAULT_DATE_FORMAT, context.getDateFormat());
     }
 
     @Test
diff --git a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/v2issues/Issue2529.java b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/v2issues/Issue2529.java
index ff7077458..173895559 100644
--- a/fastjson1-compatible/src/test/java/com/alibaba/fastjson/v2issues/Issue2529.java
+++ b/fastjson1-compatible/src/test/java/com/alibaba/fastjson/v2issues/Issue2529.java
@@ -10,15 +10,15 @@ import java.util.Date;
 public class Issue2529 {
     @Test
     public void test() {
-        final String format = JSON.DEFFAULT_DATE_FORMAT;
+        final String format = JSON.DEFAULT_DATE_FORMAT;
         try {
-            JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
+            JSONObject.DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
             ResultVo rv = ResultVo.sucessReturn("测试Date转换");
             String str = JSONObject.toJSONString(rv);
             ResultVo rvnew = JSON.parseObject(str, ResultVo.class);
             System.out.println(JSONObject.toJSONString(rvnew));
         } finally {
-            JSON.DEFFAULT_DATE_FORMAT = format;
+            JSON.DEFAULT_DATE_FORMAT = format;
         }
     }