From 7e93907e9c98270e76e20d55c4d35bd600edbb20 Mon Sep 17 00:00:00 2001
From: PJ Fanning <pjfanning@users.noreply.github.com>
Date: Mon, 24 Oct 2022 03:01:56 +0100
Subject: [PATCH] add recursion limit of 500 for DTD parsing (#159)

---
 .../java/com/ctc/wstx/dtd/FullDTDReader.java  | 35 +++++++--
 src/test/java/wstxtest/BaseWstxTest.java      | 23 ++++++
 .../java/wstxtest/fuzz/Fuzz_DTDReadTest.java  | 76 +++++++++++++++++++
 ...se-modified-XmlFuzzer-5219006592450560.txt |  1 +
 4 files changed, 128 insertions(+), 7 deletions(-)
 create mode 100644 src/test/java/wstxtest/fuzz/Fuzz_DTDReadTest.java
 create mode 100644 src/test/resources/fuzz/clusterfuzz-testcase-modified-XmlFuzzer-5219006592450560.txt

Index: Woodstox4-master/src/java/com/ctc/wstx/dtd/FullDTDReader.java
===================================================================
--- Woodstox4-master.orig/src/java/com/ctc/wstx/dtd/FullDTDReader.java
+++ Woodstox4-master/src/java/com/ctc/wstx/dtd/FullDTDReader.java
@@ -74,6 +74,9 @@ public class FullDTDReader
 
     final static Boolean ENTITY_EXP_PE = Boolean.TRUE;
 
+    final static int DEFAULT_DTD_RECURSION_DEPTH_LIMIT = 500;
+    static int DTD_RECURSION_DEPTH_LIMIT = DEFAULT_DTD_RECURSION_DEPTH_LIMIT;
+
     /*
     ///////////////////////////////////////////////////////////
     // Configuration
@@ -327,6 +330,24 @@ public class FullDTDReader
 
     transient TextBuffer mTextBuffer = null;
 
+    /**
+     * Sets the limit on how many times the code will recurse through DTD data.
+     * The default is 500.
+     * @param limit new limit on how many times the code will recurse through DTD data
+     */
+    public static void setDtdRecursionDepthLimit(final int limit) {
+        DTD_RECURSION_DEPTH_LIMIT = limit;
+    }
+
+    /**
+     * Gets the limit on how many times the code will recurse through DTD data.
+     * The default is 500.
+     * @return limit on how many times the code will recurse through DTD data
+     */
+    public static int getDtdRecursionDepthLimit() {
+        return DTD_RECURSION_DEPTH_LIMIT;
+    }
+
     /*
     ///////////////////////////////////////////////////////////
     // Life-cycle
@@ -2272,7 +2293,7 @@ public class FullDTDReader
                 vldContent = XMLValidator.CONTENT_ALLOW_ANY_TEXT; // checked against DTD
             } else {
                 --mInputPtr; // let's push it back...
-                ContentSpec spec = readContentSpec(elemName, true, mCfgFullyValidating);
+                ContentSpec spec = readContentSpec(elemName, mCfgFullyValidating, 0);
                 val = spec.getSimpleValidator();
                 if (val == null) {
                     val = new DFAValidator(DFAState.constructDFA(spec));
@@ -3050,10 +3071,13 @@ public class FullDTDReader
         return val;
     }
 
-    private ContentSpec readContentSpec(PrefixedName elemName, boolean mainLevel,
-                                        boolean construct)
+    private ContentSpec readContentSpec(final PrefixedName elemName, final boolean construct, final int recursionDepth)
         throws XMLStreamException
     {
+        if (recursionDepth > DTD_RECURSION_DEPTH_LIMIT) {
+            throw new XMLStreamException("FullDTDReader has reached recursion depth limit of " + DTD_RECURSION_DEPTH_LIMIT);
+        }
+
         ArrayList subSpecs = new ArrayList();
         boolean isChoice = false; // default to sequence
         boolean choiceSet = false;
@@ -3085,7 +3109,7 @@ public class FullDTDReader
                 }
             }
             if (c == '(') {
-                ContentSpec cs = readContentSpec(elemName, false, construct);
+                ContentSpec cs = readContentSpec(elemName, construct, recursionDepth + 1);
                 subSpecs.add(cs);
                 continue;
             }
Index: Woodstox4-master/src/test/wstxtest/BaseWstxTest.java
===================================================================
--- Woodstox4-master.orig/src/test/wstxtest/BaseWstxTest.java
+++ Woodstox4-master/src/test/wstxtest/BaseWstxTest.java
@@ -468,6 +468,29 @@ public abstract class BaseWstxTest
         return text;
     }
 
+    protected byte[] readResource(String ref)
+    {
+        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+        final byte[] buf = new byte[4000];
+
+        InputStream in = getClass().getResourceAsStream(ref);
+        if (in != null) {
+            try {
+                int len;
+                while ((len = in.read(buf)) > 0) {
+                    bytes.write(buf, 0, len);
+                }
+                in.close();
+            } catch (IOException e) {
+                throw new RuntimeException("Failed to read resource '"+ref+"': "+e);
+            }
+        }
+        if (bytes.size() == 0) {
+            throw new IllegalArgumentException("Failed to read resource '"+ref+"': empty resource?");
+        }
+        return bytes.toByteArray();
+    }
+
     /*
     //////////////////////////////////////////////////
     // Debug/output helpers
Index: Woodstox4-master/src/test/java/wstxtest/fuzz/Fuzz_DTDReadTest.java
===================================================================
--- /dev/null
+++ Woodstox4-master/src/test/java/wstxtest/fuzz/Fuzz_DTDReadTest.java
@@ -0,0 +1,76 @@
+package wstxtest.fuzz;
+
+import com.ctc.wstx.dtd.FullDTDReader;
+import com.ctc.wstx.exc.WstxLazyException;
+import com.ctc.wstx.stax.WstxInputFactory;
+import org.codehaus.stax2.io.Stax2ByteArraySource;
+import wstxtest.stream.BaseStreamTest;
+
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+public class Fuzz_DTDReadTest extends BaseStreamTest
+{
+    private final byte[] DOC = readResource("/fuzz/clusterfuzz-testcase-modified-XmlFuzzer-5219006592450560.txt");
+
+    private final WstxInputFactory STAX_F = getWstxInputFactory();
+
+    public void testIssueInputStream() throws Exception
+    {
+        XMLStreamReader sr = STAX_F.createXMLStreamReader(new ByteArrayInputStream(DOC));
+        try {
+            streamThrough(sr);
+            fail("Should not pass");
+        } catch (WstxLazyException e) {
+            verifyException(e, "FullDTDReader has reached recursion depth limit of 500");
+        }
+        sr.close();
+    }
+
+    public void testIssueInputStreamHigherRecursionLimit() throws Exception
+    {
+        final int defaultLimit = FullDTDReader.getDtdRecursionDepthLimit();
+        XMLStreamReader sr = STAX_F.createXMLStreamReader(new ByteArrayInputStream(DOC));
+        try {
+            FullDTDReader.setDtdRecursionDepthLimit(1000);
+            streamThrough(sr);
+            fail("Should not pass");
+        } catch (WstxLazyException e) {
+            verifyException(e, "FullDTDReader has reached recursion depth limit of 1000");
+        } finally {
+            FullDTDReader.setDtdRecursionDepthLimit(defaultLimit);
+        }
+        sr.close();
+    }
+    
+    public void testIssueReader() throws Exception
+    {
+        Reader r = new InputStreamReader(new ByteArrayInputStream(DOC),
+                "UTF-8");
+        XMLStreamReader sr = STAX_F.createXMLStreamReader(r);
+        try {
+            streamThrough(sr);
+            fail("Should not pass");
+        } catch (WstxLazyException e) {
+            verifyException(e, "FullDTDReader has reached recursion depth limit of 500");
+        }
+        sr.close();
+    }
+
+    public void testIssueStax2ByteArray() throws Exception
+    {
+        // Then "native" Byte array
+        Stax2ByteArraySource src = new Stax2ByteArraySource(DOC, 0, DOC.length);
+        XMLStreamReader sr = STAX_F.createXMLStreamReader(src);
+        try {
+            streamThrough(sr);
+            fail("Should not pass");
+        } catch (WstxLazyException e) {
+            verifyException(e, "FullDTDReader has reached recursion depth limit of 500");
+        }
+        sr.close();
+    }
+}
+
Index: Woodstox4-master/src/test/resources/fuzz/clusterfuzz-testcase-modified-XmlFuzzer-5219006592450560.txt
===================================================================
--- /dev/null
+++ Woodstox4-master/src/test/resources/fuzz/clusterfuzz-testcase-modified-XmlFuzzer-5219006592450560.txt
@@ -0,0 +1 @@
+<!DOCTYPE hT[
<!ELEMENT

uuuu

(Andyod,l,l,l,lL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(lschemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(chemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,((l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(lschemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(chemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(lschemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemclL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:sch*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:sche,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(lschemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemclL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:sch*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,(l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:sche,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(llL*,((l*,(l*,(l:schemc*,(l*,(d*,(l*,(l*,(l*,(l*,(l*,(l+
\ No newline at end of file
